@cogitator-ai/core 0.7.0 → 0.9.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/README.md +129 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/observability/index.d.ts +3 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +3 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/langfuse.d.ts +48 -0
- package/dist/observability/langfuse.d.ts.map +1 -0
- package/dist/observability/langfuse.js +127 -0
- package/dist/observability/langfuse.js.map +1 -0
- package/dist/observability/opentelemetry.d.ts +29 -0
- package/dist/observability/opentelemetry.d.ts.map +1 -0
- package/dist/observability/opentelemetry.js +131 -0
- package/dist/observability/opentelemetry.js.map +1 -0
- package/dist/tools/email.d.ts +24 -0
- package/dist/tools/email.d.ts.map +1 -0
- package/dist/tools/email.js +185 -0
- package/dist/tools/email.js.map +1 -0
- package/dist/tools/github.d.ts +19 -0
- package/dist/tools/github.d.ts.map +1 -0
- package/dist/tools/github.js +288 -0
- package/dist/tools/github.js.map +1 -0
- package/dist/tools/index.d.ts +93 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +18 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/sql-query.d.ts +22 -0
- package/dist/tools/sql-query.d.ts.map +1 -0
- package/dist/tools/sql-query.js +141 -0
- package/dist/tools/sql-query.js.map +1 -0
- package/dist/tools/vector-search.d.ts +29 -0
- package/dist/tools/vector-search.d.ts.map +1 -0
- package/dist/tools/vector-search.js +192 -0
- package/dist/tools/vector-search.js.map +1 -0
- package/dist/tools/web-scrape.d.ts +31 -0
- package/dist/tools/web-scrape.d.ts.map +1 -0
- package/dist/tools/web-scrape.js +257 -0
- package/dist/tools/web-scrape.js.map +1 -0
- package/dist/tools/web-search.d.ts +28 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +176 -0
- package/dist/tools/web-search.js.map +1 -0
- package/package.json +5 -5
package/dist/tools/index.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in tools for Cogitator
|
|
3
|
-
*/
|
|
4
1
|
export { calculator } from './calculator';
|
|
5
2
|
export { datetime } from './datetime';
|
|
6
3
|
export { uuid } from './uuid';
|
|
@@ -13,6 +10,12 @@ export { regexMatch, regexReplace } from './regex';
|
|
|
13
10
|
export { fileRead, fileWrite, fileList, fileExists, fileDelete } from './filesystem';
|
|
14
11
|
export { httpRequest } from './http';
|
|
15
12
|
export { exec } from './exec';
|
|
13
|
+
export { webSearch } from './web-search';
|
|
14
|
+
export { webScrape } from './web-scrape';
|
|
15
|
+
export { sqlQuery } from './sql-query';
|
|
16
|
+
export { vectorSearch } from './vector-search';
|
|
17
|
+
export { sendEmail } from './email';
|
|
18
|
+
export { githubApi } from './github';
|
|
16
19
|
import { calculator } from './calculator';
|
|
17
20
|
import { datetime } from './datetime';
|
|
18
21
|
import { uuid } from './uuid';
|
|
@@ -25,6 +28,12 @@ import { regexMatch, regexReplace } from './regex';
|
|
|
25
28
|
import { fileRead, fileWrite, fileList, fileExists, fileDelete } from './filesystem';
|
|
26
29
|
import { httpRequest } from './http';
|
|
27
30
|
import { exec } from './exec';
|
|
31
|
+
import { webSearch } from './web-search';
|
|
32
|
+
import { webScrape } from './web-scrape';
|
|
33
|
+
import { sqlQuery } from './sql-query';
|
|
34
|
+
import { vectorSearch } from './vector-search';
|
|
35
|
+
import { sendEmail } from './email';
|
|
36
|
+
import { githubApi } from './github';
|
|
28
37
|
export const builtinTools = [
|
|
29
38
|
calculator,
|
|
30
39
|
datetime,
|
|
@@ -46,5 +55,11 @@ export const builtinTools = [
|
|
|
46
55
|
fileDelete,
|
|
47
56
|
httpRequest,
|
|
48
57
|
exec,
|
|
58
|
+
webSearch,
|
|
59
|
+
webScrape,
|
|
60
|
+
sqlQuery,
|
|
61
|
+
vectorSearch,
|
|
62
|
+
sendEmail,
|
|
63
|
+
githubApi,
|
|
49
64
|
];
|
|
50
65
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU;IACV,QAAQ;IACR,IAAI;IACJ,YAAY;IACZ,YAAY;IACZ,IAAI;IACJ,YAAY;IACZ,YAAY;IACZ,KAAK;IACL,SAAS;IACT,aAAa;IACb,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,UAAU;IACV,UAAU;IACV,WAAW;IACX,IAAI;IACJ,SAAS;IACT,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,SAAS;CACD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface QueryResult {
|
|
2
|
+
rows: Record<string, unknown>[];
|
|
3
|
+
rowCount: number;
|
|
4
|
+
truncated: boolean;
|
|
5
|
+
database: string;
|
|
6
|
+
executionTime: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const sqlQuery: import("@cogitator-ai/types").Tool<{
|
|
9
|
+
query: string;
|
|
10
|
+
database?: "postgres" | "sqlite" | undefined;
|
|
11
|
+
params?: unknown[] | undefined;
|
|
12
|
+
connectionString?: string | undefined;
|
|
13
|
+
maxRows?: number | undefined;
|
|
14
|
+
readOnly?: boolean | undefined;
|
|
15
|
+
}, QueryResult | {
|
|
16
|
+
error: string;
|
|
17
|
+
database?: undefined;
|
|
18
|
+
} | {
|
|
19
|
+
error: string;
|
|
20
|
+
database: "postgres" | "sqlite";
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=sql-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-query.d.ts","sourceRoot":"","sources":["../../src/tools/sql-query.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AA6GD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;EA8CnB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { tool } from '../tool';
|
|
3
|
+
const sqlQueryParams = z.object({
|
|
4
|
+
query: z.string().min(1).describe('SQL query to execute'),
|
|
5
|
+
database: z
|
|
6
|
+
.enum(['postgres', 'sqlite'])
|
|
7
|
+
.optional()
|
|
8
|
+
.describe('Database type (auto-detects from connection string if not specified)'),
|
|
9
|
+
connectionString: z
|
|
10
|
+
.string()
|
|
11
|
+
.optional()
|
|
12
|
+
.describe('Connection string. For PostgreSQL: postgres://user:pass@host:port/db. For SQLite: file path. Defaults to DATABASE_URL env var.'),
|
|
13
|
+
params: z
|
|
14
|
+
.array(z.unknown())
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('Query parameters for parameterized queries (prevents SQL injection)'),
|
|
17
|
+
maxRows: z
|
|
18
|
+
.number()
|
|
19
|
+
.int()
|
|
20
|
+
.min(1)
|
|
21
|
+
.max(1000)
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Maximum rows to return (default: 100, max: 1000)'),
|
|
24
|
+
readOnly: z.boolean().optional().describe('Only allow SELECT queries (default: true for safety)'),
|
|
25
|
+
});
|
|
26
|
+
function isReadOnlyQuery(query) {
|
|
27
|
+
const normalized = query.trim().toUpperCase();
|
|
28
|
+
const allowedPrefixes = ['SELECT', 'WITH', 'SHOW', 'DESCRIBE', 'EXPLAIN'];
|
|
29
|
+
return allowedPrefixes.some((prefix) => normalized.startsWith(prefix));
|
|
30
|
+
}
|
|
31
|
+
async function queryPostgres(connectionString, query, params, maxRows) {
|
|
32
|
+
let pg;
|
|
33
|
+
try {
|
|
34
|
+
pg = await import('pg');
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
throw new Error('pg package not installed. Run: pnpm add pg');
|
|
38
|
+
}
|
|
39
|
+
const client = new pg.default.Client({ connectionString });
|
|
40
|
+
const start = Date.now();
|
|
41
|
+
try {
|
|
42
|
+
await client.connect();
|
|
43
|
+
const limitedQuery = query.includes('LIMIT')
|
|
44
|
+
? query
|
|
45
|
+
: `${query.replace(/;?\s*$/, '')} LIMIT ${maxRows + 1}`;
|
|
46
|
+
const result = await client.query(limitedQuery, params);
|
|
47
|
+
const executionTime = Date.now() - start;
|
|
48
|
+
const truncated = result.rows.length > maxRows;
|
|
49
|
+
const rows = truncated ? result.rows.slice(0, maxRows) : result.rows;
|
|
50
|
+
return {
|
|
51
|
+
rows: rows,
|
|
52
|
+
rowCount: rows.length,
|
|
53
|
+
truncated,
|
|
54
|
+
database: 'postgres',
|
|
55
|
+
executionTime,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
await client.end();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function querySqlite(filePath, query, params, maxRows) {
|
|
63
|
+
let Database;
|
|
64
|
+
try {
|
|
65
|
+
const betterSqlite = await import('better-sqlite3');
|
|
66
|
+
Database = betterSqlite.default;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
throw new Error('better-sqlite3 package not installed. Run: pnpm add better-sqlite3');
|
|
70
|
+
}
|
|
71
|
+
const db = new Database(filePath, { readonly: true });
|
|
72
|
+
const start = Date.now();
|
|
73
|
+
try {
|
|
74
|
+
const limitedQuery = query.includes('LIMIT')
|
|
75
|
+
? query
|
|
76
|
+
: `${query.replace(/;?\s*$/, '')} LIMIT ${maxRows + 1}`;
|
|
77
|
+
const stmt = db.prepare(limitedQuery);
|
|
78
|
+
const rows = stmt.all(...params);
|
|
79
|
+
const executionTime = Date.now() - start;
|
|
80
|
+
const truncated = rows.length > maxRows;
|
|
81
|
+
const resultRows = truncated ? rows.slice(0, maxRows) : rows;
|
|
82
|
+
return {
|
|
83
|
+
rows: resultRows,
|
|
84
|
+
rowCount: resultRows.length,
|
|
85
|
+
truncated,
|
|
86
|
+
database: 'sqlite',
|
|
87
|
+
executionTime,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
db.close();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function detectDatabase(connectionString) {
|
|
95
|
+
if (connectionString.startsWith('postgres://') || connectionString.startsWith('postgresql://')) {
|
|
96
|
+
return 'postgres';
|
|
97
|
+
}
|
|
98
|
+
if (connectionString.endsWith('.db') ||
|
|
99
|
+
connectionString.endsWith('.sqlite') ||
|
|
100
|
+
connectionString.endsWith('.sqlite3') ||
|
|
101
|
+
connectionString.includes('.db') ||
|
|
102
|
+
connectionString === ':memory:') {
|
|
103
|
+
return 'sqlite';
|
|
104
|
+
}
|
|
105
|
+
return 'postgres';
|
|
106
|
+
}
|
|
107
|
+
export const sqlQuery = tool({
|
|
108
|
+
name: 'sql_query',
|
|
109
|
+
description: 'Execute SQL queries against PostgreSQL or SQLite databases. Supports parameterized queries for safety. By default, only SELECT queries are allowed.',
|
|
110
|
+
parameters: sqlQueryParams,
|
|
111
|
+
category: 'database',
|
|
112
|
+
tags: ['sql', 'database', 'postgres', 'sqlite', 'query'],
|
|
113
|
+
execute: async ({ query, database, connectionString, params = [], maxRows = 100, readOnly = true, }) => {
|
|
114
|
+
const connStr = connectionString ?? process.env.DATABASE_URL;
|
|
115
|
+
if (!connStr) {
|
|
116
|
+
return {
|
|
117
|
+
error: 'No connection string provided. Set DATABASE_URL environment variable or pass connectionString parameter.',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (readOnly && !isReadOnlyQuery(query)) {
|
|
121
|
+
return {
|
|
122
|
+
error: 'Only SELECT queries are allowed when readOnly=true. Set readOnly=false to allow mutations.',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const db = database ?? detectDatabase(connStr);
|
|
126
|
+
try {
|
|
127
|
+
switch (db) {
|
|
128
|
+
case 'postgres':
|
|
129
|
+
return await queryPostgres(connStr, query, params, maxRows);
|
|
130
|
+
case 'sqlite':
|
|
131
|
+
return await querySqlite(connStr, query, params, maxRows);
|
|
132
|
+
default:
|
|
133
|
+
return { error: `Unsupported database type: ${db}` };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
return { error: err.message, database: db };
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=sql-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-query.js","sourceRoot":"","sources":["../../src/tools/sql-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACzD,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;IACnF,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,gIAAgI,CACjI;IACH,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClB,QAAQ,EAAE;SACV,QAAQ,CAAC,qEAAqE,CAAC;IAClF,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CAClG,CAAC,CAAC;AAUH,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC1E,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,gBAAwB,EACxB,KAAa,EACb,MAAiB,EACjB,OAAe;IAEf,IAAI,EAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1C,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,OAAO,GAAG,CAAC,EAAE,CAAC;QAE1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEzC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAErE,OAAO;YACL,IAAI,EAAE,IAAiC;YACvC,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS;YACT,QAAQ,EAAE,UAAU;YACpB,aAAa;SACd,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,QAAgB,EAChB,KAAa,EACb,MAAiB,EACjB,OAAe;IAEf,IAAI,QAAiD,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACpD,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1C,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,OAAO,GAAG,CAAC,EAAE,CAAC;QAE1D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA8B,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACxC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,UAAU,CAAC,MAAM;YAC3B,SAAS;YACT,QAAQ,EAAE,QAAQ;YAClB,aAAa;SACd,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,gBAAwB;IAC9C,IAAI,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/F,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IACE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChC,gBAAgB,KAAK,UAAU,EAC/B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,qJAAqJ;IACvJ,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;IACxD,OAAO,EAAE,KAAK,EAAE,EACd,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,MAAM,GAAG,EAAE,EACX,OAAO,GAAG,GAAG,EACb,QAAQ,GAAG,IAAI,GAChB,EAAE,EAAE;QACH,MAAM,OAAO,GAAG,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAE7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,KAAK,EACH,0GAA0G;aAC7G,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO;gBACL,KAAK,EACH,4FAA4F;aAC/F,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,QAAQ,EAAE,EAAE,CAAC;gBACX,KAAK,UAAU;oBACb,OAAO,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC9D,KAAK,QAAQ;oBACX,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC5D;oBACE,OAAO,EAAE,KAAK,EAAE,8BAA8B,EAAY,EAAE,EAAE,CAAC;YACnE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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":"AA+BA,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;;;;;;;;;;;;;;;EAkDvB,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
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.record(z.unknown()).optional().describe('Metadata filter as key-value pairs'),
|
|
20
|
+
embeddingProvider: z
|
|
21
|
+
.enum(['openai', 'ollama', 'google'])
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Embedding provider (auto-detects from API keys)'),
|
|
24
|
+
embeddingModel: z.string().optional().describe('Embedding model (defaults vary by provider)'),
|
|
25
|
+
connectionString: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe('PostgreSQL connection string with pgvector. Defaults to DATABASE_URL env var.'),
|
|
29
|
+
});
|
|
30
|
+
async function getEmbedding(text, provider, model) {
|
|
31
|
+
switch (provider) {
|
|
32
|
+
case 'openai': {
|
|
33
|
+
const apiKey = process.env.OPENAI_API_KEY;
|
|
34
|
+
if (!apiKey)
|
|
35
|
+
throw new Error('OPENAI_API_KEY not set');
|
|
36
|
+
const response = await fetch('https://api.openai.com/v1/embeddings', {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
Authorization: `Bearer ${apiKey}`,
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({
|
|
43
|
+
input: text,
|
|
44
|
+
model: model ?? 'text-embedding-3-small',
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const err = await response.text();
|
|
49
|
+
throw new Error(`OpenAI embedding error: ${err}`);
|
|
50
|
+
}
|
|
51
|
+
const data = (await response.json());
|
|
52
|
+
return data.data[0].embedding;
|
|
53
|
+
}
|
|
54
|
+
case 'ollama': {
|
|
55
|
+
const baseUrl = process.env.OLLAMA_BASE_URL ?? 'http://localhost:11434';
|
|
56
|
+
const response = await fetch(`${baseUrl}/api/embeddings`, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: { 'Content-Type': 'application/json' },
|
|
59
|
+
body: JSON.stringify({
|
|
60
|
+
model: model ?? 'nomic-embed-text',
|
|
61
|
+
prompt: text,
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
const err = await response.text();
|
|
66
|
+
throw new Error(`Ollama embedding error: ${err}`);
|
|
67
|
+
}
|
|
68
|
+
const data = (await response.json());
|
|
69
|
+
return data.embedding;
|
|
70
|
+
}
|
|
71
|
+
case 'google': {
|
|
72
|
+
const apiKey = process.env.GOOGLE_API_KEY;
|
|
73
|
+
if (!apiKey)
|
|
74
|
+
throw new Error('GOOGLE_API_KEY not set');
|
|
75
|
+
const modelId = model ?? 'text-embedding-004';
|
|
76
|
+
const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${modelId}:embedContent?key=${apiKey}`, {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: { 'Content-Type': 'application/json' },
|
|
79
|
+
body: JSON.stringify({
|
|
80
|
+
model: `models/${modelId}`,
|
|
81
|
+
content: { parts: [{ text }] },
|
|
82
|
+
}),
|
|
83
|
+
});
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
const err = await response.text();
|
|
86
|
+
throw new Error(`Google embedding error: ${err}`);
|
|
87
|
+
}
|
|
88
|
+
const data = (await response.json());
|
|
89
|
+
return data.embedding.values;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function detectEmbeddingProvider() {
|
|
94
|
+
if (process.env.OPENAI_API_KEY)
|
|
95
|
+
return 'openai';
|
|
96
|
+
if (process.env.OLLAMA_BASE_URL || process.env.OLLAMA_HOST)
|
|
97
|
+
return 'ollama';
|
|
98
|
+
if (process.env.GOOGLE_API_KEY)
|
|
99
|
+
return 'google';
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
async function searchPgVector(connectionString, embedding, collection, topK, threshold, filter) {
|
|
103
|
+
let pg;
|
|
104
|
+
try {
|
|
105
|
+
pg = await import('pg');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new Error('pg package not installed. Run: pnpm add pg');
|
|
109
|
+
}
|
|
110
|
+
const client = new pg.default.Client({ connectionString });
|
|
111
|
+
try {
|
|
112
|
+
await client.connect();
|
|
113
|
+
const vectorStr = `[${embedding.join(',')}]`;
|
|
114
|
+
let filterClause = '';
|
|
115
|
+
const params = [vectorStr, topK];
|
|
116
|
+
if (filter && Object.keys(filter).length > 0) {
|
|
117
|
+
const conditions = Object.entries(filter).map(([key, value], idx) => {
|
|
118
|
+
params.push(JSON.stringify({ [key]: value }));
|
|
119
|
+
return `metadata @> $${idx + 3}::jsonb`;
|
|
120
|
+
});
|
|
121
|
+
filterClause = `AND ${conditions.join(' AND ')}`;
|
|
122
|
+
}
|
|
123
|
+
const query = `
|
|
124
|
+
SELECT
|
|
125
|
+
id,
|
|
126
|
+
content,
|
|
127
|
+
metadata,
|
|
128
|
+
1 - (embedding <=> $1::vector) as similarity
|
|
129
|
+
FROM ${collection}
|
|
130
|
+
WHERE 1 - (embedding <=> $1::vector) >= ${threshold}
|
|
131
|
+
${filterClause}
|
|
132
|
+
ORDER BY embedding <=> $1::vector
|
|
133
|
+
LIMIT $2
|
|
134
|
+
`;
|
|
135
|
+
const result = await client.query(query, params);
|
|
136
|
+
return result.rows.map((row) => ({
|
|
137
|
+
id: String(row.id),
|
|
138
|
+
content: String(row.content ?? ''),
|
|
139
|
+
metadata: row.metadata ?? {},
|
|
140
|
+
similarity: Number(row.similarity),
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
await client.end();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export const vectorSearch = tool({
|
|
148
|
+
name: 'vector_search',
|
|
149
|
+
description: 'Perform semantic search using vector embeddings. Searches a PostgreSQL database with pgvector extension. Converts query to embedding and finds similar documents.',
|
|
150
|
+
parameters: vectorSearchParams,
|
|
151
|
+
category: 'database',
|
|
152
|
+
tags: ['search', 'vector', 'embedding', 'semantic', 'similarity'],
|
|
153
|
+
execute: async ({ query, collection = 'documents', topK = 5, threshold = 0.7, filter, embeddingProvider, embeddingModel, connectionString, }) => {
|
|
154
|
+
const provider = embeddingProvider ?? detectEmbeddingProvider();
|
|
155
|
+
if (!provider) {
|
|
156
|
+
return {
|
|
157
|
+
error: 'No embedding provider detected. Set OPENAI_API_KEY, GOOGLE_API_KEY, or OLLAMA_BASE_URL.',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const connStr = connectionString ?? process.env.DATABASE_URL;
|
|
161
|
+
if (!connStr) {
|
|
162
|
+
return {
|
|
163
|
+
error: 'No database connection string. Set DATABASE_URL or pass connectionString parameter.',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
const embedding = await getEmbedding(query, provider, embeddingModel);
|
|
168
|
+
const results = await searchPgVector(connStr, embedding, collection, topK, threshold, filter);
|
|
169
|
+
const response = {
|
|
170
|
+
query,
|
|
171
|
+
results,
|
|
172
|
+
provider,
|
|
173
|
+
model: embeddingModel ?? getDefaultModel(provider),
|
|
174
|
+
};
|
|
175
|
+
return response;
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
return { error: err.message, query };
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
function getDefaultModel(provider) {
|
|
183
|
+
switch (provider) {
|
|
184
|
+
case 'openai':
|
|
185
|
+
return 'text-embedding-3-small';
|
|
186
|
+
case 'ollama':
|
|
187
|
+
return 'nomic-embed-text';
|
|
188
|
+
case 'google':
|
|
189
|
+
return 'text-embedding-004';
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# 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":"AA4BA,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;AA+KD,eAAO,MAAM,SAAS;;;;;;;;;;;EAgGpB,CAAC"}
|