@cogitator-ai/core 0.7.0 → 0.8.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-query.js","sourceRoot":"","sources":["../../src/tools/sql-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface VectorSearchResult {
2
+ id: string;
3
+ content: string;
4
+ metadata: Record<string, unknown>;
5
+ similarity: number;
6
+ }
7
+ export interface VectorSearchResponse {
8
+ query: string;
9
+ results: VectorSearchResult[];
10
+ provider: string;
11
+ model: string;
12
+ }
13
+ export declare const vectorSearch: import("@cogitator-ai/types").Tool<{
14
+ query: string;
15
+ filter?: Record<string, unknown> | undefined;
16
+ connectionString?: string | undefined;
17
+ collection?: string | undefined;
18
+ topK?: number | undefined;
19
+ threshold?: number | undefined;
20
+ embeddingProvider?: "ollama" | "openai" | "google" | undefined;
21
+ embeddingModel?: string | undefined;
22
+ }, VectorSearchResponse | {
23
+ error: string;
24
+ query?: undefined;
25
+ } | {
26
+ error: string;
27
+ query: string;
28
+ }>;
29
+ //# sourceMappingURL=vector-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-search.d.ts","sourceRoot":"","sources":["../../src/tools/vector-search.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAmJD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAyDvB,CAAC"}
@@ -0,0 +1,198 @@
1
+ import { z } from 'zod';
2
+ import { tool } from '../tool';
3
+ const vectorSearchParams = z.object({
4
+ query: z.string().min(1).describe('Search query (will be converted to embedding)'),
5
+ collection: z.string().optional().describe('Collection/table name (default: "documents")'),
6
+ topK: z
7
+ .number()
8
+ .int()
9
+ .min(1)
10
+ .max(100)
11
+ .optional()
12
+ .describe('Number of results to return (default: 5)'),
13
+ threshold: z
14
+ .number()
15
+ .min(0)
16
+ .max(1)
17
+ .optional()
18
+ .describe('Minimum similarity threshold 0-1 (default: 0.7)'),
19
+ filter: z
20
+ .record(z.unknown())
21
+ .optional()
22
+ .describe('Metadata filter as key-value pairs'),
23
+ embeddingProvider: z
24
+ .enum(['openai', 'ollama', 'google'])
25
+ .optional()
26
+ .describe('Embedding provider (auto-detects from API keys)'),
27
+ embeddingModel: z
28
+ .string()
29
+ .optional()
30
+ .describe('Embedding model (defaults vary by provider)'),
31
+ connectionString: z
32
+ .string()
33
+ .optional()
34
+ .describe('PostgreSQL connection string with pgvector. Defaults to DATABASE_URL env var.'),
35
+ });
36
+ async function getEmbedding(text, provider, model) {
37
+ switch (provider) {
38
+ case 'openai': {
39
+ const apiKey = process.env.OPENAI_API_KEY;
40
+ if (!apiKey)
41
+ throw new Error('OPENAI_API_KEY not set');
42
+ const response = await fetch('https://api.openai.com/v1/embeddings', {
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/json',
46
+ Authorization: `Bearer ${apiKey}`,
47
+ },
48
+ body: JSON.stringify({
49
+ input: text,
50
+ model: model ?? 'text-embedding-3-small',
51
+ }),
52
+ });
53
+ if (!response.ok) {
54
+ const err = await response.text();
55
+ throw new Error(`OpenAI embedding error: ${err}`);
56
+ }
57
+ const data = (await response.json());
58
+ return data.data[0].embedding;
59
+ }
60
+ case 'ollama': {
61
+ const baseUrl = process.env.OLLAMA_BASE_URL ?? 'http://localhost:11434';
62
+ const response = await fetch(`${baseUrl}/api/embeddings`, {
63
+ method: 'POST',
64
+ headers: { 'Content-Type': 'application/json' },
65
+ body: JSON.stringify({
66
+ model: model ?? 'nomic-embed-text',
67
+ prompt: text,
68
+ }),
69
+ });
70
+ if (!response.ok) {
71
+ const err = await response.text();
72
+ throw new Error(`Ollama embedding error: ${err}`);
73
+ }
74
+ const data = (await response.json());
75
+ return data.embedding;
76
+ }
77
+ case 'google': {
78
+ const apiKey = process.env.GOOGLE_API_KEY;
79
+ if (!apiKey)
80
+ throw new Error('GOOGLE_API_KEY not set');
81
+ const modelId = model ?? 'text-embedding-004';
82
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${modelId}:embedContent?key=${apiKey}`, {
83
+ method: 'POST',
84
+ headers: { 'Content-Type': 'application/json' },
85
+ body: JSON.stringify({
86
+ model: `models/${modelId}`,
87
+ content: { parts: [{ text }] },
88
+ }),
89
+ });
90
+ if (!response.ok) {
91
+ const err = await response.text();
92
+ throw new Error(`Google embedding error: ${err}`);
93
+ }
94
+ const data = (await response.json());
95
+ return data.embedding.values;
96
+ }
97
+ }
98
+ }
99
+ function detectEmbeddingProvider() {
100
+ if (process.env.OPENAI_API_KEY)
101
+ return 'openai';
102
+ if (process.env.OLLAMA_BASE_URL || process.env.OLLAMA_HOST)
103
+ return 'ollama';
104
+ if (process.env.GOOGLE_API_KEY)
105
+ return 'google';
106
+ return null;
107
+ }
108
+ async function searchPgVector(connectionString, embedding, collection, topK, threshold, filter) {
109
+ let pg;
110
+ try {
111
+ pg = await import('pg');
112
+ }
113
+ catch {
114
+ throw new Error('pg package not installed. Run: pnpm add pg');
115
+ }
116
+ const client = new pg.default.Client({ connectionString });
117
+ try {
118
+ await client.connect();
119
+ const vectorStr = `[${embedding.join(',')}]`;
120
+ let filterClause = '';
121
+ const params = [vectorStr, topK];
122
+ if (filter && Object.keys(filter).length > 0) {
123
+ const conditions = Object.entries(filter).map(([key, value], idx) => {
124
+ params.push(JSON.stringify({ [key]: value }));
125
+ return `metadata @> $${idx + 3}::jsonb`;
126
+ });
127
+ filterClause = `AND ${conditions.join(' AND ')}`;
128
+ }
129
+ const query = `
130
+ SELECT
131
+ id,
132
+ content,
133
+ metadata,
134
+ 1 - (embedding <=> $1::vector) as similarity
135
+ FROM ${collection}
136
+ WHERE 1 - (embedding <=> $1::vector) >= ${threshold}
137
+ ${filterClause}
138
+ ORDER BY embedding <=> $1::vector
139
+ LIMIT $2
140
+ `;
141
+ const result = await client.query(query, params);
142
+ return result.rows.map((row) => ({
143
+ id: String(row.id),
144
+ content: String(row.content ?? ''),
145
+ metadata: row.metadata ?? {},
146
+ similarity: Number(row.similarity),
147
+ }));
148
+ }
149
+ finally {
150
+ await client.end();
151
+ }
152
+ }
153
+ export const vectorSearch = tool({
154
+ name: 'vector_search',
155
+ description: 'Perform semantic search using vector embeddings. Searches a PostgreSQL database with pgvector extension. Converts query to embedding and finds similar documents.',
156
+ parameters: vectorSearchParams,
157
+ category: 'database',
158
+ tags: ['search', 'vector', 'embedding', 'semantic', 'similarity'],
159
+ execute: async ({ query, collection = 'documents', topK = 5, threshold = 0.7, filter, embeddingProvider, embeddingModel, connectionString, }) => {
160
+ const provider = embeddingProvider ?? detectEmbeddingProvider();
161
+ if (!provider) {
162
+ return {
163
+ error: 'No embedding provider detected. Set OPENAI_API_KEY, GOOGLE_API_KEY, or OLLAMA_BASE_URL.',
164
+ };
165
+ }
166
+ const connStr = connectionString ?? process.env.DATABASE_URL;
167
+ if (!connStr) {
168
+ return {
169
+ error: 'No database connection string. Set DATABASE_URL or pass connectionString parameter.',
170
+ };
171
+ }
172
+ try {
173
+ const embedding = await getEmbedding(query, provider, embeddingModel);
174
+ const results = await searchPgVector(connStr, embedding, collection, topK, threshold, filter);
175
+ const response = {
176
+ query,
177
+ results,
178
+ provider,
179
+ model: embeddingModel ?? getDefaultModel(provider),
180
+ };
181
+ return response;
182
+ }
183
+ catch (err) {
184
+ return { error: err.message, query };
185
+ }
186
+ },
187
+ });
188
+ function getDefaultModel(provider) {
189
+ switch (provider) {
190
+ case 'openai':
191
+ return 'text-embedding-3-small';
192
+ case 'ollama':
193
+ return 'nomic-embed-text';
194
+ case 'google':
195
+ return 'text-embedding-004';
196
+ }
197
+ }
198
+ //# sourceMappingURL=vector-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-search.js","sourceRoot":"","sources":["../../src/tools/vector-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface ExtractedLink {
2
+ text: string;
3
+ href: string;
4
+ }
5
+ export interface ExtractedImage {
6
+ src: string;
7
+ alt: string;
8
+ }
9
+ export interface ScrapeResult {
10
+ url: string;
11
+ title: string;
12
+ content: string;
13
+ format: string;
14
+ length: number;
15
+ truncated: boolean;
16
+ links?: ExtractedLink[];
17
+ images?: ExtractedImage[];
18
+ }
19
+ export declare const webScrape: import("@cogitator-ai/types").Tool<{
20
+ url: string;
21
+ timeout?: number | undefined;
22
+ format?: "text" | "markdown" | "html" | undefined;
23
+ selector?: string | undefined;
24
+ maxLength?: number | undefined;
25
+ includeLinks?: boolean | undefined;
26
+ includeImages?: boolean | undefined;
27
+ }, ScrapeResult | {
28
+ error: string;
29
+ url: string;
30
+ }>;
31
+ //# sourceMappingURL=web-scrape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-scrape.d.ts","sourceRoot":"","sources":["../../src/tools/web-scrape.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAkLD,eAAO,MAAM,SAAS;;;;;;;;;;;EAgGpB,CAAC"}
@@ -0,0 +1,260 @@
1
+ import { z } from 'zod';
2
+ import { tool } from '../tool';
3
+ const webScrapeParams = z.object({
4
+ url: z.string().url().describe('URL to scrape'),
5
+ selector: z
6
+ .string()
7
+ .optional()
8
+ .describe('CSS selector to extract specific content (e.g., "article", "main", ".content")'),
9
+ format: z
10
+ .enum(['text', 'markdown', 'html'])
11
+ .optional()
12
+ .describe('Output format (default: text)'),
13
+ maxLength: z
14
+ .number()
15
+ .int()
16
+ .min(100)
17
+ .max(100000)
18
+ .optional()
19
+ .describe('Maximum content length (default: 50000)'),
20
+ timeout: z
21
+ .number()
22
+ .int()
23
+ .min(1000)
24
+ .max(60000)
25
+ .optional()
26
+ .describe('Request timeout in ms (default: 30000)'),
27
+ includeLinks: z.boolean().optional().describe('Extract and include links (default: false)'),
28
+ includeImages: z.boolean().optional().describe('Extract and include image URLs (default: false)'),
29
+ });
30
+ function stripHtmlTags(html) {
31
+ return html
32
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
33
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
34
+ .replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi, '')
35
+ .replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi, '')
36
+ .replace(/<header[^>]*>[\s\S]*?<\/header>/gi, ' ')
37
+ .replace(/<aside[^>]*>[\s\S]*?<\/aside>/gi, '')
38
+ .replace(/<!--[\s\S]*?-->/g, '')
39
+ .replace(/<br\s*\/?>/gi, '\n')
40
+ .replace(/<\/p>/gi, '\n\n')
41
+ .replace(/<\/div>/gi, '\n')
42
+ .replace(/<\/li>/gi, '\n')
43
+ .replace(/<\/h[1-6]>/gi, '\n\n')
44
+ .replace(/<[^>]+>/g, ' ')
45
+ .replace(/&nbsp;/g, ' ')
46
+ .replace(/&amp;/g, '&')
47
+ .replace(/&lt;/g, '<')
48
+ .replace(/&gt;/g, '>')
49
+ .replace(/&quot;/g, '"')
50
+ .replace(/&#39;/g, "'")
51
+ .replace(/\s+/g, ' ')
52
+ .replace(/\n\s+/g, '\n')
53
+ .replace(/\n{3,}/g, '\n\n')
54
+ .trim();
55
+ }
56
+ function htmlToMarkdown(html) {
57
+ return html
58
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
59
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
60
+ .replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi, '')
61
+ .replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi, '')
62
+ .replace(/<!--[\s\S]*?-->/g, '')
63
+ .replace(/<h1[^>]*>(.*?)<\/h1>/gi, '# $1\n\n')
64
+ .replace(/<h2[^>]*>(.*?)<\/h2>/gi, '## $1\n\n')
65
+ .replace(/<h3[^>]*>(.*?)<\/h3>/gi, '### $1\n\n')
66
+ .replace(/<h4[^>]*>(.*?)<\/h4>/gi, '#### $1\n\n')
67
+ .replace(/<h5[^>]*>(.*?)<\/h5>/gi, '##### $1\n\n')
68
+ .replace(/<h6[^>]*>(.*?)<\/h6>/gi, '###### $1\n\n')
69
+ .replace(/<strong[^>]*>(.*?)<\/strong>/gi, '**$1**')
70
+ .replace(/<b[^>]*>(.*?)<\/b>/gi, '**$1**')
71
+ .replace(/<em[^>]*>(.*?)<\/em>/gi, '*$1*')
72
+ .replace(/<i[^>]*>(.*?)<\/i>/gi, '*$1*')
73
+ .replace(/<code[^>]*>(.*?)<\/code>/gi, '`$1`')
74
+ .replace(/<a[^>]*href=["']([^"']+)["'][^>]*>(.*?)<\/a>/gi, '[$2]($1)')
75
+ .replace(/<li[^>]*>(.*?)<\/li>/gi, '- $1\n')
76
+ .replace(/<br\s*\/?>/gi, '\n')
77
+ .replace(/<\/p>/gi, '\n\n')
78
+ .replace(/<\/div>/gi, '\n')
79
+ .replace(/<[^>]+>/g, '')
80
+ .replace(/&nbsp;/g, ' ')
81
+ .replace(/&amp;/g, '&')
82
+ .replace(/&lt;/g, '<')
83
+ .replace(/&gt;/g, '>')
84
+ .replace(/&quot;/g, '"')
85
+ .replace(/&#39;/g, "'")
86
+ .replace(/\n{3,}/g, '\n\n')
87
+ .trim();
88
+ }
89
+ function extractTitle(html) {
90
+ const titleMatch = html.match(/<title[^>]*>(.*?)<\/title>/i);
91
+ if (titleMatch) {
92
+ return titleMatch[1].replace(/&[^;]+;/g, ' ').trim();
93
+ }
94
+ const h1Match = html.match(/<h1[^>]*>(.*?)<\/h1>/i);
95
+ if (h1Match) {
96
+ return h1Match[1].replace(/<[^>]+>/g, '').trim();
97
+ }
98
+ return '';
99
+ }
100
+ function extractLinks(html, baseUrl) {
101
+ const links = [];
102
+ const regex = /<a[^>]*href=["']([^"']+)["'][^>]*>(.*?)<\/a>/gi;
103
+ let match;
104
+ while ((match = regex.exec(html)) !== null) {
105
+ const href = match[1];
106
+ const text = match[2].replace(/<[^>]+>/g, '').trim();
107
+ if (!href || !text || href.startsWith('#') || href.startsWith('javascript:')) {
108
+ continue;
109
+ }
110
+ try {
111
+ const absoluteUrl = new URL(href, baseUrl).href;
112
+ links.push({ text, href: absoluteUrl });
113
+ }
114
+ catch {
115
+ continue;
116
+ }
117
+ }
118
+ const seen = new Set();
119
+ return links.filter((link) => {
120
+ if (seen.has(link.href))
121
+ return false;
122
+ seen.add(link.href);
123
+ return true;
124
+ });
125
+ }
126
+ function extractImages(html, baseUrl) {
127
+ const images = [];
128
+ const regex = /<img[^>]*src=["']([^"']+)["'][^>]*>/gi;
129
+ let match;
130
+ while ((match = regex.exec(html)) !== null) {
131
+ const src = match[1];
132
+ const altMatch = match[0].match(/alt=["']([^"']*?)["']/i);
133
+ const alt = altMatch ? altMatch[1] : '';
134
+ if (!src || src.startsWith('data:')) {
135
+ continue;
136
+ }
137
+ try {
138
+ const absoluteUrl = new URL(src, baseUrl).href;
139
+ images.push({ src: absoluteUrl, alt });
140
+ }
141
+ catch {
142
+ continue;
143
+ }
144
+ }
145
+ const seen = new Set();
146
+ return images.filter((img) => {
147
+ if (seen.has(img.src))
148
+ return false;
149
+ seen.add(img.src);
150
+ return true;
151
+ });
152
+ }
153
+ function extractBySelector(html, selector) {
154
+ const tagSelectors = {
155
+ article: /<article[^>]*>([\s\S]*?)<\/article>/i,
156
+ main: /<main[^>]*>([\s\S]*?)<\/main>/i,
157
+ section: /<section[^>]*>([\s\S]*?)<\/section>/i,
158
+ div: /<div[^>]*>([\s\S]*?)<\/div>/i,
159
+ p: /<p[^>]*>([\s\S]*?)<\/p>/gi,
160
+ };
161
+ if (selector.startsWith('.')) {
162
+ const className = selector.slice(1);
163
+ const classRegex = new RegExp(`<[^>]+class=["'][^"']*\\b${className}\\b[^"']*["'][^>]*>([\\s\\S]*?)<\\/[^>]+>`, 'i');
164
+ const match = html.match(classRegex);
165
+ return match ? match[1] : null;
166
+ }
167
+ if (selector.startsWith('#')) {
168
+ const id = selector.slice(1);
169
+ const idRegex = new RegExp(`<[^>]+id=["']${id}["'][^>]*>([\\s\\S]*?)<\\/[^>]+>`, 'i');
170
+ const match = html.match(idRegex);
171
+ return match ? match[1] : null;
172
+ }
173
+ const regex = tagSelectors[selector.toLowerCase()];
174
+ if (regex) {
175
+ if (selector.toLowerCase() === 'p') {
176
+ const matches = html.match(regex);
177
+ return matches ? matches.join('\n') : null;
178
+ }
179
+ const match = html.match(regex);
180
+ return match ? match[1] : null;
181
+ }
182
+ return null;
183
+ }
184
+ export const webScrape = tool({
185
+ name: 'web_scrape',
186
+ description: 'Fetch and extract content from a web page. Supports text, markdown, or HTML output. Can extract specific elements using CSS selectors.',
187
+ parameters: webScrapeParams,
188
+ category: 'web',
189
+ tags: ['scrape', 'web', 'extract', 'html'],
190
+ sideEffects: ['network'],
191
+ execute: async ({ url, selector, format = 'text', maxLength = 50000, timeout = 30000, includeLinks = false, includeImages = false, }) => {
192
+ const controller = new AbortController();
193
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
194
+ try {
195
+ const response = await fetch(url, {
196
+ headers: {
197
+ 'User-Agent': 'Mozilla/5.0 (compatible; CogitatorBot/1.0; +https://github.com/eL1fe/cogitator)',
198
+ Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
199
+ },
200
+ signal: controller.signal,
201
+ });
202
+ clearTimeout(timeoutId);
203
+ if (!response.ok) {
204
+ return { error: `HTTP ${response.status}: ${response.statusText}`, url };
205
+ }
206
+ const contentType = response.headers.get('content-type') ?? '';
207
+ if (!contentType.includes('text/html') && !contentType.includes('application/xhtml')) {
208
+ return { error: `Not an HTML page: ${contentType}`, url };
209
+ }
210
+ let html = await response.text();
211
+ const title = extractTitle(html);
212
+ if (selector) {
213
+ const extracted = extractBySelector(html, selector);
214
+ if (!extracted) {
215
+ return { error: `Selector "${selector}" not found on page`, url };
216
+ }
217
+ html = extracted;
218
+ }
219
+ let content;
220
+ switch (format) {
221
+ case 'markdown':
222
+ content = htmlToMarkdown(html);
223
+ break;
224
+ case 'html':
225
+ content = html;
226
+ break;
227
+ default:
228
+ content = stripHtmlTags(html);
229
+ }
230
+ const truncated = content.length > maxLength;
231
+ if (truncated) {
232
+ content = content.slice(0, maxLength);
233
+ }
234
+ const result = {
235
+ url,
236
+ title,
237
+ content,
238
+ format,
239
+ length: content.length,
240
+ truncated,
241
+ };
242
+ if (includeLinks) {
243
+ result.links = extractLinks(html, url).slice(0, 50);
244
+ }
245
+ if (includeImages) {
246
+ result.images = extractImages(html, url).slice(0, 20);
247
+ }
248
+ return result;
249
+ }
250
+ catch (err) {
251
+ clearTimeout(timeoutId);
252
+ const error = err;
253
+ if (error.name === 'AbortError') {
254
+ return { error: `Request timed out after ${timeout}ms`, url };
255
+ }
256
+ return { error: error.message, url };
257
+ }
258
+ },
259
+ });
260
+ //# sourceMappingURL=web-scrape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-scrape.js","sourceRoot":"","sources":["../../src/tools/web-scrape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface SearchResult {
2
+ title: string;
3
+ url: string;
4
+ snippet: string;
5
+ score?: number;
6
+ }
7
+ export interface SearchResponse {
8
+ query: string;
9
+ provider: string;
10
+ results: SearchResult[];
11
+ answer?: string;
12
+ }
13
+ export declare const webSearch: import("@cogitator-ai/types").Tool<{
14
+ query: string;
15
+ provider?: "tavily" | "brave" | "serper" | undefined;
16
+ maxResults?: number | undefined;
17
+ searchDepth?: "basic" | "advanced" | undefined;
18
+ includeAnswer?: boolean | undefined;
19
+ }, SearchResponse | {
20
+ error: string;
21
+ query?: undefined;
22
+ provider?: undefined;
23
+ } | {
24
+ error: string;
25
+ query: string;
26
+ provider: "tavily" | "brave" | "serper";
27
+ }>;
28
+ //# sourceMappingURL=web-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkJD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;EAmDpB,CAAC"}