cursor-recursive-rag 0.2.0-alpha.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +179 -203
  2. package/dist/adapters/llm/anthropic.d.ts +27 -0
  3. package/dist/adapters/llm/anthropic.d.ts.map +1 -0
  4. package/dist/adapters/llm/anthropic.js +287 -0
  5. package/dist/adapters/llm/anthropic.js.map +1 -0
  6. package/dist/adapters/llm/base.d.ts +62 -0
  7. package/dist/adapters/llm/base.d.ts.map +1 -0
  8. package/dist/adapters/llm/base.js +140 -0
  9. package/dist/adapters/llm/base.js.map +1 -0
  10. package/dist/adapters/llm/deepseek.d.ts +24 -0
  11. package/dist/adapters/llm/deepseek.d.ts.map +1 -0
  12. package/dist/adapters/llm/deepseek.js +228 -0
  13. package/dist/adapters/llm/deepseek.js.map +1 -0
  14. package/dist/adapters/llm/groq.d.ts +25 -0
  15. package/dist/adapters/llm/groq.d.ts.map +1 -0
  16. package/dist/adapters/llm/groq.js +265 -0
  17. package/dist/adapters/llm/groq.js.map +1 -0
  18. package/dist/adapters/llm/index.d.ts +62 -0
  19. package/dist/adapters/llm/index.d.ts.map +1 -0
  20. package/dist/adapters/llm/index.js +380 -0
  21. package/dist/adapters/llm/index.js.map +1 -0
  22. package/dist/adapters/llm/ollama.d.ts +23 -0
  23. package/dist/adapters/llm/ollama.d.ts.map +1 -0
  24. package/dist/adapters/llm/ollama.js +261 -0
  25. package/dist/adapters/llm/ollama.js.map +1 -0
  26. package/dist/adapters/llm/openai.d.ts +22 -0
  27. package/dist/adapters/llm/openai.d.ts.map +1 -0
  28. package/dist/adapters/llm/openai.js +232 -0
  29. package/dist/adapters/llm/openai.js.map +1 -0
  30. package/dist/adapters/llm/openrouter.d.ts +27 -0
  31. package/dist/adapters/llm/openrouter.d.ts.map +1 -0
  32. package/dist/adapters/llm/openrouter.js +305 -0
  33. package/dist/adapters/llm/openrouter.js.map +1 -0
  34. package/dist/adapters/vector/index.d.ts.map +1 -1
  35. package/dist/adapters/vector/index.js +8 -0
  36. package/dist/adapters/vector/index.js.map +1 -1
  37. package/dist/adapters/vector/redis-native.d.ts +35 -0
  38. package/dist/adapters/vector/redis-native.d.ts.map +1 -0
  39. package/dist/adapters/vector/redis-native.js +170 -0
  40. package/dist/adapters/vector/redis-native.js.map +1 -0
  41. package/dist/cli/commands/chat.d.ts +4 -0
  42. package/dist/cli/commands/chat.d.ts.map +1 -0
  43. package/dist/cli/commands/chat.js +374 -0
  44. package/dist/cli/commands/chat.js.map +1 -0
  45. package/dist/cli/commands/maintenance.d.ts +4 -0
  46. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  47. package/dist/cli/commands/maintenance.js +237 -0
  48. package/dist/cli/commands/maintenance.js.map +1 -0
  49. package/dist/cli/commands/rules.d.ts +9 -0
  50. package/dist/cli/commands/rules.d.ts.map +1 -0
  51. package/dist/cli/commands/rules.js +639 -0
  52. package/dist/cli/commands/rules.js.map +1 -0
  53. package/dist/cli/commands/setup.js +5 -4
  54. package/dist/cli/commands/setup.js.map +1 -1
  55. package/dist/cli/index.js +6 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/config/memoryConfig.d.ts +427 -0
  58. package/dist/config/memoryConfig.d.ts.map +1 -0
  59. package/dist/config/memoryConfig.js +258 -0
  60. package/dist/config/memoryConfig.js.map +1 -0
  61. package/dist/config/rulesConfig.d.ts +486 -0
  62. package/dist/config/rulesConfig.d.ts.map +1 -0
  63. package/dist/config/rulesConfig.js +345 -0
  64. package/dist/config/rulesConfig.js.map +1 -0
  65. package/dist/dashboard/coreTools.d.ts +14 -0
  66. package/dist/dashboard/coreTools.d.ts.map +1 -0
  67. package/dist/dashboard/coreTools.js +413 -0
  68. package/dist/dashboard/coreTools.js.map +1 -0
  69. package/dist/dashboard/public/index.html +1982 -13
  70. package/dist/dashboard/server.d.ts +1 -8
  71. package/dist/dashboard/server.d.ts.map +1 -1
  72. package/dist/dashboard/server.js +846 -13
  73. package/dist/dashboard/server.js.map +1 -1
  74. package/dist/dashboard/toolRegistry.d.ts +192 -0
  75. package/dist/dashboard/toolRegistry.d.ts.map +1 -0
  76. package/dist/dashboard/toolRegistry.js +322 -0
  77. package/dist/dashboard/toolRegistry.js.map +1 -0
  78. package/dist/proxy/index.d.ts +1 -1
  79. package/dist/proxy/index.d.ts.map +1 -1
  80. package/dist/proxy/index.js +9 -6
  81. package/dist/proxy/index.js.map +1 -1
  82. package/dist/server/index.js +21 -0
  83. package/dist/server/index.js.map +1 -1
  84. package/dist/server/tools/crawl.d.ts.map +1 -1
  85. package/dist/server/tools/crawl.js +8 -0
  86. package/dist/server/tools/crawl.js.map +1 -1
  87. package/dist/server/tools/index.d.ts.map +1 -1
  88. package/dist/server/tools/index.js +19 -1
  89. package/dist/server/tools/index.js.map +1 -1
  90. package/dist/server/tools/ingest.d.ts.map +1 -1
  91. package/dist/server/tools/ingest.js +5 -0
  92. package/dist/server/tools/ingest.js.map +1 -1
  93. package/dist/server/tools/memory.d.ts +250 -0
  94. package/dist/server/tools/memory.d.ts.map +1 -0
  95. package/dist/server/tools/memory.js +472 -0
  96. package/dist/server/tools/memory.js.map +1 -0
  97. package/dist/server/tools/recursive-query.d.ts.map +1 -1
  98. package/dist/server/tools/recursive-query.js +6 -0
  99. package/dist/server/tools/recursive-query.js.map +1 -1
  100. package/dist/server/tools/search.d.ts.map +1 -1
  101. package/dist/server/tools/search.js +6 -0
  102. package/dist/server/tools/search.js.map +1 -1
  103. package/dist/services/activity-log.d.ts +10 -0
  104. package/dist/services/activity-log.d.ts.map +1 -0
  105. package/dist/services/activity-log.js +53 -0
  106. package/dist/services/activity-log.js.map +1 -0
  107. package/dist/services/categoryManager.d.ts +110 -0
  108. package/dist/services/categoryManager.d.ts.map +1 -0
  109. package/dist/services/categoryManager.js +549 -0
  110. package/dist/services/categoryManager.js.map +1 -0
  111. package/dist/services/contextEnvironment.d.ts +206 -0
  112. package/dist/services/contextEnvironment.d.ts.map +1 -0
  113. package/dist/services/contextEnvironment.js +481 -0
  114. package/dist/services/contextEnvironment.js.map +1 -0
  115. package/dist/services/conversationProcessor.d.ts +99 -0
  116. package/dist/services/conversationProcessor.d.ts.map +1 -0
  117. package/dist/services/conversationProcessor.js +311 -0
  118. package/dist/services/conversationProcessor.js.map +1 -0
  119. package/dist/services/cursorChatReader.d.ts +129 -0
  120. package/dist/services/cursorChatReader.d.ts.map +1 -0
  121. package/dist/services/cursorChatReader.js +419 -0
  122. package/dist/services/cursorChatReader.js.map +1 -0
  123. package/dist/services/decayCalculator.d.ts +85 -0
  124. package/dist/services/decayCalculator.d.ts.map +1 -0
  125. package/dist/services/decayCalculator.js +182 -0
  126. package/dist/services/decayCalculator.js.map +1 -0
  127. package/dist/services/enhancedVectorStore.d.ts +102 -0
  128. package/dist/services/enhancedVectorStore.d.ts.map +1 -0
  129. package/dist/services/enhancedVectorStore.js +245 -0
  130. package/dist/services/enhancedVectorStore.js.map +1 -0
  131. package/dist/services/hybridScorer.d.ts +120 -0
  132. package/dist/services/hybridScorer.d.ts.map +1 -0
  133. package/dist/services/hybridScorer.js +334 -0
  134. package/dist/services/hybridScorer.js.map +1 -0
  135. package/dist/services/knowledgeExtractor.d.ts +45 -0
  136. package/dist/services/knowledgeExtractor.d.ts.map +1 -0
  137. package/dist/services/knowledgeExtractor.js +436 -0
  138. package/dist/services/knowledgeExtractor.js.map +1 -0
  139. package/dist/services/knowledgeStorage.d.ts +102 -0
  140. package/dist/services/knowledgeStorage.d.ts.map +1 -0
  141. package/dist/services/knowledgeStorage.js +383 -0
  142. package/dist/services/knowledgeStorage.js.map +1 -0
  143. package/dist/services/maintenanceScheduler.d.ts +89 -0
  144. package/dist/services/maintenanceScheduler.d.ts.map +1 -0
  145. package/dist/services/maintenanceScheduler.js +479 -0
  146. package/dist/services/maintenanceScheduler.js.map +1 -0
  147. package/dist/services/memoryMetadataStore.d.ts +62 -0
  148. package/dist/services/memoryMetadataStore.d.ts.map +1 -0
  149. package/dist/services/memoryMetadataStore.js +570 -0
  150. package/dist/services/memoryMetadataStore.js.map +1 -0
  151. package/dist/services/recursiveRetrieval.d.ts +122 -0
  152. package/dist/services/recursiveRetrieval.d.ts.map +1 -0
  153. package/dist/services/recursiveRetrieval.js +443 -0
  154. package/dist/services/recursiveRetrieval.js.map +1 -0
  155. package/dist/services/relationshipGraph.d.ts +77 -0
  156. package/dist/services/relationshipGraph.d.ts.map +1 -0
  157. package/dist/services/relationshipGraph.js +411 -0
  158. package/dist/services/relationshipGraph.js.map +1 -0
  159. package/dist/services/rlmSafeguards.d.ts +273 -0
  160. package/dist/services/rlmSafeguards.d.ts.map +1 -0
  161. package/dist/services/rlmSafeguards.js +705 -0
  162. package/dist/services/rlmSafeguards.js.map +1 -0
  163. package/dist/services/rulesAnalyzer.d.ts +119 -0
  164. package/dist/services/rulesAnalyzer.d.ts.map +1 -0
  165. package/dist/services/rulesAnalyzer.js +768 -0
  166. package/dist/services/rulesAnalyzer.js.map +1 -0
  167. package/dist/services/rulesMerger.d.ts +75 -0
  168. package/dist/services/rulesMerger.d.ts.map +1 -0
  169. package/dist/services/rulesMerger.js +404 -0
  170. package/dist/services/rulesMerger.js.map +1 -0
  171. package/dist/services/rulesParser.d.ts +127 -0
  172. package/dist/services/rulesParser.d.ts.map +1 -0
  173. package/dist/services/rulesParser.js +594 -0
  174. package/dist/services/rulesParser.js.map +1 -0
  175. package/dist/services/smartChunker.d.ts +110 -0
  176. package/dist/services/smartChunker.d.ts.map +1 -0
  177. package/dist/services/smartChunker.js +520 -0
  178. package/dist/services/smartChunker.js.map +1 -0
  179. package/dist/types/categories.d.ts +105 -0
  180. package/dist/types/categories.d.ts.map +1 -0
  181. package/dist/types/categories.js +108 -0
  182. package/dist/types/categories.js.map +1 -0
  183. package/dist/types/extractedKnowledge.d.ts +233 -0
  184. package/dist/types/extractedKnowledge.d.ts.map +1 -0
  185. package/dist/types/extractedKnowledge.js +56 -0
  186. package/dist/types/extractedKnowledge.js.map +1 -0
  187. package/dist/types/index.d.ts +9 -2
  188. package/dist/types/index.d.ts.map +1 -1
  189. package/dist/types/index.js +12 -1
  190. package/dist/types/index.js.map +1 -1
  191. package/dist/types/llmProvider.d.ts +282 -0
  192. package/dist/types/llmProvider.d.ts.map +1 -0
  193. package/dist/types/llmProvider.js +48 -0
  194. package/dist/types/llmProvider.js.map +1 -0
  195. package/dist/types/memory.d.ts +227 -0
  196. package/dist/types/memory.d.ts.map +1 -0
  197. package/dist/types/memory.js +76 -0
  198. package/dist/types/memory.js.map +1 -0
  199. package/dist/types/relationships.d.ts +167 -0
  200. package/dist/types/relationships.d.ts.map +1 -0
  201. package/dist/types/relationships.js +106 -0
  202. package/dist/types/relationships.js.map +1 -0
  203. package/dist/types/rulesOptimizer.d.ts +345 -0
  204. package/dist/types/rulesOptimizer.d.ts.map +1 -0
  205. package/dist/types/rulesOptimizer.js +22 -0
  206. package/dist/types/rulesOptimizer.js.map +1 -0
  207. package/docs/cursor-recursive-rag-memory-spec.md +4569 -0
  208. package/docs/cursor-recursive-rag-tasks.md +1355 -0
  209. package/package.json +6 -3
  210. package/restart-rag.sh +16 -0
