@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.
Files changed (113) hide show
  1. package/dist/cli/setup-wizard.d.ts +30 -0
  2. package/dist/cli/setup-wizard.d.ts.map +1 -0
  3. package/dist/cli/setup-wizard.js +1645 -0
  4. package/dist/cli/setup-wizard.js.map +1 -0
  5. package/dist/cli/test-connection.d.ts +76 -0
  6. package/dist/cli/test-connection.d.ts.map +1 -0
  7. package/dist/cli/test-connection.js +697 -0
  8. package/dist/cli/test-connection.js.map +1 -0
  9. package/dist/cli.d.ts +3 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +50 -5
  12. package/dist/cli.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +8 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/providers/anthropic.d.ts +178 -0
  18. package/dist/providers/anthropic.d.ts.map +1 -0
  19. package/dist/providers/anthropic.js +514 -0
  20. package/dist/providers/anthropic.js.map +1 -0
  21. package/dist/providers/base.d.ts +154 -0
  22. package/dist/providers/base.d.ts.map +1 -0
  23. package/dist/providers/base.js +227 -0
  24. package/dist/providers/base.js.map +1 -0
  25. package/dist/providers/deepseek.d.ts +23 -0
  26. package/dist/providers/deepseek.d.ts.map +1 -0
  27. package/dist/providers/deepseek.js +31 -0
  28. package/dist/providers/deepseek.js.map +1 -0
  29. package/dist/providers/fireworks.d.ts +23 -0
  30. package/dist/providers/fireworks.d.ts.map +1 -0
  31. package/dist/providers/fireworks.js +31 -0
  32. package/dist/providers/fireworks.js.map +1 -0
  33. package/dist/providers/gemini.d.ts +85 -0
  34. package/dist/providers/gemini.d.ts.map +1 -0
  35. package/dist/providers/gemini.js +414 -0
  36. package/dist/providers/gemini.js.map +1 -0
  37. package/dist/providers/groq.d.ts +23 -0
  38. package/dist/providers/groq.d.ts.map +1 -0
  39. package/dist/providers/groq.js +31 -0
  40. package/dist/providers/groq.js.map +1 -0
  41. package/dist/providers/index.d.ts +23 -0
  42. package/dist/providers/index.d.ts.map +1 -0
  43. package/dist/providers/index.js +27 -0
  44. package/dist/providers/index.js.map +1 -0
  45. package/dist/providers/kimi-code.d.ts +32 -0
  46. package/dist/providers/kimi-code.d.ts.map +1 -0
  47. package/dist/providers/kimi-code.js +46 -0
  48. package/dist/providers/kimi-code.js.map +1 -0
  49. package/dist/providers/kimi.d.ts +19 -0
  50. package/dist/providers/kimi.d.ts.map +1 -0
  51. package/dist/providers/kimi.js +27 -0
  52. package/dist/providers/kimi.js.map +1 -0
  53. package/dist/providers/manager.d.ts +144 -0
  54. package/dist/providers/manager.d.ts.map +1 -0
  55. package/dist/providers/manager.js +279 -0
  56. package/dist/providers/manager.js.map +1 -0
  57. package/dist/providers/ollama.d.ts +83 -0
  58. package/dist/providers/ollama.d.ts.map +1 -0
  59. package/dist/providers/ollama.js +450 -0
  60. package/dist/providers/ollama.js.map +1 -0
  61. package/dist/providers/openai.d.ts +91 -0
  62. package/dist/providers/openai.d.ts.map +1 -0
  63. package/dist/providers/openai.js +445 -0
  64. package/dist/providers/openai.js.map +1 -0
  65. package/dist/providers/openrouter.d.ts +23 -0
  66. package/dist/providers/openrouter.d.ts.map +1 -0
  67. package/dist/providers/openrouter.js +31 -0
  68. package/dist/providers/openrouter.js.map +1 -0
  69. package/dist/providers/perplexity.d.ts +34 -0
  70. package/dist/providers/perplexity.d.ts.map +1 -0
  71. package/dist/providers/perplexity.js +58 -0
  72. package/dist/providers/perplexity.js.map +1 -0
  73. package/dist/providers/together.d.ts +23 -0
  74. package/dist/providers/together.d.ts.map +1 -0
  75. package/dist/providers/together.js +31 -0
  76. package/dist/providers/together.js.map +1 -0
  77. package/dist/providers/types.d.ts +229 -0
  78. package/dist/providers/types.d.ts.map +1 -0
  79. package/dist/providers/types.js +73 -0
  80. package/dist/providers/types.js.map +1 -0
  81. package/dist/providers/zai.d.ts +19 -0
  82. package/dist/providers/zai.d.ts.map +1 -0
  83. package/dist/providers/zai.js +27 -0
  84. package/dist/providers/zai.js.map +1 -0
  85. package/dist/services/provider.service.d.ts +28 -0
  86. package/dist/services/provider.service.d.ts.map +1 -1
  87. package/dist/services/provider.service.js +137 -13
  88. package/dist/services/provider.service.js.map +1 -1
  89. package/dist/tools/demerzel/engine.d.ts +67 -0
  90. package/dist/tools/demerzel/engine.d.ts.map +1 -0
  91. package/dist/tools/demerzel/engine.js +401 -0
  92. package/dist/tools/demerzel/engine.js.map +1 -0
  93. package/dist/tools/demerzel/enhanced-snapshot.d.ts +67 -0
  94. package/dist/tools/demerzel/enhanced-snapshot.d.ts.map +1 -0
  95. package/dist/tools/demerzel/enhanced-snapshot.js +481 -0
  96. package/dist/tools/demerzel/enhanced-snapshot.js.map +1 -0
  97. package/dist/tools/demerzel/index.d.ts +11 -0
  98. package/dist/tools/demerzel/index.d.ts.map +1 -1
  99. package/dist/tools/demerzel/index.js +656 -85
  100. package/dist/tools/demerzel/index.js.map +1 -1
  101. package/dist/tools/demerzel/prompts.d.ts +26 -0
  102. package/dist/tools/demerzel/prompts.d.ts.map +1 -0
  103. package/dist/tools/demerzel/prompts.js +181 -0
  104. package/dist/tools/demerzel/prompts.js.map +1 -0
  105. package/dist/tools/demerzel/semantic-search.d.ts +54 -0
  106. package/dist/tools/demerzel/semantic-search.d.ts.map +1 -0
  107. package/dist/tools/demerzel/semantic-search.js +205 -0
  108. package/dist/tools/demerzel/semantic-search.js.map +1 -0
  109. package/dist/tools/demerzel/snapshot.d.ts +30 -0
  110. package/dist/tools/demerzel/snapshot.d.ts.map +1 -0
  111. package/dist/tools/demerzel/snapshot.js +169 -0
  112. package/dist/tools/demerzel/snapshot.js.map +1 -0
  113. 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;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsM7D"}
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"}