cortex-mcp 1.0.1
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/CHANGELOG.md +54 -0
- package/LICENSE +21 -0
- package/README.md +202 -0
- package/dist/cli/setup.d.ts +12 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +293 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config/config.d.ts +13 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +33 -0
- package/dist/config/config.js.map +1 -0
- package/dist/core/event-bus.d.ts +19 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +51 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/db/database.d.ts +19 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +254 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/event-log.d.ts +28 -0
- package/dist/db/event-log.d.ts.map +1 -0
- package/dist/db/event-log.js +87 -0
- package/dist/db/event-log.js.map +1 -0
- package/dist/db/memory-store.d.ts +65 -0
- package/dist/db/memory-store.d.ts.map +1 -0
- package/dist/db/memory-store.js +370 -0
- package/dist/db/memory-store.js.map +1 -0
- package/dist/embedding-worker.d.ts +3 -0
- package/dist/embedding-worker.d.ts.map +1 -0
- package/dist/embedding-worker.js +94 -0
- package/dist/embedding-worker.js.map +1 -0
- package/dist/hooks/cortex-run.d.ts +15 -0
- package/dist/hooks/cortex-run.d.ts.map +1 -0
- package/dist/hooks/cortex-run.js +148 -0
- package/dist/hooks/cortex-run.js.map +1 -0
- package/dist/hooks/git-capture.d.ts +21 -0
- package/dist/hooks/git-capture.d.ts.map +1 -0
- package/dist/hooks/git-capture.js +178 -0
- package/dist/hooks/git-capture.js.map +1 -0
- package/dist/hooks/git-hooks.d.ts +12 -0
- package/dist/hooks/git-hooks.d.ts.map +1 -0
- package/dist/hooks/git-hooks.js +130 -0
- package/dist/hooks/git-hooks.js.map +1 -0
- package/dist/mcp-stdio.d.ts +10 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js +247 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/memory/anticipation-engine.d.ts +19 -0
- package/dist/memory/anticipation-engine.d.ts.map +1 -0
- package/dist/memory/anticipation-engine.js +76 -0
- package/dist/memory/anticipation-engine.js.map +1 -0
- package/dist/memory/attention-ranker.d.ts +19 -0
- package/dist/memory/attention-ranker.d.ts.map +1 -0
- package/dist/memory/attention-ranker.js +97 -0
- package/dist/memory/attention-ranker.js.map +1 -0
- package/dist/memory/auto-learner.d.ts +20 -0
- package/dist/memory/auto-learner.d.ts.map +1 -0
- package/dist/memory/auto-learner.js +179 -0
- package/dist/memory/auto-learner.js.map +1 -0
- package/dist/memory/confidence-decay.d.ts +22 -0
- package/dist/memory/confidence-decay.d.ts.map +1 -0
- package/dist/memory/confidence-decay.js +54 -0
- package/dist/memory/confidence-decay.js.map +1 -0
- package/dist/memory/embedding-manager.d.ts +5 -0
- package/dist/memory/embedding-manager.d.ts.map +1 -0
- package/dist/memory/embedding-manager.js +118 -0
- package/dist/memory/embedding-manager.js.map +1 -0
- package/dist/memory/export-import.d.ts +49 -0
- package/dist/memory/export-import.d.ts.map +1 -0
- package/dist/memory/export-import.js +131 -0
- package/dist/memory/export-import.js.map +1 -0
- package/dist/memory/git-memory.d.ts +15 -0
- package/dist/memory/git-memory.d.ts.map +1 -0
- package/dist/memory/git-memory.js +178 -0
- package/dist/memory/git-memory.js.map +1 -0
- package/dist/memory/learning-rate.d.ts +24 -0
- package/dist/memory/learning-rate.d.ts.map +1 -0
- package/dist/memory/learning-rate.js +95 -0
- package/dist/memory/learning-rate.js.map +1 -0
- package/dist/memory/llm-enhancer.d.ts +54 -0
- package/dist/memory/llm-enhancer.d.ts.map +1 -0
- package/dist/memory/llm-enhancer.js +270 -0
- package/dist/memory/llm-enhancer.js.map +1 -0
- package/dist/memory/memory-cache.d.ts +5 -0
- package/dist/memory/memory-cache.d.ts.map +1 -0
- package/dist/memory/memory-cache.js +37 -0
- package/dist/memory/memory-cache.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +14 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +156 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/memory-decay.d.ts +10 -0
- package/dist/memory/memory-decay.d.ts.map +1 -0
- package/dist/memory/memory-decay.js +79 -0
- package/dist/memory/memory-decay.js.map +1 -0
- package/dist/memory/memory-quality.d.ts +37 -0
- package/dist/memory/memory-quality.d.ts.map +1 -0
- package/dist/memory/memory-quality.js +203 -0
- package/dist/memory/memory-quality.js.map +1 -0
- package/dist/memory/memory-ranker.d.ts +14 -0
- package/dist/memory/memory-ranker.d.ts.map +1 -0
- package/dist/memory/memory-ranker.js +68 -0
- package/dist/memory/memory-ranker.js.map +1 -0
- package/dist/memory/meta-memory.d.ts +11 -0
- package/dist/memory/meta-memory.d.ts.map +1 -0
- package/dist/memory/meta-memory.js +141 -0
- package/dist/memory/meta-memory.js.map +1 -0
- package/dist/memory/session-tracker.d.ts +39 -0
- package/dist/memory/session-tracker.d.ts.map +1 -0
- package/dist/memory/session-tracker.js +127 -0
- package/dist/memory/session-tracker.js.map +1 -0
- package/dist/memory/temporal-engine.d.ts +25 -0
- package/dist/memory/temporal-engine.d.ts.map +1 -0
- package/dist/memory/temporal-engine.js +106 -0
- package/dist/memory/temporal-engine.js.map +1 -0
- package/dist/retrieval/hybrid-retriever.d.ts +23 -0
- package/dist/retrieval/hybrid-retriever.d.ts.map +1 -0
- package/dist/retrieval/hybrid-retriever.js +120 -0
- package/dist/retrieval/hybrid-retriever.js.map +1 -0
- package/dist/scanners/architecture-graph.d.ts +30 -0
- package/dist/scanners/architecture-graph.d.ts.map +1 -0
- package/dist/scanners/architecture-graph.js +315 -0
- package/dist/scanners/architecture-graph.js.map +1 -0
- package/dist/scanners/code-verifier.d.ts +70 -0
- package/dist/scanners/code-verifier.d.ts.map +1 -0
- package/dist/scanners/code-verifier.js +374 -0
- package/dist/scanners/code-verifier.js.map +1 -0
- package/dist/scanners/context-builder.d.ts +19 -0
- package/dist/scanners/context-builder.d.ts.map +1 -0
- package/dist/scanners/context-builder.js +102 -0
- package/dist/scanners/context-builder.js.map +1 -0
- package/dist/scanners/export-map.d.ts +22 -0
- package/dist/scanners/export-map.d.ts.map +1 -0
- package/dist/scanners/export-map.js +249 -0
- package/dist/scanners/export-map.js.map +1 -0
- package/dist/scanners/file-verifier.d.ts +22 -0
- package/dist/scanners/file-verifier.d.ts.map +1 -0
- package/dist/scanners/file-verifier.js +140 -0
- package/dist/scanners/file-verifier.js.map +1 -0
- package/dist/scanners/project-scanner.d.ts +31 -0
- package/dist/scanners/project-scanner.d.ts.map +1 -0
- package/dist/scanners/project-scanner.js +398 -0
- package/dist/scanners/project-scanner.js.map +1 -0
- package/dist/security/encryption.d.ts +15 -0
- package/dist/security/encryption.d.ts.map +1 -0
- package/dist/security/encryption.js +116 -0
- package/dist/security/encryption.js.map +1 -0
- package/dist/security/feature-gate.d.ts +30 -0
- package/dist/security/feature-gate.d.ts.map +1 -0
- package/dist/security/feature-gate.js +91 -0
- package/dist/security/feature-gate.js.map +1 -0
- package/dist/security/license.d.ts +24 -0
- package/dist/security/license.d.ts.map +1 -0
- package/dist/security/license.js +168 -0
- package/dist/security/license.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +20 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +60 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/server/dashboard.d.ts +3 -0
- package/dist/server/dashboard.d.ts.map +1 -0
- package/dist/server/dashboard.js +258 -0
- package/dist/server/dashboard.js.map +1 -0
- package/dist/server/mcp-handler.d.ts +12 -0
- package/dist/server/mcp-handler.d.ts.map +1 -0
- package/dist/server/mcp-handler.js +1392 -0
- package/dist/server/mcp-handler.js.map +1 -0
- package/dist/strategies/embedders/local-minilm.d.ts +35 -0
- package/dist/strategies/embedders/local-minilm.d.ts.map +1 -0
- package/dist/strategies/embedders/local-minilm.js +176 -0
- package/dist/strategies/embedders/local-minilm.js.map +1 -0
- package/dist/types.d.ts +207 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +83 -0
- package/dist/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.buildExportMap = buildExportMap;
|
|
37
|
+
exports.storeExportMap = storeExportMap;
|
|
38
|
+
exports.formatExportMap = formatExportMap;
|
|
39
|
+
exports.suggestRealExport = suggestRealExport;
|
|
40
|
+
/**
|
|
41
|
+
* Export Map — Builds a complete map of all exported functions/classes/types
|
|
42
|
+
* across the entire project. This is the anti-hallucination weapon.
|
|
43
|
+
*
|
|
44
|
+
* When AI tries to use a function that doesn't exist, this module:
|
|
45
|
+
* 1. Provides the full list of REAL exports per file
|
|
46
|
+
* 2. Suggests the closest matching REAL function
|
|
47
|
+
* 3. Stores the export map as memories so it's injected at conversation start
|
|
48
|
+
*
|
|
49
|
+
* This prevents the #1 hallucination: AI inventing functions that don't exist.
|
|
50
|
+
*/
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const types_1 = require("../types");
|
|
54
|
+
/** Build complete export map for the project */
|
|
55
|
+
function buildExportMap(workspaceRoot) {
|
|
56
|
+
const files = new Map();
|
|
57
|
+
const allExports = [];
|
|
58
|
+
const srcDirs = ['src', 'lib', 'app', 'pages', 'components', 'utils', 'services', 'hooks', 'api'];
|
|
59
|
+
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs'];
|
|
60
|
+
for (const dir of srcDirs) {
|
|
61
|
+
const dirPath = path.join(workspaceRoot, dir);
|
|
62
|
+
if (!fs.existsSync(dirPath))
|
|
63
|
+
continue;
|
|
64
|
+
scanDir(dirPath, workspaceRoot, files, allExports, extensions, 0);
|
|
65
|
+
}
|
|
66
|
+
// Also check root-level files
|
|
67
|
+
try {
|
|
68
|
+
const rootFiles = fs.readdirSync(workspaceRoot);
|
|
69
|
+
for (const f of rootFiles) {
|
|
70
|
+
if (extensions.some(ext => f.endsWith(ext)) && !f.includes('.d.ts') && !f.includes('node_modules')) {
|
|
71
|
+
const fullPath = path.join(workspaceRoot, f);
|
|
72
|
+
if (fs.statSync(fullPath).isFile()) {
|
|
73
|
+
extractFileExports(fullPath, workspaceRoot, files, allExports);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch { }
|
|
79
|
+
return {
|
|
80
|
+
files,
|
|
81
|
+
allExports,
|
|
82
|
+
totalFiles: files.size,
|
|
83
|
+
totalExports: allExports.length,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Store export map as memories for AI context injection */
|
|
87
|
+
function storeExportMap(memoryStore, exportMap) {
|
|
88
|
+
if (exportMap.totalExports === 0)
|
|
89
|
+
return 0;
|
|
90
|
+
// Remove previous export map memories
|
|
91
|
+
const existing = memoryStore.getActive(500).filter(m => m.tags?.includes('export-map'));
|
|
92
|
+
for (const m of existing) {
|
|
93
|
+
try {
|
|
94
|
+
memoryStore.deactivate(m.id, 'export-map-refresh');
|
|
95
|
+
}
|
|
96
|
+
catch { }
|
|
97
|
+
}
|
|
98
|
+
// Group by directory for compact storage
|
|
99
|
+
const byDir = new Map();
|
|
100
|
+
for (const entry of exportMap.allExports) {
|
|
101
|
+
const dir = path.dirname(entry.file);
|
|
102
|
+
if (!byDir.has(dir))
|
|
103
|
+
byDir.set(dir, []);
|
|
104
|
+
const sig = entry.signature ? ` — ${entry.signature}` : '';
|
|
105
|
+
byDir.get(dir).push(`${entry.name} (${entry.kind})${sig}`);
|
|
106
|
+
}
|
|
107
|
+
let stored = 0;
|
|
108
|
+
for (const [dir, exports] of byDir) {
|
|
109
|
+
const exportList = exports.slice(0, 30).join(', ');
|
|
110
|
+
memoryStore.add({
|
|
111
|
+
type: types_1.MemoryType.INSIGHT,
|
|
112
|
+
intent: `Available exports in ${dir}/: ${exports.length} items`,
|
|
113
|
+
action: exportList,
|
|
114
|
+
tags: ['export-map', 'anti-hallucination', dir],
|
|
115
|
+
confidence: 0.9,
|
|
116
|
+
importance: 0.6,
|
|
117
|
+
timestamp: Date.now(),
|
|
118
|
+
isActive: true,
|
|
119
|
+
accessCount: 0,
|
|
120
|
+
createdAt: Date.now(),
|
|
121
|
+
id: '',
|
|
122
|
+
});
|
|
123
|
+
stored++;
|
|
124
|
+
}
|
|
125
|
+
return stored;
|
|
126
|
+
}
|
|
127
|
+
/** Format export map for compact context injection */
|
|
128
|
+
function formatExportMap(exportMap) {
|
|
129
|
+
if (exportMap.totalExports === 0)
|
|
130
|
+
return '';
|
|
131
|
+
const lines = [`## [API] Project Exports (${exportMap.totalExports} exports across ${exportMap.totalFiles} files)`];
|
|
132
|
+
// Group by directory, show top exports
|
|
133
|
+
const byDir = new Map();
|
|
134
|
+
for (const entry of exportMap.allExports) {
|
|
135
|
+
const dir = path.dirname(entry.file);
|
|
136
|
+
if (!byDir.has(dir))
|
|
137
|
+
byDir.set(dir, []);
|
|
138
|
+
byDir.get(dir).push(entry);
|
|
139
|
+
}
|
|
140
|
+
for (const [dir, entries] of [...byDir.entries()].slice(0, 8)) {
|
|
141
|
+
const names = entries.slice(0, 10).map(e => {
|
|
142
|
+
if (e.kind === 'function')
|
|
143
|
+
return `${e.name}()`;
|
|
144
|
+
if (e.kind === 'class')
|
|
145
|
+
return `class ${e.name}`;
|
|
146
|
+
return e.name;
|
|
147
|
+
});
|
|
148
|
+
lines.push(`**${dir}/** → ${names.join(', ')}`);
|
|
149
|
+
}
|
|
150
|
+
return lines.join('\n');
|
|
151
|
+
}
|
|
152
|
+
/** Find closest matching real export for a hallucinated name */
|
|
153
|
+
function suggestRealExport(exportMap, hallucinated) {
|
|
154
|
+
const lower = hallucinated.toLowerCase();
|
|
155
|
+
const suggestions = [];
|
|
156
|
+
for (const entry of exportMap.allExports) {
|
|
157
|
+
const entryLower = entry.name.toLowerCase();
|
|
158
|
+
// Exact substring match
|
|
159
|
+
if (entryLower.includes(lower) || lower.includes(entryLower)) {
|
|
160
|
+
suggestions.push({ name: entry.name, file: entry.file, score: 0.9 });
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
// Check similar characters (basic similarity)
|
|
164
|
+
const commonChars = [...lower].filter(c => entryLower.includes(c)).length;
|
|
165
|
+
const similarity = commonChars / Math.max(lower.length, entryLower.length);
|
|
166
|
+
if (similarity > 0.5) {
|
|
167
|
+
suggestions.push({ name: entry.name, file: entry.file, score: similarity });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return suggestions
|
|
171
|
+
.sort((a, b) => b.score - a.score)
|
|
172
|
+
.slice(0, 5)
|
|
173
|
+
.map(s => `${s.name} (from ${s.file})`);
|
|
174
|
+
}
|
|
175
|
+
// ─── Internal Helpers ─────────────────────────────────────────────────────────
|
|
176
|
+
function scanDir(dir, root, files, all, extensions, depth) {
|
|
177
|
+
if (depth > 5)
|
|
178
|
+
return;
|
|
179
|
+
try {
|
|
180
|
+
const entries = fs.readdirSync(dir);
|
|
181
|
+
for (const entry of entries) {
|
|
182
|
+
if (entry.startsWith('.') || entry === 'node_modules' || entry === 'dist' || entry === 'build')
|
|
183
|
+
continue;
|
|
184
|
+
const fullPath = path.join(dir, entry);
|
|
185
|
+
const stat = fs.statSync(fullPath);
|
|
186
|
+
if (stat.isDirectory()) {
|
|
187
|
+
scanDir(fullPath, root, files, all, extensions, depth + 1);
|
|
188
|
+
}
|
|
189
|
+
else if (stat.isFile() && extensions.some(ext => entry.endsWith(ext)) && !entry.includes('.d.ts')) {
|
|
190
|
+
extractFileExports(fullPath, root, files, all);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch { }
|
|
195
|
+
}
|
|
196
|
+
function extractFileExports(fullPath, root, files, all) {
|
|
197
|
+
try {
|
|
198
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
199
|
+
const relativePath = path.relative(root, fullPath).replace(/\\/g, '/');
|
|
200
|
+
const exports = [];
|
|
201
|
+
// Pattern → kind mapping
|
|
202
|
+
const patterns = [
|
|
203
|
+
{ regex: /export\s+(?:async\s+)?function\s+(\w+)\s*(\([^)]*\))/g, kind: 'function', sigExtract: true },
|
|
204
|
+
{ regex: /export\s+(?:abstract\s+)?class\s+(\w+)(?:\s+extends\s+(\w+))?/g, kind: 'class', sigExtract: true },
|
|
205
|
+
{ regex: /export\s+const\s+(\w+)/g, kind: 'const' },
|
|
206
|
+
{ regex: /export\s+let\s+(\w+)/g, kind: 'const' },
|
|
207
|
+
{ regex: /export\s+enum\s+(\w+)/g, kind: 'enum' },
|
|
208
|
+
{ regex: /export\s+interface\s+(\w+)/g, kind: 'interface' },
|
|
209
|
+
{ regex: /export\s+type\s+(\w+)/g, kind: 'type' },
|
|
210
|
+
{ regex: /export\s+default\s+(?:class|function)\s+(\w+)/g, kind: 'default' },
|
|
211
|
+
];
|
|
212
|
+
for (const { regex, kind, sigExtract } of patterns) {
|
|
213
|
+
let match;
|
|
214
|
+
while ((match = regex.exec(content)) !== null) {
|
|
215
|
+
const entry = {
|
|
216
|
+
file: relativePath,
|
|
217
|
+
name: match[1],
|
|
218
|
+
kind,
|
|
219
|
+
};
|
|
220
|
+
if (sigExtract && match[2]) {
|
|
221
|
+
entry.signature = kind === 'function'
|
|
222
|
+
? `${match[1]}${match[2]}`
|
|
223
|
+
: `class ${match[1]} extends ${match[2]}`;
|
|
224
|
+
}
|
|
225
|
+
exports.push(entry);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Handle export { foo, bar }
|
|
229
|
+
const reExport = /export\s*\{\s*([^}]+)\s*\}/g;
|
|
230
|
+
let match;
|
|
231
|
+
while ((match = reExport.exec(content)) !== null) {
|
|
232
|
+
const names = match[1].split(',').map(n => {
|
|
233
|
+
const parts = n.trim().split(/\s+as\s+/);
|
|
234
|
+
return parts[parts.length - 1].trim();
|
|
235
|
+
});
|
|
236
|
+
for (const name of names) {
|
|
237
|
+
if (name && /^\w+$/.test(name)) {
|
|
238
|
+
exports.push({ file: relativePath, name, kind: 'const' });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (exports.length > 0) {
|
|
243
|
+
files.set(relativePath, exports);
|
|
244
|
+
all.push(...exports);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch { }
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=export-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-map.js","sourceRoot":"","sources":["../../src/scanners/export-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface VerificationResult {
|
|
2
|
+
valid: string[];
|
|
3
|
+
invalid: string[];
|
|
4
|
+
suggestions: Record<string, string[]>;
|
|
5
|
+
}
|
|
6
|
+
export declare class FileVerifier {
|
|
7
|
+
private workspaceRoot;
|
|
8
|
+
private fileIndex;
|
|
9
|
+
private lastIndexTime;
|
|
10
|
+
constructor(workspaceRoot: string);
|
|
11
|
+
/** Build file index (cached, rebuilt every 60s) */
|
|
12
|
+
private buildIndex;
|
|
13
|
+
/** Verify a list of file paths */
|
|
14
|
+
verify(filePaths: string[]): VerificationResult;
|
|
15
|
+
/** Extract file paths from text (AI response) */
|
|
16
|
+
extractPaths(text: string): string[];
|
|
17
|
+
/** Full verification: extract paths from text and verify all */
|
|
18
|
+
verifyText(text: string): VerificationResult;
|
|
19
|
+
/** Get all indexed files (for context injection) */
|
|
20
|
+
getAllFiles(): string[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=file-verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-verifier.d.ts","sourceRoot":"","sources":["../../src/scanners/file-verifier.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACzC;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,aAAa,CAAa;gBAEtB,aAAa,EAAE,MAAM;IAKjC,mDAAmD;IACnD,OAAO,CAAC,UAAU;IA2BlB,kCAAkC;IAClC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,kBAAkB;IAmC/C,iDAAiD;IACjD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAmBpC,gEAAgE;IAChE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB;IAK5C,oDAAoD;IACpD,WAAW,IAAI,MAAM,EAAE;CAI1B"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.FileVerifier = void 0;
|
|
37
|
+
/**
|
|
38
|
+
* File Verifier — Catches hallucinated file paths.
|
|
39
|
+
*
|
|
40
|
+
* Pure Node.js — no VS Code dependency.
|
|
41
|
+
* Verifies file paths mentioned in AI responses against the real file system.
|
|
42
|
+
*/
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
class FileVerifier {
|
|
46
|
+
workspaceRoot;
|
|
47
|
+
fileIndex = new Set();
|
|
48
|
+
lastIndexTime = 0;
|
|
49
|
+
constructor(workspaceRoot) {
|
|
50
|
+
this.workspaceRoot = workspaceRoot;
|
|
51
|
+
this.buildIndex();
|
|
52
|
+
}
|
|
53
|
+
/** Build file index (cached, rebuilt every 60s) */
|
|
54
|
+
buildIndex() {
|
|
55
|
+
if (Date.now() - this.lastIndexTime < 60_000 && this.fileIndex.size > 0)
|
|
56
|
+
return;
|
|
57
|
+
this.fileIndex.clear();
|
|
58
|
+
const ignore = new Set(['node_modules', '.git', 'dist', '.ai', '.gemini', 'coverage']);
|
|
59
|
+
const walk = (dir, depth = 0) => {
|
|
60
|
+
if (depth > 6)
|
|
61
|
+
return;
|
|
62
|
+
try {
|
|
63
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
64
|
+
for (const entry of entries) {
|
|
65
|
+
if (ignore.has(entry.name))
|
|
66
|
+
continue;
|
|
67
|
+
const rel = path.relative(this.workspaceRoot, path.join(dir, entry.name));
|
|
68
|
+
if (entry.isDirectory()) {
|
|
69
|
+
this.fileIndex.add(rel.replace(/\\/g, '/') + '/');
|
|
70
|
+
walk(path.join(dir, entry.name), depth + 1);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this.fileIndex.add(rel.replace(/\\/g, '/'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch { }
|
|
78
|
+
};
|
|
79
|
+
walk(this.workspaceRoot);
|
|
80
|
+
this.lastIndexTime = Date.now();
|
|
81
|
+
}
|
|
82
|
+
/** Verify a list of file paths */
|
|
83
|
+
verify(filePaths) {
|
|
84
|
+
this.buildIndex(); // refresh if stale
|
|
85
|
+
const result = { valid: [], invalid: [], suggestions: {} };
|
|
86
|
+
for (const filePath of filePaths) {
|
|
87
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
88
|
+
// Check exact match
|
|
89
|
+
if (this.fileIndex.has(normalized)) {
|
|
90
|
+
result.valid.push(filePath);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Check absolute path
|
|
94
|
+
const abs = path.resolve(this.workspaceRoot, filePath);
|
|
95
|
+
if (fs.existsSync(abs)) {
|
|
96
|
+
result.valid.push(filePath);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// Invalid — find suggestions
|
|
100
|
+
result.invalid.push(filePath);
|
|
101
|
+
const basename = path.basename(filePath);
|
|
102
|
+
const suggestions = Array.from(this.fileIndex)
|
|
103
|
+
.filter(f => f.endsWith(basename))
|
|
104
|
+
.slice(0, 3);
|
|
105
|
+
if (suggestions.length > 0) {
|
|
106
|
+
result.suggestions[filePath] = suggestions;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
/** Extract file paths from text (AI response) */
|
|
112
|
+
extractPaths(text) {
|
|
113
|
+
const patterns = [
|
|
114
|
+
/(?:src|lib|app|pages|components|utils|hooks|services|server|api)\/[\w/.-]+\.\w+/g,
|
|
115
|
+
/[\w-]+\.(?:ts|tsx|js|jsx|py|rs|go|java|css|html|json|md|yaml|yml|toml)/g,
|
|
116
|
+
];
|
|
117
|
+
const paths = new Set();
|
|
118
|
+
for (const pattern of patterns) {
|
|
119
|
+
const matches = text.match(pattern) || [];
|
|
120
|
+
for (const m of matches) {
|
|
121
|
+
if (m.length > 3 && m.length < 200) {
|
|
122
|
+
paths.add(m);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return Array.from(paths);
|
|
127
|
+
}
|
|
128
|
+
/** Full verification: extract paths from text and verify all */
|
|
129
|
+
verifyText(text) {
|
|
130
|
+
const paths = this.extractPaths(text);
|
|
131
|
+
return this.verify(paths);
|
|
132
|
+
}
|
|
133
|
+
/** Get all indexed files (for context injection) */
|
|
134
|
+
getAllFiles() {
|
|
135
|
+
this.buildIndex();
|
|
136
|
+
return Array.from(this.fileIndex).filter(f => !f.endsWith('/'));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.FileVerifier = FileVerifier;
|
|
140
|
+
//# sourceMappingURL=file-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-verifier.js","sourceRoot":"","sources":["../../src/scanners/file-verifier.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,uCAAyB;AACzB,2CAA6B;AAQ7B,MAAa,YAAY;IACb,aAAa,CAAS;IACtB,SAAS,GAAgB,IAAI,GAAG,EAAE,CAAC;IACnC,aAAa,GAAW,CAAC,CAAC;IAElC,YAAY,aAAqB;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAED,mDAAmD;IAC3C,UAAU;QACd,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO;QAEhF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,QAAgB,CAAC,EAAQ,EAAE;YAClD,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO;YACtB,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC1B,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1E,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;wBAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oBAChD,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,SAAmB;QACtB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,mBAAmB;QAEtC,MAAM,MAAM,GAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAE/E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEhD,oBAAoB;YACpB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,SAAS;YACb,CAAC;YAED,sBAAsB;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,SAAS;YACb,CAAC;YAED,6BAA6B;YAC7B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;iBACzC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACjC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;YAC/C,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,iDAAiD;IACjD,YAAY,CAAC,IAAY;QACrB,MAAM,QAAQ,GAAG;YACb,kFAAkF;YAClF,yEAAyE;SAC5E,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACjC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,gEAAgE;IAChE,UAAU,CAAC,IAAY;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,oDAAoD;IACpD,WAAW;QACP,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;CACJ;AAzGD,oCAyGC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MemoryStore } from '../db/memory-store';
|
|
2
|
+
export declare class ProjectScanner {
|
|
3
|
+
private memoryStore;
|
|
4
|
+
private workspaceRoot;
|
|
5
|
+
constructor(memoryStore: MemoryStore, workspaceRoot: string);
|
|
6
|
+
/** Check if project was already scanned */
|
|
7
|
+
isAlreadyScanned(): boolean;
|
|
8
|
+
/** Full project scan — returns number of memories created */
|
|
9
|
+
scan(): Promise<number>;
|
|
10
|
+
/** Scan package.json for stack info */
|
|
11
|
+
private scanPackageJson;
|
|
12
|
+
/** Scan README for project purpose */
|
|
13
|
+
private scanReadme;
|
|
14
|
+
/** Scan directory structure (top 3 levels) */
|
|
15
|
+
private scanDirectoryStructure;
|
|
16
|
+
/** Build directory tree string */
|
|
17
|
+
private getDirectoryTree;
|
|
18
|
+
/** Scan config files for conventions */
|
|
19
|
+
private scanConfigFiles;
|
|
20
|
+
/** Scan git log for recent history */
|
|
21
|
+
private scanGitLog;
|
|
22
|
+
/** Scan import chains to build architecture flow */
|
|
23
|
+
private scanArchitecture;
|
|
24
|
+
/** Collect imports from source files */
|
|
25
|
+
private collectImports;
|
|
26
|
+
/** Scan .env files for environment context */
|
|
27
|
+
private scanEnvironment;
|
|
28
|
+
/** Get list of all source files (for file verification) */
|
|
29
|
+
getSourceFiles(): string[];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=project-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-scanner.d.ts","sourceRoot":"","sources":["../../src/scanners/project-scanner.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,qBAAa,cAAc;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM;IAK3D,2CAA2C;IAC3C,gBAAgB,IAAI,OAAO;IAK3B,6DAA6D;IACvD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAgB7B,uCAAuC;IACvC,OAAO,CAAC,eAAe;IA4BvB,sCAAsC;IACtC,OAAO,CAAC,UAAU;IAkClB,8CAA8C;IAC9C,OAAO,CAAC,sBAAsB;IAoB9B,kCAAkC;IAClC,OAAO,CAAC,gBAAgB;IA2BxB,wCAAwC;IACxC,OAAO,CAAC,eAAe;IA0BvB,sCAAsC;YACxB,UAAU;IA2BxB,oDAAoD;IACpD,OAAO,CAAC,gBAAgB;IA2DxB,wCAAwC;IACxC,OAAO,CAAC,cAAc;IAkCtB,8CAA8C;IAC9C,OAAO,CAAC,eAAe;IAuCvB,2DAA2D;IAC3D,cAAc,IAAI,MAAM,EAAE;CAuB7B"}
|