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.
- package/README.md +179 -203
- package/dist/adapters/llm/anthropic.d.ts +27 -0
- package/dist/adapters/llm/anthropic.d.ts.map +1 -0
- package/dist/adapters/llm/anthropic.js +287 -0
- package/dist/adapters/llm/anthropic.js.map +1 -0
- package/dist/adapters/llm/base.d.ts +62 -0
- package/dist/adapters/llm/base.d.ts.map +1 -0
- package/dist/adapters/llm/base.js +140 -0
- package/dist/adapters/llm/base.js.map +1 -0
- package/dist/adapters/llm/deepseek.d.ts +24 -0
- package/dist/adapters/llm/deepseek.d.ts.map +1 -0
- package/dist/adapters/llm/deepseek.js +228 -0
- package/dist/adapters/llm/deepseek.js.map +1 -0
- package/dist/adapters/llm/groq.d.ts +25 -0
- package/dist/adapters/llm/groq.d.ts.map +1 -0
- package/dist/adapters/llm/groq.js +265 -0
- package/dist/adapters/llm/groq.js.map +1 -0
- package/dist/adapters/llm/index.d.ts +62 -0
- package/dist/adapters/llm/index.d.ts.map +1 -0
- package/dist/adapters/llm/index.js +380 -0
- package/dist/adapters/llm/index.js.map +1 -0
- package/dist/adapters/llm/ollama.d.ts +23 -0
- package/dist/adapters/llm/ollama.d.ts.map +1 -0
- package/dist/adapters/llm/ollama.js +261 -0
- package/dist/adapters/llm/ollama.js.map +1 -0
- package/dist/adapters/llm/openai.d.ts +22 -0
- package/dist/adapters/llm/openai.d.ts.map +1 -0
- package/dist/adapters/llm/openai.js +232 -0
- package/dist/adapters/llm/openai.js.map +1 -0
- package/dist/adapters/llm/openrouter.d.ts +27 -0
- package/dist/adapters/llm/openrouter.d.ts.map +1 -0
- package/dist/adapters/llm/openrouter.js +305 -0
- package/dist/adapters/llm/openrouter.js.map +1 -0
- package/dist/adapters/vector/index.d.ts.map +1 -1
- package/dist/adapters/vector/index.js +8 -0
- package/dist/adapters/vector/index.js.map +1 -1
- package/dist/adapters/vector/redis-native.d.ts +35 -0
- package/dist/adapters/vector/redis-native.d.ts.map +1 -0
- package/dist/adapters/vector/redis-native.js +170 -0
- package/dist/adapters/vector/redis-native.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +4 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +374 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +4 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +237 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/rules.d.ts +9 -0
- package/dist/cli/commands/rules.d.ts.map +1 -0
- package/dist/cli/commands/rules.js +639 -0
- package/dist/cli/commands/rules.js.map +1 -0
- package/dist/cli/commands/setup.js +5 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/memoryConfig.d.ts +427 -0
- package/dist/config/memoryConfig.d.ts.map +1 -0
- package/dist/config/memoryConfig.js +258 -0
- package/dist/config/memoryConfig.js.map +1 -0
- package/dist/config/rulesConfig.d.ts +486 -0
- package/dist/config/rulesConfig.d.ts.map +1 -0
- package/dist/config/rulesConfig.js +345 -0
- package/dist/config/rulesConfig.js.map +1 -0
- package/dist/dashboard/coreTools.d.ts +14 -0
- package/dist/dashboard/coreTools.d.ts.map +1 -0
- package/dist/dashboard/coreTools.js +413 -0
- package/dist/dashboard/coreTools.js.map +1 -0
- package/dist/dashboard/public/index.html +1982 -13
- package/dist/dashboard/server.d.ts +1 -8
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +846 -13
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/toolRegistry.d.ts +192 -0
- package/dist/dashboard/toolRegistry.d.ts.map +1 -0
- package/dist/dashboard/toolRegistry.js +322 -0
- package/dist/dashboard/toolRegistry.js.map +1 -0
- package/dist/proxy/index.d.ts +1 -1
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +9 -6
- package/dist/proxy/index.js.map +1 -1
- package/dist/server/index.js +21 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/tools/crawl.d.ts.map +1 -1
- package/dist/server/tools/crawl.js +8 -0
- package/dist/server/tools/crawl.js.map +1 -1
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +19 -1
- package/dist/server/tools/index.js.map +1 -1
- package/dist/server/tools/ingest.d.ts.map +1 -1
- package/dist/server/tools/ingest.js +5 -0
- package/dist/server/tools/ingest.js.map +1 -1
- package/dist/server/tools/memory.d.ts +250 -0
- package/dist/server/tools/memory.d.ts.map +1 -0
- package/dist/server/tools/memory.js +472 -0
- package/dist/server/tools/memory.js.map +1 -0
- package/dist/server/tools/recursive-query.d.ts.map +1 -1
- package/dist/server/tools/recursive-query.js +6 -0
- package/dist/server/tools/recursive-query.js.map +1 -1
- package/dist/server/tools/search.d.ts.map +1 -1
- package/dist/server/tools/search.js +6 -0
- package/dist/server/tools/search.js.map +1 -1
- package/dist/services/activity-log.d.ts +10 -0
- package/dist/services/activity-log.d.ts.map +1 -0
- package/dist/services/activity-log.js +53 -0
- package/dist/services/activity-log.js.map +1 -0
- package/dist/services/categoryManager.d.ts +110 -0
- package/dist/services/categoryManager.d.ts.map +1 -0
- package/dist/services/categoryManager.js +549 -0
- package/dist/services/categoryManager.js.map +1 -0
- package/dist/services/contextEnvironment.d.ts +206 -0
- package/dist/services/contextEnvironment.d.ts.map +1 -0
- package/dist/services/contextEnvironment.js +481 -0
- package/dist/services/contextEnvironment.js.map +1 -0
- package/dist/services/conversationProcessor.d.ts +99 -0
- package/dist/services/conversationProcessor.d.ts.map +1 -0
- package/dist/services/conversationProcessor.js +311 -0
- package/dist/services/conversationProcessor.js.map +1 -0
- package/dist/services/cursorChatReader.d.ts +129 -0
- package/dist/services/cursorChatReader.d.ts.map +1 -0
- package/dist/services/cursorChatReader.js +419 -0
- package/dist/services/cursorChatReader.js.map +1 -0
- package/dist/services/decayCalculator.d.ts +85 -0
- package/dist/services/decayCalculator.d.ts.map +1 -0
- package/dist/services/decayCalculator.js +182 -0
- package/dist/services/decayCalculator.js.map +1 -0
- package/dist/services/enhancedVectorStore.d.ts +102 -0
- package/dist/services/enhancedVectorStore.d.ts.map +1 -0
- package/dist/services/enhancedVectorStore.js +245 -0
- package/dist/services/enhancedVectorStore.js.map +1 -0
- package/dist/services/hybridScorer.d.ts +120 -0
- package/dist/services/hybridScorer.d.ts.map +1 -0
- package/dist/services/hybridScorer.js +334 -0
- package/dist/services/hybridScorer.js.map +1 -0
- package/dist/services/knowledgeExtractor.d.ts +45 -0
- package/dist/services/knowledgeExtractor.d.ts.map +1 -0
- package/dist/services/knowledgeExtractor.js +436 -0
- package/dist/services/knowledgeExtractor.js.map +1 -0
- package/dist/services/knowledgeStorage.d.ts +102 -0
- package/dist/services/knowledgeStorage.d.ts.map +1 -0
- package/dist/services/knowledgeStorage.js +383 -0
- package/dist/services/knowledgeStorage.js.map +1 -0
- package/dist/services/maintenanceScheduler.d.ts +89 -0
- package/dist/services/maintenanceScheduler.d.ts.map +1 -0
- package/dist/services/maintenanceScheduler.js +479 -0
- package/dist/services/maintenanceScheduler.js.map +1 -0
- package/dist/services/memoryMetadataStore.d.ts +62 -0
- package/dist/services/memoryMetadataStore.d.ts.map +1 -0
- package/dist/services/memoryMetadataStore.js +570 -0
- package/dist/services/memoryMetadataStore.js.map +1 -0
- package/dist/services/recursiveRetrieval.d.ts +122 -0
- package/dist/services/recursiveRetrieval.d.ts.map +1 -0
- package/dist/services/recursiveRetrieval.js +443 -0
- package/dist/services/recursiveRetrieval.js.map +1 -0
- package/dist/services/relationshipGraph.d.ts +77 -0
- package/dist/services/relationshipGraph.d.ts.map +1 -0
- package/dist/services/relationshipGraph.js +411 -0
- package/dist/services/relationshipGraph.js.map +1 -0
- package/dist/services/rlmSafeguards.d.ts +273 -0
- package/dist/services/rlmSafeguards.d.ts.map +1 -0
- package/dist/services/rlmSafeguards.js +705 -0
- package/dist/services/rlmSafeguards.js.map +1 -0
- package/dist/services/rulesAnalyzer.d.ts +119 -0
- package/dist/services/rulesAnalyzer.d.ts.map +1 -0
- package/dist/services/rulesAnalyzer.js +768 -0
- package/dist/services/rulesAnalyzer.js.map +1 -0
- package/dist/services/rulesMerger.d.ts +75 -0
- package/dist/services/rulesMerger.d.ts.map +1 -0
- package/dist/services/rulesMerger.js +404 -0
- package/dist/services/rulesMerger.js.map +1 -0
- package/dist/services/rulesParser.d.ts +127 -0
- package/dist/services/rulesParser.d.ts.map +1 -0
- package/dist/services/rulesParser.js +594 -0
- package/dist/services/rulesParser.js.map +1 -0
- package/dist/services/smartChunker.d.ts +110 -0
- package/dist/services/smartChunker.d.ts.map +1 -0
- package/dist/services/smartChunker.js +520 -0
- package/dist/services/smartChunker.js.map +1 -0
- package/dist/types/categories.d.ts +105 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +108 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/extractedKnowledge.d.ts +233 -0
- package/dist/types/extractedKnowledge.d.ts.map +1 -0
- package/dist/types/extractedKnowledge.js +56 -0
- package/dist/types/extractedKnowledge.js.map +1 -0
- package/dist/types/index.d.ts +9 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +12 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/llmProvider.d.ts +282 -0
- package/dist/types/llmProvider.d.ts.map +1 -0
- package/dist/types/llmProvider.js +48 -0
- package/dist/types/llmProvider.js.map +1 -0
- package/dist/types/memory.d.ts +227 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +76 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/relationships.d.ts +167 -0
- package/dist/types/relationships.d.ts.map +1 -0
- package/dist/types/relationships.js +106 -0
- package/dist/types/relationships.js.map +1 -0
- package/dist/types/rulesOptimizer.d.ts +345 -0
- package/dist/types/rulesOptimizer.d.ts.map +1 -0
- package/dist/types/rulesOptimizer.js +22 -0
- package/dist/types/rulesOptimizer.js.map +1 -0
- package/docs/cursor-recursive-rag-memory-spec.md +4569 -0
- package/docs/cursor-recursive-rag-tasks.md +1355 -0
- package/package.json +6 -3
- 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"}
|