@framers/agentos-ext-web-search 1.1.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 (41) hide show
  1. package/.eslintrc.json +21 -0
  2. package/CHANGELOG.md +16 -0
  3. package/LICENSE +21 -0
  4. package/README.md +218 -0
  5. package/dist/index.d.ts +58 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +100 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/services/searchProvider.d.ts +160 -0
  10. package/dist/services/searchProvider.d.ts.map +1 -0
  11. package/dist/services/searchProvider.js +342 -0
  12. package/dist/services/searchProvider.js.map +1 -0
  13. package/dist/tools/factCheck.d.ts +99 -0
  14. package/dist/tools/factCheck.d.ts.map +1 -0
  15. package/dist/tools/factCheck.js +287 -0
  16. package/dist/tools/factCheck.js.map +1 -0
  17. package/dist/tools/researchAggregator.d.ts +101 -0
  18. package/dist/tools/researchAggregator.d.ts.map +1 -0
  19. package/dist/tools/researchAggregator.js +275 -0
  20. package/dist/tools/researchAggregator.js.map +1 -0
  21. package/dist/tools/webSearch.d.ts +66 -0
  22. package/dist/tools/webSearch.d.ts.map +1 -0
  23. package/dist/tools/webSearch.js +122 -0
  24. package/dist/tools/webSearch.js.map +1 -0
  25. package/dist/types.d.ts +38 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +6 -0
  28. package/dist/types.js.map +1 -0
  29. package/manifest.json +65 -0
  30. package/package.json +73 -0
  31. package/src/index.ts +123 -0
  32. package/src/services/searchProvider.ts +416 -0
  33. package/src/tools/factCheck.ts +318 -0
  34. package/src/tools/researchAggregator.ts +297 -0
  35. package/src/tools/webSearch.ts +128 -0
  36. package/src/types.ts +41 -0
  37. package/test/integration.spec.ts +173 -0
  38. package/test/searchProvider.spec.ts +153 -0
  39. package/test/webSearch.spec.ts +128 -0
  40. package/tsconfig.json +21 -0
  41. package/vitest.config.ts +32 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researchAggregator.js","sourceRoot":"","sources":["../../src/tools/researchAggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { ITool } from '@framers/agentos';
