@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,99 +1,57 @@
1
- import { ITool } from '@framers/agentos';
2
- import { SearchProviderService } from '../services/searchProvider';
3
1
  /**
4
- * Fact checking tool that verifies statements against web sources
2
+ * Fact Check Tool — verify statements against web sources.
5
3
  *
6
- * @class FactCheckTool
7
- * @implements {ITool}
4
+ * Updated to conform to AgentOS `ITool` (inputSchema + ToolExecutionContext).
8
5
  *
9
- * @example
10
- * ```typescript
11
- * const tool = new FactCheckTool(searchService);
12
- * const result = await tool.execute({
13
- * statement: 'The Earth orbits the Sun',
14
- * checkSources: true,
15
- * confidence: 'high'
16
- * });
17
- * ```
6
+ * @module @framers/agentos-ext-web-search
18
7
  */
19
- export declare class FactCheckTool implements ITool {
20
- private searchService;
21
- readonly id = "factCheck";
22
- readonly name = "Fact Check";
23
- readonly description = "Verify facts and statements against web sources";
24
- /**
25
- * Creates an instance of FactCheckTool
26
- * @param {SearchProviderService} searchService - The search provider service
27
- */
28
- constructor(searchService: SearchProviderService);
29
- /**
30
- * Executes fact checking on a statement
31
- *
32
- * @param {Object} input - The fact check parameters
33
- * @param {string} input.statement - The statement to fact-check
34
- * @param {boolean} [input.checkSources=true] - Whether to include source citations
35
- * @param {string} [input.confidence='medium'] - Required confidence level
36
- * @returns {Promise<{success: boolean, output?: any, error?: string}>} Fact check results
37
- */
38
- execute(input: {
39
- statement: string;
40
- checkSources?: boolean;
41
- confidence?: 'low' | 'medium' | 'high';
42
- }): Promise<{
43
- success: boolean;
44
- output?: any;
45
- error?: string;
8
+ import type { ITool, JSONSchemaObject, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
9
+ import { SearchProviderService } from '../services/searchProvider.js';
10
+ export interface FactCheckInput {
11
+ statement: string;
12
+ checkSources?: boolean;
13
+ confidence?: 'low' | 'medium' | 'high';
14
+ multiSearch?: boolean;
15
+ }
16
+ export interface FactCheckOutput {
17
+ statement: string;
18
+ verdict: 'TRUE' | 'FALSE' | 'UNVERIFIED' | 'PARTIALLY TRUE';
19
+ confidence: number;
20
+ confidenceLevel: 'low' | 'medium' | 'high';
21
+ explanation: string;
22
+ sources: Array<{
23
+ title: string;
24
+ url: string;
25
+ snippet: string;
26
+ provider: string;
27
+ query: string;
46
28
  }>;
47
- /**
48
- * Generates queries for fact-checking a statement
49
- *
50
- * @private
51
- * @param {string} statement - The statement to check
52
- * @returns {string[]} Array of search queries
53
- */
29
+ contradictingSources: string[];
30
+ supportingSources: string[];
31
+ meetsRequiredConfidence: boolean;
32
+ timestamp: string;
33
+ }
34
+ export declare class FactCheckTool implements ITool<FactCheckInput, FactCheckOutput> {
35
+ private readonly searchService;
36
+ private readonly defaultMultiSearch;
37
+ readonly id = "fact-check-v1";
38
+ /** Tool call name used by the LLM / ToolExecutor. */
39
+ readonly name = "fact_check";
40
+ readonly displayName = "Fact Check";
41
+ readonly description = "Verify a statement against web sources and return a verdict with confidence.";
42
+ readonly category = "research";
43
+ readonly hasSideEffects = false;
44
+ readonly inputSchema: JSONSchemaObject;
45
+ readonly requiredCapabilities: string[];
46
+ constructor(searchService: SearchProviderService, defaultMultiSearch?: boolean);
47
+ execute(input: FactCheckInput, _context: ToolExecutionContext): Promise<ToolExecutionResult<FactCheckOutput>>;
48
+ validateArgs(input: Record<string, any>): {
49
+ isValid: boolean;
50
+ errors?: any[];
51
+ };
54
52
  private generateFactCheckQueries;
55
- /**
56
- * Analyzes search results to determine fact validity
57
- *
58
- * @private
59
- * @param {string} statement - Original statement
60
- * @param {any[]} searchResults - Search results to analyze
61
- * @param {string} requiredConfidence - Required confidence level
62
- * @returns {Object} Analysis results with verdict and confidence
63
- */
64
53
  private analyzeFactCheckResults;
65
- /**
66
- * Checks if confidence level meets requirement
67
- *
68
- * @private
69
- * @param {string} actual - Actual confidence level
70
- * @param {string} required - Required confidence level
71
- * @returns {boolean} True if requirement is met
72
- */
73
54
  private meetsConfidenceRequirement;
74
- /**
75
- * Compiles relevant sources from search results
76
- *
77
- * @private
78
- * @param {any[]} searchResults - Search results to compile from
79
- * @returns {any[]} Compiled sources with metadata
80
- */
81
55
  private compileSources;
82
- /**
83
- * Validates input parameters
84
- *
85
- * @param {any} input - Input to validate
86
- * @returns {{valid: boolean, errors: string[]}} Validation result
87
- */
88
- validate(input: any): {
89
- valid: boolean;
90
- errors: string[];
91
- };
92
- /**
93
- * Returns the JSON schema for the tool's input
94
- *
95
- * @returns {Object} JSON Schema object
96
- */
97
- getSchema(): any;
98
56
  }
99
57
  //# sourceMappingURL=factCheck.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factCheck.d.ts","sourceRoot":"","sources":["../../src/tools/factCheck.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,qDAAqD;IAEhF;;;OAGG;gBACiB,aAAa,EAAE,qBAAqB;IAExD;;;;;;;;OAQG;IACG,OAAO,CAAC,KAAK,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;KACxC,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAmD/D;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IA2F/B;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;IAKlC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAwBtB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA2B1D;;;;OAIG;IACH,SAAS,IAAI,GAAG;CAwBjB"}
1
+ {"version":3,"file":"factCheck.d.ts","sourceRoot":"","sources":["../../src/tools/factCheck.ts"],"names":[],"mappings":"AACA;;;;;;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,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,gBAAgB,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjG,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,uBAAuB,EAAE,OAAO,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAc,YAAW,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC;IA0CxE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IA1CrC,SAAgB,EAAE,mBAAmB;IACrC,qDAAqD;IACrD,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,WAAW,gBAAgB;IAC3C,SAAgB,WAAW,kFAAkF;IAC7G,SAAgB,QAAQ,cAAc;IACtC,SAAgB,cAAc,SAAS;IAEvC,SAAgB,WAAW,EAAE,gBAAgB,CA4B3C;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;IAoEnH,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,wBAAwB;IAUhC,OAAO,CAAC,uBAAuB;IAwF/B,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,cAAc;CAwBvB"}
@@ -1,60 +1,93 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FactCheckTool = void 0;
1
+ // @ts-nocheck
4
2
  /**
5
- * Fact checking tool that verifies statements against web sources
3
+ * Fact Check Tool — verify statements against web sources.
6
4
  *
7
- * @class FactCheckTool
8
- * @implements {ITool}
5
+ * Updated to conform to AgentOS `ITool` (inputSchema + ToolExecutionContext).
9
6
  *
10
- * @example
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
- * ```
7
+ * @module @framers/agentos-ext-web-search
19
8
  */
20
- class FactCheckTool {
9
+ export class FactCheckTool {
21
10
  searchService;
22
- id = 'factCheck';
23
- name = 'Fact Check';
24
- description = 'Verify facts and statements against web sources';
25
- /**
26
- * Creates an instance of FactCheckTool
27
- * @param {SearchProviderService} searchService - The search provider service
28
- */
29
- constructor(searchService) {
11
+ defaultMultiSearch;
12
+ id = 'fact-check-v1';
13
+ /** Tool call name used by the LLM / ToolExecutor. */
14
+ name = 'fact_check';
15
+ displayName = 'Fact Check';
16
+ description = 'Verify a statement against web sources and return a verdict with confidence.';
17
+ category = 'research';
18
+ hasSideEffects = false;
19
+ inputSchema = {
20
+ type: 'object',
21
+ required: ['statement'],
22
+ properties: {
23
+ statement: {
24
+ type: 'string',
25
+ description: 'The statement to fact-check',
26
+ minLength: 5,
27
+ },
28
+ checkSources: {
29
+ type: 'boolean',
30
+ description: 'Whether to include source citations',
31
+ default: true,
32
+ },
33
+ confidence: {
34
+ type: 'string',
35
+ description: 'Required confidence level for the verdict',
36
+ enum: ['low', 'medium', 'high'],
37
+ default: 'medium',
38
+ },
39
+ multiSearch: {
40
+ type: 'boolean',
41
+ description: 'When true, each verification query fans out to ALL available providers in parallel for higher-confidence cross-provider consensus.',
42
+ default: false,
43
+ },
44
+ },
45
+ additionalProperties: false,
46
+ };
47
+ requiredCapabilities = ['capability:web_search'];
48
+ constructor(searchService, defaultMultiSearch = false) {
30
49
  this.searchService = searchService;
50
+ this.defaultMultiSearch = defaultMultiSearch;
31
51
  }
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) {
52
+ async execute(input, _context) {
53
+ if (!this.searchService) {
54
+ return {
55
+ success: false,
56
+ error: 'Search service not initialized. Try using browser_navigate to search directly, or set a search API key (SERPER_API_KEY, BRAVE_API_KEY).',
57
+ };
58
+ }
42
59
  try {
43
60
  const checkSources = input.checkSources !== false;
44
61
  const requiredConfidence = input.confidence || 'medium';
45
- // Search for information about the statement
62
+ const useMultiSearch = input.multiSearch ?? this.defaultMultiSearch;
46
63
  const queries = this.generateFactCheckQueries(input.statement);
47
- // Perform searches in parallel
48
- const searchPromises = queries.map(query => this.searchService.search(query, { maxResults: 5 })
49
- .catch(err => ({
50
- provider: 'error',
51
- results: [],
52
- metadata: { query, error: err.message, timestamp: new Date().toISOString() }
53
- })));
54
- const searchResults = await Promise.all(searchPromises);
55
- // Analyze results for fact verification
64
+ let searchResults;
65
+ if (useMultiSearch) {
66
+ const multiPromises = queries.map((query) => this.searchService
67
+ .multiSearch(query, { maxResults: 5 })
68
+ .then((multi) => ({
69
+ provider: 'multi',
70
+ results: multi.results,
71
+ metadata: { query, timestamp: multi.metadata.timestamp },
72
+ }))
73
+ .catch((err) => ({
74
+ provider: 'error',
75
+ results: [],
76
+ metadata: { query, error: err?.message || String(err), timestamp: new Date().toISOString() },
77
+ })));
78
+ searchResults = (await Promise.all(multiPromises));
79
+ }
80
+ else {
81
+ const searchPromises = queries.map((query) => this.searchService
82
+ .search(query, { maxResults: 5 })
83
+ .catch((err) => ({
84
+ provider: 'error',
85
+ results: [],
86
+ metadata: { query, error: err?.message || String(err), timestamp: new Date().toISOString() },
87
+ })));
88
+ searchResults = (await Promise.all(searchPromises));
89
+ }
56
90
  const analysis = this.analyzeFactCheckResults(input.statement, searchResults, requiredConfidence);
57
- // Compile sources if requested
58
91
  const sources = checkSources ? this.compileSources(searchResults) : [];
59
92
  return {
60
93
  success: true,
@@ -62,46 +95,56 @@ class FactCheckTool {
62
95
  statement: input.statement,
63
96
  verdict: analysis.verdict,
64
97
  confidence: analysis.confidence,
98
+ confidenceLevel: analysis.confidenceLevel,
65
99
  explanation: analysis.explanation,
66
- sources: sources,
100
+ sources,
67
101
  contradictingSources: analysis.contradictingSources,
68
102
  supportingSources: analysis.supportingSources,
69
- timestamp: new Date().toISOString()
70
- }
103
+ meetsRequiredConfidence: analysis.meetsRequiredConfidence,
104
+ timestamp: new Date().toISOString(),
105
+ },
71
106
  };
72
107
  }
73
108
  catch (error) {
74
- return {
75
- success: false,
76
- error: error.message
77
- };
109
+ return { success: false, error: error?.message || String(error) };
78
110
  }
79
111
  }
80
- /**
81
- * Generates queries for fact-checking a statement
82
- *
83
- * @private
84
- * @param {string} statement - The statement to check
85
- * @returns {string[]} Array of search queries
86
- */
112
+ validateArgs(input) {
113
+ const errors = [];
114
+ if (!input.statement) {
115
+ errors.push('Statement is required');
116
+ }
117
+ else if (typeof input.statement !== 'string') {
118
+ errors.push('Statement must be a string');
119
+ }
120
+ else if (input.statement.length < 5) {
121
+ errors.push('Statement must be at least 5 characters long');
122
+ }
123
+ if (input.confidence !== undefined) {
124
+ if (!['low', 'medium', 'high'].includes(input.confidence)) {
125
+ errors.push('Confidence must be low, medium, or high');
126
+ }
127
+ }
128
+ if (input.checkSources !== undefined && typeof input.checkSources !== 'boolean') {
129
+ errors.push('checkSources must be a boolean');
130
+ }
131
+ if (input.multiSearch !== undefined && typeof input.multiSearch !== 'boolean') {
132
+ errors.push('multiSearch must be a boolean');
133
+ }
134
+ return errors.length === 0 ? { isValid: true } : { isValid: false, errors };
135
+ }
136
+ // ============================================================================
137
+ // Internals (ported from the previous implementation)
138
+ // ============================================================================
87
139
  generateFactCheckQueries(statement) {
88
140
  return [
89
- statement, // Original statement
90
- `"${statement}" fact check`, // Exact match with fact check
91
- `${statement} true or false`, // Truth verification
92
- `${statement} debunked myths`, // Check for debunking
93
- `is it true that ${statement}` // Question format
141
+ statement,
142
+ `"${statement}" fact check`,
143
+ `${statement} true or false`,
144
+ `${statement} debunked myths`,
145
+ `is it true that ${statement}`,
94
146
  ];
95
147
  }
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
148
  analyzeFactCheckResults(statement, searchResults, requiredConfidence) {
106
149
  let supportingCount = 0;
107
150
  let contradictingCount = 0;
@@ -109,35 +152,37 @@ class FactCheckTool {
109
152
  const supportingSources = [];
110
153
  const contradictingSources = [];
111
154
  const statementLower = statement.toLowerCase();
155
+ void statementLower; // retained for future use
112
156
  const negativeIndicators = ['false', 'myth', 'debunked', 'incorrect', 'wrong', 'not true', 'fake'];
113
157
  const positiveIndicators = ['true', 'correct', 'accurate', 'confirmed', 'verified', 'fact'];
114
158
  for (const searchResult of searchResults) {
115
159
  if (!searchResult.results)
116
160
  continue;
117
161
  for (const result of searchResult.results) {
118
- const contentLower = (result.title + ' ' + result.snippet).toLowerCase();
119
- // Check for fact-checking sites
120
- const isFactCheckSite = result.url.includes('snopes') ||
121
- result.url.includes('factcheck') ||
122
- result.url.includes('politifact');
123
- const weight = isFactCheckSite ? 2 : 1; // Give more weight to fact-checking sites
124
- // Analyze sentiment toward the statement
125
- let hasNegative = negativeIndicators.some(ind => contentLower.includes(ind));
126
- let hasPositive = positiveIndicators.some(ind => contentLower.includes(ind));
162
+ const contentLower = (String(result.title || '') + ' ' + String(result.snippet || '')).toLowerCase();
163
+ const isFactCheckSite = String(result.url || '').includes('snopes') ||
164
+ String(result.url || '').includes('factcheck') ||
165
+ String(result.url || '').includes('politifact');
166
+ // Multi-search results with cross-provider agreement get extra weight
167
+ const agreementBonus = typeof result.agreementCount === 'number' ? Math.max(0, result.agreementCount - 1) : 0;
168
+ const weight = (isFactCheckSite ? 2 : 1) + agreementBonus;
169
+ const hasNegative = negativeIndicators.some((ind) => contentLower.includes(ind));
170
+ const hasPositive = positiveIndicators.some((ind) => contentLower.includes(ind));
127
171
  if (hasNegative && !hasPositive) {
128
172
  contradictingCount += weight;
129
- contradictingSources.push(result.url);
173
+ if (result.url)
174
+ contradictingSources.push(String(result.url));
130
175
  }
131
176
  else if (hasPositive && !hasNegative) {
132
177
  supportingCount += weight;
133
- supportingSources.push(result.url);
178
+ if (result.url)
179
+ supportingSources.push(String(result.url));
134
180
  }
135
181
  else {
136
182
  neutralCount += 1;
137
183
  }
138
184
  }
139
185
  }
140
- // Calculate confidence and verdict
141
186
  const total = supportingCount + contradictingCount + neutralCount;
142
187
  let confidence;
143
188
  let verdict;
@@ -163,15 +208,14 @@ class FactCheckTool {
163
208
  else if (supportRatio > 0.4 && contradictRatio > 0.4) {
164
209
  verdict = 'PARTIALLY TRUE';
165
210
  confidence = 50;
166
- explanation = `Mixed evidence with both supporting and contradicting sources.`;
211
+ explanation = 'Mixed evidence with both supporting and contradicting sources.';
167
212
  }
168
213
  else {
169
214
  verdict = 'UNVERIFIED';
170
215
  confidence = Math.max(supportRatio, contradictRatio) * 100;
171
- explanation = `Insufficient clear evidence to verify this statement.`;
216
+ explanation = 'Insufficient clear evidence to verify this statement.';
172
217
  }
173
218
  }
174
- // Adjust confidence based on required level
175
219
  const confidenceLevel = confidence > 80 ? 'high' : confidence > 50 ? 'medium' : 'low';
176
220
  return {
177
221
  verdict,
@@ -180,28 +224,13 @@ class FactCheckTool {
180
224
  explanation,
181
225
  supportingSources: supportingSources.slice(0, 5),
182
226
  contradictingSources: contradictingSources.slice(0, 5),
183
- meetsRequiredConfidence: this.meetsConfidenceRequirement(confidenceLevel, requiredConfidence)
227
+ meetsRequiredConfidence: this.meetsConfidenceRequirement(confidenceLevel, requiredConfidence),
184
228
  };
185
229
  }
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
230
  meetsConfidenceRequirement(actual, required) {
195
231
  const levels = { low: 1, medium: 2, high: 3 };
196
232
  return levels[actual] >= levels[required];
197
233
  }
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
234
  compileSources(searchResults) {
206
235
  const sources = [];
207
236
  const seenUrls = new Set();
@@ -209,79 +238,21 @@ class FactCheckTool {
209
238
  if (!searchResult.results)
210
239
  continue;
211
240
  for (const result of searchResult.results) {
241
+ if (!result.url)
242
+ continue;
212
243
  if (seenUrls.has(result.url))
213
244
  continue;
214
245
  seenUrls.add(result.url);
215
246
  sources.push({
216
- title: result.title,
217
- url: result.url,
218
- snippet: result.snippet,
219
- provider: searchResult.provider,
220
- query: searchResult.metadata.query
247
+ title: String(result.title || ''),
248
+ url: String(result.url),
249
+ snippet: String(result.snippet || ''),
250
+ provider: String(searchResult.provider || 'unknown'),
251
+ query: String(searchResult.metadata?.query || ''),
221
252
  });
222
253
  }
223
254
  }
224
- return sources.slice(0, 10); // Limit to top 10 sources
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
- };
255
+ return sources.slice(0, 10);
284
256
  }
285
257
  }
286
- exports.FactCheckTool = FactCheckTool;
287
258
  //# sourceMappingURL=factCheck.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factCheck.js","sourceRoot":"","sources":["../../src/tools/factCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factCheck.js","sourceRoot":"","sources":["../../src/tools/factCheck.ts"],"names":[],"mappings":"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"}