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.
Files changed (144) hide show
  1. package/README.md +354 -0
  2. package/bin/cursor-rag.js +18 -0
  3. package/dist/adapters/embeddings/index.d.ts +5 -0
  4. package/dist/adapters/embeddings/index.d.ts.map +1 -0
  5. package/dist/adapters/embeddings/index.js +16 -0
  6. package/dist/adapters/embeddings/index.js.map +1 -0
  7. package/dist/adapters/embeddings/ollama.d.ts +11 -0
  8. package/dist/adapters/embeddings/ollama.d.ts.map +1 -0
  9. package/dist/adapters/embeddings/ollama.js +30 -0
  10. package/dist/adapters/embeddings/ollama.js.map +1 -0
  11. package/dist/adapters/embeddings/openai.d.ts +11 -0
  12. package/dist/adapters/embeddings/openai.d.ts.map +1 -0
  13. package/dist/adapters/embeddings/openai.js +28 -0
  14. package/dist/adapters/embeddings/openai.js.map +1 -0
  15. package/dist/adapters/embeddings/types.d.ts +6 -0
  16. package/dist/adapters/embeddings/types.d.ts.map +1 -0
  17. package/dist/adapters/embeddings/types.js +2 -0
  18. package/dist/adapters/embeddings/types.js.map +1 -0
  19. package/dist/adapters/embeddings/xenova.d.ts +11 -0
  20. package/dist/adapters/embeddings/xenova.d.ts.map +1 -0
  21. package/dist/adapters/embeddings/xenova.js +26 -0
  22. package/dist/adapters/embeddings/xenova.js.map +1 -0
  23. package/dist/adapters/vector/chroma.d.ts +23 -0
  24. package/dist/adapters/vector/chroma.d.ts.map +1 -0
  25. package/dist/adapters/vector/chroma.js +91 -0
  26. package/dist/adapters/vector/chroma.js.map +1 -0
  27. package/dist/adapters/vector/index.d.ts +5 -0
  28. package/dist/adapters/vector/index.d.ts.map +1 -0
  29. package/dist/adapters/vector/index.js +22 -0
  30. package/dist/adapters/vector/index.js.map +1 -0
  31. package/dist/adapters/vector/memory.d.ts +22 -0
  32. package/dist/adapters/vector/memory.d.ts.map +1 -0
  33. package/dist/adapters/vector/memory.js +105 -0
  34. package/dist/adapters/vector/memory.js.map +1 -0
  35. package/dist/adapters/vector/qdrant.d.ts +14 -0
  36. package/dist/adapters/vector/qdrant.d.ts.map +1 -0
  37. package/dist/adapters/vector/qdrant.js +120 -0
  38. package/dist/adapters/vector/qdrant.js.map +1 -0
  39. package/dist/adapters/vector/redis.d.ts +31 -0
  40. package/dist/adapters/vector/redis.d.ts.map +1 -0
  41. package/dist/adapters/vector/redis.js +164 -0
  42. package/dist/adapters/vector/redis.js.map +1 -0
  43. package/dist/adapters/vector/vectorize.d.ts +10 -0
  44. package/dist/adapters/vector/vectorize.d.ts.map +1 -0
  45. package/dist/adapters/vector/vectorize.js +22 -0
  46. package/dist/adapters/vector/vectorize.js.map +1 -0
  47. package/dist/cli/commands/dashboard.d.ts +3 -0
  48. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  49. package/dist/cli/commands/dashboard.js +23 -0
  50. package/dist/cli/commands/dashboard.js.map +1 -0
  51. package/dist/cli/commands/ingest.d.ts +3 -0
  52. package/dist/cli/commands/ingest.d.ts.map +1 -0
  53. package/dist/cli/commands/ingest.js +133 -0
  54. package/dist/cli/commands/ingest.js.map +1 -0
  55. package/dist/cli/commands/search.d.ts +3 -0
  56. package/dist/cli/commands/search.d.ts.map +1 -0
  57. package/dist/cli/commands/search.js +39 -0
  58. package/dist/cli/commands/search.js.map +1 -0
  59. package/dist/cli/commands/setup.d.ts +3 -0
  60. package/dist/cli/commands/setup.d.ts.map +1 -0
  61. package/dist/cli/commands/setup.js +311 -0
  62. package/dist/cli/commands/setup.js.map +1 -0
  63. package/dist/cli/commands/status.d.ts +3 -0
  64. package/dist/cli/commands/status.d.ts.map +1 -0
  65. package/dist/cli/commands/status.js +39 -0
  66. package/dist/cli/commands/status.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +34 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/dashboard/public/index.html +819 -0
  72. package/dist/dashboard/server.d.ts +10 -0
  73. package/dist/dashboard/server.d.ts.map +1 -0
  74. package/dist/dashboard/server.js +397 -0
  75. package/dist/dashboard/server.js.map +1 -0
  76. package/dist/integrations/index.d.ts +3 -0
  77. package/dist/integrations/index.d.ts.map +1 -0
  78. package/dist/integrations/index.js +3 -0
  79. package/dist/integrations/index.js.map +1 -0
  80. package/dist/integrations/mcp-gateway.d.ts +91 -0
  81. package/dist/integrations/mcp-gateway.d.ts.map +1 -0
  82. package/dist/integrations/mcp-gateway.js +128 -0
  83. package/dist/integrations/mcp-gateway.js.map +1 -0
  84. package/dist/integrations/openskills.d.ts +67 -0
  85. package/dist/integrations/openskills.d.ts.map +1 -0
  86. package/dist/integrations/openskills.js +223 -0
  87. package/dist/integrations/openskills.js.map +1 -0
  88. package/dist/proxy/index.d.ts +29 -0
  89. package/dist/proxy/index.d.ts.map +1 -0
  90. package/dist/proxy/index.js +124 -0
  91. package/dist/proxy/index.js.map +1 -0
  92. package/dist/server/index.d.ts +2 -0
  93. package/dist/server/index.d.ts.map +1 -0
  94. package/dist/server/index.js +43 -0
  95. package/dist/server/index.js.map +1 -0
  96. package/dist/server/tools/crawl.d.ts +15 -0
  97. package/dist/server/tools/crawl.d.ts.map +1 -0
  98. package/dist/server/tools/crawl.js +97 -0
  99. package/dist/server/tools/crawl.js.map +1 -0
  100. package/dist/server/tools/gateway.d.ts +27 -0
  101. package/dist/server/tools/gateway.d.ts.map +1 -0
  102. package/dist/server/tools/gateway.js +58 -0
  103. package/dist/server/tools/gateway.js.map +1 -0
  104. package/dist/server/tools/index.d.ts +10 -0
  105. package/dist/server/tools/index.d.ts.map +1 -0
  106. package/dist/server/tools/index.js +302 -0
  107. package/dist/server/tools/index.js.map +1 -0
  108. package/dist/server/tools/ingest.d.ts +15 -0
  109. package/dist/server/tools/ingest.d.ts.map +1 -0
  110. package/dist/server/tools/ingest.js +84 -0
  111. package/dist/server/tools/ingest.js.map +1 -0
  112. package/dist/server/tools/list-sources.d.ts +9 -0
  113. package/dist/server/tools/list-sources.d.ts.map +1 -0
  114. package/dist/server/tools/list-sources.js +63 -0
  115. package/dist/server/tools/list-sources.js.map +1 -0
  116. package/dist/server/tools/recursive-query.d.ts +16 -0
  117. package/dist/server/tools/recursive-query.d.ts.map +1 -0
  118. package/dist/server/tools/recursive-query.js +65 -0
  119. package/dist/server/tools/recursive-query.js.map +1 -0
  120. package/dist/server/tools/search.d.ts +15 -0
  121. package/dist/server/tools/search.d.ts.map +1 -0
  122. package/dist/server/tools/search.js +20 -0
  123. package/dist/server/tools/search.js.map +1 -0
  124. package/dist/server/tools/skills.d.ts +30 -0
  125. package/dist/server/tools/skills.d.ts.map +1 -0
  126. package/dist/server/tools/skills.js +85 -0
  127. package/dist/server/tools/skills.js.map +1 -0
  128. package/dist/services/chunker.d.ts +3 -0
  129. package/dist/services/chunker.d.ts.map +1 -0
  130. package/dist/services/chunker.js +75 -0
  131. package/dist/services/chunker.js.map +1 -0
  132. package/dist/services/config.d.ts +8 -0
  133. package/dist/services/config.d.ts.map +1 -0
  134. package/dist/services/config.js +66 -0
  135. package/dist/services/config.js.map +1 -0
  136. package/dist/services/query-decomposer.d.ts +44 -0
  137. package/dist/services/query-decomposer.d.ts.map +1 -0
  138. package/dist/services/query-decomposer.js +79 -0
  139. package/dist/services/query-decomposer.js.map +1 -0
  140. package/dist/types/index.d.ts +93 -0
  141. package/dist/types/index.d.ts.map +1 -0
  142. package/dist/types/index.js +2 -0
  143. package/dist/types/index.js.map +1 -0
  144. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/server/tools/ingest.ts"],"names":[],"mappings":"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"}
@@ -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":"AACA,OAAO,EAAE,sBAAsB,EAAc,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAiB;IAEjB,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAiB,EACjB,MAAwB;IAExB,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAElD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAiB;IAEjB,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjE,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC7C,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE;YACxC,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;YACxB,OAAO,EAAE,KAAK,CAAC,IAAI;YACnB,QAAQ,EAAE;gBACR,GAAG,GAAG,CAAC,QAAQ;gBACf,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,MAAM,CAAC,MAAM;aAC3B;SACF,CAAC,CAAC,CAAC;QAEJ,MAAM,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,cAAc,CAAC,MAAM;QAC/B,MAAM,EAAE,cAAc;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAiB,EACjB,MAAwC;IAExC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE;QAClD,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;QACtB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE;KACrC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS;YACnC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Chunk, ChunkOptions } from '../types/index.js';
2
+ export declare function chunkDocument(text: string, options?: ChunkOptions): Chunk[];
3
+ //# sourceMappingURL=chunker.d.ts.map
@@ -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"}