@@ -0,0 +1,311 @@
1
+ import { randomUUID } from 'crypto';
2
+ const DEFAULT_OPTIONS = {
3
+ includeCodeChunks: true,
4
+ minExchangeLength: 50,
5
+ maxChunkSize: 2000,
6
+ extractEntities: true,
7
+ };
8
+ /**
9
+ * Processes raw conversations into structured chunks for RAG storage
10
+ */
11
+ export class ConversationProcessor {
12
+ options;
13
+ constructor(options) {
14
+ this.options = { ...DEFAULT_OPTIONS, ...options };
15
+ }
16
+ /**
17
+ * Process a conversation into chunks for storage
18
+ */
19
+ processConversation(conversation) {
20
+ const chunks = [];
21
+ const allFilesReferenced = [];
22
+ const allLanguages = new Set();
23
+ let codeBlockCount = 0;
24
+ // 1. Group messages into exchanges (user question + assistant responses)
25
+ const exchanges = this.groupIntoExchanges(conversation.messages);
26
+ // 2. Create chunks for each exchange
27
+ for (let i = 0; i < exchanges.length; i++) {
28
+ const exchange = exchanges[i];
29
+ const exchangeChunk = this.createExchangeChunk(exchange, conversation, i);
30
+ if (exchangeChunk.content.length >= (this.options.minExchangeLength || 50)) {
31
+ chunks.push(exchangeChunk);
32
+ }
33
+ // Collect files referenced
34
+ for (const msg of [exchange.userMessage, ...exchange.assistantMessages]) {
35
+ allFilesReferenced.push(...msg.filesReferenced);
36
+ }
37
+ }
38
+ // 3. Create separate chunks for significant code blocks
39
+ if (this.options.includeCodeChunks) {
40
+ for (let msgIdx = 0; msgIdx < conversation.messages.length; msgIdx++) {
41
+ const message = conversation.messages[msgIdx];
42
+ for (const codeBlock of message.codeBlocks) {
43
+ codeBlockCount++;
44
+ allLanguages.add(codeBlock.language);
45
+ // Only create separate chunk for substantial code blocks
46
+ if (codeBlock.code.length > 100) {
47
+ const codeChunk = this.createCodeChunk(codeBlock, message, conversation, msgIdx);
48
+ chunks.push(codeChunk);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ // 4. Extract entities
54
+ const entities = this.options.extractEntities
55
+ ? this.extractEntities(conversation, allLanguages)
56
+ : [];
57
+ return {
58
+ conversationId: conversation.id,
59
+ chunks,
60
+ entities,
61
+ metadata: {
62
+ messageCount: conversation.messages.length,
63
+ exchangeCount: exchanges.length,
64
+ codeBlockCount,
65
+ filesReferenced: [...new Set(allFilesReferenced)],
66
+ languages: [...allLanguages],
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Group messages into user-assistant exchanges
72
+ */
73
+ groupIntoExchanges(messages) {
74
+ const exchanges = [];
75
+ let currentExchange = null;
76
+ for (const message of messages) {
77
+ if (message.type === 1) { // USER
78
+ // Save previous exchange if exists
79
+ if (currentExchange) {
80
+ exchanges.push(currentExchange);
81
+ }
82
+ // Start new exchange
83
+ currentExchange = {
84
+ userMessage: message,
85
+ assistantMessages: [],
86
+ timestamp: message.createdAt,
87
+ };
88
+ }
89
+ else if (message.type === 2 && currentExchange) { // ASSISTANT
90
+ currentExchange.assistantMessages.push(message);
91
+ }
92
+ }
93
+ // Don't forget the last exchange
94
+ if (currentExchange && currentExchange.assistantMessages.length > 0) {
95
+ exchanges.push(currentExchange);
96
+ }
97
+ return exchanges;
98
+ }
99
+ /**
100
+ * Create a chunk from a message exchange
101
+ */
102
+ createExchangeChunk(exchange, conversation, exchangeIndex) {
103
+ const content = this.formatExchange(exchange);
104
+ const importance = this.calculateExchangeImportance(exchange);
105
+ return {
106
+ id: `chat-${conversation.id.substring(0, 8)}-ex${exchangeIndex}-${randomUUID().substring(0, 8)}`,
107
+ content: this.truncateContent(content),
108
+ source: `cursor-chat:${conversation.id}`,
109
+ chunkType: 'solution',
110
+ importance,
111
+ metadata: {
112
+ type: 'exchange',
113
+ exchangeIndex,
114
+ hasCode: exchange.assistantMessages.some(m => m.codeBlocks.length > 0),
115
+ filesReferenced: [
116
+ ...exchange.userMessage.filesReferenced,
117
+ ...exchange.assistantMessages.flatMap(m => m.filesReferenced),
118
+ ],
119
+ isAgentic: exchange.assistantMessages.some(m => m.isAgentic),
120
+ timestamp: exchange.timestamp.toISOString(),
121
+ },
122
+ sourceConversationId: conversation.id,
123
+ };
124
+ }
125
+ /**
126
+ * Create a chunk from a code block
127
+ */
128
+ createCodeChunk(codeBlock, message, conversation, messageIndex) {
129
+ // Include context around the code
130
+ const content = this.formatCodeBlockWithContext(codeBlock, message);
131
+ const importance = this.calculateCodeImportance(codeBlock);
132
+ return {
133
+ id: `chat-${conversation.id.substring(0, 8)}-code-${randomUUID().substring(0, 8)}`,
134
+ content: this.truncateContent(content),
135
+ source: `cursor-chat:${conversation.id}`,
136
+ chunkType: 'code',
137
+ importance,
138
+ metadata: {
139
+ type: 'code',
140
+ language: codeBlock.language,
141
+ filename: codeBlock.filename,
142
+ messageIndex,
143
+ timestamp: message.createdAt.toISOString(),
144
+ },
145
+ sourceConversationId: conversation.id,
146
+ sourceMessageIndex: messageIndex,
147
+ };
148
+ }
149
+ /**
150
+ * Format an exchange as readable text
151
+ */
152
+ formatExchange(exchange) {
153
+ const parts = [];
154
+ // User question
155
+ if (exchange.userMessage.content.trim()) {
156
+ parts.push(`## User Question\n${exchange.userMessage.content.trim()}`);
157
+ }
158
+ // Assistant response(s)
159
+ const responses = exchange.assistantMessages
160
+ .map(m => m.content.trim())
161
+ .filter(c => c.length > 0)
162
+ .join('\n\n');
163
+ if (responses) {
164
+ parts.push(`## Assistant Response\n${responses}`);
165
+ }
166
+ // Include code blocks inline
167
+ const codeBlocks = exchange.assistantMessages.flatMap(m => m.codeBlocks);
168
+ if (codeBlocks.length > 0) {
169
+ const codeSection = codeBlocks
170
+ .map(cb => `\`\`\`${cb.language}${cb.filename ? ` (${cb.filename})` : ''}\n${cb.code}\n\`\`\``)
171
+ .join('\n\n');
172
+ parts.push(`## Code\n${codeSection}`);
173
+ }
174
+ // Files referenced
175
+ const files = [
176
+ ...exchange.userMessage.filesReferenced,
177
+ ...exchange.assistantMessages.flatMap(m => m.filesReferenced),
178
+ ];
179
+ if (files.length > 0) {
180
+ const uniqueFiles = [...new Set(files)];
181
+ parts.push(`## Files Referenced\n${uniqueFiles.join(', ')}`);
182
+ }
183
+ return parts.join('\n\n');
184
+ }
185
+ /**
186
+ * Format a code block with surrounding context
187
+ */
188
+ formatCodeBlockWithContext(codeBlock, message) {
189
+ const parts = [];
190
+ // Add filename as title if available
191
+ if (codeBlock.filename) {
192
+ parts.push(`# ${codeBlock.filename}`);
193
+ }
194
+ // Add language info
195
+ parts.push(`Language: ${codeBlock.language}`);
196
+ // Add the code
197
+ parts.push(`\`\`\`${codeBlock.language}\n${codeBlock.code}\n\`\`\``);
198
+ // Add context from the message (truncated)
199
+ if (message.content) {
200
+ const context = message.content.substring(0, 500);
201
+ parts.push(`Context: ${context}${message.content.length > 500 ? '...' : ''}`);
202
+ }
203
+ return parts.join('\n\n');
204
+ }
205
+ /**
206
+ * Calculate importance score for an exchange
207
+ */
208
+ calculateExchangeImportance(exchange) {
209
+ let importance = 0.5;
210
+ // Boost for code-containing responses
211
+ if (exchange.assistantMessages.some(m => m.codeBlocks.length > 0)) {
212
+ importance += 0.15;
213
+ }
214
+ // Boost for longer, detailed responses
215
+ const totalLength = exchange.assistantMessages.reduce((sum, m) => sum + m.content.length, 0);
216
+ if (totalLength > 2000)
217
+ importance += 0.1;
218
+ if (totalLength > 5000)
219
+ importance += 0.05;
220
+ // Boost for file modifications (agentic responses)
221
+ if (exchange.assistantMessages.some(m => m.isAgentic)) {
222
+ importance += 0.1;
223
+ }
224
+ // Boost for file references
225
+ const filesCount = exchange.assistantMessages.reduce((sum, m) => sum + m.filesReferenced.length, 0);
226
+ if (filesCount > 0)
227
+ importance += 0.05;
228
+ if (filesCount > 5)
229
+ importance += 0.05;
230
+ return Math.min(1.0, importance);
231
+ }
232
+ /**
233
+ * Calculate importance score for a code block
234
+ */
235
+ calculateCodeImportance(codeBlock) {
236
+ let importance = 0.6; // Code blocks start higher
237
+ // Boost for longer code
238
+ if (codeBlock.code.length > 200)
239
+ importance += 0.1;
240
+ if (codeBlock.code.length > 500)
241
+ importance += 0.1;
242
+ // Boost for code with filename (more specific)
243
+ if (codeBlock.filename)
244
+ importance += 0.1;
245
+ return Math.min(1.0, importance);
246
+ }
247
+ /**
248
+ * Extract entities from the conversation
249
+ */
250
+ extractEntities(conversation, languages) {
251
+ const entities = [];
252
+ const content = conversation.messages.map(m => m.content).join(' ').toLowerCase();
253
+ // Languages from code blocks
254
+ for (const lang of languages) {
255
+ entities.push({
256
+ type: 'language',
257
+ value: lang,
258
+ confidence: 1.0,
259
+ });
260
+ }
261
+ // Common frameworks/tools (simple pattern matching)
262
+ const patterns = [
263
+ { pattern: /\breact\b/i, type: 'framework', value: 'react' },
264
+ { pattern: /\bvue\b/i, type: 'framework', value: 'vue' },
265
+ { pattern: /\bangular\b/i, type: 'framework', value: 'angular' },
266
+ { pattern: /\bnext\.?js\b/i, type: 'framework', value: 'nextjs' },
267
+ { pattern: /\bnuxt\b/i, type: 'framework', value: 'nuxt' },
268
+ { pattern: /\blaravel\b/i, type: 'framework', value: 'laravel' },
269
+ { pattern: /\bdjango\b/i, type: 'framework', value: 'django' },
270
+ { pattern: /\bexpress\b/i, type: 'framework', value: 'express' },
271
+ { pattern: /\bpostgres(?:ql)?\b/i, type: 'tool', value: 'postgresql' },
272
+ { pattern: /\bmysql\b/i, type: 'tool', value: 'mysql' },
273
+ { pattern: /\bredis\b/i, type: 'tool', value: 'redis' },
274
+ { pattern: /\bdocker\b/i, type: 'tool', value: 'docker' },
275
+ { pattern: /\bkubernetes\b/i, type: 'tool', value: 'kubernetes' },
276
+ { pattern: /\baws\b/i, type: 'tool', value: 'aws' },
277
+ { pattern: /\bcloudflare\b/i, type: 'tool', value: 'cloudflare' },
278
+ { pattern: /\btailwind\b/i, type: 'framework', value: 'tailwindcss' },
279
+ ];
280
+ for (const { pattern, type, value } of patterns) {
281
+ if (pattern.test(content)) {
282
+ entities.push({ type, value, confidence: 0.8 });
283
+ }
284
+ }
285
+ // Deduplicate
286
+ const seen = new Set();
287
+ return entities.filter(e => {
288
+ const key = `${e.type}:${e.value}`;
289
+ if (seen.has(key))
290
+ return false;
291
+ seen.add(key);
292
+ return true;
293
+ });
294
+ }
295
+ /**
296
+ * Truncate content to max chunk size
297
+ */
298
+ truncateContent(content) {
299
+ const maxSize = this.options.maxChunkSize || 2000;
300
+ if (content.length <= maxSize)
301
+ return content;
302
+ return content.substring(0, maxSize - 3) + '...';
303
+ }
304
+ }
305
+ /**
306
+ * Create a conversation processor
307
+ */
308
+ export function createConversationProcessor(options) {
309
+ return new ConversationProcessor(options);
310
+ }
311
+ //# sourceMappingURL=conversationProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversationProcessor.js","sourceRoot":"","sources":["../../src/services/conversationProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Message types in Cursor chat
3
+ */
4
+ export declare enum MessageType {
5
+ USER = 1,
6
+ ASSISTANT = 2
7
+ }
8
+ /**
9
+ * Code block extracted from a message
10
+ */
11
+ export interface CodeBlock {
12
+ language: string;
13
+ code: string;
14
+ filename?: string;
15
+ }
16
+ /**
17
+ * A single message (bubble) in a conversation
18
+ */
19
+ export interface ChatMessage {
20
+ id: string;
21
+ type: MessageType;
22
+ content: string;
23
+ createdAt: Date;
24
+ codeBlocks: CodeBlock[];
25
+ filesReferenced: string[];
26
+ isAgentic: boolean;
27
+ toolResults: any[];
28
+ }
29
+ /**
30
+ * Summary of a conversation
31
+ */
32
+ export interface ConversationSummary {
33
+ id: string;
34
+ messageCount: number;
35
+ createdAt: Date | null;
36
+ updatedAt: Date | null;
37
+ hasCodeBlocks: boolean;
38
+ preview: string;
39
+ }
40
+ /**
41
+ * Full conversation with messages
42
+ */
43
+ export interface Conversation extends ConversationSummary {
44
+ messages: ChatMessage[];
45
+ }
46
+ /**
47
+ * Options for listing conversations
48
+ */
49
+ export interface ListConversationsOptions {
50
+ limit?: number;
51
+ since?: Date;
52
+ hasCode?: boolean;
53
+ includeMessages?: boolean;
54
+ }
55
+ /**
56
+ * Reads chat history directly from Cursor's SQLite database
57
+ *
58
+ * Cursor stores data in two tables:
59
+ * - ItemTable: General key-value storage
60
+ * - cursorDiskKV: Composer (chat) data including conversations and messages
61
+ *
62
+ * Conversation structure:
63
+ * - composerData:{uuid} - Contains conversation metadata and list of bubble IDs
64
+ * - bubbleId:{conversationId}:{bubbleId} - Contains individual message content
65
+ */
66
+ export declare class CursorChatReader {
67
+ private dbPath;
68
+ constructor(customPath?: string);
69
+ /**
70
+ * Get the default database path based on OS
71
+ */
72
+ private getDefaultDbPath;
73
+ /**
74
+ * Check if the database exists
75
+ */
76
+ isDatabaseAvailable(): boolean;
77
+ /**
78
+ * Get the database path
79
+ */
80
+ getDatabasePath(): string;
81
+ /**
82
+ * List all conversations with summaries
83
+ */
84
+ listConversations(options?: ListConversationsOptions): ConversationSummary[];
85
+ /**
86
+ * Get a full conversation with all messages
87
+ */
88
+ getConversation(conversationId: string): Conversation | null;
89
+ /**
90
+ * Search conversations by content
91
+ */
92
+ searchConversations(query: string, options?: {
93
+ maxResults?: number;
94
+ hasCode?: boolean;
95
+ }): Conversation[];
96
+ /**
97
+ * Get conversation count
98
+ */
99
+ getConversationCount(): number;
100
+ /**
101
+ * Get a single bubble (message) from the database
102
+ */
103
+ private getBubble;
104
+ /**
105
+ * Extract plain text from Cursor's rich text format (Lexical)
106
+ */
107
+ private extractTextFromRichText;
108
+ /**
109
+ * Recursively extract text from Lexical nodes
110
+ */
111
+ private extractTextFromNode;
112
+ /**
113
+ * Extract code blocks from a bubble
114
+ */
115
+ private extractCodeBlocks;
116
+ /**
117
+ * Extract files referenced in a bubble
118
+ */
119
+ private extractFilesReferenced;
120
+ /**
121
+ * Guess programming language from filename
122
+ */
123
+ private guessLanguageFromFilename;
124
+ }
125
+ /**
126
+ * Create a CursorChatReader instance
127
+ */
128
+ export declare function createCursorChatReader(customPath?: string): CursorChatReader;
129
+ //# sourceMappingURL=cursorChatReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursorChatReader.d.ts","sourceRoot":"","sources":["../../src/services/cursorChatReader.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,oBAAY,WAAW;IACrB,IAAI,IAAI;IACR,SAAS,IAAI;CACd;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,GAAG,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;gBAEX,UAAU,CAAC,EAAE,MAAM;IAI/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,iBAAiB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,mBAAmB,EAAE;IA2G5E;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAwE5D;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,YAAY,EAAE;IAyBxG;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAmB9B;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAqClC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAE5E"}