@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.
- package/.eslintrc.json +21 -0
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +218 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/services/searchProvider.d.ts +160 -0
- package/dist/services/searchProvider.d.ts.map +1 -0
- package/dist/services/searchProvider.js +342 -0
- package/dist/services/searchProvider.js.map +1 -0
- package/dist/tools/factCheck.d.ts +99 -0
- package/dist/tools/factCheck.d.ts.map +1 -0
- package/dist/tools/factCheck.js +287 -0
- package/dist/tools/factCheck.js.map +1 -0
- package/dist/tools/researchAggregator.d.ts +101 -0
- package/dist/tools/researchAggregator.d.ts.map +1 -0
- package/dist/tools/researchAggregator.js +275 -0
- package/dist/tools/researchAggregator.js.map +1 -0
- package/dist/tools/webSearch.d.ts +66 -0
- package/dist/tools/webSearch.d.ts.map +1 -0
- package/dist/tools/webSearch.js +122 -0
- package/dist/tools/webSearch.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/manifest.json +65 -0
- package/package.json +73 -0
- package/src/index.ts +123 -0
- package/src/services/searchProvider.ts +416 -0
- package/src/tools/factCheck.ts +318 -0
- package/src/tools/researchAggregator.ts +297 -0
- package/src/tools/webSearch.ts +128 -0
- package/src/types.ts +41 -0
- package/test/integration.spec.ts +173 -0
- package/test/searchProvider.spec.ts +153 -0
- package/test/webSearch.spec.ts +128 -0
- package/tsconfig.json +21 -0
- 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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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;
|