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,481 @@
1
+ /**
2
+ * Context Environment for RLM-style Recursive Retrieval
3
+ *
4
+ * Based on the Recursive Language Models paper (Zhang et al., 2024), this service
5
+ * treats retrieved context as environment variables that can be programmatically
6
+ * examined, filtered, and decomposed rather than stuffing all context into the prompt.
7
+ *
8
+ * Key capabilities:
9
+ * - Load context chunks as named variables
10
+ * - Peek at portions of context without loading full content
11
+ * - Filter chunks by regex patterns
12
+ * - Split context into batches for parallel processing
13
+ * - Execute sub-queries with cost tracking
14
+ * - Enforce budget and iteration limits
15
+ */
16
+ export const DEFAULT_ENVIRONMENT_CONFIG = {
17
+ maxIterations: 20,
18
+ maxSubCalls: 50,
19
+ costBudget: 1.0,
20
+ timeoutMs: 120000,
21
+ enableAsyncSubCalls: true,
22
+ concurrencyLimit: 5,
23
+ };
24
+ export class BudgetExceededError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = 'BudgetExceededError';
28
+ }
29
+ }
30
+ export class LimitExceededError extends Error {
31
+ constructor(message) {
32
+ super(message);
33
+ this.name = 'LimitExceededError';
34
+ }
35
+ }
36
+ export class TimeoutError extends Error {
37
+ constructor(message) {
38
+ super(message);
39
+ this.name = 'TimeoutError';
40
+ }
41
+ }
42
+ class CostTracker {
43
+ total = 0;
44
+ budget;
45
+ constructor(budget) {
46
+ this.budget = budget;
47
+ }
48
+ get remaining() {
49
+ return this.budget - this.total;
50
+ }
51
+ get exceeded() {
52
+ return this.total >= this.budget;
53
+ }
54
+ canAfford(amount) {
55
+ return this.total + amount <= this.budget;
56
+ }
57
+ record(amount) {
58
+ this.total += amount;
59
+ }
60
+ }
61
+ /**
62
+ * Context Environment for RLM-style retrieval
63
+ *
64
+ * Treats retrieved context as environment variables that can be
65
+ * programmatically examined, filtered, and decomposed.
66
+ */
67
+ export class ContextEnvironment {
68
+ variables = new Map();
69
+ executionLog = [];
70
+ costTracker;
71
+ config;
72
+ startTime;
73
+ constructor(config) {
74
+ this.config = {
75
+ ...DEFAULT_ENVIRONMENT_CONFIG,
76
+ ...config,
77
+ };
78
+ this.costTracker = new CostTracker(this.config.costBudget);
79
+ this.startTime = Date.now();
80
+ }
81
+ /**
82
+ * Load context chunks as environment variables
83
+ */
84
+ loadContext(chunks, variableName = 'context') {
85
+ const contextVar = {
86
+ name: variableName,
87
+ type: 'chunks',
88
+ value: chunks,
89
+ metadata: {
90
+ totalLength: chunks.reduce((sum, c) => sum + c.content.length, 0),
91
+ chunkCount: chunks.length,
92
+ chunkLengths: chunks.map(c => c.content.length),
93
+ },
94
+ };
95
+ this.variables.set(variableName, contextVar);
96
+ this.log({
97
+ type: 'load_context',
98
+ variableName,
99
+ metadata: contextVar.metadata,
100
+ });
101
+ }
102
+ /**
103
+ * Get environment state description for LLM
104
+ * Tells the model what's available without showing all content
105
+ */
106
+ getStateDescription() {
107
+ const vars = Array.from(this.variables.entries()).map(([name, v]) => {
108
+ if (v.type === 'chunks') {
109
+ const meta = v.metadata;
110
+ return `- \`${name}\`: ${meta.chunkCount} chunks, ${meta.totalLength} total chars`;
111
+ }
112
+ if (v.type === 'string') {
113
+ const strValue = v.value;
114
+ return `- \`${name}\`: string (${strValue.length} chars)`;
115
+ }
116
+ if (v.type === 'object') {
117
+ return `- \`${name}\`: object`;
118
+ }
119
+ return `- \`${name}\`: ${typeof v.value}`;
120
+ });
121
+ const iterations = this.executionLog.filter(s => s.type === 'iteration').length;
122
+ const subCalls = this.executionLog.filter(s => s.type === 'sub_call').length;
123
+ return `## Environment State
124
+ Variables:
125
+ ${vars.join('\n')}
126
+
127
+ Available operations:
128
+ - \`peek(varName, start?, end?)\` - View portion of a variable
129
+ - \`filter(varName, pattern)\` - Filter chunks by regex pattern
130
+ - \`chunk(varName, size)\` - Split into smaller batches
131
+ - \`subQuery(query, context)\` - Invoke sub-LLM on context
132
+ - \`store(varName, value)\` - Store intermediate result
133
+ - \`answer(value)\` - Return final answer from environment
134
+
135
+ Remaining budget: $${this.costTracker.remaining.toFixed(4)}
136
+ Iterations: ${iterations}/${this.config.maxIterations}
137
+ Sub-calls: ${subCalls}/${this.config.maxSubCalls}
138
+ `;
139
+ }
140
+ /**
141
+ * Get a summary of chunk contents without full content
142
+ */
143
+ getChunkSummary(variableName = 'context') {
144
+ const variable = this.variables.get(variableName);
145
+ if (!variable || variable.type !== 'chunks') {
146
+ return `Error: Variable '${variableName}' not found or not chunks`;
147
+ }
148
+ const chunks = variable.value;
149
+ const summaries = chunks.map((c, i) => {
150
+ const preview = c.content.substring(0, 100).replace(/\n/g, ' ');
151
+ const type = c.chunkType || 'unknown';
152
+ return `[${i}] (${type}, ${c.content.length} chars): ${preview}...`;
153
+ });
154
+ return summaries.join('\n');
155
+ }
156
+ /**
157
+ * Peek at portion of context (without loading full content into LLM)
158
+ */
159
+ peek(variableName, start, end) {
160
+ const variable = this.variables.get(variableName);
161
+ if (!variable) {
162
+ return `Error: Variable '${variableName}' not found`;
163
+ }
164
+ this.log({
165
+ type: 'peek',
166
+ variableName,
167
+ start,
168
+ end,
169
+ });
170
+ if (variable.type === 'chunks') {
171
+ const chunks = variable.value;
172
+ const selected = chunks.slice(start ?? 0, end ?? 3);
173
+ return selected.map((c, i) => {
174
+ const chunkIndex = (start ?? 0) + i;
175
+ const preview = c.content.substring(0, 500);
176
+ const truncated = c.content.length > 500 ? '...' : '';
177
+ return `[Chunk ${chunkIndex}] (${c.chunkType || 'unknown'}, ${c.content.length} chars):\n${preview}${truncated}`;
178
+ }).join('\n\n');
179
+ }
180
+ if (variable.type === 'string') {
181
+ const str = variable.value;
182
+ return str.substring(start ?? 0, end ?? 1000);
183
+ }
184
+ return JSON.stringify(variable.value, null, 2).substring(start ?? 0, end ?? 1000);
185
+ }
186
+ /**
187
+ * Filter chunks by regex pattern
188
+ */
189
+ filter(variableName, pattern) {
190
+ const variable = this.variables.get(variableName);
191
+ if (!variable || variable.type !== 'chunks') {
192
+ return [];
193
+ }
194
+ let regex;
195
+ try {
196
+ regex = new RegExp(pattern, 'i');
197
+ }
198
+ catch {
199
+ return [];
200
+ }
201
+ const chunks = variable.value;
202
+ const filtered = chunks.filter(c => regex.test(c.content));
203
+ this.log({
204
+ type: 'filter',
205
+ variableName,
206
+ pattern,
207
+ originalCount: chunks.length,
208
+ resultCount: filtered.length,
209
+ });
210
+ return filtered;
211
+ }
212
+ /**
213
+ * Filter and store results in a new variable
214
+ */
215
+ filterAndStore(sourceVariable, pattern, outputVariable) {
216
+ const filtered = this.filter(sourceVariable, pattern);
217
+ if (filtered.length > 0) {
218
+ this.loadContext(filtered, outputVariable);
219
+ }
220
+ return filtered.length;
221
+ }
222
+ /**
223
+ * Split variable into smaller batches for processing
224
+ */
225
+ chunk(variableName, batchSize) {
226
+ const variable = this.variables.get(variableName);
227
+ if (!variable || variable.type !== 'chunks') {
228
+ return [];
229
+ }
230
+ const chunks = variable.value;
231
+ const batches = [];
232
+ for (let i = 0; i < chunks.length; i += batchSize) {
233
+ batches.push(chunks.slice(i, i + batchSize));
234
+ }
235
+ this.log({
236
+ type: 'chunk',
237
+ variableName,
238
+ batchSize,
239
+ batchCount: batches.length,
240
+ });
241
+ return batches;
242
+ }
243
+ /**
244
+ * Execute a sub-LLM call on context
245
+ * Implements async sub-calls as recommended by RLM paper
246
+ */
247
+ async subQuery(llm, query, context, options) {
248
+ // Check timeout
249
+ if (Date.now() - this.startTime > this.config.timeoutMs) {
250
+ throw new TimeoutError('Environment timeout exceeded');
251
+ }
252
+ // Check budget before calling
253
+ const estimatedCost = options?.estimatedCost ?? 0.01;
254
+ if (!this.costTracker.canAfford(estimatedCost)) {
255
+ throw new BudgetExceededError('Cost budget exceeded');
256
+ }
257
+ const subCallCount = this.executionLog.filter(s => s.type === 'sub_call').length;
258
+ if (subCallCount >= this.config.maxSubCalls) {
259
+ throw new LimitExceededError('Maximum sub-calls exceeded');
260
+ }
261
+ const contextStr = Array.isArray(context)
262
+ ? context.map(c => c.content).join('\n\n---\n\n')
263
+ : context;
264
+ const startTime = Date.now();
265
+ const response = await llm.invoke(`${query}\n\nContext:\n${contextStr}`, {
266
+ maxTokens: options?.maxTokens ?? 2000,
267
+ temperature: options?.temperature ?? 0.3,
268
+ });
269
+ const cost = this.estimateCost(contextStr.length, response.length);
270
+ this.costTracker.record(cost);
271
+ this.log({
272
+ type: 'sub_call',
273
+ query: query.substring(0, 100),
274
+ contextLength: contextStr.length,
275
+ responseLength: response.length,
276
+ cost,
277
+ durationMs: Date.now() - startTime,
278
+ });
279
+ return response;
280
+ }
281
+ /**
282
+ * Batch sub-queries with async execution (RLM paper recommendation)
283
+ */
284
+ async batchSubQuery(llm, queries) {
285
+ if (!this.config.enableAsyncSubCalls) {
286
+ const results = [];
287
+ for (const q of queries) {
288
+ results.push(await this.subQuery(llm, q.query, q.context));
289
+ }
290
+ return results;
291
+ }
292
+ const concurrency = this.config.concurrencyLimit;
293
+ const results = new Array(queries.length);
294
+ for (let i = 0; i < queries.length; i += concurrency) {
295
+ const batch = queries.slice(i, i + concurrency);
296
+ const batchResults = await Promise.all(batch.map((q, j) => this.subQuery(llm, q.query, q.context)
297
+ .then(r => ({ index: i + j, result: r }))
298
+ .catch(err => ({ index: i + j, result: `Error: ${err.message}` }))));
299
+ for (const { index, result } of batchResults) {
300
+ results[index] = result;
301
+ }
302
+ }
303
+ return results;
304
+ }
305
+ /**
306
+ * Store intermediate result
307
+ */
308
+ store(variableName, value) {
309
+ let type = 'primitive';
310
+ if (typeof value === 'string') {
311
+ type = 'string';
312
+ }
313
+ else if (Array.isArray(value) && value.length > 0 && 'content' in value[0]) {
314
+ type = 'chunks';
315
+ }
316
+ else if (typeof value === 'object' && value !== null) {
317
+ type = 'object';
318
+ }
319
+ this.variables.set(variableName, {
320
+ name: variableName,
321
+ type,
322
+ value,
323
+ metadata: {},
324
+ });
325
+ this.log({
326
+ type: 'store',
327
+ variableName,
328
+ valueType: type,
329
+ });
330
+ }
331
+ /**
332
+ * Get a stored variable
333
+ */
334
+ get(variableName) {
335
+ const variable = this.variables.get(variableName);
336
+ return variable?.value;
337
+ }
338
+ /**
339
+ * Get chunks from a variable
340
+ */
341
+ getChunks(variableName = 'context') {
342
+ const variable = this.variables.get(variableName);
343
+ if (!variable || variable.type !== 'chunks') {
344
+ return [];
345
+ }
346
+ return variable.value;
347
+ }
348
+ /**
349
+ * Check if a variable exists
350
+ */
351
+ has(variableName) {
352
+ return this.variables.has(variableName);
353
+ }
354
+ /**
355
+ * List all variable names
356
+ */
357
+ listVariables() {
358
+ return Array.from(this.variables.keys());
359
+ }
360
+ /**
361
+ * Mark an iteration
362
+ */
363
+ markIteration(iterationNumber, action) {
364
+ this.log({
365
+ type: 'iteration',
366
+ iterationNumber,
367
+ action,
368
+ });
369
+ }
370
+ /**
371
+ * Check if we should terminate
372
+ */
373
+ shouldTerminate() {
374
+ // Check timeout
375
+ if (Date.now() - this.startTime > this.config.timeoutMs) {
376
+ return { terminate: true, reason: 'Timeout exceeded' };
377
+ }
378
+ // Check cost budget
379
+ if (this.costTracker.exceeded) {
380
+ return { terminate: true, reason: 'Cost budget exceeded' };
381
+ }
382
+ // Check iteration limit
383
+ const iterations = this.executionLog.filter(s => s.type === 'iteration').length;
384
+ if (iterations >= this.config.maxIterations) {
385
+ return { terminate: true, reason: 'Maximum iterations reached' };
386
+ }
387
+ // Check sub-call limit
388
+ const subCalls = this.executionLog.filter(s => s.type === 'sub_call').length;
389
+ if (subCalls >= this.config.maxSubCalls) {
390
+ return { terminate: true, reason: 'Maximum sub-calls reached' };
391
+ }
392
+ return { terminate: false };
393
+ }
394
+ /**
395
+ * Get remaining budget
396
+ */
397
+ getRemainingBudget() {
398
+ return this.costTracker.remaining;
399
+ }
400
+ /**
401
+ * Get iteration count
402
+ */
403
+ getIterationCount() {
404
+ return this.executionLog.filter(s => s.type === 'iteration').length;
405
+ }
406
+ /**
407
+ * Get sub-call count
408
+ */
409
+ getSubCallCount() {
410
+ return this.executionLog.filter(s => s.type === 'sub_call').length;
411
+ }
412
+ /**
413
+ * Get execution log
414
+ */
415
+ getExecutionLog() {
416
+ return [...this.executionLog];
417
+ }
418
+ /**
419
+ * Get total cost
420
+ */
421
+ getTotalCost() {
422
+ return this.costTracker.total;
423
+ }
424
+ /**
425
+ * Get elapsed time in milliseconds
426
+ */
427
+ getElapsedTime() {
428
+ return Date.now() - this.startTime;
429
+ }
430
+ /**
431
+ * Get environment statistics
432
+ */
433
+ getStats() {
434
+ let totalChunks = 0;
435
+ let totalContentLength = 0;
436
+ for (const variable of this.variables.values()) {
437
+ if (variable.type === 'chunks') {
438
+ const chunks = variable.value;
439
+ totalChunks += chunks.length;
440
+ totalContentLength += chunks.reduce((sum, c) => sum + c.content.length, 0);
441
+ }
442
+ }
443
+ return {
444
+ variableCount: this.variables.size,
445
+ totalChunks,
446
+ totalContentLength,
447
+ iterations: this.getIterationCount(),
448
+ subCalls: this.getSubCallCount(),
449
+ totalCost: this.getTotalCost(),
450
+ elapsedMs: this.getElapsedTime(),
451
+ };
452
+ }
453
+ log(step) {
454
+ this.executionLog.push({
455
+ ...step,
456
+ timestamp: new Date(),
457
+ });
458
+ }
459
+ estimateCost(inputChars, outputChars) {
460
+ // Rough estimate based on typical token ratios
461
+ // ~4 chars per token, pricing similar to GPT-4o-mini
462
+ const inputTokens = inputChars / 4;
463
+ const outputTokens = outputChars / 4;
464
+ // $0.15 per 1M input tokens, $0.60 per 1M output tokens (GPT-4o-mini pricing)
465
+ return (inputTokens / 1_000_000) * 0.15 + (outputTokens / 1_000_000) * 0.60;
466
+ }
467
+ }
468
+ let instance = null;
469
+ export function createContextEnvironment(config) {
470
+ return new ContextEnvironment(config);
471
+ }
472
+ export function getContextEnvironment(config) {
473
+ if (!instance) {
474
+ instance = new ContextEnvironment(config);
475
+ }
476
+ return instance;
477
+ }
478
+ export function resetContextEnvironment() {
479
+ instance = null;
480
+ }
481
+ //# sourceMappingURL=contextEnvironment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextEnvironment.js","sourceRoot":"","sources":["../../src/services/contextEnvironment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { Conversation, ChatMessage } from './cursorChatReader.js';
2
+ import type { ChunkType, EntityTag } from '../types/memory.js';
3
+ /**
4
+ * A message exchange (user question + assistant responses)
5
+ */
6
+ export interface MessageExchange {
7
+ userMessage: ChatMessage;
8
+ assistantMessages: ChatMessage[];
9
+ timestamp: Date;
10
+ }
11
+ /**
12
+ * Result of processing a conversation
13
+ */
14
+ export interface ProcessedConversationResult {
15
+ conversationId: string;
16
+ chunks: ProcessedChunk[];
17
+ entities: EntityTag[];
18
+ metadata: {
19
+ messageCount: number;
20
+ exchangeCount: number;
21
+ codeBlockCount: number;
22
+ filesReferenced: string[];
23
+ languages: string[];
24
+ };
25
+ }
26
+ /**
27
+ * A processed chunk ready for embedding and storage
28
+ */
29
+ export interface ProcessedChunk {
30
+ id: string;
31
+ content: string;
32
+ source: string;
33
+ chunkType: ChunkType;
34
+ importance: number;
35
+ metadata: Record<string, unknown>;
36
+ sourceConversationId: string;
37
+ sourceMessageIndex?: number;
38
+ }
39
+ /**
40
+ * Options for processing conversations
41
+ */
42
+ export interface ProcessingOptions {
43
+ includeCodeChunks?: boolean;
44
+ minExchangeLength?: number;
45
+ maxChunkSize?: number;
46
+ extractEntities?: boolean;
47
+ }
48
+ /**
49
+ * Processes raw conversations into structured chunks for RAG storage
50
+ */
51
+ export declare class ConversationProcessor {
52
+ private options;
53
+ constructor(options?: Partial<ProcessingOptions>);
54
+ /**
55
+ * Process a conversation into chunks for storage
56
+ */
57
+ processConversation(conversation: Conversation): ProcessedConversationResult;
58
+ /**
59
+ * Group messages into user-assistant exchanges
60
+ */
61
+ private groupIntoExchanges;
62
+ /**
63
+ * Create a chunk from a message exchange
64
+ */
65
+ private createExchangeChunk;
66
+ /**
67
+ * Create a chunk from a code block
68
+ */
69
+ private createCodeChunk;
70
+ /**
71
+ * Format an exchange as readable text
72
+ */
73
+ private formatExchange;
74
+ /**
75
+ * Format a code block with surrounding context
76
+ */
77
+ private formatCodeBlockWithContext;
78
+ /**
79
+ * Calculate importance score for an exchange
80
+ */
81
+ private calculateExchangeImportance;
82
+ /**
83
+ * Calculate importance score for a code block
84
+ */
85
+ private calculateCodeImportance;
86
+ /**
87
+ * Extract entities from the conversation
88
+ */
89
+ private extractEntities;
90
+ /**
91
+ * Truncate content to max chunk size
92
+ */
93
+ private truncateContent;
94
+ }
95
+ /**
96
+ * Create a conversation processor
97
+ */
98
+ export declare function createConversationProcessor(options?: Partial<ProcessingOptions>): ConversationProcessor;
99
+ //# sourceMappingURL=conversationProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversationProcessor.d.ts","sourceRoot":"","sources":["../../src/services/conversationProcessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAGZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAEV,SAAS,EACT,SAAS,EAEV,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AASD;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAIhD;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,2BAA2B;IA6D5E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwCtB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuBlC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA0BnC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiDvB;;OAEG;IACH,OAAO,CAAC,eAAe;CAKxB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,qBAAqB,CAEvG"}