@sashabogi/foundation 0.1.6 → 0.1.8
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 +50 -5
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.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,481 @@
|
|
|
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 { readFileSync, writeFileSync } from 'fs';
|
|
18
|
+
import { join, dirname, extname, basename } from 'path';
|
|
19
|
+
import { execSync } from 'child_process';
|
|
20
|
+
import { createSnapshot } from './snapshot.js';
|
|
21
|
+
/**
|
|
22
|
+
* Parse imports from TypeScript/JavaScript content
|
|
23
|
+
*/
|
|
24
|
+
function parseImports(content, filePath) {
|
|
25
|
+
const imports = [];
|
|
26
|
+
const lines = content.split('\n');
|
|
27
|
+
for (const line of lines) {
|
|
28
|
+
const trimmed = line.trim();
|
|
29
|
+
if (!trimmed.startsWith('import') && !trimmed.includes('require('))
|
|
30
|
+
continue;
|
|
31
|
+
// Named imports: import { a, b } from 'module'
|
|
32
|
+
let match = /import\s+(type\s+)?{([^}]+)}\s+from\s+['"]([^'"]+)['"]/.exec(trimmed);
|
|
33
|
+
if (match) {
|
|
34
|
+
const isType = !!match[1];
|
|
35
|
+
const symbols = match[2].split(',').map(s => s.trim().split(/\s+as\s+/)[0].trim()).filter(Boolean);
|
|
36
|
+
const target = match[3];
|
|
37
|
+
imports.push({
|
|
38
|
+
source: filePath,
|
|
39
|
+
target,
|
|
40
|
+
symbols,
|
|
41
|
+
isDefault: false,
|
|
42
|
+
isType,
|
|
43
|
+
});
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Namespace import: import * as name from 'module'
|
|
47
|
+
match = /import\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]/.exec(trimmed);
|
|
48
|
+
if (match) {
|
|
49
|
+
imports.push({
|
|
50
|
+
source: filePath,
|
|
51
|
+
target: match[2],
|
|
52
|
+
symbols: ['*'],
|
|
53
|
+
isDefault: false,
|
|
54
|
+
isType: false,
|
|
55
|
+
});
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Default import: import name from 'module'
|
|
59
|
+
match = /import\s+(type\s+)?(\w+)\s+from\s+['"]([^'"]+)['"]/.exec(trimmed);
|
|
60
|
+
if (match && !trimmed.includes('{')) {
|
|
61
|
+
imports.push({
|
|
62
|
+
source: filePath,
|
|
63
|
+
target: match[3],
|
|
64
|
+
symbols: [match[2]],
|
|
65
|
+
isDefault: true,
|
|
66
|
+
isType: !!match[1],
|
|
67
|
+
});
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
// Side-effect import: import 'module'
|
|
71
|
+
match = /^import\s+['"]([^'"]+)['"]/.exec(trimmed);
|
|
72
|
+
if (match) {
|
|
73
|
+
imports.push({
|
|
74
|
+
source: filePath,
|
|
75
|
+
target: match[1],
|
|
76
|
+
symbols: [],
|
|
77
|
+
isDefault: false,
|
|
78
|
+
isType: false,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return imports;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse exports from TypeScript/JavaScript content
|
|
86
|
+
*/
|
|
87
|
+
function parseExports(content, filePath) {
|
|
88
|
+
const exports = [];
|
|
89
|
+
const lines = content.split('\n');
|
|
90
|
+
for (let i = 0; i < lines.length; i++) {
|
|
91
|
+
const line = lines[i];
|
|
92
|
+
const trimmed = line.trim();
|
|
93
|
+
// export function name(...) or export async function name(...)
|
|
94
|
+
let match = /export\s+(?:async\s+)?function\s+(\w+)\s*(\([^)]*\))/.exec(trimmed);
|
|
95
|
+
if (match) {
|
|
96
|
+
exports.push({
|
|
97
|
+
file: filePath,
|
|
98
|
+
symbol: match[1],
|
|
99
|
+
type: 'function',
|
|
100
|
+
signature: `function ${match[1]}${match[2]}`,
|
|
101
|
+
line: i + 1,
|
|
102
|
+
});
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// export class Name
|
|
106
|
+
match = /export\s+class\s+(\w+)/.exec(trimmed);
|
|
107
|
+
if (match) {
|
|
108
|
+
exports.push({
|
|
109
|
+
file: filePath,
|
|
110
|
+
symbol: match[1],
|
|
111
|
+
type: 'class',
|
|
112
|
+
line: i + 1,
|
|
113
|
+
});
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
// export const/let/var name
|
|
117
|
+
match = /export\s+(const|let|var)\s+(\w+)/.exec(trimmed);
|
|
118
|
+
if (match) {
|
|
119
|
+
exports.push({
|
|
120
|
+
file: filePath,
|
|
121
|
+
symbol: match[2],
|
|
122
|
+
type: match[1],
|
|
123
|
+
line: i + 1,
|
|
124
|
+
});
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
// export type Name or export interface Name
|
|
128
|
+
match = /export\s+(type|interface)\s+(\w+)/.exec(trimmed);
|
|
129
|
+
if (match) {
|
|
130
|
+
exports.push({
|
|
131
|
+
file: filePath,
|
|
132
|
+
symbol: match[2],
|
|
133
|
+
type: match[1],
|
|
134
|
+
line: i + 1,
|
|
135
|
+
});
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
// export enum Name
|
|
139
|
+
match = /export\s+enum\s+(\w+)/.exec(trimmed);
|
|
140
|
+
if (match) {
|
|
141
|
+
exports.push({
|
|
142
|
+
file: filePath,
|
|
143
|
+
symbol: match[1],
|
|
144
|
+
type: 'enum',
|
|
145
|
+
line: i + 1,
|
|
146
|
+
});
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// export default
|
|
150
|
+
if (/export\s+default/.test(trimmed)) {
|
|
151
|
+
match = /export\s+default\s+(?:function\s+)?(\w+)?/.exec(trimmed);
|
|
152
|
+
exports.push({
|
|
153
|
+
file: filePath,
|
|
154
|
+
symbol: match?.[1] || 'default',
|
|
155
|
+
type: 'default',
|
|
156
|
+
line: i + 1,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return exports;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Calculate cyclomatic complexity for a file
|
|
164
|
+
* Counts decision points: if, else if, while, for, case, ternary, &&, ||, catch
|
|
165
|
+
*/
|
|
166
|
+
function calculateComplexity(content) {
|
|
167
|
+
const patterns = [
|
|
168
|
+
/\bif\s*\(/g,
|
|
169
|
+
/\belse\s+if\s*\(/g,
|
|
170
|
+
/\bwhile\s*\(/g,
|
|
171
|
+
/\bfor\s*\(/g,
|
|
172
|
+
/\bcase\s+/g,
|
|
173
|
+
/\?\s*.*\s*:/g,
|
|
174
|
+
/\&\&/g,
|
|
175
|
+
/\|\|/g,
|
|
176
|
+
/\bcatch\s*\(/g,
|
|
177
|
+
];
|
|
178
|
+
let complexity = 1; // Base complexity
|
|
179
|
+
for (const pattern of patterns) {
|
|
180
|
+
const matches = content.match(pattern);
|
|
181
|
+
if (matches)
|
|
182
|
+
complexity += matches.length;
|
|
183
|
+
}
|
|
184
|
+
return complexity;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get complexity level label
|
|
188
|
+
*/
|
|
189
|
+
function getComplexityLevel(score) {
|
|
190
|
+
if (score <= 10)
|
|
191
|
+
return 'low';
|
|
192
|
+
if (score <= 20)
|
|
193
|
+
return 'medium';
|
|
194
|
+
return 'high';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Map source files to their test files
|
|
198
|
+
*/
|
|
199
|
+
function mapTestFiles(files) {
|
|
200
|
+
const testMap = {};
|
|
201
|
+
// Common test file patterns
|
|
202
|
+
const testPatterns = [
|
|
203
|
+
// Same directory patterns
|
|
204
|
+
(src) => src.replace(/\.tsx?$/, '.test.ts'),
|
|
205
|
+
(src) => src.replace(/\.tsx?$/, '.test.tsx'),
|
|
206
|
+
(src) => src.replace(/\.tsx?$/, '.spec.ts'),
|
|
207
|
+
(src) => src.replace(/\.tsx?$/, '.spec.tsx'),
|
|
208
|
+
(src) => src.replace(/\.jsx?$/, '.test.js'),
|
|
209
|
+
(src) => src.replace(/\.jsx?$/, '.test.jsx'),
|
|
210
|
+
(src) => src.replace(/\.jsx?$/, '.spec.js'),
|
|
211
|
+
(src) => src.replace(/\.jsx?$/, '.spec.jsx'),
|
|
212
|
+
// __tests__ directory pattern
|
|
213
|
+
(src) => {
|
|
214
|
+
const dir = dirname(src);
|
|
215
|
+
const base = basename(src).replace(/\.(tsx?|jsx?)$/, '');
|
|
216
|
+
return join(dir, '__tests__', `${base}.test.ts`);
|
|
217
|
+
},
|
|
218
|
+
(src) => {
|
|
219
|
+
const dir = dirname(src);
|
|
220
|
+
const base = basename(src).replace(/\.(tsx?|jsx?)$/, '');
|
|
221
|
+
return join(dir, '__tests__', `${base}.test.tsx`);
|
|
222
|
+
},
|
|
223
|
+
// test/ directory pattern
|
|
224
|
+
(src) => src.replace(/^src\//, 'test/').replace(/\.(tsx?|jsx?)$/, '.test.ts'),
|
|
225
|
+
(src) => src.replace(/^src\//, 'tests/').replace(/\.(tsx?|jsx?)$/, '.test.ts'),
|
|
226
|
+
];
|
|
227
|
+
// Create a set for fast lookup
|
|
228
|
+
const fileSet = new Set(files);
|
|
229
|
+
for (const file of files) {
|
|
230
|
+
// Skip test files themselves
|
|
231
|
+
if (file.includes('.test.') || file.includes('.spec.') || file.includes('__tests__'))
|
|
232
|
+
continue;
|
|
233
|
+
// Only check source files
|
|
234
|
+
if (!/\.(tsx?|jsx?)$/.test(file))
|
|
235
|
+
continue;
|
|
236
|
+
const tests = [];
|
|
237
|
+
for (const pattern of testPatterns) {
|
|
238
|
+
const testPath = pattern(file);
|
|
239
|
+
// Only add if the path changed (pattern matched) AND test file exists
|
|
240
|
+
if (testPath !== file && fileSet.has(testPath)) {
|
|
241
|
+
tests.push(testPath);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (tests.length > 0) {
|
|
245
|
+
testMap[file] = [...new Set(tests)]; // Dedupe
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return testMap;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get recent changes from git (last 7 days)
|
|
252
|
+
* Returns null if not a git repo
|
|
253
|
+
* Note: Uses execSync with hardcoded commands (no user input) - safe from injection
|
|
254
|
+
*/
|
|
255
|
+
function getRecentChanges(projectPath) {
|
|
256
|
+
try {
|
|
257
|
+
// Check if it's a git repo - hardcoded command, no user input
|
|
258
|
+
execSync('git rev-parse --git-dir', { cwd: projectPath, encoding: 'utf-8', stdio: 'pipe' });
|
|
259
|
+
// Get commits with file names and authors from last 7 days
|
|
260
|
+
// Note: This is a hardcoded git command with no user input, safe from injection
|
|
261
|
+
const output = execSync('git log --since="7 days ago" --name-only --format="COMMIT_AUTHOR:%an" --diff-filter=ACMR', { cwd: projectPath, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024, stdio: 'pipe' });
|
|
262
|
+
if (!output.trim())
|
|
263
|
+
return [];
|
|
264
|
+
const fileStats = {};
|
|
265
|
+
let currentAuthor = '';
|
|
266
|
+
let currentCommitId = 0;
|
|
267
|
+
for (const line of output.split('\n')) {
|
|
268
|
+
const trimmed = line.trim();
|
|
269
|
+
if (!trimmed) {
|
|
270
|
+
currentCommitId++; // New commit block
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (trimmed.startsWith('COMMIT_AUTHOR:')) {
|
|
274
|
+
currentAuthor = trimmed.replace('COMMIT_AUTHOR:', '');
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
// It's a file name
|
|
278
|
+
const file = trimmed;
|
|
279
|
+
if (!fileStats[file]) {
|
|
280
|
+
fileStats[file] = { commits: new Set(), authors: new Set() };
|
|
281
|
+
}
|
|
282
|
+
fileStats[file].commits.add(`${currentCommitId}`);
|
|
283
|
+
if (currentAuthor) {
|
|
284
|
+
fileStats[file].authors.add(currentAuthor);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Convert to array and sort by commit count (most active first)
|
|
288
|
+
const result = Object.entries(fileStats)
|
|
289
|
+
.map(([file, stats]) => ({
|
|
290
|
+
file,
|
|
291
|
+
commits: stats.commits.size,
|
|
292
|
+
authors: stats.authors.size,
|
|
293
|
+
}))
|
|
294
|
+
.sort((a, b) => b.commits - a.commits);
|
|
295
|
+
return result;
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return null; // Not a git repo or git not available
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Resolve a relative import path to an actual file
|
|
303
|
+
*/
|
|
304
|
+
function resolveImportPath(importPath, fromFile, projectFiles) {
|
|
305
|
+
if (!importPath.startsWith('.'))
|
|
306
|
+
return undefined; // External module
|
|
307
|
+
const fromDir = dirname(fromFile);
|
|
308
|
+
let resolved = join(fromDir, importPath);
|
|
309
|
+
// Strip existing extension from import path (TypeScript compiles to .js but sources are .ts)
|
|
310
|
+
const basePath = resolved.replace(/\.(js|jsx|mjs|cjs)$/, '');
|
|
311
|
+
// Try with extensions - check both with and without ./ prefix
|
|
312
|
+
const extensions = ['.ts', '.tsx', '.js', '.jsx', '', '/index.ts', '/index.tsx', '/index.js', '/index.jsx'];
|
|
313
|
+
for (const ext of extensions) {
|
|
314
|
+
const candidate = basePath + ext;
|
|
315
|
+
if (projectFiles.includes(candidate) || projectFiles.includes('./' + candidate)) {
|
|
316
|
+
return candidate.startsWith('./') ? candidate.slice(2) : candidate;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return undefined;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Create an enhanced snapshot with structural metadata
|
|
323
|
+
*/
|
|
324
|
+
export function createEnhancedSnapshot(projectPath, outputPath, options = {}) {
|
|
325
|
+
// First create the basic snapshot
|
|
326
|
+
const baseResult = createSnapshot(projectPath, outputPath, options);
|
|
327
|
+
// Now parse all files for metadata
|
|
328
|
+
const allImports = [];
|
|
329
|
+
const allExports = [];
|
|
330
|
+
const fileIndex = {};
|
|
331
|
+
const projectFiles = baseResult.files.map(f => './' + f);
|
|
332
|
+
for (const relPath of baseResult.files) {
|
|
333
|
+
const fullPath = join(projectPath, relPath);
|
|
334
|
+
const ext = extname(relPath).toLowerCase();
|
|
335
|
+
// Only parse JS/TS files for imports/exports
|
|
336
|
+
if (!['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'].includes(ext)) {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
const content = readFileSync(fullPath, 'utf-8');
|
|
341
|
+
const imports = parseImports(content, relPath);
|
|
342
|
+
const exports = parseExports(content, relPath);
|
|
343
|
+
// Resolve local imports
|
|
344
|
+
for (const imp of imports) {
|
|
345
|
+
imp.resolved = resolveImportPath(imp.target, relPath, projectFiles);
|
|
346
|
+
}
|
|
347
|
+
allImports.push(...imports);
|
|
348
|
+
allExports.push(...exports);
|
|
349
|
+
fileIndex[relPath] = {
|
|
350
|
+
path: relPath,
|
|
351
|
+
imports,
|
|
352
|
+
exports,
|
|
353
|
+
size: content.length,
|
|
354
|
+
lines: content.split('\n').length,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
// Skip files that can't be read
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Build import graph (file -> files it imports)
|
|
362
|
+
const importGraph = {};
|
|
363
|
+
for (const imp of allImports) {
|
|
364
|
+
if (imp.resolved) {
|
|
365
|
+
if (!importGraph[imp.source])
|
|
366
|
+
importGraph[imp.source] = [];
|
|
367
|
+
if (!importGraph[imp.source].includes(imp.resolved)) {
|
|
368
|
+
importGraph[imp.source].push(imp.resolved);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Build export graph (file -> files that import it)
|
|
373
|
+
const exportGraph = {};
|
|
374
|
+
for (const imp of allImports) {
|
|
375
|
+
if (imp.resolved) {
|
|
376
|
+
if (!exportGraph[imp.resolved])
|
|
377
|
+
exportGraph[imp.resolved] = [];
|
|
378
|
+
if (!exportGraph[imp.resolved].includes(imp.source)) {
|
|
379
|
+
exportGraph[imp.resolved].push(imp.source);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
// Build symbol index (symbol -> files that export it)
|
|
384
|
+
const symbolIndex = {};
|
|
385
|
+
for (const exp of allExports) {
|
|
386
|
+
if (!symbolIndex[exp.symbol])
|
|
387
|
+
symbolIndex[exp.symbol] = [];
|
|
388
|
+
if (!symbolIndex[exp.symbol].includes(exp.file)) {
|
|
389
|
+
symbolIndex[exp.symbol].push(exp.file);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Calculate complexity scores for all files
|
|
393
|
+
const complexityScores = [];
|
|
394
|
+
for (const [relPath] of Object.entries(fileIndex)) {
|
|
395
|
+
const fullPath = join(projectPath, relPath);
|
|
396
|
+
try {
|
|
397
|
+
const content = readFileSync(fullPath, 'utf-8');
|
|
398
|
+
const score = calculateComplexity(content);
|
|
399
|
+
complexityScores.push({
|
|
400
|
+
file: relPath,
|
|
401
|
+
score,
|
|
402
|
+
level: getComplexityLevel(score),
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
// Skip files that can't be read
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// Sort by complexity score (highest first)
|
|
410
|
+
complexityScores.sort((a, b) => b.score - a.score);
|
|
411
|
+
// Map test files to source files
|
|
412
|
+
const testFileMap = mapTestFiles(baseResult.files);
|
|
413
|
+
// Get recent git changes (null if not a git repo)
|
|
414
|
+
const recentChanges = getRecentChanges(projectPath);
|
|
415
|
+
// Append metadata to snapshot file
|
|
416
|
+
const metadataSection = `
|
|
417
|
+
|
|
418
|
+
================================================================================
|
|
419
|
+
METADATA: IMPORT GRAPH
|
|
420
|
+
================================================================================
|
|
421
|
+
${Object.entries(importGraph).map(([file, imports]) => `${file}:\n${imports.map(i => ` -> ${i}`).join('\n')}`).join('\n\n')}
|
|
422
|
+
|
|
423
|
+
================================================================================
|
|
424
|
+
METADATA: EXPORT INDEX
|
|
425
|
+
================================================================================
|
|
426
|
+
${Object.entries(symbolIndex).map(([symbol, files]) => `${symbol}: ${files.join(', ')}`).join('\n')}
|
|
427
|
+
|
|
428
|
+
================================================================================
|
|
429
|
+
METADATA: FILE EXPORTS
|
|
430
|
+
================================================================================
|
|
431
|
+
${allExports.map(e => `${e.file}:${e.line} - ${e.type} ${e.symbol}${e.signature ? ` ${e.signature}` : ''}`).join('\n')}
|
|
432
|
+
|
|
433
|
+
================================================================================
|
|
434
|
+
METADATA: WHO IMPORTS WHOM
|
|
435
|
+
================================================================================
|
|
436
|
+
${Object.entries(exportGraph).map(([file, importers]) => `${file} is imported by:\n${importers.map(i => ` <- ${i}`).join('\n')}`).join('\n\n')}
|
|
437
|
+
|
|
438
|
+
================================================================================
|
|
439
|
+
METADATA: COMPLEXITY SCORES
|
|
440
|
+
================================================================================
|
|
441
|
+
${complexityScores.map(c => `${c.file}: ${c.score} (${c.level})`).join('\n')}
|
|
442
|
+
|
|
443
|
+
================================================================================
|
|
444
|
+
METADATA: TEST COVERAGE MAP
|
|
445
|
+
================================================================================
|
|
446
|
+
${Object.entries(testFileMap).length > 0
|
|
447
|
+
? Object.entries(testFileMap).map(([src, tests]) => `${src} -> ${tests.join(', ')}`).join('\n')
|
|
448
|
+
: '(no test file mappings found)'}
|
|
449
|
+
${baseResult.files.filter(f => /\.(tsx?|jsx?)$/.test(f) &&
|
|
450
|
+
!f.includes('.test.') &&
|
|
451
|
+
!f.includes('.spec.') &&
|
|
452
|
+
!f.includes('__tests__') &&
|
|
453
|
+
!testFileMap[f]).map(f => `${f} -> (no tests)`).join('\n')}
|
|
454
|
+
${recentChanges !== null ? `
|
|
455
|
+
|
|
456
|
+
================================================================================
|
|
457
|
+
METADATA: RECENT CHANGES (last 7 days)
|
|
458
|
+
================================================================================
|
|
459
|
+
${recentChanges.length > 0
|
|
460
|
+
? recentChanges.map(c => `${c.file}: ${c.commits} commit${c.commits !== 1 ? 's' : ''}, ${c.authors} author${c.authors !== 1 ? 's' : ''}`).join('\n')
|
|
461
|
+
: '(no changes in the last 7 days)'}` : ''}
|
|
462
|
+
`;
|
|
463
|
+
// Append to snapshot
|
|
464
|
+
const existingContent = readFileSync(outputPath, 'utf-8');
|
|
465
|
+
writeFileSync(outputPath, existingContent + metadataSection);
|
|
466
|
+
return {
|
|
467
|
+
...baseResult,
|
|
468
|
+
metadata: {
|
|
469
|
+
imports: allImports,
|
|
470
|
+
exports: allExports,
|
|
471
|
+
fileIndex,
|
|
472
|
+
importGraph,
|
|
473
|
+
exportGraph,
|
|
474
|
+
symbolIndex,
|
|
475
|
+
complexityScores,
|
|
476
|
+
testFileMap,
|
|
477
|
+
recentChanges,
|
|
478
|
+
},
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=enhanced-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanced-snapshot.js","sourceRoot":"","sources":["../../../src/tools/demerzel/enhanced-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,18 @@
|
|
|
15
15
|
* - demerzel_get_context: Get lines around a location
|
|
16
16
|
* - demerzel_analyze: AI-powered deep analysis
|
|
17
17
|
* - demerzel_semantic_search: Natural language code search
|
|
18
|
+
*
|
|
19
|
+
* Ported from Argus to Foundation.
|
|
18
20
|
*/
|
|
19
21
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
22
|
+
import { createSnapshot } from './snapshot.js';
|
|
23
|
+
import { createEnhancedSnapshot } from './enhanced-snapshot.js';
|
|
24
|
+
import { analyze, searchDocument } from './engine.js';
|
|
25
|
+
import { SemanticIndex } from './semantic-search.js';
|
|
20
26
|
export declare function registerDemerzelTools(server: McpServer): void;
|
|
27
|
+
export { createSnapshot, createEnhancedSnapshot, analyze, searchDocument, SemanticIndex };
|
|
28
|
+
export type { AIProvider, Message, CompletionResult, AnalysisOptions, AnalysisResult } from './engine.js';
|
|
29
|
+
export type { SnapshotOptions, SnapshotResult } from './snapshot.js';
|
|
30
|
+
export type { EnhancedSnapshotResult, ImportInfo, ExportInfo, FileMetadata, ComplexityInfo, RecentChangeInfo } from './enhanced-snapshot.js';
|
|
31
|
+
export type { SearchResult } from './semantic-search.js';
|
|
21
32
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/demerzel/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/demerzel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,EAAE,cAAc,EAAgD,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAA+B,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,cAAc,EAAwD,MAAM,aAAa,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAuMrD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+nB7D;AAGD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAC1F,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1G,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrE,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7I,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
|