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,436 @@
1
+ import OpenAI from 'openai';
2
+ import { randomUUID } from 'crypto';
3
+ import { DEFAULT_EXTRACTION_CONFIG, createEmptyExtractedKnowledge, normalizeConfidence, filterByConfidence, } from '../types/extractedKnowledge.js';
4
+ import { EntityType } from '../types/memory.js';
5
+ /**
6
+ * OpenAI LLM implementation
7
+ */
8
+ class OpenAILLMService {
9
+ client;
10
+ model;
11
+ constructor(apiKey, model = 'gpt-4o-mini') {
12
+ this.client = new OpenAI({ apiKey });
13
+ this.model = model;
14
+ }
15
+ async complete(prompt) {
16
+ const response = await this.client.chat.completions.create({
17
+ model: this.model,
18
+ messages: [
19
+ {
20
+ role: 'system',
21
+ content: 'You are a knowledge extraction specialist. You analyze conversations and extract structured knowledge. Always respond with valid JSON.'
22
+ },
23
+ { role: 'user', content: prompt }
24
+ ],
25
+ temperature: 0.1,
26
+ response_format: { type: 'json_object' },
27
+ });
28
+ return response.choices[0]?.message?.content || '{}';
29
+ }
30
+ }
31
+ /**
32
+ * Heuristic-based fallback extractor (no LLM required)
33
+ */
34
+ class HeuristicExtractor {
35
+ extract(conversation) {
36
+ const knowledge = createEmptyExtractedKnowledge(conversation.id);
37
+ for (let i = 0; i < conversation.messages.length - 1; i++) {
38
+ const userMsg = conversation.messages[i];
39
+ const assistantMsg = conversation.messages[i + 1];
40
+ if (userMsg.type !== 1 || assistantMsg.type !== 2)
41
+ continue;
42
+ const userContent = userMsg.content.toLowerCase();
43
+ const assistantContent = assistantMsg.content;
44
+ if (this.isErrorQuestion(userContent)) {
45
+ const solution = this.extractSolution(userMsg, assistantMsg, i);
46
+ if (solution)
47
+ knowledge.solutions.push(solution);
48
+ }
49
+ if (this.isDecisionQuestion(userContent)) {
50
+ const decision = this.extractDecision(userMsg, assistantMsg, i);
51
+ if (decision)
52
+ knowledge.decisions.push(decision);
53
+ }
54
+ if (assistantMsg.codeBlocks.length > 0) {
55
+ const pattern = this.extractPattern(userMsg, assistantMsg, i);
56
+ if (pattern)
57
+ knowledge.patterns.push(pattern);
58
+ }
59
+ }
60
+ return knowledge;
61
+ }
62
+ isErrorQuestion(content) {
63
+ return /\b(error|exception|fail|crash|bug|issue|problem|fix|not working)\b/i.test(content);
64
+ }
65
+ isDecisionQuestion(content) {
66
+ return /\b(should i|which|best way|recommend|approach|decide|choice|option)\b/i.test(content);
67
+ }
68
+ extractSolution(userMsg, assistantMsg, index) {
69
+ if (!assistantMsg.content.trim())
70
+ return null;
71
+ const errorMatch = userMsg.content.match(/(?:error|exception):\s*(.+?)(?:\n|$)/i);
72
+ return {
73
+ id: `sol-${randomUUID().substring(0, 8)}`,
74
+ problem: userMsg.content.substring(0, 500),
75
+ errorMessage: errorMatch?.[1],
76
+ solution: assistantMsg.content.substring(0, 1000),
77
+ codeChanges: assistantMsg.codeBlocks.map(cb => ({
78
+ language: cb.language,
79
+ after: cb.code,
80
+ filename: cb.filename,
81
+ })),
82
+ filesAffected: [...assistantMsg.filesReferenced],
83
+ tags: this.extractTags(userMsg.content + ' ' + assistantMsg.content),
84
+ confidence: 0.6,
85
+ sourceMessageIndices: [index, index + 1],
86
+ };
87
+ }
88
+ extractDecision(userMsg, assistantMsg, index) {
89
+ if (!assistantMsg.content.trim())
90
+ return null;
91
+ return {
92
+ id: `dec-${randomUUID().substring(0, 8)}`,
93
+ topic: userMsg.content.substring(0, 200),
94
+ decision: assistantMsg.content.substring(0, 500),
95
+ reasoning: this.extractReasoning(assistantMsg.content),
96
+ context: userMsg.content.substring(0, 300),
97
+ tags: this.extractTags(userMsg.content + ' ' + assistantMsg.content),
98
+ confidence: 0.5,
99
+ sourceMessageIndices: [index, index + 1],
100
+ };
101
+ }
102
+ extractPattern(userMsg, assistantMsg, index) {
103
+ const codeBlock = assistantMsg.codeBlocks[0];
104
+ if (!codeBlock || codeBlock.code.length < 50)
105
+ return null;
106
+ return {
107
+ id: `pat-${randomUUID().substring(0, 8)}`,
108
+ name: this.generatePatternName(userMsg.content),
109
+ description: userMsg.content.substring(0, 200),
110
+ useCase: userMsg.content.substring(0, 300),
111
+ implementation: codeBlock.code,
112
+ language: codeBlock.language,
113
+ relatedPatterns: [],
114
+ tags: this.extractTags(userMsg.content + ' ' + assistantMsg.content),
115
+ confidence: 0.5,
116
+ sourceMessageIndices: [index, index + 1],
117
+ };
118
+ }
119
+ extractReasoning(content) {
120
+ const reasoningPatterns = [
121
+ /because\s+(.+?)(?:\.|$)/i,
122
+ /the reason is\s+(.+?)(?:\.|$)/i,
123
+ /this is because\s+(.+?)(?:\.|$)/i,
124
+ ];
125
+ for (const pattern of reasoningPatterns) {
126
+ const match = content.match(pattern);
127
+ if (match)
128
+ return match[1].trim();
129
+ }
130
+ return content.substring(0, 200);
131
+ }
132
+ generatePatternName(question) {
133
+ const words = question.split(/\s+/)
134
+ .filter(w => w.length > 3 && !/^(how|what|can|the|this|that)$/i.test(w))
135
+ .slice(0, 3);
136
+ return words.length > 0
137
+ ? words.map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(' ') + ' Pattern'
138
+ : 'Code Pattern';
139
+ }
140
+ extractTags(content) {
141
+ const tags = [];
142
+ const patterns = {
143
+ typescript: /\btypescript\b/i,
144
+ javascript: /\bjavascript\b/i,
145
+ react: /\breact\b/i,
146
+ vue: /\bvue\b/i,
147
+ node: /\bnode\.?js\b/i,
148
+ python: /\bpython\b/i,
149
+ api: /\bapi\b/i,
150
+ database: /\b(database|sql|postgres|mysql|mongo)\b/i,
151
+ testing: /\b(test|jest|vitest|testing)\b/i,
152
+ auth: /\b(auth|authentication|login|session)\b/i,
153
+ };
154
+ for (const [tag, pattern] of Object.entries(patterns)) {
155
+ if (pattern.test(content))
156
+ tags.push(tag);
157
+ }
158
+ return tags;
159
+ }
160
+ }
161
+ /**
162
+ * Knowledge extractor that uses LLM to extract structured knowledge from conversations
163
+ */
164
+ export class KnowledgeExtractor {
165
+ llm = null;
166
+ config;
167
+ heuristic;
168
+ constructor(ragConfig, extractionConfig) {
169
+ this.config = { ...DEFAULT_EXTRACTION_CONFIG, ...extractionConfig };
170
+ this.heuristic = new HeuristicExtractor();
171
+ if (ragConfig.apiKeys?.openai) {
172
+ this.llm = new OpenAILLMService(ragConfig.apiKeys.openai);
173
+ }
174
+ }
175
+ /**
176
+ * Check if LLM extraction is available
177
+ */
178
+ isLLMAvailable() {
179
+ return this.llm !== null;
180
+ }
181
+ /**
182
+ * Extract knowledge from a conversation
183
+ */
184
+ async extract(conversation) {
185
+ if (!this.llm) {
186
+ return this.heuristic.extract(conversation);
187
+ }
188
+ try {
189
+ return await this.extractWithLLM(conversation);
190
+ }
191
+ catch (error) {
192
+ console.warn('LLM extraction failed, falling back to heuristics:', error);
193
+ return this.heuristic.extract(conversation);
194
+ }
195
+ }
196
+ /**
197
+ * Extract knowledge using LLM
198
+ */
199
+ async extractWithLLM(conversation) {
200
+ const prompt = this.buildExtractionPrompt(conversation);
201
+ const response = await this.llm.complete(prompt);
202
+ let parsed;
203
+ try {
204
+ parsed = JSON.parse(response);
205
+ }
206
+ catch {
207
+ console.warn('Failed to parse LLM response, falling back to heuristics');
208
+ return this.heuristic.extract(conversation);
209
+ }
210
+ return this.parseExtractionResponse(parsed, conversation);
211
+ }
212
+ /**
213
+ * Build the extraction prompt for the LLM
214
+ */
215
+ buildExtractionPrompt(conversation) {
216
+ const formattedConversation = this.formatConversation(conversation);
217
+ const enabledTypes = [];
218
+ if (this.config.extractSolutions)
219
+ enabledTypes.push('solutions');
220
+ if (this.config.extractPatterns)
221
+ enabledTypes.push('patterns');
222
+ if (this.config.extractDecisions)
223
+ enabledTypes.push('decisions');
224
+ if (this.config.extractStandards)
225
+ enabledTypes.push('standards');
226
+ if (this.config.extractPreferences)
227
+ enabledTypes.push('preferences');
228
+ return `Analyze this Cursor IDE conversation and extract structured knowledge.
229
+
230
+ ## Conversation
231
+ ${formattedConversation}
232
+
233
+ ## Instructions
234
+ Extract the following types of knowledge: ${enabledTypes.join(', ')}
235
+
236
+ For each item, provide a confidence score between 0 and 1.
237
+ Only include items with confidence >= ${this.config.minConfidence}.
238
+ Maximum ${this.config.maxItemsPerType} items per type.
239
+
240
+ ## Response Format (JSON)
241
+ {
242
+ "solutions": [{
243
+ "problem": "description of the problem",
244
+ "errorMessage": "specific error if any",
245
+ "solution": "how it was solved",
246
+ "codeChanges": [{"language": "ts", "before": "old code", "after": "new code", "explanation": "why"}],
247
+ "filesAffected": ["path/to/file.ts"],
248
+ "tags": ["typescript", "api"],
249
+ "confidence": 0.9
250
+ }],
251
+ "patterns": [{
252
+ "name": "Pattern Name",
253
+ "description": "what it does",
254
+ "useCase": "when to use it",
255
+ "implementation": "code example",
256
+ "language": "typescript",
257
+ "relatedPatterns": [],
258
+ "tags": ["react", "hooks"],
259
+ "confidence": 0.85
260
+ }],
261
+ "decisions": [{
262
+ "topic": "what was decided",
263
+ "decision": "the actual decision",
264
+ "reasoning": "why this was chosen",
265
+ "alternatives": ["other options"],
266
+ "tradeoffs": ["known tradeoffs"],
267
+ "context": "surrounding context",
268
+ "tags": ["architecture"],
269
+ "confidence": 0.8
270
+ }],
271
+ "standards": [{
272
+ "category": "naming",
273
+ "rule": "the standard",
274
+ "examples": ["good examples"],
275
+ "counterExamples": ["bad examples"],
276
+ "rationale": "why this standard",
277
+ "tags": ["code-style"],
278
+ "confidence": 0.75
279
+ }],
280
+ "preferences": [{
281
+ "aspect": "what aspect",
282
+ "preference": "preferred way",
283
+ "correction": "what was corrected",
284
+ "context": "when this applies",
285
+ "confidence": 0.7
286
+ }],
287
+ "entities": [{
288
+ "type": "framework",
289
+ "name": "React",
290
+ "description": "UI library",
291
+ "relationships": [{"targetEntity": "TypeScript", "relationshipType": "used_with", "strength": 0.9}]
292
+ }]
293
+ }
294
+
295
+ Return only valid JSON. Omit empty arrays.`;
296
+ }
297
+ /**
298
+ * Format conversation for LLM prompt
299
+ */
300
+ formatConversation(conversation) {
301
+ const parts = [];
302
+ for (let i = 0; i < Math.min(conversation.messages.length, 20); i++) {
303
+ const msg = conversation.messages[i];
304
+ const role = msg.type === 1 ? 'User' : 'Assistant';
305
+ const content = msg.content.substring(0, 2000);
306
+ parts.push(`[${role}]:\n${content}`);
307
+ if (msg.codeBlocks.length > 0) {
308
+ const codeBlocks = msg.codeBlocks.slice(0, 3)
309
+ .map(cb => `\`\`\`${cb.language}\n${cb.code.substring(0, 1000)}\n\`\`\``)
310
+ .join('\n');
311
+ parts.push(`[Code]:\n${codeBlocks}`);
312
+ }
313
+ }
314
+ return parts.join('\n\n');
315
+ }
316
+ /**
317
+ * Parse LLM response into ExtractedKnowledge
318
+ */
319
+ parseExtractionResponse(response, conversation) {
320
+ const knowledge = createEmptyExtractedKnowledge(conversation.id);
321
+ if (response.solutions && this.config.extractSolutions) {
322
+ knowledge.solutions = response.solutions
323
+ .slice(0, this.config.maxItemsPerType)
324
+ .map(s => ({
325
+ id: `sol-${randomUUID().substring(0, 8)}`,
326
+ problem: s.problem,
327
+ errorMessage: s.errorMessage,
328
+ solution: s.solution,
329
+ codeChanges: s.codeChanges || [],
330
+ filesAffected: s.filesAffected || [],
331
+ tags: s.tags || [],
332
+ confidence: normalizeConfidence(s.confidence),
333
+ sourceMessageIndices: [],
334
+ }));
335
+ knowledge.solutions = filterByConfidence(knowledge.solutions, this.config.minConfidence);
336
+ }
337
+ if (response.patterns && this.config.extractPatterns) {
338
+ knowledge.patterns = response.patterns
339
+ .slice(0, this.config.maxItemsPerType)
340
+ .map(p => ({
341
+ id: `pat-${randomUUID().substring(0, 8)}`,
342
+ name: p.name,
343
+ description: p.description,
344
+ useCase: p.useCase,
345
+ implementation: p.implementation,
346
+ language: p.language,
347
+ relatedPatterns: p.relatedPatterns || [],
348
+ tags: p.tags || [],
349
+ confidence: normalizeConfidence(p.confidence),
350
+ sourceMessageIndices: [],
351
+ }));
352
+ knowledge.patterns = filterByConfidence(knowledge.patterns, this.config.minConfidence);
353
+ }
354
+ if (response.decisions && this.config.extractDecisions) {
355
+ knowledge.decisions = response.decisions
356
+ .slice(0, this.config.maxItemsPerType)
357
+ .map(d => ({
358
+ id: `dec-${randomUUID().substring(0, 8)}`,
359
+ topic: d.topic,
360
+ decision: d.decision,
361
+ reasoning: d.reasoning,
362
+ alternatives: d.alternatives,
363
+ tradeoffs: d.tradeoffs,
364
+ context: d.context,
365
+ tags: d.tags || [],
366
+ confidence: normalizeConfidence(d.confidence),
367
+ sourceMessageIndices: [],
368
+ }));
369
+ knowledge.decisions = filterByConfidence(knowledge.decisions, this.config.minConfidence);
370
+ }
371
+ if (response.standards && this.config.extractStandards) {
372
+ knowledge.standards = response.standards
373
+ .slice(0, this.config.maxItemsPerType)
374
+ .map(s => ({
375
+ id: `std-${randomUUID().substring(0, 8)}`,
376
+ category: s.category,
377
+ rule: s.rule,
378
+ examples: s.examples || [],
379
+ counterExamples: s.counterExamples,
380
+ rationale: s.rationale,
381
+ tags: s.tags || [],
382
+ confidence: normalizeConfidence(s.confidence),
383
+ sourceMessageIndices: [],
384
+ }));
385
+ knowledge.standards = filterByConfidence(knowledge.standards, this.config.minConfidence);
386
+ }
387
+ if (response.preferences && this.config.extractPreferences) {
388
+ knowledge.preferences = response.preferences
389
+ .slice(0, this.config.maxItemsPerType)
390
+ .map(p => ({
391
+ id: `pref-${randomUUID().substring(0, 8)}`,
392
+ aspect: p.aspect,
393
+ preference: p.preference,
394
+ correction: p.correction,
395
+ context: p.context,
396
+ confidence: normalizeConfidence(p.confidence),
397
+ sourceMessageIndices: [],
398
+ }));
399
+ knowledge.preferences = filterByConfidence(knowledge.preferences, this.config.minConfidence);
400
+ }
401
+ if (response.entities) {
402
+ knowledge.entities = response.entities
403
+ .slice(0, 20)
404
+ .map(e => ({
405
+ type: this.parseEntityType(e.type),
406
+ name: e.name,
407
+ description: e.description,
408
+ relationships: e.relationships || [],
409
+ }));
410
+ }
411
+ return knowledge;
412
+ }
413
+ /**
414
+ * Parse entity type string to EntityType enum
415
+ */
416
+ parseEntityType(type) {
417
+ const typeMap = {
418
+ tool: EntityType.TOOL,
419
+ language: EntityType.LANGUAGE,
420
+ framework: EntityType.FRAMEWORK,
421
+ concept: EntityType.CONCEPT,
422
+ project: EntityType.PROJECT,
423
+ person: EntityType.PERSON,
424
+ file: EntityType.FILE,
425
+ component: EntityType.COMPONENT,
426
+ };
427
+ return typeMap[type.toLowerCase()] || EntityType.CONCEPT;
428
+ }
429
+ }
430
+ /**
431
+ * Create a knowledge extractor instance
432
+ */
433
+ export function createKnowledgeExtractor(config, extractionConfig) {
434
+ return new KnowledgeExtractor(config, extractionConfig);
435
+ }
436
+ //# sourceMappingURL=knowledgeExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledgeExtractor.js","sourceRoot":"","sources":["../../src/services/knowledgeExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { Embedder } from '../adapters/embeddings/index.js';
2
+ import type { ExtractedKnowledge } from '../types/extractedKnowledge.js';
3
+ import { EnhancedVectorStore } from './enhancedVectorStore.js';
4
+ /**
5
+ * Result of storing extracted knowledge
6
+ */
7
+ export interface KnowledgeStorageResult {
8
+ conversationId: string;
9
+ chunksCreated: number;
10
+ relationshipsCreated: number;
11
+ solutionChunks: string[];
12
+ patternChunks: string[];
13
+ decisionChunks: string[];
14
+ standardChunks: string[];
15
+ preferenceChunks: string[];
16
+ }
17
+ /**
18
+ * Options for knowledge storage
19
+ */
20
+ export interface KnowledgeStorageOptions {
21
+ createRelationships?: boolean;
22
+ minImportance?: number;
23
+ }
24
+ /**
25
+ * Stores extracted knowledge as searchable chunks with relationships
26
+ */
27
+ export declare class KnowledgeStorageService {
28
+ private vectorStore;
29
+ private embedder;
30
+ private metadataStore;
31
+ private options;
32
+ constructor(vectorStore: EnhancedVectorStore, embedder: Embedder, options?: KnowledgeStorageOptions);
33
+ /**
34
+ * Store all extracted knowledge from a conversation
35
+ */
36
+ store(knowledge: ExtractedKnowledge): Promise<KnowledgeStorageResult>;
37
+ /**
38
+ * Create a document from a solution
39
+ */
40
+ private createSolutionDocument;
41
+ /**
42
+ * Create a document from a pattern
43
+ */
44
+ private createPatternDocument;
45
+ /**
46
+ * Create a document from a decision
47
+ */
48
+ private createDecisionDocument;
49
+ /**
50
+ * Create a document from a standard
51
+ */
52
+ private createStandardDocument;
53
+ /**
54
+ * Create a document from a preference
55
+ */
56
+ private createPreferenceDocument;
57
+ /**
58
+ * Format solution as readable content
59
+ */
60
+ private formatSolutionContent;
61
+ /**
62
+ * Format pattern as readable content
63
+ */
64
+ private formatPatternContent;
65
+ /**
66
+ * Format decision as readable content
67
+ */
68
+ private formatDecisionContent;
69
+ /**
70
+ * Format standard as readable content
71
+ */
72
+ private formatStandardContent;
73
+ /**
74
+ * Format preference as readable content
75
+ */
76
+ private formatPreferenceContent;
77
+ /**
78
+ * Calculate importance score for a solution
79
+ */
80
+ private calculateSolutionImportance;
81
+ /**
82
+ * Calculate importance score for a pattern
83
+ */
84
+ private calculatePatternImportance;
85
+ /**
86
+ * Calculate importance score for a decision
87
+ */
88
+ private calculateDecisionImportance;
89
+ /**
90
+ * Calculate importance score for a standard
91
+ */
92
+ private calculateStandardImportance;
93
+ /**
94
+ * Create relationships between knowledge chunks
95
+ */
96
+ private createRelationships;
97
+ }
98
+ /**
99
+ * Create a knowledge storage service
100
+ */
101
+ export declare function createKnowledgeStorageService(vectorStore: EnhancedVectorStore, embedder: Embedder, options?: KnowledgeStorageOptions): KnowledgeStorageService;
102
+ //# sourceMappingURL=knowledgeStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledgeStorage.d.ts","sourceRoot":"","sources":["../../src/services/knowledgeStorage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EACV,kBAAkB,EAMnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,OAAO,CAA0B;gBAGvC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,uBAAuB;IAQnC;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAwD3E;;OAEG;YACW,sBAAsB;IA2BpC;;OAEG;YACW,qBAAqB;IA2BnC;;OAEG;YACW,sBAAsB;IA2BpC;;OAEG;YACW,sBAAsB;IA2BpC;;OAEG;YACW,wBAAwB;IAyBtC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqC7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAWnC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAUnC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAUnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA0C5B;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,uBAAuB,GAChC,uBAAuB,CAEzB"}