@sashabogi/foundation 0.1.6 → 0.1.7
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/dist/cli/setup-wizard.d.ts +30 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +1645 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/test-connection.d.ts +76 -0
- package/dist/cli/test-connection.d.ts.map +1 -0
- package/dist/cli/test-connection.js +697 -0
- package/dist/cli/test-connection.js.map +1 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +47 -4
- package/dist/cli.js.map +1 -1
- package/dist/providers/anthropic.d.ts +178 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +514 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +154 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +227 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/deepseek.d.ts +23 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +31 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/fireworks.d.ts +23 -0
- package/dist/providers/fireworks.d.ts.map +1 -0
- package/dist/providers/fireworks.js +31 -0
- package/dist/providers/fireworks.js.map +1 -0
- package/dist/providers/gemini.d.ts +85 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +414 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/groq.d.ts +23 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +31 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/index.d.ts +23 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +27 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/kimi-code.d.ts +32 -0
- package/dist/providers/kimi-code.d.ts.map +1 -0
- package/dist/providers/kimi-code.js +46 -0
- package/dist/providers/kimi-code.js.map +1 -0
- package/dist/providers/kimi.d.ts +19 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +27 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/manager.d.ts +144 -0
- package/dist/providers/manager.d.ts.map +1 -0
- package/dist/providers/manager.js +279 -0
- package/dist/providers/manager.js.map +1 -0
- package/dist/providers/ollama.d.ts +83 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +450 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +91 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +445 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +23 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +31 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/perplexity.d.ts +34 -0
- package/dist/providers/perplexity.d.ts.map +1 -0
- package/dist/providers/perplexity.js +58 -0
- package/dist/providers/perplexity.js.map +1 -0
- package/dist/providers/together.d.ts +23 -0
- package/dist/providers/together.d.ts.map +1 -0
- package/dist/providers/together.js +31 -0
- package/dist/providers/together.js.map +1 -0
- package/dist/providers/types.d.ts +229 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +73 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/zai.d.ts +19 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +27 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/services/provider.service.d.ts +28 -0
- package/dist/services/provider.service.d.ts.map +1 -1
- package/dist/services/provider.service.js +137 -13
- package/dist/services/provider.service.js.map +1 -1
- package/dist/tools/demerzel/engine.d.ts +67 -0
- package/dist/tools/demerzel/engine.d.ts.map +1 -0
- package/dist/tools/demerzel/engine.js +401 -0
- package/dist/tools/demerzel/engine.js.map +1 -0
- package/dist/tools/demerzel/enhanced-snapshot.d.ts +67 -0
- package/dist/tools/demerzel/enhanced-snapshot.d.ts.map +1 -0
- package/dist/tools/demerzel/enhanced-snapshot.js +481 -0
- package/dist/tools/demerzel/enhanced-snapshot.js.map +1 -0
- package/dist/tools/demerzel/index.d.ts +11 -0
- package/dist/tools/demerzel/index.d.ts.map +1 -1
- package/dist/tools/demerzel/index.js +656 -85
- package/dist/tools/demerzel/index.js.map +1 -1
- package/dist/tools/demerzel/prompts.d.ts +26 -0
- package/dist/tools/demerzel/prompts.d.ts.map +1 -0
- package/dist/tools/demerzel/prompts.js +181 -0
- package/dist/tools/demerzel/prompts.js.map +1 -0
- package/dist/tools/demerzel/semantic-search.d.ts +54 -0
- package/dist/tools/demerzel/semantic-search.d.ts.map +1 -0
- package/dist/tools/demerzel/semantic-search.js +205 -0
- package/dist/tools/demerzel/semantic-search.js.map +1 -0
- package/dist/tools/demerzel/snapshot.d.ts +30 -0
- package/dist/tools/demerzel/snapshot.d.ts.map +1 -0
- package/dist/tools/demerzel/snapshot.js +169 -0
- package/dist/tools/demerzel/snapshot.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demerzel RLM Engine
|
|
3
|
+
*
|
|
4
|
+
* Recursive Language Model engine for document analysis.
|
|
5
|
+
* Based on the Matryoshka RLM approach by Dmitri Sotnikov.
|
|
6
|
+
*
|
|
7
|
+
* The engine uses an LLM to generate Nucleus DSL commands that are
|
|
8
|
+
* executed against documents, enabling analysis of content far
|
|
9
|
+
* exceeding typical context limits.
|
|
10
|
+
*
|
|
11
|
+
* Ported from Argus to Foundation.
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync } from 'fs';
|
|
14
|
+
import { buildSystemPrompt, getTurnLimit } from './prompts.js';
|
|
15
|
+
/**
|
|
16
|
+
* Execute a Nucleus command against document content
|
|
17
|
+
*/
|
|
18
|
+
function executeNucleus(command, content, bindings) {
|
|
19
|
+
// Parse the S-expression
|
|
20
|
+
const parsed = parseSExpression(command);
|
|
21
|
+
if (!parsed) {
|
|
22
|
+
throw new Error(`Failed to parse command: ${command}`);
|
|
23
|
+
}
|
|
24
|
+
return evaluateExpr(parsed, content, bindings);
|
|
25
|
+
}
|
|
26
|
+
function parseSExpression(input) {
|
|
27
|
+
const tokens = tokenize(input.trim());
|
|
28
|
+
if (tokens.length === 0)
|
|
29
|
+
return null;
|
|
30
|
+
let pos = 0;
|
|
31
|
+
function parse() {
|
|
32
|
+
const token = tokens[pos++];
|
|
33
|
+
if (token === '(') {
|
|
34
|
+
const list = [];
|
|
35
|
+
while (tokens[pos] !== ')' && pos < tokens.length) {
|
|
36
|
+
list.push(parse());
|
|
37
|
+
}
|
|
38
|
+
pos++; // consume ')'
|
|
39
|
+
return list;
|
|
40
|
+
}
|
|
41
|
+
else if (token.startsWith('"')) {
|
|
42
|
+
// String literal
|
|
43
|
+
return token.slice(1, -1).replace(/\\"/g, '"');
|
|
44
|
+
}
|
|
45
|
+
else if (/^-?\d+(\.\d+)?$/.test(token)) {
|
|
46
|
+
return token; // Keep as string, convert when needed
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return token; // Symbol
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return parse();
|
|
53
|
+
}
|
|
54
|
+
function tokenize(input) {
|
|
55
|
+
const tokens = [];
|
|
56
|
+
let i = 0;
|
|
57
|
+
while (i < input.length) {
|
|
58
|
+
const char = input[i];
|
|
59
|
+
if (/\s/.test(char)) {
|
|
60
|
+
i++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (char === '(' || char === ')') {
|
|
64
|
+
tokens.push(char);
|
|
65
|
+
i++;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (char === '"') {
|
|
69
|
+
let str = '"';
|
|
70
|
+
i++;
|
|
71
|
+
while (i < input.length && input[i] !== '"') {
|
|
72
|
+
if (input[i] === '\\' && i + 1 < input.length) {
|
|
73
|
+
str += input[i] + input[i + 1];
|
|
74
|
+
i += 2;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
str += input[i];
|
|
78
|
+
i++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
str += '"';
|
|
82
|
+
i++;
|
|
83
|
+
tokens.push(str);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// Symbol or number
|
|
87
|
+
let sym = '';
|
|
88
|
+
while (i < input.length && !/[\s()]/.test(input[i])) {
|
|
89
|
+
sym += input[i];
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
92
|
+
tokens.push(sym);
|
|
93
|
+
}
|
|
94
|
+
return tokens;
|
|
95
|
+
}
|
|
96
|
+
function evaluateExpr(expr, content, bindings) {
|
|
97
|
+
if (typeof expr === 'string') {
|
|
98
|
+
// Variable lookup
|
|
99
|
+
if (bindings.has(expr)) {
|
|
100
|
+
return bindings.get(expr);
|
|
101
|
+
}
|
|
102
|
+
// Number
|
|
103
|
+
if (/^-?\d+(\.\d+)?$/.test(expr)) {
|
|
104
|
+
return parseFloat(expr);
|
|
105
|
+
}
|
|
106
|
+
return expr;
|
|
107
|
+
}
|
|
108
|
+
if (!Array.isArray(expr) || expr.length === 0) {
|
|
109
|
+
return expr;
|
|
110
|
+
}
|
|
111
|
+
const [op, ...args] = expr;
|
|
112
|
+
switch (op) {
|
|
113
|
+
case 'grep': {
|
|
114
|
+
const pattern = evaluateExpr(args[0], content, bindings);
|
|
115
|
+
const flags = args[1] ? evaluateExpr(args[1], content, bindings) : '';
|
|
116
|
+
const regex = new RegExp(pattern, flags + 'g');
|
|
117
|
+
// Cache lines array to avoid re-splitting on every grep (major memory optimization)
|
|
118
|
+
let lines = bindings.get('__cached_lines__');
|
|
119
|
+
if (!lines) {
|
|
120
|
+
lines = content.split('\n');
|
|
121
|
+
bindings.set('__cached_lines__', lines);
|
|
122
|
+
}
|
|
123
|
+
const matches = [];
|
|
124
|
+
const MAX_MATCHES = 1000; // Prevent memory explosion
|
|
125
|
+
let charIndex = 0;
|
|
126
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
127
|
+
const line = lines[lineNum];
|
|
128
|
+
let match;
|
|
129
|
+
const lineRegex = new RegExp(pattern, flags + 'g');
|
|
130
|
+
while ((match = lineRegex.exec(line)) !== null) {
|
|
131
|
+
matches.push({
|
|
132
|
+
match: match[0],
|
|
133
|
+
line: line,
|
|
134
|
+
lineNum: lineNum + 1,
|
|
135
|
+
index: charIndex + match.index,
|
|
136
|
+
groups: match.slice(1),
|
|
137
|
+
});
|
|
138
|
+
if (matches.length >= MAX_MATCHES) {
|
|
139
|
+
return matches;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
charIndex += line.length + 1;
|
|
143
|
+
}
|
|
144
|
+
return matches;
|
|
145
|
+
}
|
|
146
|
+
case 'count': {
|
|
147
|
+
const arr = evaluateExpr(args[0], content, bindings);
|
|
148
|
+
if (Array.isArray(arr))
|
|
149
|
+
return arr.length;
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
case 'map': {
|
|
153
|
+
const arr = evaluateExpr(args[0], content, bindings);
|
|
154
|
+
const lambdaExpr = args[1];
|
|
155
|
+
if (!Array.isArray(lambdaExpr) || lambdaExpr[0] !== 'lambda') {
|
|
156
|
+
throw new Error('map requires a lambda expression');
|
|
157
|
+
}
|
|
158
|
+
const params = lambdaExpr[1];
|
|
159
|
+
const body = lambdaExpr[2];
|
|
160
|
+
const paramName = Array.isArray(params) ? params[0] : params;
|
|
161
|
+
return arr.map(item => {
|
|
162
|
+
const localBindings = new Map(bindings);
|
|
163
|
+
localBindings.set(paramName, item);
|
|
164
|
+
return evaluateExpr(body, content, localBindings);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
case 'filter': {
|
|
168
|
+
const arr = evaluateExpr(args[0], content, bindings);
|
|
169
|
+
const lambdaExpr = args[1];
|
|
170
|
+
if (!Array.isArray(lambdaExpr) || lambdaExpr[0] !== 'lambda') {
|
|
171
|
+
throw new Error('filter requires a lambda expression');
|
|
172
|
+
}
|
|
173
|
+
const params = lambdaExpr[1];
|
|
174
|
+
const body = lambdaExpr[2];
|
|
175
|
+
const paramName = Array.isArray(params) ? params[0] : params;
|
|
176
|
+
return arr.filter(item => {
|
|
177
|
+
const localBindings = new Map(bindings);
|
|
178
|
+
localBindings.set(paramName, item);
|
|
179
|
+
return evaluateExpr(body, content, localBindings);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
case 'first': {
|
|
183
|
+
const arr = evaluateExpr(args[0], content, bindings);
|
|
184
|
+
return arr[0];
|
|
185
|
+
}
|
|
186
|
+
case 'last': {
|
|
187
|
+
const arr = evaluateExpr(args[0], content, bindings);
|
|
188
|
+
return arr[arr.length - 1];
|
|
189
|
+
}
|
|
190
|
+
case 'take': {
|
|
191
|
+
const arr = evaluateExpr(args[0], content, bindings);
|
|
192
|
+
const n = evaluateExpr(args[1], content, bindings);
|
|
193
|
+
return arr.slice(0, n);
|
|
194
|
+
}
|
|
195
|
+
case 'sort': {
|
|
196
|
+
const arr = evaluateExpr(args[0], content, bindings);
|
|
197
|
+
const key = evaluateExpr(args[1], content, bindings);
|
|
198
|
+
return [...arr].sort((a, b) => {
|
|
199
|
+
const aVal = a[key];
|
|
200
|
+
const bVal = b[key];
|
|
201
|
+
if (typeof aVal === 'number' && typeof bVal === 'number') {
|
|
202
|
+
return aVal - bVal;
|
|
203
|
+
}
|
|
204
|
+
return String(aVal).localeCompare(String(bVal));
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
case 'match': {
|
|
208
|
+
const str = evaluateExpr(args[0], content, bindings);
|
|
209
|
+
const strValue = typeof str === 'object' && str !== null && 'line' in str
|
|
210
|
+
? str.line
|
|
211
|
+
: String(str);
|
|
212
|
+
const pattern = evaluateExpr(args[1], content, bindings);
|
|
213
|
+
const group = args[2] ? evaluateExpr(args[2], content, bindings) : 0;
|
|
214
|
+
const regex = new RegExp(pattern);
|
|
215
|
+
const match = strValue.match(regex);
|
|
216
|
+
if (match) {
|
|
217
|
+
return match[group] || null;
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
default:
|
|
222
|
+
throw new Error(`Unknown command: ${op}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Extract Nucleus command from LLM response
|
|
227
|
+
*/
|
|
228
|
+
function extractCommand(response) {
|
|
229
|
+
// Check for final answer
|
|
230
|
+
const finalMatch = response.match(/<<<FINAL>>>([\s\S]*?)<<<END>>>/);
|
|
231
|
+
if (finalMatch) {
|
|
232
|
+
return { finalAnswer: finalMatch[1].trim() };
|
|
233
|
+
}
|
|
234
|
+
// Look for S-expression
|
|
235
|
+
const sexpMatch = response.match(/\([^)]*(?:\([^)]*\)[^)]*)*\)/);
|
|
236
|
+
if (sexpMatch) {
|
|
237
|
+
return { command: sexpMatch[0] };
|
|
238
|
+
}
|
|
239
|
+
return {};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Run RLM analysis on a document
|
|
243
|
+
*/
|
|
244
|
+
export async function analyze(provider, documentPath, query, options = {}) {
|
|
245
|
+
const { maxTurns = 15, verbose = false, onProgress, } = options;
|
|
246
|
+
// Use dynamic turn limit based on query type, but cap at maxTurns
|
|
247
|
+
const dynamicLimit = Math.min(getTurnLimit(query), maxTurns);
|
|
248
|
+
// Load document
|
|
249
|
+
const content = readFileSync(documentPath, 'utf-8');
|
|
250
|
+
// Get document stats for context (count newlines without splitting)
|
|
251
|
+
const fileCount = (content.match(/^FILE:/gm) || []).length;
|
|
252
|
+
const lineCount = (content.match(/\n/g) || []).length + 1;
|
|
253
|
+
const bindings = new Map();
|
|
254
|
+
const commands = [];
|
|
255
|
+
const messages = [
|
|
256
|
+
{
|
|
257
|
+
role: 'system',
|
|
258
|
+
content: buildSystemPrompt(query),
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
role: 'user',
|
|
262
|
+
content: `CODEBASE SNAPSHOT:
|
|
263
|
+
- Total size: ${content.length.toLocaleString()} characters
|
|
264
|
+
- Files: ${fileCount}
|
|
265
|
+
- Lines: ${lineCount.toLocaleString()}
|
|
266
|
+
|
|
267
|
+
Files are marked with "FILE: ./path/to/file" headers.
|
|
268
|
+
|
|
269
|
+
QUERY: ${query}
|
|
270
|
+
|
|
271
|
+
Begin analysis. You have ${dynamicLimit} turns maximum - provide final answer before then.`,
|
|
272
|
+
},
|
|
273
|
+
];
|
|
274
|
+
for (let turn = 1; turn <= dynamicLimit; turn++) {
|
|
275
|
+
// Force final answer on last turn
|
|
276
|
+
const isLastTurn = turn === dynamicLimit;
|
|
277
|
+
const isNearEnd = turn >= dynamicLimit - 2;
|
|
278
|
+
if (verbose) {
|
|
279
|
+
console.error(`\n[Turn ${turn}/${dynamicLimit}] Querying LLM...`);
|
|
280
|
+
}
|
|
281
|
+
// Get LLM response
|
|
282
|
+
const result = await provider.complete(messages);
|
|
283
|
+
const response = result.content;
|
|
284
|
+
if (verbose) {
|
|
285
|
+
console.error(`[Turn ${turn}] Response: ${response.slice(0, 200)}...`);
|
|
286
|
+
}
|
|
287
|
+
// Extract command or final answer
|
|
288
|
+
const extracted = extractCommand(response);
|
|
289
|
+
if (extracted.finalAnswer) {
|
|
290
|
+
return {
|
|
291
|
+
answer: extracted.finalAnswer,
|
|
292
|
+
turns: turn,
|
|
293
|
+
commands,
|
|
294
|
+
success: true,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
if (!extracted.command) {
|
|
298
|
+
// No command found, add to messages and continue
|
|
299
|
+
messages.push({ role: 'assistant', content: response });
|
|
300
|
+
messages.push({ role: 'user', content: 'Please provide a Nucleus command or final answer.' });
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
const command = extracted.command;
|
|
304
|
+
commands.push(command);
|
|
305
|
+
if (verbose) {
|
|
306
|
+
console.error(`[Turn ${turn}] Command: ${command}`);
|
|
307
|
+
}
|
|
308
|
+
// Execute command
|
|
309
|
+
try {
|
|
310
|
+
const cmdResult = executeNucleus(command, content, bindings);
|
|
311
|
+
// Store result in bindings
|
|
312
|
+
bindings.set('RESULTS', cmdResult);
|
|
313
|
+
bindings.set(`_${turn}`, cmdResult);
|
|
314
|
+
const resultStr = JSON.stringify(cmdResult, null, 2);
|
|
315
|
+
const truncatedResult = resultStr.length > 2000
|
|
316
|
+
? resultStr.slice(0, 2000) + '...[truncated]'
|
|
317
|
+
: resultStr;
|
|
318
|
+
if (verbose) {
|
|
319
|
+
console.error(`[Turn ${turn}] Result: ${truncatedResult.slice(0, 500)}...`);
|
|
320
|
+
}
|
|
321
|
+
onProgress?.(turn, command, cmdResult);
|
|
322
|
+
// Add to conversation with nudge if near end
|
|
323
|
+
messages.push({ role: 'assistant', content: command });
|
|
324
|
+
let userMessage = `Result:\n${truncatedResult}`;
|
|
325
|
+
if (isNearEnd && !isLastTurn) {
|
|
326
|
+
userMessage += `\n\n[Warning] ${dynamicLimit - turn} turns remaining. Start forming your final answer.`;
|
|
327
|
+
}
|
|
328
|
+
messages.push({ role: 'user', content: userMessage });
|
|
329
|
+
// FORCE final answer on last turn - make one more LLM call
|
|
330
|
+
if (isLastTurn) {
|
|
331
|
+
messages.push({
|
|
332
|
+
role: 'user',
|
|
333
|
+
content: 'STOP SEARCHING. Based on everything you found, provide your final answer NOW using <<<FINAL>>>your answer<<<END>>>'
|
|
334
|
+
});
|
|
335
|
+
const finalResult = await provider.complete(messages);
|
|
336
|
+
const finalExtracted = extractCommand(finalResult.content);
|
|
337
|
+
if (finalExtracted.finalAnswer) {
|
|
338
|
+
return {
|
|
339
|
+
answer: finalExtracted.finalAnswer,
|
|
340
|
+
turns: turn,
|
|
341
|
+
commands,
|
|
342
|
+
success: true,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
// Even if not properly formatted, return whatever we got
|
|
346
|
+
return {
|
|
347
|
+
answer: finalResult.content,
|
|
348
|
+
turns: turn,
|
|
349
|
+
commands,
|
|
350
|
+
success: true,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
356
|
+
if (verbose) {
|
|
357
|
+
console.error(`[Turn ${turn}] Error: ${errMsg}`);
|
|
358
|
+
}
|
|
359
|
+
messages.push({ role: 'assistant', content: command });
|
|
360
|
+
messages.push({ role: 'user', content: `Error executing command: ${errMsg}` });
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return {
|
|
364
|
+
answer: 'Maximum turns reached without final answer',
|
|
365
|
+
turns: dynamicLimit,
|
|
366
|
+
commands,
|
|
367
|
+
success: false,
|
|
368
|
+
error: 'Max turns reached',
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Fast grep search without AI
|
|
373
|
+
*/
|
|
374
|
+
export function searchDocument(documentPath, pattern, options = {}) {
|
|
375
|
+
const content = readFileSync(documentPath, 'utf-8');
|
|
376
|
+
const flags = options.caseInsensitive ? 'gi' : 'g';
|
|
377
|
+
const regex = new RegExp(pattern, flags);
|
|
378
|
+
const lines = content.split('\n');
|
|
379
|
+
const matches = [];
|
|
380
|
+
let charIndex = 0;
|
|
381
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
382
|
+
const line = lines[lineNum];
|
|
383
|
+
let match;
|
|
384
|
+
const lineRegex = new RegExp(pattern, flags);
|
|
385
|
+
while ((match = lineRegex.exec(line)) !== null) {
|
|
386
|
+
matches.push({
|
|
387
|
+
match: match[0],
|
|
388
|
+
line: line,
|
|
389
|
+
lineNum: lineNum + 1,
|
|
390
|
+
index: charIndex + match.index,
|
|
391
|
+
groups: match.slice(1),
|
|
392
|
+
});
|
|
393
|
+
if (options.maxResults && matches.length >= options.maxResults) {
|
|
394
|
+
return matches;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
charIndex += line.length + 1;
|
|
398
|
+
}
|
|
399
|
+
return matches;
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/tools/demerzel/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demerzel Enhanced Snapshot
|
|
3
|
+
*
|
|
4
|
+
* Extends basic snapshots with structural metadata:
|
|
5
|
+
* - Import graph (who imports whom)
|
|
6
|
+
* - Export index (symbols -> files)
|
|
7
|
+
* - Function/class signatures
|
|
8
|
+
* - File dependency tree
|
|
9
|
+
* - Complexity scores
|
|
10
|
+
* - Test file mapping
|
|
11
|
+
* - Recent git changes
|
|
12
|
+
*
|
|
13
|
+
* This enables understanding architecture without reading individual files.
|
|
14
|
+
*
|
|
15
|
+
* Ported from Argus to Foundation.
|
|
16
|
+
*/
|
|
17
|
+
import { SnapshotOptions, SnapshotResult } from './snapshot.js';
|
|
18
|
+
export interface ImportInfo {
|
|
19
|
+
source: string;
|
|
20
|
+
target: string;
|
|
21
|
+
resolved?: string;
|
|
22
|
+
symbols: string[];
|
|
23
|
+
isDefault: boolean;
|
|
24
|
+
isType: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface ExportInfo {
|
|
27
|
+
file: string;
|
|
28
|
+
symbol: string;
|
|
29
|
+
type: 'function' | 'class' | 'const' | 'let' | 'var' | 'type' | 'interface' | 'enum' | 'default' | 'unknown';
|
|
30
|
+
signature?: string;
|
|
31
|
+
line: number;
|
|
32
|
+
}
|
|
33
|
+
export interface FileMetadata {
|
|
34
|
+
path: string;
|
|
35
|
+
imports: ImportInfo[];
|
|
36
|
+
exports: ExportInfo[];
|
|
37
|
+
size: number;
|
|
38
|
+
lines: number;
|
|
39
|
+
}
|
|
40
|
+
export interface ComplexityInfo {
|
|
41
|
+
file: string;
|
|
42
|
+
score: number;
|
|
43
|
+
level: 'low' | 'medium' | 'high';
|
|
44
|
+
}
|
|
45
|
+
export interface RecentChangeInfo {
|
|
46
|
+
file: string;
|
|
47
|
+
commits: number;
|
|
48
|
+
authors: number;
|
|
49
|
+
}
|
|
50
|
+
export interface EnhancedSnapshotResult extends SnapshotResult {
|
|
51
|
+
metadata: {
|
|
52
|
+
imports: ImportInfo[];
|
|
53
|
+
exports: ExportInfo[];
|
|
54
|
+
fileIndex: Record<string, FileMetadata>;
|
|
55
|
+
importGraph: Record<string, string[]>;
|
|
56
|
+
exportGraph: Record<string, string[]>;
|
|
57
|
+
symbolIndex: Record<string, string[]>;
|
|
58
|
+
complexityScores: ComplexityInfo[];
|
|
59
|
+
testFileMap: Record<string, string[]>;
|
|
60
|
+
recentChanges: RecentChangeInfo[] | null;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create an enhanced snapshot with structural metadata
|
|
65
|
+
*/
|
|
66
|
+
export declare function createEnhancedSnapshot(projectPath: string, outputPath: string, options?: SnapshotOptions): EnhancedSnapshotResult;
|
|
67
|
+
//# sourceMappingURL=enhanced-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanced-snapshot.d.ts","sourceRoot":"","sources":["../../../src/tools/demerzel/enhanced-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAkB,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7G,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,gBAAgB,EAAE,cAAc,EAAE,CAAC;QACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,aAAa,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;KAC1C,CAAC;CACH;AAgVD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAoB,GAC5B,sBAAsB,CAyKxB"}
|