@framers/agentos-ext-web-search 1.1.0 → 1.1.1
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/README.md +31 -188
- package/dist/index.d.ts +14 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -50
- package/dist/index.js.map +1 -1
- package/dist/services/searchProvider.d.ts +54 -2
- package/dist/services/searchProvider.d.ts.map +1 -1
- package/dist/services/searchProvider.js +168 -17
- package/dist/services/searchProvider.js.map +1 -1
- package/dist/tools/factCheck.d.ts +46 -88
- package/dist/tools/factCheck.d.ts.map +1 -1
- package/dist/tools/factCheck.js +134 -170
- package/dist/tools/factCheck.js.map +1 -1
- package/dist/tools/researchAggregator.d.ts +37 -91
- package/dist/tools/researchAggregator.d.ts.map +1 -1
- package/dist/tools/researchAggregator.js +134 -175
- package/dist/tools/researchAggregator.js.map +1 -1
- package/dist/tools/webSearch.d.ts +31 -59
- package/dist/tools/webSearch.d.ts.map +1 -1
- package/dist/tools/webSearch.js +69 -87
- package/dist/tools/webSearch.js.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/manifest.json +11 -6
- package/package.json +2 -2
- package/src/index.ts +64 -46
- package/src/services/searchProvider.ts +231 -25
- package/src/tools/factCheck.ts +206 -224
- package/src/tools/researchAggregator.ts +209 -217
- package/src/tools/webSearch.ts +103 -102
- package/test/integration.spec.ts +240 -39
- package/test/searchProvider.spec.ts +263 -18
- package/test/webSearch.spec.ts +129 -27
- package/tsconfig.json +7 -2
package/dist/tools/factCheck.js
CHANGED
|
@@ -1,60 +1,86 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FactCheckTool = void 0;
|
|
4
1
|
/**
|
|
5
|
-
* Fact
|
|
2
|
+
* Fact Check Tool — verify statements against web sources.
|
|
6
3
|
*
|
|
7
|
-
*
|
|
8
|
-
* @implements {ITool}
|
|
4
|
+
* Updated to conform to AgentOS `ITool` (inputSchema + ToolExecutionContext).
|
|
9
5
|
*
|
|
10
|
-
* @
|
|
11
|
-
* ```typescript
|
|
12
|
-
* const tool = new FactCheckTool(searchService);
|
|
13
|
-
* const result = await tool.execute({
|
|
14
|
-
* statement: 'The Earth orbits the Sun',
|
|
15
|
-
* checkSources: true,
|
|
16
|
-
* confidence: 'high'
|
|
17
|
-
* });
|
|
18
|
-
* ```
|
|
6
|
+
* @module @framers/agentos-ext-web-search
|
|
19
7
|
*/
|
|
20
|
-
class FactCheckTool {
|
|
8
|
+
export class FactCheckTool {
|
|
21
9
|
searchService;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
10
|
+
defaultMultiSearch;
|
|
11
|
+
id = 'fact-check-v1';
|
|
12
|
+
/** Tool call name used by the LLM / ToolExecutor. */
|
|
13
|
+
name = 'fact_check';
|
|
14
|
+
displayName = 'Fact Check';
|
|
15
|
+
description = 'Verify a statement against web sources and return a verdict with confidence.';
|
|
16
|
+
category = 'research';
|
|
17
|
+
hasSideEffects = false;
|
|
18
|
+
inputSchema = {
|
|
19
|
+
type: 'object',
|
|
20
|
+
required: ['statement'],
|
|
21
|
+
properties: {
|
|
22
|
+
statement: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
description: 'The statement to fact-check',
|
|
25
|
+
minLength: 5,
|
|
26
|
+
},
|
|
27
|
+
checkSources: {
|
|
28
|
+
type: 'boolean',
|
|
29
|
+
description: 'Whether to include source citations',
|
|
30
|
+
default: true,
|
|
31
|
+
},
|
|
32
|
+
confidence: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'Required confidence level for the verdict',
|
|
35
|
+
enum: ['low', 'medium', 'high'],
|
|
36
|
+
default: 'medium',
|
|
37
|
+
},
|
|
38
|
+
multiSearch: {
|
|
39
|
+
type: 'boolean',
|
|
40
|
+
description: 'When true, each verification query fans out to ALL available providers in parallel for higher-confidence cross-provider consensus.',
|
|
41
|
+
default: false,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
additionalProperties: false,
|
|
45
|
+
};
|
|
46
|
+
requiredCapabilities = ['capability:web_search'];
|
|
47
|
+
constructor(searchService, defaultMultiSearch = false) {
|
|
30
48
|
this.searchService = searchService;
|
|
49
|
+
this.defaultMultiSearch = defaultMultiSearch;
|
|
31
50
|
}
|
|
32
|
-
|
|
33
|
-
* Executes fact checking on a statement
|
|
34
|
-
*
|
|
35
|
-
* @param {Object} input - The fact check parameters
|
|
36
|
-
* @param {string} input.statement - The statement to fact-check
|
|
37
|
-
* @param {boolean} [input.checkSources=true] - Whether to include source citations
|
|
38
|
-
* @param {string} [input.confidence='medium'] - Required confidence level
|
|
39
|
-
* @returns {Promise<{success: boolean, output?: any, error?: string}>} Fact check results
|
|
40
|
-
*/
|
|
41
|
-
async execute(input) {
|
|
51
|
+
async execute(input, _context) {
|
|
42
52
|
try {
|
|
43
53
|
const checkSources = input.checkSources !== false;
|
|
44
54
|
const requiredConfidence = input.confidence || 'medium';
|
|
45
|
-
|
|
55
|
+
const useMultiSearch = input.multiSearch ?? this.defaultMultiSearch;
|
|
46
56
|
const queries = this.generateFactCheckQueries(input.statement);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
let searchResults;
|
|
58
|
+
if (useMultiSearch) {
|
|
59
|
+
const multiPromises = queries.map((query) => this.searchService
|
|
60
|
+
.multiSearch(query, { maxResults: 5 })
|
|
61
|
+
.then((multi) => ({
|
|
62
|
+
provider: 'multi',
|
|
63
|
+
results: multi.results,
|
|
64
|
+
metadata: { query, timestamp: multi.metadata.timestamp },
|
|
65
|
+
}))
|
|
66
|
+
.catch((err) => ({
|
|
67
|
+
provider: 'error',
|
|
68
|
+
results: [],
|
|
69
|
+
metadata: { query, error: err?.message || String(err), timestamp: new Date().toISOString() },
|
|
70
|
+
})));
|
|
71
|
+
searchResults = (await Promise.all(multiPromises));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const searchPromises = queries.map((query) => this.searchService
|
|
75
|
+
.search(query, { maxResults: 5 })
|
|
76
|
+
.catch((err) => ({
|
|
77
|
+
provider: 'error',
|
|
78
|
+
results: [],
|
|
79
|
+
metadata: { query, error: err?.message || String(err), timestamp: new Date().toISOString() },
|
|
80
|
+
})));
|
|
81
|
+
searchResults = (await Promise.all(searchPromises));
|
|
82
|
+
}
|
|
56
83
|
const analysis = this.analyzeFactCheckResults(input.statement, searchResults, requiredConfidence);
|
|
57
|
-
// Compile sources if requested
|
|
58
84
|
const sources = checkSources ? this.compileSources(searchResults) : [];
|
|
59
85
|
return {
|
|
60
86
|
success: true,
|
|
@@ -62,46 +88,56 @@ class FactCheckTool {
|
|
|
62
88
|
statement: input.statement,
|
|
63
89
|
verdict: analysis.verdict,
|
|
64
90
|
confidence: analysis.confidence,
|
|
91
|
+
confidenceLevel: analysis.confidenceLevel,
|
|
65
92
|
explanation: analysis.explanation,
|
|
66
|
-
sources
|
|
93
|
+
sources,
|
|
67
94
|
contradictingSources: analysis.contradictingSources,
|
|
68
95
|
supportingSources: analysis.supportingSources,
|
|
69
|
-
|
|
70
|
-
|
|
96
|
+
meetsRequiredConfidence: analysis.meetsRequiredConfidence,
|
|
97
|
+
timestamp: new Date().toISOString(),
|
|
98
|
+
},
|
|
71
99
|
};
|
|
72
100
|
}
|
|
73
101
|
catch (error) {
|
|
74
|
-
return {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
102
|
+
return { success: false, error: error?.message || String(error) };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
validateArgs(input) {
|
|
106
|
+
const errors = [];
|
|
107
|
+
if (!input.statement) {
|
|
108
|
+
errors.push('Statement is required');
|
|
109
|
+
}
|
|
110
|
+
else if (typeof input.statement !== 'string') {
|
|
111
|
+
errors.push('Statement must be a string');
|
|
112
|
+
}
|
|
113
|
+
else if (input.statement.length < 5) {
|
|
114
|
+
errors.push('Statement must be at least 5 characters long');
|
|
115
|
+
}
|
|
116
|
+
if (input.confidence !== undefined) {
|
|
117
|
+
if (!['low', 'medium', 'high'].includes(input.confidence)) {
|
|
118
|
+
errors.push('Confidence must be low, medium, or high');
|
|
119
|
+
}
|
|
78
120
|
}
|
|
121
|
+
if (input.checkSources !== undefined && typeof input.checkSources !== 'boolean') {
|
|
122
|
+
errors.push('checkSources must be a boolean');
|
|
123
|
+
}
|
|
124
|
+
if (input.multiSearch !== undefined && typeof input.multiSearch !== 'boolean') {
|
|
125
|
+
errors.push('multiSearch must be a boolean');
|
|
126
|
+
}
|
|
127
|
+
return errors.length === 0 ? { isValid: true } : { isValid: false, errors };
|
|
79
128
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
* @private
|
|
84
|
-
* @param {string} statement - The statement to check
|
|
85
|
-
* @returns {string[]} Array of search queries
|
|
86
|
-
*/
|
|
129
|
+
// ============================================================================
|
|
130
|
+
// Internals (ported from the previous implementation)
|
|
131
|
+
// ============================================================================
|
|
87
132
|
generateFactCheckQueries(statement) {
|
|
88
133
|
return [
|
|
89
|
-
statement,
|
|
90
|
-
`"${statement}" fact check`,
|
|
91
|
-
`${statement} true or false`,
|
|
92
|
-
`${statement} debunked myths`,
|
|
93
|
-
`is it true that ${statement}
|
|
134
|
+
statement,
|
|
135
|
+
`"${statement}" fact check`,
|
|
136
|
+
`${statement} true or false`,
|
|
137
|
+
`${statement} debunked myths`,
|
|
138
|
+
`is it true that ${statement}`,
|
|
94
139
|
];
|
|
95
140
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Analyzes search results to determine fact validity
|
|
98
|
-
*
|
|
99
|
-
* @private
|
|
100
|
-
* @param {string} statement - Original statement
|
|
101
|
-
* @param {any[]} searchResults - Search results to analyze
|
|
102
|
-
* @param {string} requiredConfidence - Required confidence level
|
|
103
|
-
* @returns {Object} Analysis results with verdict and confidence
|
|
104
|
-
*/
|
|
105
141
|
analyzeFactCheckResults(statement, searchResults, requiredConfidence) {
|
|
106
142
|
let supportingCount = 0;
|
|
107
143
|
let contradictingCount = 0;
|
|
@@ -109,35 +145,37 @@ class FactCheckTool {
|
|
|
109
145
|
const supportingSources = [];
|
|
110
146
|
const contradictingSources = [];
|
|
111
147
|
const statementLower = statement.toLowerCase();
|
|
148
|
+
void statementLower; // retained for future use
|
|
112
149
|
const negativeIndicators = ['false', 'myth', 'debunked', 'incorrect', 'wrong', 'not true', 'fake'];
|
|
113
150
|
const positiveIndicators = ['true', 'correct', 'accurate', 'confirmed', 'verified', 'fact'];
|
|
114
151
|
for (const searchResult of searchResults) {
|
|
115
152
|
if (!searchResult.results)
|
|
116
153
|
continue;
|
|
117
154
|
for (const result of searchResult.results) {
|
|
118
|
-
const contentLower = (result.title + ' ' + result.snippet).toLowerCase();
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
result.url.includes('
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
155
|
+
const contentLower = (String(result.title || '') + ' ' + String(result.snippet || '')).toLowerCase();
|
|
156
|
+
const isFactCheckSite = String(result.url || '').includes('snopes') ||
|
|
157
|
+
String(result.url || '').includes('factcheck') ||
|
|
158
|
+
String(result.url || '').includes('politifact');
|
|
159
|
+
// Multi-search results with cross-provider agreement get extra weight
|
|
160
|
+
const agreementBonus = typeof result.agreementCount === 'number' ? Math.max(0, result.agreementCount - 1) : 0;
|
|
161
|
+
const weight = (isFactCheckSite ? 2 : 1) + agreementBonus;
|
|
162
|
+
const hasNegative = negativeIndicators.some((ind) => contentLower.includes(ind));
|
|
163
|
+
const hasPositive = positiveIndicators.some((ind) => contentLower.includes(ind));
|
|
127
164
|
if (hasNegative && !hasPositive) {
|
|
128
165
|
contradictingCount += weight;
|
|
129
|
-
|
|
166
|
+
if (result.url)
|
|
167
|
+
contradictingSources.push(String(result.url));
|
|
130
168
|
}
|
|
131
169
|
else if (hasPositive && !hasNegative) {
|
|
132
170
|
supportingCount += weight;
|
|
133
|
-
|
|
171
|
+
if (result.url)
|
|
172
|
+
supportingSources.push(String(result.url));
|
|
134
173
|
}
|
|
135
174
|
else {
|
|
136
175
|
neutralCount += 1;
|
|
137
176
|
}
|
|
138
177
|
}
|
|
139
178
|
}
|
|
140
|
-
// Calculate confidence and verdict
|
|
141
179
|
const total = supportingCount + contradictingCount + neutralCount;
|
|
142
180
|
let confidence;
|
|
143
181
|
let verdict;
|
|
@@ -163,15 +201,14 @@ class FactCheckTool {
|
|
|
163
201
|
else if (supportRatio > 0.4 && contradictRatio > 0.4) {
|
|
164
202
|
verdict = 'PARTIALLY TRUE';
|
|
165
203
|
confidence = 50;
|
|
166
|
-
explanation =
|
|
204
|
+
explanation = 'Mixed evidence with both supporting and contradicting sources.';
|
|
167
205
|
}
|
|
168
206
|
else {
|
|
169
207
|
verdict = 'UNVERIFIED';
|
|
170
208
|
confidence = Math.max(supportRatio, contradictRatio) * 100;
|
|
171
|
-
explanation =
|
|
209
|
+
explanation = 'Insufficient clear evidence to verify this statement.';
|
|
172
210
|
}
|
|
173
211
|
}
|
|
174
|
-
// Adjust confidence based on required level
|
|
175
212
|
const confidenceLevel = confidence > 80 ? 'high' : confidence > 50 ? 'medium' : 'low';
|
|
176
213
|
return {
|
|
177
214
|
verdict,
|
|
@@ -180,28 +217,13 @@ class FactCheckTool {
|
|
|
180
217
|
explanation,
|
|
181
218
|
supportingSources: supportingSources.slice(0, 5),
|
|
182
219
|
contradictingSources: contradictingSources.slice(0, 5),
|
|
183
|
-
meetsRequiredConfidence: this.meetsConfidenceRequirement(confidenceLevel, requiredConfidence)
|
|
220
|
+
meetsRequiredConfidence: this.meetsConfidenceRequirement(confidenceLevel, requiredConfidence),
|
|
184
221
|
};
|
|
185
222
|
}
|
|
186
|
-
/**
|
|
187
|
-
* Checks if confidence level meets requirement
|
|
188
|
-
*
|
|
189
|
-
* @private
|
|
190
|
-
* @param {string} actual - Actual confidence level
|
|
191
|
-
* @param {string} required - Required confidence level
|
|
192
|
-
* @returns {boolean} True if requirement is met
|
|
193
|
-
*/
|
|
194
223
|
meetsConfidenceRequirement(actual, required) {
|
|
195
224
|
const levels = { low: 1, medium: 2, high: 3 };
|
|
196
225
|
return levels[actual] >= levels[required];
|
|
197
226
|
}
|
|
198
|
-
/**
|
|
199
|
-
* Compiles relevant sources from search results
|
|
200
|
-
*
|
|
201
|
-
* @private
|
|
202
|
-
* @param {any[]} searchResults - Search results to compile from
|
|
203
|
-
* @returns {any[]} Compiled sources with metadata
|
|
204
|
-
*/
|
|
205
227
|
compileSources(searchResults) {
|
|
206
228
|
const sources = [];
|
|
207
229
|
const seenUrls = new Set();
|
|
@@ -209,79 +231,21 @@ class FactCheckTool {
|
|
|
209
231
|
if (!searchResult.results)
|
|
210
232
|
continue;
|
|
211
233
|
for (const result of searchResult.results) {
|
|
234
|
+
if (!result.url)
|
|
235
|
+
continue;
|
|
212
236
|
if (seenUrls.has(result.url))
|
|
213
237
|
continue;
|
|
214
238
|
seenUrls.add(result.url);
|
|
215
239
|
sources.push({
|
|
216
|
-
title: result.title,
|
|
217
|
-
url: result.url,
|
|
218
|
-
snippet: result.snippet,
|
|
219
|
-
provider: searchResult.provider,
|
|
220
|
-
query: searchResult.metadata
|
|
240
|
+
title: String(result.title || ''),
|
|
241
|
+
url: String(result.url),
|
|
242
|
+
snippet: String(result.snippet || ''),
|
|
243
|
+
provider: String(searchResult.provider || 'unknown'),
|
|
244
|
+
query: String(searchResult.metadata?.query || ''),
|
|
221
245
|
});
|
|
222
246
|
}
|
|
223
247
|
}
|
|
224
|
-
return sources.slice(0, 10);
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Validates input parameters
|
|
228
|
-
*
|
|
229
|
-
* @param {any} input - Input to validate
|
|
230
|
-
* @returns {{valid: boolean, errors: string[]}} Validation result
|
|
231
|
-
*/
|
|
232
|
-
validate(input) {
|
|
233
|
-
const errors = [];
|
|
234
|
-
if (!input.statement) {
|
|
235
|
-
errors.push('Statement is required');
|
|
236
|
-
}
|
|
237
|
-
else if (typeof input.statement !== 'string') {
|
|
238
|
-
errors.push('Statement must be a string');
|
|
239
|
-
}
|
|
240
|
-
else if (input.statement.length < 5) {
|
|
241
|
-
errors.push('Statement must be at least 5 characters long');
|
|
242
|
-
}
|
|
243
|
-
if (input.confidence !== undefined) {
|
|
244
|
-
if (!['low', 'medium', 'high'].includes(input.confidence)) {
|
|
245
|
-
errors.push('Confidence must be low, medium, or high');
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
if (input.checkSources !== undefined && typeof input.checkSources !== 'boolean') {
|
|
249
|
-
errors.push('checkSources must be a boolean');
|
|
250
|
-
}
|
|
251
|
-
return {
|
|
252
|
-
valid: errors.length === 0,
|
|
253
|
-
errors
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Returns the JSON schema for the tool's input
|
|
258
|
-
*
|
|
259
|
-
* @returns {Object} JSON Schema object
|
|
260
|
-
*/
|
|
261
|
-
getSchema() {
|
|
262
|
-
return {
|
|
263
|
-
type: 'object',
|
|
264
|
-
required: ['statement'],
|
|
265
|
-
properties: {
|
|
266
|
-
statement: {
|
|
267
|
-
type: 'string',
|
|
268
|
-
description: 'The statement to fact-check',
|
|
269
|
-
minLength: 5
|
|
270
|
-
},
|
|
271
|
-
checkSources: {
|
|
272
|
-
type: 'boolean',
|
|
273
|
-
description: 'Whether to include source citations',
|
|
274
|
-
default: true
|
|
275
|
-
},
|
|
276
|
-
confidence: {
|
|
277
|
-
type: 'string',
|
|
278
|
-
description: 'Required confidence level for the verdict',
|
|
279
|
-
enum: ['low', 'medium', 'high'],
|
|
280
|
-
default: 'medium'
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
};
|
|
248
|
+
return sources.slice(0, 10);
|
|
284
249
|
}
|
|
285
250
|
}
|
|
286
|
-
exports.FactCheckTool = FactCheckTool;
|
|
287
251
|
//# sourceMappingURL=factCheck.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factCheck.js","sourceRoot":"","sources":["../../src/tools/factCheck.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factCheck.js","sourceRoot":"","sources":["../../src/tools/factCheck.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,101 +1,47 @@
|
|
|
1
|
-
import { ITool } from '@framers/agentos';
|
|
2
|
-
import { SearchProviderService } from '../services/searchProvider';
|
|
3
1
|
/**
|
|
4
|
-
* Research
|
|
2
|
+
* Research Aggregator Tool — runs multiple searches on a topic and aggregates results.
|
|
5
3
|
*
|
|
6
|
-
*
|
|
7
|
-
* @implements {ITool}
|
|
4
|
+
* Updated to conform to AgentOS `ITool` (inputSchema + ToolExecutionContext).
|
|
8
5
|
*
|
|
9
|
-
* @
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const tool = new ResearchAggregatorTool(searchService);
|
|
12
|
-
* const result = await tool.execute({
|
|
13
|
-
* topic: 'AI safety research',
|
|
14
|
-
* sources: 3,
|
|
15
|
-
* depth: 'comprehensive'
|
|
16
|
-
* });
|
|
17
|
-
* ```
|
|
6
|
+
* @module @framers/agentos-ext-web-search
|
|
18
7
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
* @param {string} depth - Research depth level
|
|
54
|
-
* @returns {string[]} Array of search queries
|
|
55
|
-
*/
|
|
8
|
+
import type { ITool, JSONSchemaObject, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
|
|
9
|
+
import { SearchProviderService } from '../services/searchProvider.js';
|
|
10
|
+
export interface ResearchAggregatorInput {
|
|
11
|
+
topic: string;
|
|
12
|
+
sources?: number;
|
|
13
|
+
depth?: 'quick' | 'moderate' | 'comprehensive';
|
|
14
|
+
multiSearch?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ResearchAggregatorOutput {
|
|
17
|
+
topic: string;
|
|
18
|
+
sources: number;
|
|
19
|
+
depth: 'quick' | 'moderate' | 'comprehensive';
|
|
20
|
+
queries: string[];
|
|
21
|
+
aggregatedResults: any;
|
|
22
|
+
timestamp: string;
|
|
23
|
+
}
|
|
24
|
+
export declare class ResearchAggregatorTool implements ITool<ResearchAggregatorInput, ResearchAggregatorOutput> {
|
|
25
|
+
private readonly searchService;
|
|
26
|
+
private readonly defaultMultiSearch;
|
|
27
|
+
readonly id = "research-aggregator-v1";
|
|
28
|
+
/** Tool call name used by the LLM / ToolExecutor. */
|
|
29
|
+
readonly name = "research_aggregate";
|
|
30
|
+
readonly displayName = "Research Aggregator";
|
|
31
|
+
readonly description = "Aggregate research from multiple web searches on a topic (deduplicated + categorized).";
|
|
32
|
+
readonly category = "research";
|
|
33
|
+
readonly hasSideEffects = false;
|
|
34
|
+
readonly inputSchema: JSONSchemaObject;
|
|
35
|
+
readonly requiredCapabilities: string[];
|
|
36
|
+
constructor(searchService: SearchProviderService, defaultMultiSearch?: boolean);
|
|
37
|
+
execute(input: ResearchAggregatorInput, _context: ToolExecutionContext): Promise<ToolExecutionResult<ResearchAggregatorOutput>>;
|
|
38
|
+
validateArgs(input: Record<string, any>): {
|
|
39
|
+
isValid: boolean;
|
|
40
|
+
errors?: any[];
|
|
41
|
+
};
|
|
56
42
|
private generateSearchQueries;
|
|
57
|
-
/**
|
|
58
|
-
* Aggregates and deduplicates search results
|
|
59
|
-
*
|
|
60
|
-
* @private
|
|
61
|
-
* @param {any[]} searchResults - Array of search results from different queries
|
|
62
|
-
* @param {string} topic - The original research topic
|
|
63
|
-
* @returns {Object} Aggregated and organized results
|
|
64
|
-
*/
|
|
65
43
|
private aggregateResults;
|
|
66
|
-
/**
|
|
67
|
-
* Calculates relevance score for a search result
|
|
68
|
-
*
|
|
69
|
-
* @private
|
|
70
|
-
* @param {any} result - Search result object
|
|
71
|
-
* @param {string} topic - Original topic for comparison
|
|
72
|
-
* @returns {number} Relevance score (0-100)
|
|
73
|
-
*/
|
|
74
44
|
private calculateRelevance;
|
|
75
|
-
/**
|
|
76
|
-
* Gets top results across all categories
|
|
77
|
-
*
|
|
78
|
-
* @private
|
|
79
|
-
* @param {any} categories - Categorized results
|
|
80
|
-
* @param {number} count - Number of top results to return
|
|
81
|
-
* @returns {any[]} Top results by relevance
|
|
82
|
-
*/
|
|
83
45
|
private getTopResults;
|
|
84
|
-
/**
|
|
85
|
-
* Validates input parameters
|
|
86
|
-
*
|
|
87
|
-
* @param {any} input - Input to validate
|
|
88
|
-
* @returns {{valid: boolean, errors: string[]}} Validation result
|
|
89
|
-
*/
|
|
90
|
-
validate(input: any): {
|
|
91
|
-
valid: boolean;
|
|
92
|
-
errors: string[];
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Returns the JSON schema for the tool's input
|
|
96
|
-
*
|
|
97
|
-
* @returns {Object} JSON Schema object
|
|
98
|
-
*/
|
|
99
|
-
getSchema(): any;
|
|
100
46
|
}
|
|
101
47
|
//# sourceMappingURL=researchAggregator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"researchAggregator.d.ts","sourceRoot":"","sources":["../../src/tools/researchAggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"researchAggregator.d.ts","sourceRoot":"","sources":["../../src/tools/researchAggregator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3G,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB,EAAE,GAAG,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,sBAAuB,YAAW,KAAK,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;IA2CnG,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IA3CrC,SAAgB,EAAE,4BAA4B;IAC9C,qDAAqD;IACrD,SAAgB,IAAI,wBAAwB;IAC5C,SAAgB,WAAW,yBAAyB;IACpD,SAAgB,WAAW,4FAA4F;IACvH,SAAgB,QAAQ,cAAc;IACtC,SAAgB,cAAc,SAAS;IAEvC,SAAgB,WAAW,EAAE,gBAAgB,CA6B3C;IAEF,SAAgB,oBAAoB,WAA6B;gBAG9C,aAAa,EAAE,qBAAqB,EACpC,kBAAkB,GAAE,OAAe;IAGhD,OAAO,CACX,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IA4DzD,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE;IAgC9E,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,gBAAgB;IAwDxB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,aAAa;CAStB"}
|