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 @@
|
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/server/tools/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAI9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ1D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAwB,EACxB,IAAyE;IAEzE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IAC9C,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEvC,IAAI,OAAe,CAAC;IACpB,IAAI,SAAiB,CAAC;IAEtB,iDAAiD;IACjD,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,oCAAoC;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,SAAS,GAAG,KAAK,IAAI,MAAM,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,2DAA2D;qBAC5J;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5G,wBAAwB;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxC,SAAS,GAAG,KAAK,IAAI,MAAM,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;qBACnG;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,OAAO,GAAG,MAAM,CAAC;QACjB,SAAS,GAAG,KAAK,IAAI,cAAc,CAAC;IACtC,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE;QACpC,SAAS,EAAE,GAAG;QACd,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;IAEH,8CAA8C;IAC9C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAqB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9D,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC;QAC1B,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,QAAQ,EAAE;YACR,GAAG,QAAQ;YACX,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,KAAK,IAAI,SAAS;YACzB,UAAU,EAAE,KAAK,CAAC,KAAK;SACxB;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEjC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,mCAAmC,KAAK,IAAI,SAAS,cAAc,SAAS,CAAC,MAAM,UAAU;aACpG;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
export declare function listSourcesTool(args: Record<string, any>, deps: {
|
|
5
|
+
vectorStore: VectorStore;
|
|
6
|
+
embedder: Embedder;
|
|
7
|
+
config: RAGConfig;
|
|
8
|
+
}): Promise<any>;
|
|
9
|
+
//# sourceMappingURL=list-sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sources.d.ts","sourceRoot":"","sources":["../../../src/server/tools/list-sources.ts"],"names":[],"mappings":"AAAA,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;AAEtD,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxE,OAAO,CAAC,GAAG,CAAC,CAoEd"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export async function listSourcesTool(args, deps) {
|
|
2
|
+
const { vectorStore, embedder } = deps;
|
|
3
|
+
try {
|
|
4
|
+
// Sample a representative query to get some results
|
|
5
|
+
// We'll use a generic query to retrieve chunks and extract unique sources
|
|
6
|
+
const sampleQuery = 'documentation guide tutorial';
|
|
7
|
+
const embedding = await embedder.embed(sampleQuery);
|
|
8
|
+
// Get a large sample to find sources (up to 1000 results)
|
|
9
|
+
const results = await vectorStore.search(embedding, { topK: 1000 });
|
|
10
|
+
// Extract unique sources from metadata
|
|
11
|
+
const sourceMap = new Map();
|
|
12
|
+
for (const result of results) {
|
|
13
|
+
const source = result.metadata?.source || result.metadata?.path || 'unknown';
|
|
14
|
+
if (!sourceMap.has(source)) {
|
|
15
|
+
sourceMap.set(source, {
|
|
16
|
+
chunks: 0,
|
|
17
|
+
title: result.metadata?.title
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const sourceInfo = sourceMap.get(source);
|
|
21
|
+
sourceInfo.chunks++;
|
|
22
|
+
}
|
|
23
|
+
const sources = Array.from(sourceMap.entries()).map(([source, info]) => ({
|
|
24
|
+
id: source,
|
|
25
|
+
name: info.title || source,
|
|
26
|
+
chunks: info.chunks,
|
|
27
|
+
url: source.startsWith('http') ? source : undefined
|
|
28
|
+
}));
|
|
29
|
+
if (sources.length === 0) {
|
|
30
|
+
return {
|
|
31
|
+
content: [
|
|
32
|
+
{
|
|
33
|
+
type: 'text',
|
|
34
|
+
text: 'No sources found in the knowledge base. Ingest documents using the ingest_document or crawl_and_ingest tools.'
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const sourceList = sources
|
|
40
|
+
.map(s => `- ${s.name} (${s.chunks} chunks)${s.url ? `\n ${s.url}` : ''}`)
|
|
41
|
+
.join('\n');
|
|
42
|
+
return {
|
|
43
|
+
content: [
|
|
44
|
+
{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: `Found ${sources.length} source(s) in the knowledge base:\n\n${sourceList}\n\nNote: This is a sample-based listing. The actual count may be higher.`
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return {
|
|
53
|
+
content: [
|
|
54
|
+
{
|
|
55
|
+
type: 'text',
|
|
56
|
+
text: `Error listing sources: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
isError: true
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=list-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sources.js","sourceRoot":"","sources":["../../../src/server/tools/list-sources.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAyB,EACzB,IAAyE;IAEzE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,oDAAoD;QACpD,0EAA0E;QAC1E,MAAM,WAAW,GAAG,8BAA8B,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEpD,0DAA0D;QAC1D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpE,uCAAuC;QACvC,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8C,CAAC;QAExE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC;YAC7E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;oBACpB,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK;iBAC9B,CAAC,CAAC;YACL,CAAC;YACD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YAC1C,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC,CAAC,CAAC;QAEJ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+GAA+G;qBACtH;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,OAAO;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aAC1E,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS,OAAO,CAAC,MAAM,wCAAwC,UAAU,2EAA2E;iBAC3J;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;iBAC3F;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
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 RecursiveQueryArgs {
|
|
5
|
+
query: string;
|
|
6
|
+
maxIterations?: number;
|
|
7
|
+
minConfidence?: number;
|
|
8
|
+
sources?: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function recursiveQueryTool(args: RecursiveQueryArgs, deps: {
|
|
11
|
+
vectorStore: VectorStore;
|
|
12
|
+
embedder: Embedder;
|
|
13
|
+
config: RAGConfig;
|
|
14
|
+
}): Promise<any>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=recursive-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recursive-query.d.ts","sourceRoot":"","sources":["../../../src/server/tools/recursive-query.ts"],"names":[],"mappings":"AAAA,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;AAGtD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;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,CA+Ed"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { decomposeQuery, generateFollowUps, assessConfidence } from '../../services/query-decomposer.js';
|
|
2
|
+
export async function recursiveQueryTool(args, deps) {
|
|
3
|
+
const { query, maxIterations = 5, minConfidence = 0.7, sources } = args;
|
|
4
|
+
const { vectorStore, embedder } = deps;
|
|
5
|
+
// Step 1: Decompose complex query into sub-questions
|
|
6
|
+
const subQuestions = decomposeQuery(query);
|
|
7
|
+
// Step 2: Initial retrieval for each sub-question
|
|
8
|
+
const context = [];
|
|
9
|
+
for (const subQ of subQuestions) {
|
|
10
|
+
const embedding = await embedder.embed(subQ);
|
|
11
|
+
const searchOptions = { topK: 10 };
|
|
12
|
+
if (sources && sources.length > 0) {
|
|
13
|
+
searchOptions.filter = { source: { $in: sources } };
|
|
14
|
+
}
|
|
15
|
+
const chunks = await vectorStore.search(embedding, searchOptions);
|
|
16
|
+
context.push({ question: subQ, chunks, iteration: 0 });
|
|
17
|
+
}
|
|
18
|
+
// Step 3: Iterative refinement
|
|
19
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
20
|
+
// Generate follow-up questions based on current context
|
|
21
|
+
const followUps = generateFollowUps(query, context, 3);
|
|
22
|
+
if (followUps.length === 0)
|
|
23
|
+
break;
|
|
24
|
+
// Retrieve for follow-ups
|
|
25
|
+
for (const followUp of followUps) {
|
|
26
|
+
const embedding = await embedder.embed(followUp.query);
|
|
27
|
+
const searchOptions = { topK: 5 };
|
|
28
|
+
if (sources && sources.length > 0) {
|
|
29
|
+
searchOptions.filter = { source: { $in: sources } };
|
|
30
|
+
}
|
|
31
|
+
const chunks = await vectorStore.search(embedding, searchOptions);
|
|
32
|
+
context.push({
|
|
33
|
+
question: followUp.query,
|
|
34
|
+
chunks,
|
|
35
|
+
iteration: i + 1
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Check if we have sufficient coverage
|
|
39
|
+
const confidence = assessConfidence(query, context);
|
|
40
|
+
if (confidence >= minConfidence)
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
// Step 4: Synthesize final answer
|
|
44
|
+
// For now, return all relevant chunks with scores
|
|
45
|
+
// In a full implementation, this would use an LLM to synthesize
|
|
46
|
+
const allChunks = context.flatMap(c => c.chunks);
|
|
47
|
+
const uniqueChunks = Array.from(new Map(allChunks.map(c => [c.id, c])).values());
|
|
48
|
+
// Sort by score descending
|
|
49
|
+
uniqueChunks.sort((a, b) => (b.score || 0) - (a.score || 0));
|
|
50
|
+
// Take top chunks for answer synthesis
|
|
51
|
+
const topChunks = uniqueChunks.slice(0, 20);
|
|
52
|
+
// Simple synthesis: combine top chunks
|
|
53
|
+
const answer = topChunks
|
|
54
|
+
.map((chunk, idx) => `[${idx + 1}] ${chunk.content}`)
|
|
55
|
+
.join('\n\n');
|
|
56
|
+
return {
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: 'text',
|
|
60
|
+
text: `## Answer\n\n${answer}\n\n## Sources\n\nFound ${uniqueChunks.length} relevant chunks from ${context.length} retrieval steps.`
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=recursive-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recursive-query.js","sourceRoot":"","sources":["../../../src/server/tools/recursive-query.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 SearchKnowledgeArgs {
|
|
5
|
+
query: string;
|
|
6
|
+
topK?: number;
|
|
7
|
+
sources?: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function searchKnowledgeTool(args: SearchKnowledgeArgs, deps: {
|
|
10
|
+
vectorStore: VectorStore;
|
|
11
|
+
embedder: Embedder;
|
|
12
|
+
config: RAGConfig;
|
|
13
|
+
}): Promise<any>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/server/tools/search.ts"],"names":[],"mappings":"AAAA,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;AAEtD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxE,OAAO,CAAC,GAAG,CAAC,CAyBd"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export async function searchKnowledgeTool(args, deps) {
|
|
2
|
+
const { query, topK = 10, sources } = args;
|
|
3
|
+
const { vectorStore, embedder } = deps;
|
|
4
|
+
const embedding = await embedder.embed(query);
|
|
5
|
+
const searchOptions = { topK };
|
|
6
|
+
if (sources && sources.length > 0) {
|
|
7
|
+
searchOptions.filter = { source: { $in: sources } };
|
|
8
|
+
}
|
|
9
|
+
const results = await vectorStore.search(embedding, searchOptions);
|
|
10
|
+
const formattedResults = results.map((result, idx) => `[${idx + 1}] Score: ${result.score.toFixed(4)}\nSource: ${result.metadata.source || 'unknown'}\n${result.content}`).join('\n\n---\n\n');
|
|
11
|
+
return {
|
|
12
|
+
content: [
|
|
13
|
+
{
|
|
14
|
+
type: 'text',
|
|
15
|
+
text: `Found ${results.length} results:\n\n${formattedResults}`
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/server/tools/search.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAyB,EACzB,IAAyE;IAEzE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3C,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEvC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAQ,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,aAAa,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,GAAW,EAAE,EAAE,CAChE,IAAI,GAAG,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,SAAS,KAAK,MAAM,CAAC,OAAO,EAAE,CACpH,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEtB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS,OAAO,CAAC,MAAM,gBAAgB,gBAAgB,EAAE;aAChE;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
2
|
+
import { type Skill } from '../../integrations/openskills.js';
|
|
3
|
+
export declare function listOpenSkillsTool(config: RAGConfig): Promise<{
|
|
4
|
+
skills: Array<{
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
location: string;
|
|
8
|
+
}>;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function readOpenSkillTool(config: RAGConfig, params: {
|
|
11
|
+
name: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
skill: Skill | null;
|
|
14
|
+
content: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function ingestSkillsTool(config: RAGConfig): Promise<{
|
|
17
|
+
ingested: number;
|
|
18
|
+
skills: string[];
|
|
19
|
+
}>;
|
|
20
|
+
export declare function searchSkillsTool(config: RAGConfig, params: {
|
|
21
|
+
query: string;
|
|
22
|
+
topK?: number;
|
|
23
|
+
}): Promise<{
|
|
24
|
+
results: Array<{
|
|
25
|
+
name: string;
|
|
26
|
+
content: string;
|
|
27
|
+
score: number;
|
|
28
|
+
}>;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/server/tools/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAA0B,KAAK,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAMtF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAerF;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACvB,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAenD;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAwCjD;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwB/E"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createOpenSkillsClient } from '../../integrations/openskills.js';
|
|
2
|
+
import { createVectorStore } from '../../adapters/vector/index.js';
|
|
3
|
+
import { createEmbedder } from '../../adapters/embeddings/index.js';
|
|
4
|
+
import { chunkDocument } from '../../services/chunker.js';
|
|
5
|
+
import { randomUUID } from 'crypto';
|
|
6
|
+
export async function listOpenSkillsTool(config) {
|
|
7
|
+
const client = createOpenSkillsClient(config);
|
|
8
|
+
if (!client.isEnabled()) {
|
|
9
|
+
return { skills: [] };
|
|
10
|
+
}
|
|
11
|
+
const skills = await client.listSkills();
|
|
12
|
+
return {
|
|
13
|
+
skills: skills.map(s => ({
|
|
14
|
+
name: s.name,
|
|
15
|
+
description: s.description,
|
|
16
|
+
location: s.location
|
|
17
|
+
}))
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export async function readOpenSkillTool(config, params) {
|
|
21
|
+
const client = createOpenSkillsClient(config);
|
|
22
|
+
if (!client.isEnabled()) {
|
|
23
|
+
throw new Error('OpenSkills integration is not enabled');
|
|
24
|
+
}
|
|
25
|
+
const skill = await client.readSkill(params.name);
|
|
26
|
+
if (!skill) {
|
|
27
|
+
return { skill: null, content: '' };
|
|
28
|
+
}
|
|
29
|
+
const content = client.getSkillContent(skill);
|
|
30
|
+
return { skill, content };
|
|
31
|
+
}
|
|
32
|
+
export async function ingestSkillsTool(config) {
|
|
33
|
+
const client = createOpenSkillsClient(config);
|
|
34
|
+
if (!client.isEnabled()) {
|
|
35
|
+
throw new Error('OpenSkills integration is not enabled');
|
|
36
|
+
}
|
|
37
|
+
const vectorStore = createVectorStore(config.vectorStore, config);
|
|
38
|
+
const embedder = await createEmbedder(config.embeddings, config);
|
|
39
|
+
const documents = client.skillsToDocuments();
|
|
40
|
+
const ingestedSkills = [];
|
|
41
|
+
for (const doc of documents) {
|
|
42
|
+
const chunks = chunkDocument(doc.content, {
|
|
43
|
+
chunkSize: 512,
|
|
44
|
+
chunkOverlap: 50
|
|
45
|
+
});
|
|
46
|
+
const embeddings = await embedder.embedBatch(chunks.map(c => c.text));
|
|
47
|
+
const vectorDocs = chunks.map((chunk, i) => ({
|
|
48
|
+
id: randomUUID(),
|
|
49
|
+
embedding: embeddings[i],
|
|
50
|
+
content: chunk.text,
|
|
51
|
+
metadata: {
|
|
52
|
+
...doc.metadata,
|
|
53
|
+
chunkIndex: i,
|
|
54
|
+
totalChunks: chunks.length
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
await vectorStore.add(vectorDocs);
|
|
58
|
+
ingestedSkills.push(doc.metadata.name);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
ingested: ingestedSkills.length,
|
|
62
|
+
skills: ingestedSkills
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export async function searchSkillsTool(config, params) {
|
|
66
|
+
const client = createOpenSkillsClient(config);
|
|
67
|
+
if (!client.isEnabled()) {
|
|
68
|
+
return { results: [] };
|
|
69
|
+
}
|
|
70
|
+
const vectorStore = createVectorStore(config.vectorStore, config);
|
|
71
|
+
const embedder = await createEmbedder(config.embeddings, config);
|
|
72
|
+
const embedding = await embedder.embed(params.query);
|
|
73
|
+
const results = await vectorStore.search(embedding, {
|
|
74
|
+
topK: params.topK || 5,
|
|
75
|
+
filter: { type: { $in: ['skill'] } }
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
results: results.map((r) => ({
|
|
79
|
+
name: r.metadata?.name || 'unknown',
|
|
80
|
+
content: r.content.substring(0, 500),
|
|
81
|
+
score: r.score
|
|
82
|
+
}))
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/server/tools/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/services/chunker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA0D7D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,KAAK,EAAE,CA+B/E"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { encoding_for_model } from 'tiktoken';
|
|
2
|
+
const tokenizer = encoding_for_model('gpt-3.5-turbo');
|
|
3
|
+
function tokenCount(text) {
|
|
4
|
+
return tokenizer.encode(text).length;
|
|
5
|
+
}
|
|
6
|
+
function splitBySemanticBoundaries(text) {
|
|
7
|
+
// Split by double newlines (paragraphs)
|
|
8
|
+
let sections = text.split(/\n\n+/);
|
|
9
|
+
// Further split long sections by headers (# ## ###)
|
|
10
|
+
const finalSections = [];
|
|
11
|
+
for (const section of sections) {
|
|
12
|
+
const headerMatches = section.match(/^(#{1,6}\s+.+)$/gm);
|
|
13
|
+
if (headerMatches && headerMatches.length > 1) {
|
|
14
|
+
// Split by headers
|
|
15
|
+
const parts = section.split(/(?=^#{1,6}\s+)/m);
|
|
16
|
+
finalSections.push(...parts.filter(p => p.trim().length > 0));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
finalSections.push(section);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return finalSections.filter(s => s.trim().length > 0);
|
|
23
|
+
}
|
|
24
|
+
function slidingWindowChunk(text, chunkSize, overlap) {
|
|
25
|
+
const chunks = [];
|
|
26
|
+
const words = text.split(/\s+/);
|
|
27
|
+
let currentChunk = [];
|
|
28
|
+
let currentTokens = 0;
|
|
29
|
+
for (const word of words) {
|
|
30
|
+
const wordTokens = tokenCount(word);
|
|
31
|
+
if (currentTokens + wordTokens > chunkSize && currentChunk.length > 0) {
|
|
32
|
+
// Save current chunk
|
|
33
|
+
chunks.push(currentChunk.join(' '));
|
|
34
|
+
// Start new chunk with overlap
|
|
35
|
+
const overlapSize = Math.floor(currentChunk.length * (overlap / 100));
|
|
36
|
+
currentChunk = currentChunk.slice(-overlapSize);
|
|
37
|
+
currentTokens = tokenCount(currentChunk.join(' '));
|
|
38
|
+
}
|
|
39
|
+
currentChunk.push(word);
|
|
40
|
+
currentTokens += wordTokens;
|
|
41
|
+
}
|
|
42
|
+
// Add final chunk
|
|
43
|
+
if (currentChunk.length > 0) {
|
|
44
|
+
chunks.push(currentChunk.join(' '));
|
|
45
|
+
}
|
|
46
|
+
return chunks;
|
|
47
|
+
}
|
|
48
|
+
export function chunkDocument(text, options = {}) {
|
|
49
|
+
const { chunkSize = 512, chunkOverlap = 50, respectBoundaries = true } = options;
|
|
50
|
+
if (respectBoundaries) {
|
|
51
|
+
// Split by semantic boundaries first
|
|
52
|
+
const sections = splitBySemanticBoundaries(text);
|
|
53
|
+
const chunks = [];
|
|
54
|
+
for (const section of sections) {
|
|
55
|
+
const tokens = tokenCount(section);
|
|
56
|
+
if (tokens <= chunkSize) {
|
|
57
|
+
chunks.push({ text: section, index: chunks.length });
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Sliding window with overlap
|
|
61
|
+
const windowChunks = slidingWindowChunk(section, chunkSize, chunkOverlap);
|
|
62
|
+
windowChunks.forEach((chunkText, i) => {
|
|
63
|
+
chunks.push({ text: chunkText, index: chunks.length });
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return chunks;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Simple sliding window without respecting boundaries
|
|
71
|
+
const windowChunks = slidingWindowChunk(text, chunkSize, chunkOverlap);
|
|
72
|
+
return windowChunks.map((text, index) => ({ text, index }));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=chunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../src/services/chunker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RAGConfig } from '../types/index.js';
|
|
2
|
+
export declare const CONFIG_DIR: string;
|
|
3
|
+
export declare const CONFIG_FILE: string;
|
|
4
|
+
export declare const CURSOR_MCP_PATH: string;
|
|
5
|
+
export declare function loadConfig(): RAGConfig;
|
|
6
|
+
export declare function writeConfig(config: RAGConfig): void;
|
|
7
|
+
export declare function registerWithCursor(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAKnD,eAAO,MAAM,UAAU,QAAiC,CAAC;AACzD,eAAO,MAAM,WAAW,QAAkC,CAAC;AAC3D,eAAO,MAAM,eAAe,QAAyC,CAAC;AAEtE,wBAAgB,UAAU,IAAI,SAAS,CAOtC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAMnD;AAyBD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BxD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, realpathSync } from 'fs';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
export const CONFIG_DIR = join(homedir(), '.cursor-rag');
|
|
8
|
+
export const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
9
|
+
export const CURSOR_MCP_PATH = join(homedir(), '.cursor', 'mcp.json');
|
|
10
|
+
export function loadConfig() {
|
|
11
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
12
|
+
throw new Error(`Config file not found: ${CONFIG_FILE}. Run 'cursor-rag setup' first.`);
|
|
13
|
+
}
|
|
14
|
+
const content = readFileSync(CONFIG_FILE, 'utf-8');
|
|
15
|
+
return JSON.parse(content);
|
|
16
|
+
}
|
|
17
|
+
export function writeConfig(config) {
|
|
18
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
19
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
22
|
+
}
|
|
23
|
+
function getServerPath() {
|
|
24
|
+
// First check environment variable
|
|
25
|
+
if (process.env.CURSOR_RAG_SERVER_PATH) {
|
|
26
|
+
return process.env.CURSOR_RAG_SERVER_PATH;
|
|
27
|
+
}
|
|
28
|
+
// Resolve the actual path from the current module location
|
|
29
|
+
// __dirname is services/, so server/index.js is at ../server/index.js
|
|
30
|
+
const localServerPath = join(__dirname, '../server/index.js');
|
|
31
|
+
if (existsSync(localServerPath)) {
|
|
32
|
+
// Use realpath to resolve symlinks (for npm link scenarios)
|
|
33
|
+
try {
|
|
34
|
+
return realpathSync(localServerPath);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return localServerPath;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Fallback to package name (for global npm installs)
|
|
41
|
+
return 'cursor-recursive-rag/dist/server/index.js';
|
|
42
|
+
}
|
|
43
|
+
export async function registerWithCursor() {
|
|
44
|
+
// Read existing mcp.json or create new
|
|
45
|
+
let mcpConfig = { mcpServers: {} };
|
|
46
|
+
if (existsSync(CURSOR_MCP_PATH)) {
|
|
47
|
+
const content = readFileSync(CURSOR_MCP_PATH, 'utf-8');
|
|
48
|
+
mcpConfig = JSON.parse(content);
|
|
49
|
+
}
|
|
50
|
+
// Ensure mcpServers exists
|
|
51
|
+
if (!mcpConfig.mcpServers) {
|
|
52
|
+
mcpConfig.mcpServers = {};
|
|
53
|
+
}
|
|
54
|
+
const serverPath = getServerPath();
|
|
55
|
+
// Add recursive-rag server
|
|
56
|
+
mcpConfig.mcpServers['recursive-rag'] = {
|
|
57
|
+
command: 'node',
|
|
58
|
+
args: [serverPath],
|
|
59
|
+
env: {
|
|
60
|
+
CURSOR_RAG_CONFIG: CONFIG_FILE
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Write back
|
|
64
|
+
writeFileSync(CURSOR_MCP_PATH, JSON.stringify(mcpConfig, null, 2));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query decomposition for recursive RAG
|
|
3
|
+
*
|
|
4
|
+
* This service breaks down complex queries into sub-questions
|
|
5
|
+
* and generates follow-up questions based on retrieved context.
|
|
6
|
+
*/
|
|
7
|
+
export interface SubQuestion {
|
|
8
|
+
question: string;
|
|
9
|
+
reasoning: string;
|
|
10
|
+
}
|
|
11
|
+
export interface FollowUpQuestion {
|
|
12
|
+
query: string;
|
|
13
|
+
reasoning: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Decompose a complex query into sub-questions
|
|
17
|
+
*
|
|
18
|
+
* For now, uses simple heuristics. In the future, this could use
|
|
19
|
+
* an LLM to intelligently decompose queries.
|
|
20
|
+
*/
|
|
21
|
+
export declare function decomposeQuery(query: string): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Generate follow-up questions based on retrieved context and original query
|
|
24
|
+
*
|
|
25
|
+
* This is a placeholder for a more sophisticated implementation that would:
|
|
26
|
+
* 1. Analyze gaps in the retrieved context
|
|
27
|
+
* 2. Identify entities or concepts that need more detail
|
|
28
|
+
* 3. Generate targeted follow-up queries
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateFollowUps(originalQuery: string, context: Array<{
|
|
31
|
+
question: string;
|
|
32
|
+
chunks: any[];
|
|
33
|
+
}>, maxFollowUps?: number): FollowUpQuestion[];
|
|
34
|
+
/**
|
|
35
|
+
* Assess confidence that we have sufficient information to answer the query
|
|
36
|
+
*
|
|
37
|
+
* Simple heuristic based on number of chunks and their relevance scores
|
|
38
|
+
*/
|
|
39
|
+
export declare function assessConfidence(query: string, context: Array<{
|
|
40
|
+
question: string;
|
|
41
|
+
chunks: any[];
|
|
42
|
+
iteration?: number;
|
|
43
|
+
}>): number;
|
|
44
|
+
//# sourceMappingURL=query-decomposer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-decomposer.d.ts","sourceRoot":"","sources":["../../src/services/query-decomposer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBtD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,EACnD,YAAY,GAAE,MAAU,GACvB,gBAAgB,EAAE,CA0BpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACtE,MAAM,CAcR"}
|