@cogitator-ai/core 0.6.1 → 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.
Files changed (68) hide show
  1. package/README.md +129 -1
  2. package/dist/cogitator.d.ts +1 -0
  3. package/dist/cogitator.d.ts.map +1 -1
  4. package/dist/cogitator.js +28 -2
  5. package/dist/cogitator.js.map +1 -1
  6. package/dist/llm/anthropic.d.ts +5 -0
  7. package/dist/llm/anthropic.d.ts.map +1 -1
  8. package/dist/llm/anthropic.js +148 -24
  9. package/dist/llm/anthropic.js.map +1 -1
  10. package/dist/llm/azure.d.ts +32 -0
  11. package/dist/llm/azure.d.ts.map +1 -0
  12. package/dist/llm/azure.js +253 -0
  13. package/dist/llm/azure.js.map +1 -0
  14. package/dist/llm/bedrock.d.ts +33 -0
  15. package/dist/llm/bedrock.d.ts.map +1 -0
  16. package/dist/llm/bedrock.js +323 -0
  17. package/dist/llm/bedrock.js.map +1 -0
  18. package/dist/llm/google.d.ts +5 -0
  19. package/dist/llm/google.d.ts.map +1 -1
  20. package/dist/llm/google.js +85 -11
  21. package/dist/llm/google.js.map +1 -1
  22. package/dist/llm/index.d.ts +2 -0
  23. package/dist/llm/index.d.ts.map +1 -1
  24. package/dist/llm/index.js +52 -0
  25. package/dist/llm/index.js.map +1 -1
  26. package/dist/llm/ollama.d.ts +3 -0
  27. package/dist/llm/ollama.d.ts.map +1 -1
  28. package/dist/llm/ollama.js +59 -10
  29. package/dist/llm/ollama.js.map +1 -1
  30. package/dist/llm/openai.d.ts +5 -0
  31. package/dist/llm/openai.d.ts.map +1 -1
  32. package/dist/llm/openai.js +107 -17
  33. package/dist/llm/openai.js.map +1 -1
  34. package/dist/time-travel/replayer.d.ts +1 -0
  35. package/dist/time-travel/replayer.d.ts.map +1 -1
  36. package/dist/time-travel/replayer.js +15 -4
  37. package/dist/time-travel/replayer.js.map +1 -1
  38. package/dist/tools/email.d.ts +24 -0
  39. package/dist/tools/email.d.ts.map +1 -0
  40. package/dist/tools/email.js +185 -0
  41. package/dist/tools/email.js.map +1 -0
  42. package/dist/tools/github.d.ts +19 -0
  43. package/dist/tools/github.d.ts.map +1 -0
  44. package/dist/tools/github.js +289 -0
  45. package/dist/tools/github.js.map +1 -0
  46. package/dist/tools/hash.d.ts +5 -5
  47. package/dist/tools/index.d.ts +99 -10
  48. package/dist/tools/index.d.ts.map +1 -1
  49. package/dist/tools/index.js +18 -3
  50. package/dist/tools/index.js.map +1 -1
  51. package/dist/tools/json.d.ts +1 -1
  52. package/dist/tools/sql-query.d.ts +22 -0
  53. package/dist/tools/sql-query.d.ts.map +1 -0
  54. package/dist/tools/sql-query.js +145 -0
  55. package/dist/tools/sql-query.js.map +1 -0
  56. package/dist/tools/vector-search.d.ts +29 -0
  57. package/dist/tools/vector-search.d.ts.map +1 -0
  58. package/dist/tools/vector-search.js +198 -0
  59. package/dist/tools/vector-search.js.map +1 -0
  60. package/dist/tools/web-scrape.d.ts +31 -0
  61. package/dist/tools/web-scrape.d.ts.map +1 -0
  62. package/dist/tools/web-scrape.js +260 -0
  63. package/dist/tools/web-scrape.js.map +1 -0
  64. package/dist/tools/web-search.d.ts +28 -0
  65. package/dist/tools/web-search.d.ts.map +1 -0
  66. package/dist/tools/web-search.js +176 -0
  67. package/dist/tools/web-search.js.map +1 -0
  68. package/package.json +10 -5