2
+ import { SearchProviderService } from '../services/searchProvider';
3
+ /**
4
+ * Web search tool that queries multiple search providers
5
+ *
6
+ * @class WebSearchTool
7
+ * @implements {ITool}
8
+ *
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
+ * ```
18
+ */
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[];
58
+ };
59
+ /**
60
+ * Returns the JSON schema for the tool's input
61
+ *
62
+ * @returns {Object} JSON Schema object
63
+ */
64
+ getSchema(): any;
65
+ }
66
+ //# sourceMappingURL=webSearch.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSearchTool = void 0;
4
+ /**
5
+ * Web search tool that queries multiple search providers
6
+ *
7
+ * @class WebSearchTool
8
+ * @implements {ITool}
9
+ *
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
+ * ```
19
+ */
20
+ class WebSearchTool {
21
+ 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) {
30
+ this.searchService = searchService;
31
+ }
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) {
44
+ try {
45
+ const results = await this.searchService.search(input.query, {
46
+ maxResults: input.maxResults || 10,
47
+ provider: input.provider
48
+ });
49
+ return {
50
+ success: true,
51
+ output: results
52
+ };
53
+ }
54
+ catch (error) {
55
+ return {
56
+ success: false,
57
+ error: error.message
58
+ };
59
+ }
60
+ }
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) {
68
+ const errors = [];
69
+ if (!input.query) {
70
+ errors.push('Query is required');
71
+ }
72
+ else if (typeof input.query !== 'string') {
73
+ errors.push('Query must be a string');
74
+ }
75
+ if (input.maxResults !== undefined) {
76
+ if (typeof input.maxResults !== 'number' || input.maxResults <= 0) {
77
+ errors.push('maxResults must be a positive number');
78
+ }
79
+ }
80
+ if (input.provider !== undefined) {
81
+ const validProviders = ['serper', 'serpapi', 'brave', 'duckduckgo'];
82
+ if (!validProviders.includes(input.provider)) {
83
+ errors.push('Invalid provider');
84
+ }
85
+ }
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
+ };
119
+ }
120
+ }
121
+ exports.WebSearchTool = WebSearchTool;
122
+ //# sourceMappingURL=webSearch.js.map
@@ -0,0 +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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @file Type definitions for search extension
3
+ */
4
+ export interface SearchResult {
5
+ title: string;
6
+ snippet: string;
7
+ url: string;
8
+ source?: string;
9
+ publishedDate?: string;
10
+ thumbnail?: string;
11
+ }
12
+ export interface SearchResponse {
13
+ results: SearchResult[];
14
+ query: string;
15
+ provider: string;
16
+ totalResults?: number;
17
+ searchTime?: number;
18
+ }
19
+ export interface ResearchResult {
20
+ topic: string;
21
+ searchCount: number;
22
+ aggregatedResults: {
23
+ query: string;
24
+ results: SearchResult[];
25
+ }[];
26
+ provider: string;
27
+ }
28
+ export interface FactCheckResult {
29
+ claim: string;
30
+ context?: string;
31
+ verificationResults: {
32
+ query: string;
33
+ results: SearchResult[];
34
+ }[];
35
+ sourcesChecked: number;
36
+ provider: string;
37
+ }
38
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * @file Type definitions for search extension
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
package/manifest.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
3
+ "id": "com.framers.research.web-search",
4
+ "name": "Web Search Extension",
5
+ "version": "1.0.0",
6
+ "description": "Professional web search, research aggregation, and fact-checking capabilities for AgentOS",
7
+ "author": {
8
+ "name": "Frame.dev",
9
+ "email": "support@frame.dev",
10
+ "url": "https://github.com/framersai"
11
+ },
12
+ "license": "MIT",
13
+ "keywords": ["search", "web", "research", "fact-check", "serper", "serpapi", "brave"],
14
+ "agentosVersion": "^2.0.0",
15
+ "categories": ["productivity", "research"],
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/framersai/agentos-extensions"
19
+ },
20
+ "extensions": [
21
+ {
22
+ "kind": "tool",
23
+ "id": "webSearch",
24
+ "displayName": "Web Search",
25
+ "description": "Search the web for information",
26
+ "entry": "./dist/tools/webSearch.js"
27
+ },
28
+ {
29
+ "kind": "tool",
30
+ "id": "researchAggregator",
31
+ "displayName": "Research Aggregator",
32
+ "description": "Aggregate research from multiple searches",
33
+ "entry": "./dist/tools/researchAggregator.js"
34
+ },
35
+ {
36
+ "kind": "tool",
37
+ "id": "factCheck",
38
+ "displayName": "Fact Checker",
39
+ "description": "Verify facts across multiple sources",
40
+ "entry": "./dist/tools/factCheck.js"
41
+ }
42
+ ],
43
+ "configuration": {
44
+ "properties": {
45
+ "search.provider": {
46
+ "type": "string",
47
+ "enum": ["serper", "serpapi", "brave", "duckduckgo"],
48
+ "default": "duckduckgo",
49
+ "description": "Search API provider to use"
50
+ },
51
+ "search.apiKey": {
52
+ "type": "string",
53
+ "description": "API key for the search provider",
54
+ "secret": true
55
+ },
56
+ "search.rateLimit": {
57
+ "type": "number",
58
+ "default": 5,
59
+ "minimum": 1,
60
+ "maximum": 20,
61
+ "description": "Maximum requests per second"
62
+ }
63
+ }
64
+ }
65
+ }
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@framers/agentos-ext-web-search",
3
+ "version": "1.1.0",
4
+ "description": "Web search, research aggregation, and fact-checking tools for AgentOS",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "sideEffects": false,
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./manifest.json": "./manifest.json",
15
+ "./package.json": "./package.json"
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
+ "keywords": [
28
+ "agentos",
29
+ "extension",
30
+ "search",
31
+ "research",
32
+ "web"
33
+ ],
34
+ "author": {
35
+ "name": "Framers AI",
36
+ "email": "team@frame.dev",
37
+ "url": "https://frame.dev"
38
+ },
39
+ "contributors": [
40
+ {
41
+ "name": "Johnny Dunn",
42
+ "email": "johnnyfived@protonmail.com",
43
+ "url": "https://github.com/jddunn"
44
+ }
45
+ ],
46
+ "license": "MIT",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/framersai/agentos-extensions.git",
50
+ "directory": "registry/curated/research/web-search"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
54
+ },
55
+ "peerDependencies": {
56
+ "@framers/agentos": "^0.1.0"
57
+ },
58
+ "dependencies": {
59
+ "axios": "^1.7.7"
60
+ },
61
+ "devDependencies": {
62
+ "@framers/agentos": "^0.1.0",
63
+ "@types/node": "^20.12.12",
64
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
65
+ "@typescript-eslint/parser": "^7.0.0",
66
+ "@vitest/coverage-v8": "^1.6.0",
67
+ "eslint": "^9.11.0",
68
+ "rimraf": "^5.0.7",
69
+ "typedoc": "^0.25.13",
70
+ "typescript": "^5.4.5",
71
+ "vitest": "^1.6.0"
72
+ }
73
+ }
package/src/index.ts ADDED
@@ -0,0 +1,123 @@
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;