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,91 @@
1
+ import { ChromaClient } from 'chromadb';
2
+ /**
3
+ * ChromaDB Adapter
4
+ *
5
+ * NOTE: ChromaDB JS client requires a running ChromaDB server.
6
+ * Start one with: docker run -p 8000:8000 chromadb/chroma
7
+ *
8
+ * For serverless local storage, use Qdrant instead.
9
+ */
10
+ export class ChromaAdapter {
11
+ client;
12
+ collection;
13
+ collectionName = 'cursor-rag-knowledge-base';
14
+ serverUrl;
15
+ constructor(config) {
16
+ // ChromaDB requires a running server - default to localhost:8000
17
+ this.serverUrl = config.vectorStoreConfig?.chromaUrl || 'http://localhost:8000';
18
+ this.client = new ChromaClient({
19
+ path: this.serverUrl
20
+ });
21
+ }
22
+ async initialize() {
23
+ if (!this.collection) {
24
+ try {
25
+ this.collection = await this.client.getOrCreateCollection({
26
+ name: this.collectionName,
27
+ metadata: { 'hnsw:space': 'cosine' }
28
+ });
29
+ }
30
+ catch (error) {
31
+ const err = error;
32
+ if (err.message?.includes('Failed to parse URL') || err.message?.includes('ECONNREFUSED')) {
33
+ throw new Error(`ChromaDB server not running at ${this.serverUrl}. ` +
34
+ `Start it with: docker run -p 8000:8000 chromadb/chroma\n` +
35
+ `Or switch to Qdrant for serverless local storage: cursor-rag setup`);
36
+ }
37
+ throw error;
38
+ }
39
+ }
40
+ }
41
+ async add(docs) {
42
+ await this.initialize();
43
+ const ids = docs.map(d => d.id);
44
+ const embeddings = docs.map(d => d.embedding);
45
+ const documents = docs.map(d => d.content);
46
+ const metadatas = docs.map(d => d.metadata);
47
+ await this.collection.add({
48
+ ids,
49
+ embeddings,
50
+ documents,
51
+ metadatas
52
+ });
53
+ }
54
+ async search(embedding, options) {
55
+ await this.initialize();
56
+ const results = await this.collection.query({
57
+ queryEmbeddings: [embedding],
58
+ nResults: options.topK,
59
+ where: options.filter || undefined
60
+ });
61
+ // Transform Chroma results to our format
62
+ const searchResults = [];
63
+ if (results.ids && results.ids[0] && results.documents && results.documents[0]) {
64
+ const ids = results.ids[0];
65
+ const documents = results.documents[0];
66
+ const metadatas = results.metadatas?.[0] || [];
67
+ const distances = results.distances?.[0] || [];
68
+ for (let i = 0; i < ids.length; i++) {
69
+ // Convert distance to similarity score (1 - distance for cosine similarity)
70
+ const score = 1 - (distances[i] || 0);
71
+ searchResults.push({
72
+ id: ids[i],
73
+ content: documents[i],
74
+ metadata: metadatas[i] || {},
75
+ score
76
+ });
77
+ }
78
+ }
79
+ return searchResults;
80
+ }
81
+ async delete(ids) {
82
+ await this.initialize();
83
+ await this.collection.delete({ ids });
84
+ }
85
+ async count() {
86
+ await this.initialize();
87
+ const count = await this.collection.count();
88
+ return count;
89
+ }
90
+ }
91
+ //# sourceMappingURL=chroma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chroma.js","sourceRoot":"","sources":["../../../src/adapters/vector/chroma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAe;IACrB,UAAU,CAAM;IAChB,cAAc,GAAG,2BAA2B,CAAC;IAC7C,SAAS,CAAS;IAE1B,YAAY,MAAiB;QAC3B,iEAAiE;QACjE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,iBAAiB,EAAE,SAAS,IAAI,uBAAuB,CAAC;QAChF,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;oBACxD,IAAI,EAAE,IAAI,CAAC,cAAc;oBACzB,QAAQ,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE;iBACrC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,KAAc,CAAC;gBAC3B,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC1F,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,CAAC,SAAS,IAAI;wBACpD,0DAA0D;wBAC1D,oEAAoE,CACrE,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAsB;QAC9B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACxB,GAAG;YACH,UAAU;YACV,SAAS;YACT,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAmB,EAAE,OAAsB;QACtD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAC1C,eAAe,EAAE,CAAC,SAAS,CAAC;YAC5B,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;SACnC,CAAC,CAAC;QAEH,yCAAyC;QACzC,MAAM,aAAa,GAAmB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,4EAA4E;gBAC5E,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtC,aAAa,CAAC,IAAI,CAAC;oBACjB,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBACV,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;oBACrB,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC5B,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAa;QACxB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
2
+ import type { RAGConfig } from '../../types/index.js';
3
+ export { VectorStore, VectorDocument, SearchResult, SearchOptions };
4
+ export declare function createVectorStore(type: string, config: RAGConfig): VectorStore;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAe9E"}
@@ -0,0 +1,22 @@
1
+ import { ChromaAdapter } from './chroma.js';
2
+ import { QdrantAdapter } from './qdrant.js';
3
+ import { VectorizeAdapter } from './vectorize.js';
4
+ import { MemoryAdapter } from './memory.js';
5
+ import { RedisAdapter } from './redis.js';
6
+ export function createVectorStore(type, config) {
7
+ switch (type) {
8
+ case 'memory':
9
+ return new MemoryAdapter(config);
10
+ case 'chroma':
11
+ return new ChromaAdapter(config);
12
+ case 'qdrant':
13
+ return new QdrantAdapter(config);
14
+ case 'redis':
15
+ return new RedisAdapter(config);
16
+ case 'vectorize':
17
+ return new VectorizeAdapter(config);
18
+ default:
19
+ throw new Error(`Unknown vector store: ${type}`);
20
+ }
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK1C,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAiB;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,OAAO;YACV,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,WAAW;YACd,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtC;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
2
+ import type { RAGConfig } from '../../types/index.js';
3
+ /**
4
+ * Simple file-based vector store for local development and testing.
5
+ * No external dependencies required.
6
+ *
7
+ * Data is persisted to ~/.cursor-rag/memory-store.json
8
+ */
9
+ export declare class MemoryAdapter implements VectorStore {
10
+ private documents;
11
+ private storagePath;
12
+ private loaded;
13
+ constructor(_config: RAGConfig);
14
+ private load;
15
+ private save;
16
+ add(docs: VectorDocument[]): Promise<void>;
17
+ search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
18
+ delete(ids: string[]): Promise<void>;
19
+ count(): Promise<number>;
20
+ private cosineSimilarity;
21
+ }
22
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,SAAS;IAI9B,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,IAAI;IAaN,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA8B5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B,OAAO,CAAC,gBAAgB;CAoBzB"}
@@ -0,0 +1,105 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { CONFIG_DIR } from '../../services/config.js';
4
+ /**
5
+ * Simple file-based vector store for local development and testing.
6
+ * No external dependencies required.
7
+ *
8
+ * Data is persisted to ~/.cursor-rag/memory-store.json
9
+ */
10
+ export class MemoryAdapter {
11
+ documents = new Map();
12
+ storagePath;
13
+ loaded = false;
14
+ constructor(_config) {
15
+ this.storagePath = join(CONFIG_DIR, 'memory-store.json');
16
+ }
17
+ load() {
18
+ if (this.loaded)
19
+ return;
20
+ try {
21
+ if (existsSync(this.storagePath)) {
22
+ const data = JSON.parse(readFileSync(this.storagePath, 'utf-8'));
23
+ this.documents = new Map(Object.entries(data));
24
+ }
25
+ }
26
+ catch {
27
+ // Start fresh if file is corrupted
28
+ this.documents = new Map();
29
+ }
30
+ this.loaded = true;
31
+ }
32
+ save() {
33
+ try {
34
+ const dir = dirname(this.storagePath);
35
+ if (!existsSync(dir)) {
36
+ mkdirSync(dir, { recursive: true });
37
+ }
38
+ const data = Object.fromEntries(this.documents);
39
+ writeFileSync(this.storagePath, JSON.stringify(data, null, 2));
40
+ }
41
+ catch (error) {
42
+ console.error('Failed to save memory store:', error);
43
+ }
44
+ }
45
+ async add(docs) {
46
+ this.load();
47
+ for (const doc of docs) {
48
+ this.documents.set(doc.id, doc);
49
+ }
50
+ this.save();
51
+ }
52
+ async search(embedding, options) {
53
+ this.load();
54
+ const results = [];
55
+ for (const doc of this.documents.values()) {
56
+ // Apply source filter if provided
57
+ if (options.filter?.source) {
58
+ const filterSources = options.filter.source.$in || [options.filter.source];
59
+ if (!filterSources.includes(doc.metadata?.source)) {
60
+ continue;
61
+ }
62
+ }
63
+ const score = this.cosineSimilarity(embedding, doc.embedding);
64
+ results.push({ doc, score });
65
+ }
66
+ // Sort by score descending and take top K
67
+ results.sort((a, b) => b.score - a.score);
68
+ const topK = results.slice(0, options.topK || 10);
69
+ return topK.map(r => ({
70
+ id: r.doc.id,
71
+ content: r.doc.content,
72
+ metadata: r.doc.metadata,
73
+ score: r.score
74
+ }));
75
+ }
76
+ async delete(ids) {
77
+ this.load();
78
+ for (const id of ids) {
79
+ this.documents.delete(id);
80
+ }
81
+ this.save();
82
+ }
83
+ async count() {
84
+ this.load();
85
+ return this.documents.size;
86
+ }
87
+ cosineSimilarity(a, b) {
88
+ if (a.length !== b.length) {
89
+ throw new Error('Vectors must have the same length');
90
+ }
91
+ let dotProduct = 0;
92
+ let normA = 0;
93
+ let normB = 0;
94
+ for (let i = 0; i < a.length; i++) {
95
+ dotProduct += a[i] * b[i];
96
+ normA += a[i] * a[i];
97
+ normB += b[i] * b[i];
98
+ }
99
+ const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
100
+ if (magnitude === 0)
101
+ return 0;
102
+ return dotProduct / magnitude;
103
+ }
104
+ }
105
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/adapters/vector/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
2
+ import type { RAGConfig } from '../../types/index.js';
3
+ export declare class QdrantAdapter implements VectorStore {
4
+ private client;
5
+ private collectionName;
6
+ private config;
7
+ constructor(config: RAGConfig);
8
+ initialize(vectorSize?: number): Promise<void>;
9
+ add(docs: VectorDocument[]): Promise<void>;
10
+ search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
11
+ delete(ids: string[]): Promise<void>;
12
+ count(): Promise<number>;
13
+ }
14
+ //# sourceMappingURL=qdrant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/qdrant.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAWvB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC9C,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+C5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAK/B"}
@@ -0,0 +1,120 @@
1
+ import { QdrantClient } from '@qdrant/js-client-rest';
2
+ export class QdrantAdapter {
3
+ client;
4
+ collectionName = 'cursor-rag-knowledge-base';
5
+ config;
6
+ constructor(config) {
7
+ const url = config.apiKeys?.qdrant?.url || 'http://localhost:6333';
8
+ const apiKey = config.apiKeys?.qdrant?.apiKey;
9
+ this.config = config;
10
+ this.client = new QdrantClient({
11
+ url,
12
+ apiKey
13
+ });
14
+ }
15
+ async initialize(vectorSize) {
16
+ // Check if collection exists, create if not
17
+ const collections = await this.client.getCollections();
18
+ const exists = collections.collections.some(c => c.name === this.collectionName);
19
+ if (!exists) {
20
+ // Use provided vector size, or infer from embeddings config
21
+ // Default dimensions per embedding type
22
+ let dimensions = vectorSize;
23
+ if (!dimensions) {
24
+ const embeddingType = this.config.embeddings;
25
+ switch (embeddingType) {
26
+ case 'xenova':
27
+ dimensions = 384; // all-MiniLM-L6-v2
28
+ break;
29
+ case 'openai':
30
+ dimensions = 1536; // text-embedding-3-small
31
+ break;
32
+ case 'ollama':
33
+ dimensions = 768; // nomic-embed-text default
34
+ break;
35
+ default:
36
+ dimensions = 384; // fallback
37
+ }
38
+ }
39
+ await this.client.createCollection(this.collectionName, {
40
+ vectors: {
41
+ size: dimensions,
42
+ distance: 'Cosine'
43
+ }
44
+ });
45
+ }
46
+ }
47
+ async add(docs) {
48
+ // Infer vector size from first document if collection doesn't exist
49
+ const vectorSize = docs.length > 0 ? docs[0].embedding.length : undefined;
50
+ await this.initialize(vectorSize);
51
+ const points = docs.map(doc => ({
52
+ id: doc.id,
53
+ vector: doc.embedding,
54
+ payload: {
55
+ content: doc.content,
56
+ ...doc.metadata
57
+ }
58
+ }));
59
+ await this.client.upsert(this.collectionName, {
60
+ wait: true,
61
+ points
62
+ });
63
+ }
64
+ async search(embedding, options) {
65
+ // Infer vector size from query embedding if collection doesn't exist
66
+ await this.initialize(embedding.length);
67
+ // Convert filter format from generic { source: { $in: [...] } } to Qdrant format
68
+ let qdrantFilter = undefined;
69
+ if (options.filter) {
70
+ const filterEntries = Object.entries(options.filter);
71
+ if (filterEntries.length > 0) {
72
+ qdrantFilter = {
73
+ must: filterEntries.map(([key, value]) => {
74
+ // Handle $in operator for arrays
75
+ if (value && typeof value === 'object' && '$in' in value && Array.isArray(value.$in)) {
76
+ return {
77
+ key: key,
78
+ match: {
79
+ any: value.$in
80
+ }
81
+ };
82
+ }
83
+ // Handle direct value match
84
+ return {
85
+ key: key,
86
+ match: { value: value }
87
+ };
88
+ })
89
+ };
90
+ }
91
+ }
92
+ const response = await this.client.search(this.collectionName, {
93
+ vector: embedding,
94
+ limit: options.topK,
95
+ filter: qdrantFilter
96
+ });
97
+ return response.map(result => ({
98
+ id: result.id.toString(),
99
+ content: result.payload?.content || '',
100
+ metadata: {
101
+ ...(result.payload || {}),
102
+ content: undefined // Remove content from metadata since it's in the main field
103
+ },
104
+ score: result.score || 0
105
+ }));
106
+ }
107
+ async delete(ids) {
108
+ await this.initialize();
109
+ await this.client.delete(this.collectionName, {
110
+ wait: true,
111
+ points: ids
112
+ });
113
+ }
114
+ async count() {
115
+ await this.initialize();
116
+ const info = await this.client.getCollection(this.collectionName);
117
+ return info.points_count || 0;
118
+ }
119
+ }
120
+ //# sourceMappingURL=qdrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant.js","sourceRoot":"","sources":["../../../src/adapters/vector/qdrant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
2
+ import type { RAGConfig } from '../../types/index.js';
3
+ /**
4
+ * Redis Vector Search Adapter
5
+ *
6
+ * Requires Redis Stack (includes RediSearch module) running locally or remotely.
7
+ * Start locally with: docker run -p 6379:6379 redis/redis-stack-server
8
+ *
9
+ * Features:
10
+ * - Persistent storage
11
+ * - HNSW index for fast approximate nearest neighbor search
12
+ * - Hybrid filtering (metadata + vector)
13
+ */
14
+ export declare class RedisAdapter implements VectorStore {
15
+ private client;
16
+ private indexName;
17
+ private keyPrefix;
18
+ private vectorDim;
19
+ private isConnected;
20
+ private redisUrl;
21
+ constructor(config: RAGConfig);
22
+ initialize(): Promise<void>;
23
+ private createIndex;
24
+ private float32ToBuffer;
25
+ add(docs: VectorDocument[]): Promise<void>;
26
+ search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
27
+ delete(ids: string[]): Promise<void>;
28
+ count(): Promise<number>;
29
+ disconnect(): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,SAAS;IAUvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBnB,WAAW;IAiCzB,OAAO,CAAC,eAAe;IAIjB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoD5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAYxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAMlC"}
@@ -0,0 +1,164 @@
1
+ import { createClient, SchemaFieldTypes, VectorAlgorithms } from 'redis';
2
+ /**
3
+ * Redis Vector Search Adapter
4
+ *
5
+ * Requires Redis Stack (includes RediSearch module) running locally or remotely.
6
+ * Start locally with: docker run -p 6379:6379 redis/redis-stack-server
7
+ *
8
+ * Features:
9
+ * - Persistent storage
10
+ * - HNSW index for fast approximate nearest neighbor search
11
+ * - Hybrid filtering (metadata + vector)
12
+ */
13
+ export class RedisAdapter {
14
+ client;
15
+ indexName = 'cursor-rag-idx';
16
+ keyPrefix = 'cursor-rag:doc:';
17
+ vectorDim;
18
+ isConnected = false;
19
+ redisUrl;
20
+ constructor(config) {
21
+ this.redisUrl = config.apiKeys?.redis?.url || config.vectorStoreConfig?.redisUrl || 'redis://localhost:6379';
22
+ this.vectorDim = config.vectorStoreConfig?.vectorDim || 384; // Default for all-MiniLM-L6-v2
23
+ this.client = createClient({ url: this.redisUrl });
24
+ this.client.on('error', (err) => {
25
+ console.error('Redis Client Error:', err.message);
26
+ });
27
+ }
28
+ async initialize() {
29
+ if (!this.isConnected) {
30
+ try {
31
+ await this.client.connect();
32
+ this.isConnected = true;
33
+ }
34
+ catch (error) {
35
+ const err = error;
36
+ throw new Error(`Failed to connect to Redis at ${this.redisUrl}. ` +
37
+ `Ensure Redis Stack is running: docker run -p 6379:6379 redis/redis-stack-server\n` +
38
+ `Error: ${err.message}`);
39
+ }
40
+ }
41
+ // Create index if it doesn't exist
42
+ try {
43
+ await this.client.ft.info(this.indexName);
44
+ }
45
+ catch {
46
+ // Index doesn't exist, create it
47
+ await this.createIndex();
48
+ }
49
+ }
50
+ async createIndex() {
51
+ try {
52
+ await this.client.ft.create(this.indexName, {
53
+ content: {
54
+ type: SchemaFieldTypes.TEXT,
55
+ SORTABLE: true
56
+ },
57
+ source: {
58
+ type: SchemaFieldTypes.TAG
59
+ },
60
+ embedding: {
61
+ type: SchemaFieldTypes.VECTOR,
62
+ TYPE: 'FLOAT32',
63
+ ALGORITHM: VectorAlgorithms.HNSW,
64
+ DISTANCE_METRIC: 'COSINE',
65
+ DIM: this.vectorDim
66
+ }
67
+ }, {
68
+ ON: 'HASH',
69
+ PREFIX: this.keyPrefix
70
+ });
71
+ }
72
+ catch (error) {
73
+ const err = error;
74
+ if (!err.message?.includes('Index already exists')) {
75
+ throw error;
76
+ }
77
+ }
78
+ }
79
+ float32ToBuffer(arr) {
80
+ return Buffer.from(new Float32Array(arr).buffer);
81
+ }
82
+ async add(docs) {
83
+ await this.initialize();
84
+ for (const doc of docs) {
85
+ const key = `${this.keyPrefix}${doc.id}`;
86
+ const embeddingBuffer = this.float32ToBuffer(doc.embedding);
87
+ await this.client.hSet(key, {
88
+ id: doc.id,
89
+ content: doc.content,
90
+ source: doc.metadata?.source || 'unknown',
91
+ metadata: JSON.stringify(doc.metadata || {}),
92
+ embedding: embeddingBuffer
93
+ });
94
+ }
95
+ }
96
+ async search(embedding, options) {
97
+ await this.initialize();
98
+ const topK = options.topK || 10;
99
+ const embeddingBuffer = this.float32ToBuffer(embedding);
100
+ // Build query with optional filters
101
+ let filterQuery = '*';
102
+ if (options.filter?.source) {
103
+ const sources = Array.isArray(options.filter.source.$in)
104
+ ? options.filter.source.$in
105
+ : [options.filter.source];
106
+ filterQuery = `@source:{${sources.map((s) => s.replace(/[^a-zA-Z0-9]/g, '_')).join('|')}}`;
107
+ }
108
+ try {
109
+ const results = await this.client.ft.search(this.indexName, `(${filterQuery})=>[KNN ${topK} @embedding $query_vec AS score]`, {
110
+ PARAMS: {
111
+ query_vec: embeddingBuffer
112
+ },
113
+ SORTBY: 'score',
114
+ DIALECT: 2,
115
+ RETURN: ['content', 'source', 'metadata', 'score']
116
+ });
117
+ return results.documents.map((doc) => {
118
+ const value = doc.value;
119
+ let metadata = { source: value.source };
120
+ try {
121
+ metadata = JSON.parse(value.metadata || '{}');
122
+ }
123
+ catch {
124
+ // Keep default metadata
125
+ }
126
+ return {
127
+ id: doc.id.replace(this.keyPrefix, ''),
128
+ content: value.content || '',
129
+ metadata,
130
+ score: 1 - parseFloat(value.score || '0') // Convert distance to similarity
131
+ };
132
+ });
133
+ }
134
+ catch (error) {
135
+ const err = error;
136
+ console.error('Redis search error:', err.message);
137
+ return [];
138
+ }
139
+ }
140
+ async delete(ids) {
141
+ await this.initialize();
142
+ for (const id of ids) {
143
+ await this.client.del(`${this.keyPrefix}${id}`);
144
+ }
145
+ }
146
+ async count() {
147
+ await this.initialize();
148
+ try {
149
+ const info = await this.client.ft.info(this.indexName);
150
+ const numDocs = info.numDocs;
151
+ return typeof numDocs === 'number' ? numDocs : parseInt(String(numDocs), 10) || 0;
152
+ }
153
+ catch {
154
+ return 0;
155
+ }
156
+ }
157
+ async disconnect() {
158
+ if (this.isConnected) {
159
+ await this.client.quit();
160
+ this.isConnected = false;
161
+ }
162
+ }
163
+ }
164
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/adapters/vector/redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
2
+ import type { RAGConfig } from '../../types/index.js';
3
+ export declare class VectorizeAdapter implements VectorStore {
4
+ constructor(config: RAGConfig);
5
+ add(docs: VectorDocument[]): Promise<void>;
6
+ search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
7
+ delete(ids: string[]): Promise<void>;
8
+ count(): Promise<number>;
9
+ }
10
+ //# sourceMappingURL=vectorize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorize.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/vectorize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,gBAAiB,YAAW,WAAW;gBAKtC,MAAM,EAAE,SAAS;IAKvB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAG/B"}