@@ -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
  export declare const builtinTools: readonly [import("@cogitator-ai/types").Tool<{
17
20
  expression: string;
18
21
  }, {
@@ -76,16 +79,16 @@ export declare const builtinTools: readonly [import("@cogitator-ai/types").Tool<
76
79
  charset: "numeric" | "alphanumeric" | "alpha" | "hex";
77
80
  }>, import("@cogitator-ai/types").Tool<{
78
81
  data: string;
79
- algorithm?: "md5" | "sha1" | "sha256" | "sha512" | undefined;
80
- encoding?: "hex" | "base64" | undefined;
82
+ algorithm?: "sha256" | "md5" | "sha1" | "sha512" | undefined;
83
+ encoding?: "base64" | "hex" | undefined;
81
84
  }, {
82
85
  hash: string;
83
- algorithm: "md5" | "sha1" | "sha256" | "sha512";
84
- encoding: "hex" | "base64";
86
+ algorithm: "sha256" | "md5" | "sha1" | "sha512";
87
+ encoding: "base64" | "hex";
85
88
  error?: undefined;
86
89
  } | {
87
90
  error: string;
88
- algorithm: "md5" | "sha1" | "sha256" | "sha512";
91
+ algorithm: "sha256" | "md5" | "sha1" | "sha512";
89
92
  hash?: undefined;
90
93
  encoding?: undefined;
91
94
  }>, import("@cogitator-ai/types").Tool<{
@@ -121,8 +124,8 @@ export declare const builtinTools: readonly [import("@cogitator-ai/types").Tool<
121
124
  valid: boolean;
122
125
  result?: undefined;
123
126
  }>, import("@cogitator-ai/types").Tool<{
124
- pretty?: boolean | undefined;
125
127
  data?: unknown;
128
+ pretty?: boolean | undefined;
126
129
  indent?: number | undefined;
127
130
  }, {
128
131
  result: string;
@@ -319,5 +322,91 @@ export declare const builtinTools: readonly [import("@cogitator-ai/types").Tool<
319
322
  truncatedStdout?: undefined;
320
323
  truncatedStderr?: undefined;
321
324
  timeout?: undefined;
322
- }>];
325
+ }>, import("@cogitator-ai/types").Tool<{
326
+ query: string;
327
+ provider?: "tavily" | "brave" | "serper" | undefined;
328
+ maxResults?: number | undefined;
329
+ searchDepth?: "basic" | "advanced" | undefined;
330
+ includeAnswer?: boolean | undefined;
331
+ }, import("./web-search").SearchResponse | {
332
+ error: string;
333
+ query?: undefined;
334
+ provider?: undefined;
335
+ } | {
336
+ error: string;
337
+ query: string;
338
+ provider: "tavily" | "brave" | "serper";
339
+ }>, import("@cogitator-ai/types").Tool<{
340
+ url: string;
341
+ timeout?: number | undefined;
342
+ format?: "text" | "markdown" | "html" | undefined;
343
+ selector?: string | undefined;
344
+ maxLength?: number | undefined;
345
+ includeLinks?: boolean | undefined;
346
+ includeImages?: boolean | undefined;
347
+ }, import("./web-scrape").ScrapeResult | {
348
+ error: string;
349
+ url: string;
350
+ }>, import("@cogitator-ai/types").Tool<{
351
+ query: string;
352
+ database?: "postgres" | "sqlite" | undefined;
353
+ params?: unknown[] | undefined;
354
+ connectionString?: string | undefined;
355
+ maxRows?: number | undefined;
356
+ readOnly?: boolean | undefined;
357
+ }, import("./sql-query").QueryResult | {
358
+ error: string;
359
+ database?: undefined;
360
+ } | {
361
+ error: string;
362
+ database: "postgres" | "sqlite";
363
+ }>, import("@cogitator-ai/types").Tool<{
364
+ query: string;
365
+ filter?: Record<string, unknown> | undefined;
366
+ connectionString?: string | undefined;
367
+ collection?: string | undefined;
368
+ topK?: number | undefined;
369
+ threshold?: number | undefined;
370
+ embeddingProvider?: "ollama" | "openai" | "google" | undefined;
371
+ embeddingModel?: string | undefined;
372
+ }, import("./vector-search").VectorSearchResponse | {
373
+ error: string;
374
+ query?: undefined;
375
+ } | {
376
+ error: string;
377
+ query: string;
378
+ }>, import("@cogitator-ai/types").Tool<{
379
+ body: string;
380
+ to: string | string[];
381
+ subject: string;
382
+ provider?: "resend" | "smtp" | undefined;
383
+ html?: boolean | undefined;
384
+ from?: string | undefined;
385
+ replyTo?: string | undefined;
386
+ cc?: string | string[] | undefined;
387
+ bcc?: string | string[] | undefined;
388
+ }, import("./email").EmailResult | {
389
+ error: string;
390
+ provider?: undefined;
391
+ } | {
392
+ error: string;
393
+ provider: "resend" | "smtp";
394
+ }>, import("@cogitator-ai/types").Tool<{
395
+ action: "get_repo" | "list_issues" | "get_issue" | "create_issue" | "update_issue" | "list_prs" | "get_pr" | "create_pr" | "get_file" | "list_commits" | "search_code" | "search_issues";
396
+ owner: string;
397
+ repo: string;
398
+ number?: number | undefined;
399
+ path?: string | undefined;
400
+ query?: string | undefined;
401
+ body?: string | undefined;
402
+ title?: string | undefined;
403
+ state?: "open" | "closed" | "all" | undefined;
404
+ labels?: string[] | undefined;
405
+ assignees?: string[] | undefined;
406
+ ref?: string | undefined;
407
+ base?: string | undefined;
408
+ head?: string | undefined;
409
+ perPage?: number | undefined;
410
+ page?: number | undefined;
411
+ }, unknown>];
323
412
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqBf,CAAC"}
1
+ {"version":3,"file":"index.d.ts","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;AAqBrC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA2Bf,CAAC"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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,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;AAE9B,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;CACI,CAAC"}
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"}
@@ -13,8 +13,8 @@ export declare const jsonParse: import("@cogitator-ai/types").Tool<{
13
13
  result?: undefined;
14
14
  }>;
15
15
  export declare const jsonStringify: import("@cogitator-ai/types").Tool<{
16
- pretty?: boolean | undefined;
17
16
  data?: unknown;
17
+ pretty?: boolean | undefined;
18
18
  indent?: number | undefined;
19
19
  }, {
20
20
  result: string;
@@ -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":"AAgCA,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;AAgHD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;EA8CnB,CAAC"}
@@ -0,0 +1,145 @@
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
25
+ .boolean()
26
+ .optional()
27
+ .describe('Only allow SELECT queries (default: true for safety)'),
28
+ });
29
+ function isReadOnlyQuery(query) {
30
+ const normalized = query.trim().toUpperCase();
31
+ const allowedPrefixes = ['SELECT', 'WITH', 'SHOW', 'DESCRIBE', 'EXPLAIN'];
32
+ return allowedPrefixes.some((prefix) => normalized.startsWith(prefix));
33
+ }
34
+ async function queryPostgres(connectionString, query, params, maxRows) {
35
+ let pg;
36
+ try {
37
+ pg = await import('pg');
38
+ }
39
+ catch {
40
+ throw new Error('pg package not installed. Run: pnpm add pg');
41
+ }
42
+ const client = new pg.default.Client({ connectionString });
43
+ const start = Date.now();
44
+ try {
45
+ await client.connect();
46
+ const limitedQuery = query.includes('LIMIT')
47
+ ? query
48
+ : `${query.replace(/;?\s*$/, '')} LIMIT ${maxRows + 1}`;
49
+ const result = await client.query(limitedQuery, params);
50
+ const executionTime = Date.now() - start;
51
+ const truncated = result.rows.length > maxRows;
52
+ const rows = truncated ? result.rows.slice(0, maxRows) : result.rows;
53
+ return {
54
+ rows: rows,
55
+ rowCount: rows.length,
56
+ truncated,
57
+ database: 'postgres',
58
+ executionTime,
59
+ };
60
+ }
61
+ finally {
62
+ await client.end();
63
+ }
64
+ }
65
+ async function querySqlite(filePath, query, params, maxRows) {
66
+ let Database;
67
+ try {
68
+ const betterSqlite = await import('better-sqlite3');
69
+ Database = betterSqlite.default;
70
+ }
71
+ catch {
72
+ throw new Error('better-sqlite3 package not installed. Run: pnpm add better-sqlite3');
73
+ }
74
+ const db = new Database(filePath, { readonly: true });
75
+ const start = Date.now();
76
+ try {
77
+ const limitedQuery = query.includes('LIMIT')
78
+ ? query
79
+ : `${query.replace(/;?\s*$/, '')} LIMIT ${maxRows + 1}`;
80
+ const stmt = db.prepare(limitedQuery);
81
+ const rows = stmt.all(...params);
82
+ const executionTime = Date.now() - start;
83
+ const truncated = rows.length > maxRows;
84
+ const resultRows = truncated ? rows.slice(0, maxRows) : rows;
85
+ return {
86
+ rows: resultRows,
87
+ rowCount: resultRows.length,
88
+ truncated,
89
+ database: 'sqlite',
90
+ executionTime,
91
+ };
92
+ }
93
+ finally {
94
+ db.close();
95
+ }
96
+ }
97
+ function detectDatabase(connectionString) {
98
+ if (connectionString.startsWith('postgres://') ||
99
+ connectionString.startsWith('postgresql://')) {
100
+ return 'postgres';
101
+ }
102
+ if (connectionString.endsWith('.db') ||
103
+ connectionString.endsWith('.sqlite') ||
104
+ connectionString.endsWith('.sqlite3') ||
105
+ connectionString.includes('.db') ||
106
+ connectionString === ':memory:') {
107
+ return 'sqlite';
108
+ }
109
+ return 'postgres';
110
+ }
111
+ export const sqlQuery = tool({
112
+ name: 'sql_query',
113
+ description: 'Execute SQL queries against PostgreSQL or SQLite databases. Supports parameterized queries for safety. By default, only SELECT queries are allowed.',
114
+ parameters: sqlQueryParams,
115
+ category: 'database',
116
+ tags: ['sql', 'database', 'postgres', 'sqlite', 'query'],
117
+ execute: async ({ query, database, connectionString, params = [], maxRows = 100, readOnly = true, }) => {
118
+ const connStr = connectionString ?? process.env.DATABASE_URL;
119
+ if (!connStr) {
120
+ return {
121
+ error: 'No connection string provided. Set DATABASE_URL environment variable or pass connectionString parameter.',
122
+ };
123
+ }
124
+ if (readOnly && !isReadOnlyQuery(query)) {
125
+ return {
126
+ error: 'Only SELECT queries are allowed when readOnly=true. Set readOnly=false to allow mutations.',
127
+ };
128
+ }
129
+ const db = database ?? detectDatabase(connStr);
130
+ try {
131
+ switch (db) {
132
+ case 'postgres':
133
+ return await queryPostgres(connStr, query, params, maxRows);
134
+ case 'sqlite':
135
+ return await querySqlite(connStr, query, params, maxRows);
136
+ default:
137
+ return { error: `Unsupported database type: ${db}` };
138
+ }
139
+ }
140
+ catch (err) {
141
+ return { error: err.message, database: db };
142
+ }
143
+ },
144
+ });
145
+ //# sourceMappingURL=sql-query.js.map
@@ -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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"}