cursor-recursive-rag 0.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +354 -0
- package/bin/cursor-rag.js +18 -0
- package/dist/adapters/embeddings/index.d.ts +5 -0
- package/dist/adapters/embeddings/index.d.ts.map +1 -0
- package/dist/adapters/embeddings/index.js +16 -0
- package/dist/adapters/embeddings/index.js.map +1 -0
- package/dist/adapters/embeddings/ollama.d.ts +11 -0
- package/dist/adapters/embeddings/ollama.d.ts.map +1 -0
- package/dist/adapters/embeddings/ollama.js +30 -0
- package/dist/adapters/embeddings/ollama.js.map +1 -0
- package/dist/adapters/embeddings/openai.d.ts +11 -0
- package/dist/adapters/embeddings/openai.d.ts.map +1 -0
- package/dist/adapters/embeddings/openai.js +28 -0
- package/dist/adapters/embeddings/openai.js.map +1 -0
- package/dist/adapters/embeddings/types.d.ts +6 -0
- package/dist/adapters/embeddings/types.d.ts.map +1 -0
- package/dist/adapters/embeddings/types.js +2 -0
- package/dist/adapters/embeddings/types.js.map +1 -0
- package/dist/adapters/embeddings/xenova.d.ts +11 -0
- package/dist/adapters/embeddings/xenova.d.ts.map +1 -0
- package/dist/adapters/embeddings/xenova.js +26 -0
- package/dist/adapters/embeddings/xenova.js.map +1 -0
- package/dist/adapters/vector/chroma.d.ts +23 -0
- package/dist/adapters/vector/chroma.d.ts.map +1 -0
- package/dist/adapters/vector/chroma.js +91 -0
- package/dist/adapters/vector/chroma.js.map +1 -0
- package/dist/adapters/vector/index.d.ts +5 -0
- package/dist/adapters/vector/index.d.ts.map +1 -0
- package/dist/adapters/vector/index.js +22 -0
- package/dist/adapters/vector/index.js.map +1 -0
- package/dist/adapters/vector/memory.d.ts +22 -0
- package/dist/adapters/vector/memory.d.ts.map +1 -0
- package/dist/adapters/vector/memory.js +105 -0
- package/dist/adapters/vector/memory.js.map +1 -0
- package/dist/adapters/vector/qdrant.d.ts +14 -0
- package/dist/adapters/vector/qdrant.d.ts.map +1 -0
- package/dist/adapters/vector/qdrant.js +120 -0
- package/dist/adapters/vector/qdrant.js.map +1 -0
- package/dist/adapters/vector/redis.d.ts +31 -0
- package/dist/adapters/vector/redis.d.ts.map +1 -0
- package/dist/adapters/vector/redis.js +164 -0
- package/dist/adapters/vector/redis.js.map +1 -0
- package/dist/adapters/vector/vectorize.d.ts +10 -0
- package/dist/adapters/vector/vectorize.d.ts.map +1 -0
- package/dist/adapters/vector/vectorize.js +22 -0
- package/dist/adapters/vector/vectorize.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +3 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +23 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/ingest.d.ts +3 -0
- package/dist/cli/commands/ingest.d.ts.map +1 -0
- package/dist/cli/commands/ingest.js +133 -0
- package/dist/cli/commands/ingest.js.map +1 -0
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +39 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +3 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +311 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +39 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/public/index.html +819 -0
- package/dist/dashboard/server.d.ts +10 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +397 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/integrations/index.d.ts +3 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +3 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/mcp-gateway.d.ts +91 -0
- package/dist/integrations/mcp-gateway.d.ts.map +1 -0
- package/dist/integrations/mcp-gateway.js +128 -0
- package/dist/integrations/mcp-gateway.js.map +1 -0
- package/dist/integrations/openskills.d.ts +67 -0
- package/dist/integrations/openskills.d.ts.map +1 -0
- package/dist/integrations/openskills.js +223 -0
- package/dist/integrations/openskills.js.map +1 -0
- package/dist/proxy/index.d.ts +29 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +124 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +43 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/tools/crawl.d.ts +15 -0
- package/dist/server/tools/crawl.d.ts.map +1 -0
- package/dist/server/tools/crawl.js +97 -0
- package/dist/server/tools/crawl.js.map +1 -0
- package/dist/server/tools/gateway.d.ts +27 -0
- package/dist/server/tools/gateway.d.ts.map +1 -0
- package/dist/server/tools/gateway.js +58 -0
- package/dist/server/tools/gateway.js.map +1 -0
- package/dist/server/tools/index.d.ts +10 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +302 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/server/tools/ingest.d.ts +15 -0
- package/dist/server/tools/ingest.d.ts.map +1 -0
- package/dist/server/tools/ingest.js +84 -0
- package/dist/server/tools/ingest.js.map +1 -0
- package/dist/server/tools/list-sources.d.ts +9 -0
- package/dist/server/tools/list-sources.d.ts.map +1 -0
- package/dist/server/tools/list-sources.js +63 -0
- package/dist/server/tools/list-sources.js.map +1 -0
- package/dist/server/tools/recursive-query.d.ts +16 -0
- package/dist/server/tools/recursive-query.d.ts.map +1 -0
- package/dist/server/tools/recursive-query.js +65 -0
- package/dist/server/tools/recursive-query.js.map +1 -0
- package/dist/server/tools/search.d.ts +15 -0
- package/dist/server/tools/search.d.ts.map +1 -0
- package/dist/server/tools/search.js +20 -0
- package/dist/server/tools/search.js.map +1 -0
- package/dist/server/tools/skills.d.ts +30 -0
- package/dist/server/tools/skills.d.ts.map +1 -0
- package/dist/server/tools/skills.js +85 -0
- package/dist/server/tools/skills.js.map +1 -0
- package/dist/services/chunker.d.ts +3 -0
- package/dist/services/chunker.d.ts.map +1 -0
- package/dist/services/chunker.js +75 -0
- package/dist/services/chunker.js.map +1 -0
- package/dist/services/config.d.ts +8 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +66 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/query-decomposer.d.ts +44 -0
- package/dist/services/query-decomposer.d.ts.map +1 -0
- package/dist/services/query-decomposer.js +79 -0
- package/dist/services/query-decomposer.js.map +1 -0
- package/dist/types/index.d.ts +93 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { VectorStore } from '../../adapters/vector/index.js';
|
|
2
|
+
import type { Embedder } from '../../adapters/embeddings/index.js';
|
|
3
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
4
|
+
interface CrawlAndIngestArgs {
|
|
5
|
+
url: string;
|
|
6
|
+
maxPages?: number;
|
|
7
|
+
maxDepth?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function crawlAndIngestTool(args: CrawlAndIngestArgs, deps: {
|
|
10
|
+
vectorStore: VectorStore;
|
|
11
|
+
embedder: Embedder;
|
|
12
|
+
config: RAGConfig;
|
|
13
|
+
}): Promise<any>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=crawl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../../src/server/tools/crawl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAGtE,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxE,OAAO,CAAC,GAAG,CAAC,CAsGd"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import FirecrawlApp from '@mendable/firecrawl-js';
|
|
3
|
+
import { chunkDocument } from '../../services/chunker.js';
|
|
4
|
+
export async function crawlAndIngestTool(args, deps) {
|
|
5
|
+
const { url, maxPages = 100, maxDepth = 3 } = args;
|
|
6
|
+
const { vectorStore, embedder, config } = deps;
|
|
7
|
+
const firecrawlApiKey = config.apiKeys?.firecrawl;
|
|
8
|
+
if (!firecrawlApiKey) {
|
|
9
|
+
return {
|
|
10
|
+
content: [
|
|
11
|
+
{
|
|
12
|
+
type: 'text',
|
|
13
|
+
text: 'Firecrawl API key not configured. Run "cursor-rag setup" and provide a Firecrawl API key to enable web crawling.'
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
isError: true
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const app = new FirecrawlApp({ apiKey: firecrawlApiKey });
|
|
21
|
+
// Crawl the site
|
|
22
|
+
const result = await app.crawlUrl(url, {
|
|
23
|
+
limit: maxPages,
|
|
24
|
+
maxDepth,
|
|
25
|
+
scrapeOptions: {
|
|
26
|
+
formats: ['markdown'],
|
|
27
|
+
onlyMainContent: true
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// Check if crawl was successful
|
|
31
|
+
if (!result.success || !('data' in result) || !result.data || result.data.length === 0) {
|
|
32
|
+
const errorMsg = 'error' in result ? result.error : 'No pages were retrieved';
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: 'text',
|
|
37
|
+
text: `Crawl completed but no pages were retrieved from ${url}: ${errorMsg}`
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Process each page
|
|
43
|
+
let totalChunks = 0;
|
|
44
|
+
const documents = [];
|
|
45
|
+
for (const page of result.data) {
|
|
46
|
+
if (!page.markdown)
|
|
47
|
+
continue;
|
|
48
|
+
const chunks = chunkDocument(page.markdown, {
|
|
49
|
+
chunkSize: 512,
|
|
50
|
+
chunkOverlap: 50,
|
|
51
|
+
respectBoundaries: true
|
|
52
|
+
});
|
|
53
|
+
// Generate embeddings for chunks
|
|
54
|
+
const embeddings = await embedder.embedBatch(chunks.map(c => c.text));
|
|
55
|
+
// Create vector documents
|
|
56
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
57
|
+
documents.push({
|
|
58
|
+
id: randomUUID(),
|
|
59
|
+
embedding: embeddings[i],
|
|
60
|
+
content: chunks[i].text,
|
|
61
|
+
metadata: {
|
|
62
|
+
source: page.url || url,
|
|
63
|
+
title: page.metadata?.title || 'Untitled',
|
|
64
|
+
chunkIndex: chunks[i].index
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
totalChunks += chunks.length;
|
|
69
|
+
}
|
|
70
|
+
// Add all documents to vector store in batches
|
|
71
|
+
const batchSize = 100;
|
|
72
|
+
for (let i = 0; i < documents.length; i += batchSize) {
|
|
73
|
+
const batch = documents.slice(i, i + batchSize);
|
|
74
|
+
await vectorStore.add(batch);
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
content: [
|
|
78
|
+
{
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: `Successfully crawled and ingested ${result.data.length} pages from ${url}. Created ${totalChunks} chunks.`
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return {
|
|
87
|
+
content: [
|
|
88
|
+
{
|
|
89
|
+
type: 'text',
|
|
90
|
+
text: `Error crawling ${url}: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
isError: true
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=crawl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../../src/server/tools/crawl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
2
|
+
export declare function gatewaySearchToolsTool(config: RAGConfig, params: {
|
|
3
|
+
query: string;
|
|
4
|
+
backend?: string;
|
|
5
|
+
}): Promise<{
|
|
6
|
+
tools: Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
backend: string;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function gatewayCallToolTool(config: RAGConfig, params: {
|
|
13
|
+
toolName: string;
|
|
14
|
+
args: Record<string, any>;
|
|
15
|
+
maxRows?: number;
|
|
16
|
+
fields?: string[];
|
|
17
|
+
}): Promise<any>;
|
|
18
|
+
export declare function gatewayExecuteSkillTool(config: RAGConfig, params: {
|
|
19
|
+
name: string;
|
|
20
|
+
inputs?: Record<string, any>;
|
|
21
|
+
}): Promise<any>;
|
|
22
|
+
export declare function gatewayHealthTool(config: RAGConfig): Promise<{
|
|
23
|
+
status: string;
|
|
24
|
+
backends: number;
|
|
25
|
+
tools: number;
|
|
26
|
+
}>;
|
|
27
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../src/server/tools/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAiBnF;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GACA,OAAO,CAAC,GAAG,CAAC,CAgBd;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GACrD,OAAO,CAAC,GAAG,CAAC,CAQd;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB9D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createMCPGatewayClient } from '../../integrations/mcp-gateway.js';
|
|
2
|
+
export async function gatewaySearchToolsTool(config, params) {
|
|
3
|
+
const client = createMCPGatewayClient(config);
|
|
4
|
+
if (!client.isEnabled()) {
|
|
5
|
+
return { tools: [] };
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const result = await client.searchTools(params.query, {
|
|
9
|
+
backend: params.backend,
|
|
10
|
+
detailLevel: 'name_description'
|
|
11
|
+
});
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
console.error('Gateway search error:', error);
|
|
16
|
+
return { tools: [] };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function gatewayCallToolTool(config, params) {
|
|
20
|
+
const client = createMCPGatewayClient(config);
|
|
21
|
+
if (!client.isEnabled()) {
|
|
22
|
+
throw new Error('MCP Gateway integration is not enabled');
|
|
23
|
+
}
|
|
24
|
+
return client.callTool({
|
|
25
|
+
toolName: params.toolName,
|
|
26
|
+
args: params.args,
|
|
27
|
+
filter: {
|
|
28
|
+
maxRows: params.maxRows,
|
|
29
|
+
fields: params.fields,
|
|
30
|
+
format: 'summary'
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export async function gatewayExecuteSkillTool(config, params) {
|
|
35
|
+
const client = createMCPGatewayClient(config);
|
|
36
|
+
if (!client.isEnabled()) {
|
|
37
|
+
throw new Error('MCP Gateway integration is not enabled');
|
|
38
|
+
}
|
|
39
|
+
return client.executeSkill(params.name, params.inputs || {});
|
|
40
|
+
}
|
|
41
|
+
export async function gatewayHealthTool(config) {
|
|
42
|
+
const client = createMCPGatewayClient(config);
|
|
43
|
+
if (!client.isEnabled()) {
|
|
44
|
+
return { status: 'disabled', backends: 0, tools: 0 };
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const health = await client.getHealth();
|
|
48
|
+
return {
|
|
49
|
+
status: health.status,
|
|
50
|
+
backends: health.backends.connected,
|
|
51
|
+
tools: health.tools
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return { status: 'error', backends: 0, tools: 0 };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/server/tools/gateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAiB,EACjB,MAA2C;IAE3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE;YACpD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,kBAAkB;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiB,EACjB,MAKC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAiB,EACjB,MAAsD;IAEtD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAiB;IAEjB,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import type { VectorStore } from '../../adapters/vector/index.js';
|
|
3
|
+
import type { Embedder } from '../../adapters/embeddings/index.js';
|
|
4
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
5
|
+
export declare function registerTools(server: Server, dependencies: {
|
|
6
|
+
vectorStore: VectorStore;
|
|
7
|
+
embedder: Embedder;
|
|
8
|
+
config: RAGConfig;
|
|
9
|
+
}): void;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAStD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE;IACZ,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;CACnB,GACA,IAAI,CAqSN"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { recursiveQueryTool } from './recursive-query.js';
|
|
3
|
+
import { searchKnowledgeTool } from './search.js';
|
|
4
|
+
import { ingestDocumentTool } from './ingest.js';
|
|
5
|
+
import { crawlAndIngestTool } from './crawl.js';
|
|
6
|
+
import { listSourcesTool } from './list-sources.js';
|
|
7
|
+
import { gatewaySearchToolsTool, gatewayCallToolTool, gatewayExecuteSkillTool, gatewayHealthTool } from './gateway.js';
|
|
8
|
+
import { listOpenSkillsTool, readOpenSkillTool, ingestSkillsTool, searchSkillsTool } from './skills.js';
|
|
9
|
+
export function registerTools(server, dependencies) {
|
|
10
|
+
// List available tools
|
|
11
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
12
|
+
tools: [
|
|
13
|
+
{
|
|
14
|
+
name: 'recursive_query',
|
|
15
|
+
description: 'Perform recursive multi-hop retrieval across knowledge base. Decomposes complex queries into sub-questions, iteratively retrieves relevant chunks, and synthesizes a comprehensive answer.',
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
query: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'The question or query to answer'
|
|
22
|
+
},
|
|
23
|
+
maxIterations: {
|
|
24
|
+
type: 'number',
|
|
25
|
+
description: 'Maximum number of retrieval iterations (default: 5)',
|
|
26
|
+
default: 5
|
|
27
|
+
},
|
|
28
|
+
minConfidence: {
|
|
29
|
+
type: 'number',
|
|
30
|
+
description: 'Minimum confidence threshold to stop iterating (default: 0.7)',
|
|
31
|
+
default: 0.7
|
|
32
|
+
},
|
|
33
|
+
sources: {
|
|
34
|
+
type: 'array',
|
|
35
|
+
items: { type: 'string' },
|
|
36
|
+
description: 'Filter to specific document sources (optional)'
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
required: ['query']
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'search_knowledge',
|
|
44
|
+
description: 'Direct vector similarity search in the knowledge base. Use for simple queries that don\'t require recursive retrieval.',
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
query: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
description: 'Search query'
|
|
51
|
+
},
|
|
52
|
+
topK: {
|
|
53
|
+
type: 'number',
|
|
54
|
+
description: 'Number of results to return (default: 10)',
|
|
55
|
+
default: 10
|
|
56
|
+
},
|
|
57
|
+
sources: {
|
|
58
|
+
type: 'array',
|
|
59
|
+
items: { type: 'string' },
|
|
60
|
+
description: 'Filter to specific document sources (optional)'
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
required: ['query']
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'ingest_document',
|
|
68
|
+
description: 'Add a single document to the knowledge base. Accepts URL, file path, or raw text.',
|
|
69
|
+
inputSchema: {
|
|
70
|
+
type: 'object',
|
|
71
|
+
properties: {
|
|
72
|
+
source: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
description: 'URL, file path, or text content'
|
|
75
|
+
},
|
|
76
|
+
title: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
description: 'Optional title for the document'
|
|
79
|
+
},
|
|
80
|
+
metadata: {
|
|
81
|
+
type: 'object',
|
|
82
|
+
description: 'Optional metadata to attach to chunks'
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
required: ['source']
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'crawl_and_ingest',
|
|
90
|
+
description: 'Crawl a website using Firecrawl and add all pages to the knowledge base.',
|
|
91
|
+
inputSchema: {
|
|
92
|
+
type: 'object',
|
|
93
|
+
properties: {
|
|
94
|
+
url: {
|
|
95
|
+
type: 'string',
|
|
96
|
+
description: 'Starting URL to crawl'
|
|
97
|
+
},
|
|
98
|
+
maxPages: {
|
|
99
|
+
type: 'number',
|
|
100
|
+
description: 'Maximum number of pages to crawl (default: 100)',
|
|
101
|
+
default: 100
|
|
102
|
+
},
|
|
103
|
+
maxDepth: {
|
|
104
|
+
type: 'number',
|
|
105
|
+
description: 'Maximum crawl depth (default: 3)',
|
|
106
|
+
default: 3
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
required: ['url']
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'list_sources',
|
|
114
|
+
description: 'List all document sources indexed in the knowledge base.',
|
|
115
|
+
inputSchema: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
properties: {}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
// MCP Gateway integration tools (optional)
|
|
121
|
+
{
|
|
122
|
+
name: 'gateway_search_tools',
|
|
123
|
+
description: 'Search available tools in MCP Gateway. Requires mcpGateway integration to be enabled.',
|
|
124
|
+
inputSchema: {
|
|
125
|
+
type: 'object',
|
|
126
|
+
properties: {
|
|
127
|
+
query: {
|
|
128
|
+
type: 'string',
|
|
129
|
+
description: 'Search query for tools'
|
|
130
|
+
},
|
|
131
|
+
backend: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
description: 'Filter to specific backend (optional)'
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
required: ['query']
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'gateway_call_tool',
|
|
141
|
+
description: 'Call a tool through MCP Gateway with result filtering. Requires mcpGateway integration to be enabled.',
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: 'object',
|
|
144
|
+
properties: {
|
|
145
|
+
toolName: {
|
|
146
|
+
type: 'string',
|
|
147
|
+
description: 'Name of the gateway tool to call'
|
|
148
|
+
},
|
|
149
|
+
args: {
|
|
150
|
+
type: 'object',
|
|
151
|
+
description: 'Arguments to pass to the tool'
|
|
152
|
+
},
|
|
153
|
+
maxRows: {
|
|
154
|
+
type: 'number',
|
|
155
|
+
description: 'Limit result rows (optional)'
|
|
156
|
+
},
|
|
157
|
+
fields: {
|
|
158
|
+
type: 'array',
|
|
159
|
+
items: { type: 'string' },
|
|
160
|
+
description: 'Select specific fields (optional)'
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
required: ['toolName', 'args']
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'gateway_execute_skill',
|
|
168
|
+
description: 'Execute a skill from MCP Gateway. Requires mcpGateway integration to be enabled.',
|
|
169
|
+
inputSchema: {
|
|
170
|
+
type: 'object',
|
|
171
|
+
properties: {
|
|
172
|
+
name: {
|
|
173
|
+
type: 'string',
|
|
174
|
+
description: 'Name of the skill to execute'
|
|
175
|
+
},
|
|
176
|
+
inputs: {
|
|
177
|
+
type: 'object',
|
|
178
|
+
description: 'Inputs for the skill (optional)'
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
required: ['name']
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
name: 'gateway_health',
|
|
186
|
+
description: 'Check MCP Gateway health and status.',
|
|
187
|
+
inputSchema: {
|
|
188
|
+
type: 'object',
|
|
189
|
+
properties: {}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
// OpenSkills integration tools (optional)
|
|
193
|
+
{
|
|
194
|
+
name: 'list_openskills',
|
|
195
|
+
description: 'List all installed OpenSkills. Requires openSkills integration to be enabled.',
|
|
196
|
+
inputSchema: {
|
|
197
|
+
type: 'object',
|
|
198
|
+
properties: {}
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'read_openskill',
|
|
203
|
+
description: 'Read a specific OpenSkill by name. Requires openSkills integration to be enabled.',
|
|
204
|
+
inputSchema: {
|
|
205
|
+
type: 'object',
|
|
206
|
+
properties: {
|
|
207
|
+
name: {
|
|
208
|
+
type: 'string',
|
|
209
|
+
description: 'Name of the skill to read'
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
required: ['name']
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'ingest_openskills',
|
|
217
|
+
description: 'Ingest all installed OpenSkills into the RAG knowledge base for semantic search.',
|
|
218
|
+
inputSchema: {
|
|
219
|
+
type: 'object',
|
|
220
|
+
properties: {}
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'search_openskills',
|
|
225
|
+
description: 'Semantic search across ingested OpenSkills.',
|
|
226
|
+
inputSchema: {
|
|
227
|
+
type: 'object',
|
|
228
|
+
properties: {
|
|
229
|
+
query: {
|
|
230
|
+
type: 'string',
|
|
231
|
+
description: 'Search query'
|
|
232
|
+
},
|
|
233
|
+
topK: {
|
|
234
|
+
type: 'number',
|
|
235
|
+
description: 'Number of results (default: 5)',
|
|
236
|
+
default: 5
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
required: ['query']
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
]
|
|
243
|
+
}));
|
|
244
|
+
// Handle tool calls
|
|
245
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
246
|
+
const { name, arguments: args } = request.params;
|
|
247
|
+
try {
|
|
248
|
+
switch (name) {
|
|
249
|
+
case 'recursive_query':
|
|
250
|
+
return await recursiveQueryTool(args, dependencies);
|
|
251
|
+
case 'search_knowledge':
|
|
252
|
+
return await searchKnowledgeTool(args, dependencies);
|
|
253
|
+
case 'ingest_document':
|
|
254
|
+
return await ingestDocumentTool(args, dependencies);
|
|
255
|
+
case 'crawl_and_ingest':
|
|
256
|
+
return await crawlAndIngestTool(args, dependencies);
|
|
257
|
+
case 'list_sources':
|
|
258
|
+
return await listSourcesTool(args, dependencies);
|
|
259
|
+
// MCP Gateway tools
|
|
260
|
+
case 'gateway_search_tools':
|
|
261
|
+
const gatewaySearchResult = await gatewaySearchToolsTool(dependencies.config, args);
|
|
262
|
+
return { content: [{ type: 'text', text: JSON.stringify(gatewaySearchResult, null, 2) }] };
|
|
263
|
+
case 'gateway_call_tool':
|
|
264
|
+
const gatewayCallResult = await gatewayCallToolTool(dependencies.config, args);
|
|
265
|
+
return { content: [{ type: 'text', text: JSON.stringify(gatewayCallResult, null, 2) }] };
|
|
266
|
+
case 'gateway_execute_skill':
|
|
267
|
+
const gatewaySkillResult = await gatewayExecuteSkillTool(dependencies.config, args);
|
|
268
|
+
return { content: [{ type: 'text', text: JSON.stringify(gatewaySkillResult, null, 2) }] };
|
|
269
|
+
case 'gateway_health':
|
|
270
|
+
const healthResult = await gatewayHealthTool(dependencies.config);
|
|
271
|
+
return { content: [{ type: 'text', text: JSON.stringify(healthResult, null, 2) }] };
|
|
272
|
+
// OpenSkills tools
|
|
273
|
+
case 'list_openskills':
|
|
274
|
+
const skillsList = await listOpenSkillsTool(dependencies.config);
|
|
275
|
+
return { content: [{ type: 'text', text: JSON.stringify(skillsList, null, 2) }] };
|
|
276
|
+
case 'read_openskill':
|
|
277
|
+
const skillContent = await readOpenSkillTool(dependencies.config, args);
|
|
278
|
+
return { content: [{ type: 'text', text: JSON.stringify(skillContent, null, 2) }] };
|
|
279
|
+
case 'ingest_openskills':
|
|
280
|
+
const ingestResult = await ingestSkillsTool(dependencies.config);
|
|
281
|
+
return { content: [{ type: 'text', text: JSON.stringify(ingestResult, null, 2) }] };
|
|
282
|
+
case 'search_openskills':
|
|
283
|
+
const searchResult = await searchSkillsTool(dependencies.config, args);
|
|
284
|
+
return { content: [{ type: 'text', text: JSON.stringify(searchResult, null, 2) }] };
|
|
285
|
+
default:
|
|
286
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
return {
|
|
291
|
+
content: [
|
|
292
|
+
{
|
|
293
|
+
type: 'text',
|
|
294
|
+
text: `Error executing tool ${name}: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
295
|
+
}
|
|
296
|
+
],
|
|
297
|
+
isError: true
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { VectorStore } from '../../adapters/vector/index.js';
|
|
2
|
+
import type { Embedder } from '../../adapters/embeddings/index.js';
|
|
3
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
4
|
+
interface IngestDocumentArgs {
|
|
5
|
+
source: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
metadata?: Record<string, any>;
|
|
8
|
+
}
|
|
9
|
+
export declare function ingestDocumentTool(args: IngestDocumentArgs, deps: {
|
|
10
|
+
vectorStore: VectorStore;
|
|
11
|
+
embedder: Embedder;
|
|
12
|
+
config: RAGConfig;
|
|
13
|
+
}): Promise<any>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../src/server/tools/ingest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAGtE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxE,OAAO,CAAC,GAAG,CAAC,CAkFd"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { existsSync, readFileSync } from 'fs';
|
|
3
|
+
import { chunkDocument } from '../../services/chunker.js';
|
|
4
|
+
export async function ingestDocumentTool(args, deps) {
|
|
5
|
+
const { source, title, metadata = {} } = args;
|
|
6
|
+
const { vectorStore, embedder } = deps;
|
|
7
|
+
let content;
|
|
8
|
+
let docSource;
|
|
9
|
+
// Determine if source is URL, file path, or text
|
|
10
|
+
if (source.startsWith('http://') || source.startsWith('https://')) {
|
|
11
|
+
// Fetch URL content using fetch API
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(source);
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
16
|
+
}
|
|
17
|
+
content = await response.text();
|
|
18
|
+
docSource = title || source;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return {
|
|
22
|
+
content: [
|
|
23
|
+
{
|
|
24
|
+
type: 'text',
|
|
25
|
+
text: `Failed to fetch URL ${source}: ${error instanceof Error ? error.message : 'Unknown error'}. Use crawl_and_ingest for better web content extraction.`
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
isError: true
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (source.startsWith('/') || source.startsWith('./') || source.includes('\\') || existsSync(source)) {
|
|
33
|
+
// File path - read file
|
|
34
|
+
try {
|
|
35
|
+
content = readFileSync(source, 'utf-8');
|
|
36
|
+
docSource = title || source;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: 'text',
|
|
43
|
+
text: `Failed to read file ${source}: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
isError: true
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Assume it's text content
|
|
52
|
+
content = source;
|
|
53
|
+
docSource = title || 'manual-input';
|
|
54
|
+
}
|
|
55
|
+
// Chunk the document
|
|
56
|
+
const chunks = chunkDocument(content, {
|
|
57
|
+
chunkSize: 512,
|
|
58
|
+
chunkOverlap: 50,
|
|
59
|
+
respectBoundaries: true
|
|
60
|
+
});
|
|
61
|
+
// Generate embeddings and add to vector store
|
|
62
|
+
const embeddings = await embedder.embedBatch(chunks.map(c => c.text));
|
|
63
|
+
const documents = chunks.map((chunk, idx) => ({
|
|
64
|
+
id: randomUUID(),
|
|
65
|
+
embedding: embeddings[idx],
|
|
66
|
+
content: chunk.text,
|
|
67
|
+
metadata: {
|
|
68
|
+
...metadata,
|
|
69
|
+
source: docSource,
|
|
70
|
+
title: title || docSource,
|
|
71
|
+
chunkIndex: chunk.index
|
|
72
|
+
}
|
|
73
|
+
}));
|
|
74
|
+
await vectorStore.add(documents);
|
|
75
|
+
return {
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
type: 'text',
|
|
79
|
+
text: `Successfully ingested document "${title || docSource}". Created ${documents.length} chunks.`
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ingest.js.map
|