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,374 @@
|
|
|
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.ConfigVerifier = exports.ExportVerifier = exports.ImportVerifier = void 0;
|
|
37
|
+
exports.verifyCode = verifyCode;
|
|
38
|
+
/**
|
|
39
|
+
* Code Verifier — Catches hallucinated imports, exports, and config keys.
|
|
40
|
+
*
|
|
41
|
+
* Three verification modes:
|
|
42
|
+
* 1. Import Verifier — checks if npm packages exist in package.json / node_modules
|
|
43
|
+
* 2. Export Verifier — checks if imported functions actually exist in source files
|
|
44
|
+
* 3. Config Verifier — checks if env variables exist in .env / .env.example
|
|
45
|
+
*/
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
// ─── Import Verifier ───
|
|
49
|
+
class ImportVerifier {
|
|
50
|
+
workspaceRoot;
|
|
51
|
+
installedPackages = new Set();
|
|
52
|
+
declaredDeps = new Set();
|
|
53
|
+
constructor(workspaceRoot) {
|
|
54
|
+
this.workspaceRoot = workspaceRoot;
|
|
55
|
+
this.loadPackageJson();
|
|
56
|
+
this.scanNodeModules();
|
|
57
|
+
}
|
|
58
|
+
loadPackageJson() {
|
|
59
|
+
try {
|
|
60
|
+
const pkgPath = path.join(this.workspaceRoot, 'package.json');
|
|
61
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
62
|
+
const allDeps = {
|
|
63
|
+
...pkg.dependencies,
|
|
64
|
+
...pkg.devDependencies,
|
|
65
|
+
...pkg.peerDependencies,
|
|
66
|
+
};
|
|
67
|
+
for (const name of Object.keys(allDeps || {})) {
|
|
68
|
+
this.declaredDeps.add(name);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch { }
|
|
72
|
+
}
|
|
73
|
+
scanNodeModules() {
|
|
74
|
+
try {
|
|
75
|
+
const nmPath = path.join(this.workspaceRoot, 'node_modules');
|
|
76
|
+
const entries = fs.readdirSync(nmPath, { withFileTypes: true });
|
|
77
|
+
for (const entry of entries) {
|
|
78
|
+
if (entry.isDirectory() && !entry.name.startsWith('.')) {
|
|
79
|
+
if (entry.name.startsWith('@')) {
|
|
80
|
+
// Scoped packages like @types/node
|
|
81
|
+
try {
|
|
82
|
+
const scoped = fs.readdirSync(path.join(nmPath, entry.name));
|
|
83
|
+
for (const sub of scoped) {
|
|
84
|
+
this.installedPackages.add(`${entry.name}/${sub}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch { }
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.installedPackages.add(entry.name);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch { }
|
|
96
|
+
}
|
|
97
|
+
/** Verify a list of package names */
|
|
98
|
+
verify(packages) {
|
|
99
|
+
const result = { valid: [], invalid: [], suggestions: {} };
|
|
100
|
+
for (const pkg of packages) {
|
|
101
|
+
// Skip relative imports and node builtins
|
|
102
|
+
if (pkg.startsWith('.') || pkg.startsWith('/'))
|
|
103
|
+
continue;
|
|
104
|
+
if (this.isNodeBuiltin(pkg))
|
|
105
|
+
continue;
|
|
106
|
+
// Get the package name (handle subpath like 'lodash/merge')
|
|
107
|
+
const pkgName = pkg.startsWith('@')
|
|
108
|
+
? pkg.split('/').slice(0, 2).join('/')
|
|
109
|
+
: pkg.split('/')[0];
|
|
110
|
+
if (this.declaredDeps.has(pkgName) || this.installedPackages.has(pkgName)) {
|
|
111
|
+
result.valid.push(pkgName);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
result.invalid.push(pkgName);
|
|
115
|
+
// Find similar packages
|
|
116
|
+
const suggestions = this.findSimilar(pkgName);
|
|
117
|
+
if (suggestions.length > 0) {
|
|
118
|
+
result.suggestions[pkgName] = suggestions;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
/** Extract import package names from code text */
|
|
125
|
+
extractImports(text) {
|
|
126
|
+
const packages = new Set();
|
|
127
|
+
const patterns = [
|
|
128
|
+
/(?:from\s+['"])([^'"]+)(?:['"])/g, // import ... from 'pkg'
|
|
129
|
+
/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g, // require('pkg')
|
|
130
|
+
/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g, // dynamic import('pkg')
|
|
131
|
+
];
|
|
132
|
+
for (const pattern of patterns) {
|
|
133
|
+
let match;
|
|
134
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
135
|
+
const pkg = match[1];
|
|
136
|
+
if (!pkg.startsWith('.') && !pkg.startsWith('/')) {
|
|
137
|
+
packages.add(pkg);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return Array.from(packages);
|
|
142
|
+
}
|
|
143
|
+
isNodeBuiltin(name) {
|
|
144
|
+
const builtins = new Set([
|
|
145
|
+
'assert', 'buffer', 'child_process', 'cluster', 'console', 'constants',
|
|
146
|
+
'crypto', 'dgram', 'dns', 'domain', 'events', 'fs', 'http', 'http2',
|
|
147
|
+
'https', 'module', 'net', 'os', 'path', 'perf_hooks', 'process',
|
|
148
|
+
'querystring', 'readline', 'repl', 'stream', 'string_decoder', 'sys',
|
|
149
|
+
'timers', 'tls', 'tty', 'url', 'util', 'v8', 'vm', 'worker_threads',
|
|
150
|
+
'zlib', 'diagnostics_channel', 'inspector', 'trace_events',
|
|
151
|
+
'node:assert', 'node:buffer', 'node:child_process', 'node:crypto',
|
|
152
|
+
'node:events', 'node:fs', 'node:http', 'node:https', 'node:net',
|
|
153
|
+
'node:os', 'node:path', 'node:process', 'node:readline', 'node:stream',
|
|
154
|
+
'node:url', 'node:util', 'node:worker_threads', 'node:zlib',
|
|
155
|
+
'node:diagnostics_channel', 'node:test',
|
|
156
|
+
]);
|
|
157
|
+
return builtins.has(name);
|
|
158
|
+
}
|
|
159
|
+
findSimilar(name) {
|
|
160
|
+
const allPkgs = Array.from(this.declaredDeps);
|
|
161
|
+
return allPkgs
|
|
162
|
+
.filter(p => {
|
|
163
|
+
// Simple similarity: shared prefix or contains
|
|
164
|
+
return p.includes(name) || name.includes(p) ||
|
|
165
|
+
this.levenshteinClose(p, name);
|
|
166
|
+
})
|
|
167
|
+
.slice(0, 3);
|
|
168
|
+
}
|
|
169
|
+
levenshteinClose(a, b) {
|
|
170
|
+
if (Math.abs(a.length - b.length) > 3)
|
|
171
|
+
return false;
|
|
172
|
+
let diff = 0;
|
|
173
|
+
const minLen = Math.min(a.length, b.length);
|
|
174
|
+
for (let i = 0; i < minLen; i++) {
|
|
175
|
+
if (a[i] !== b[i])
|
|
176
|
+
diff++;
|
|
177
|
+
}
|
|
178
|
+
return diff + Math.abs(a.length - b.length) <= 2;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.ImportVerifier = ImportVerifier;
|
|
182
|
+
// ─── Export Verifier ───
|
|
183
|
+
class ExportVerifier {
|
|
184
|
+
workspaceRoot;
|
|
185
|
+
constructor(workspaceRoot) {
|
|
186
|
+
this.workspaceRoot = workspaceRoot;
|
|
187
|
+
}
|
|
188
|
+
/** Check if specific named exports exist in a source file */
|
|
189
|
+
verifyExports(filePath, names) {
|
|
190
|
+
const result = { valid: [], invalid: [], available: [] };
|
|
191
|
+
// Resolve the file path
|
|
192
|
+
const resolved = this.resolveFile(filePath);
|
|
193
|
+
if (!resolved) {
|
|
194
|
+
return { valid: [], invalid: names, available: [] };
|
|
195
|
+
}
|
|
196
|
+
// Extract actual exports from the file
|
|
197
|
+
try {
|
|
198
|
+
const content = fs.readFileSync(resolved, 'utf-8');
|
|
199
|
+
const actualExports = this.extractExports(content);
|
|
200
|
+
result.available = actualExports;
|
|
201
|
+
for (const name of names) {
|
|
202
|
+
if (actualExports.includes(name)) {
|
|
203
|
+
result.valid.push(name);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
result.invalid.push(name);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
result.invalid = names;
|
|
212
|
+
}
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
/** Extract all exported names from a TypeScript/JavaScript file */
|
|
216
|
+
extractExports(content) {
|
|
217
|
+
const exports = new Set();
|
|
218
|
+
const patterns = [
|
|
219
|
+
/export\s+(?:async\s+)?function\s+(\w+)/g, // export function foo
|
|
220
|
+
/export\s+(?:abstract\s+)?class\s+(\w+)/g, // export class Foo
|
|
221
|
+
/export\s+const\s+(\w+)/g, // export const foo
|
|
222
|
+
/export\s+let\s+(\w+)/g, // export let foo
|
|
223
|
+
/export\s+var\s+(\w+)/g, // export var foo
|
|
224
|
+
/export\s+enum\s+(\w+)/g, // export enum Foo
|
|
225
|
+
/export\s+interface\s+(\w+)/g, // export interface Foo
|
|
226
|
+
/export\s+type\s+(\w+)/g, // export type Foo
|
|
227
|
+
/export\s+default\s+(?:class|function)\s+(\w+)/g, // export default class Foo
|
|
228
|
+
/export\s*\{\s*([^}]+)\s*\}/g, // export { foo, bar }
|
|
229
|
+
];
|
|
230
|
+
for (const pattern of patterns) {
|
|
231
|
+
let match;
|
|
232
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
233
|
+
const capture = match[1];
|
|
234
|
+
// Handle export { foo, bar, baz as qux }
|
|
235
|
+
if (pattern.source.includes('\\{')) {
|
|
236
|
+
const names = capture.split(',').map(n => {
|
|
237
|
+
const parts = n.trim().split(/\s+as\s+/);
|
|
238
|
+
return parts[parts.length - 1].trim();
|
|
239
|
+
});
|
|
240
|
+
names.forEach(n => { if (n && /^\w+$/.test(n))
|
|
241
|
+
exports.add(n); });
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
exports.add(capture);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return Array.from(exports);
|
|
249
|
+
}
|
|
250
|
+
/** Extract import-from-file statements from text */
|
|
251
|
+
extractLocalImports(text) {
|
|
252
|
+
const results = [];
|
|
253
|
+
// import { foo, bar } from './services/auth'
|
|
254
|
+
const pattern = /import\s*\{([^}]+)\}\s*from\s*['"](\.[^'"]+)['"]/g;
|
|
255
|
+
let match;
|
|
256
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
257
|
+
const names = match[1].split(',').map(n => {
|
|
258
|
+
const parts = n.trim().split(/\s+as\s+/);
|
|
259
|
+
return parts[0].trim(); // use the original name, not alias
|
|
260
|
+
}).filter(n => n.length > 0);
|
|
261
|
+
results.push({ names, file: match[2] });
|
|
262
|
+
}
|
|
263
|
+
return results;
|
|
264
|
+
}
|
|
265
|
+
resolveFile(filePath) {
|
|
266
|
+
const abs = path.isAbsolute(filePath)
|
|
267
|
+
? filePath
|
|
268
|
+
: path.join(this.workspaceRoot, filePath);
|
|
269
|
+
// Try exact, then with extensions
|
|
270
|
+
const tries = [abs, abs + '.ts', abs + '.tsx', abs + '.js', abs + '.jsx'];
|
|
271
|
+
// Also try /index variants
|
|
272
|
+
tries.push(path.join(abs, 'index.ts'), path.join(abs, 'index.tsx'), path.join(abs, 'index.js'));
|
|
273
|
+
for (const p of tries) {
|
|
274
|
+
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
|
275
|
+
return p;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
exports.ExportVerifier = ExportVerifier;
|
|
282
|
+
// ─── Config Verifier ───
|
|
283
|
+
class ConfigVerifier {
|
|
284
|
+
workspaceRoot;
|
|
285
|
+
envVars = new Set();
|
|
286
|
+
constructor(workspaceRoot) {
|
|
287
|
+
this.workspaceRoot = workspaceRoot;
|
|
288
|
+
this.loadEnvFiles();
|
|
289
|
+
}
|
|
290
|
+
loadEnvFiles() {
|
|
291
|
+
const envFiles = ['.env', '.env.example', '.env.local', '.env.development', '.env.template'];
|
|
292
|
+
for (const file of envFiles) {
|
|
293
|
+
try {
|
|
294
|
+
const content = fs.readFileSync(path.join(this.workspaceRoot, file), 'utf-8');
|
|
295
|
+
const lines = content.split('\n');
|
|
296
|
+
for (const line of lines) {
|
|
297
|
+
const trimmed = line.trim();
|
|
298
|
+
if (trimmed && !trimmed.startsWith('#')) {
|
|
299
|
+
const eqIndex = trimmed.indexOf('=');
|
|
300
|
+
if (eqIndex > 0) {
|
|
301
|
+
this.envVars.add(trimmed.substring(0, eqIndex).trim());
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch { }
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/** Extract env variable references from code */
|
|
310
|
+
extractEnvRefs(text) {
|
|
311
|
+
const vars = new Set();
|
|
312
|
+
const patterns = [
|
|
313
|
+
/process\.env\.(\w+)/g, // process.env.FOO
|
|
314
|
+
/process\.env\[['"](\w+)['"]\]/g, // process.env['FOO']
|
|
315
|
+
/import\.meta\.env\.(\w+)/g, // Vite: import.meta.env.FOO
|
|
316
|
+
/env\(['"](\w+)['"]\)/g, // Laravel-style env('FOO')
|
|
317
|
+
/getenv\(['"](\w+)['"]\)/g, // getenv('FOO')
|
|
318
|
+
];
|
|
319
|
+
for (const pattern of patterns) {
|
|
320
|
+
let match;
|
|
321
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
322
|
+
const varName = match[1];
|
|
323
|
+
// Skip common well-known ones
|
|
324
|
+
if (!['NODE_ENV', 'HOME', 'PATH', 'USER', 'SHELL', 'TERM', 'PWD'].includes(varName)) {
|
|
325
|
+
vars.add(varName);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return Array.from(vars);
|
|
330
|
+
}
|
|
331
|
+
/** Verify env variable references */
|
|
332
|
+
verify(varNames) {
|
|
333
|
+
const result = {
|
|
334
|
+
valid: [],
|
|
335
|
+
invalid: [],
|
|
336
|
+
available: Array.from(this.envVars),
|
|
337
|
+
};
|
|
338
|
+
for (const name of varNames) {
|
|
339
|
+
if (this.envVars.has(name)) {
|
|
340
|
+
result.valid.push(name);
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
result.invalid.push(name);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return result;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.ConfigVerifier = ConfigVerifier;
|
|
350
|
+
// ─── Combined Verifier ───
|
|
351
|
+
function verifyCode(text, workspaceRoot) {
|
|
352
|
+
const importVerifier = new ImportVerifier(workspaceRoot);
|
|
353
|
+
const exportVerifier = new ExportVerifier(workspaceRoot);
|
|
354
|
+
const configVerifier = new ConfigVerifier(workspaceRoot);
|
|
355
|
+
// 1. Verify imports
|
|
356
|
+
const importNames = importVerifier.extractImports(text);
|
|
357
|
+
const imports = importVerifier.verify(importNames);
|
|
358
|
+
// 2. Verify exports (local imports only)
|
|
359
|
+
const localImports = exportVerifier.extractLocalImports(text);
|
|
360
|
+
const exportResult = { valid: [], invalid: [], available: {} };
|
|
361
|
+
for (const li of localImports) {
|
|
362
|
+
const result = exportVerifier.verifyExports(li.file, li.names);
|
|
363
|
+
exportResult.valid.push(...result.valid);
|
|
364
|
+
exportResult.invalid.push(...result.invalid);
|
|
365
|
+
if (result.available.length > 0) {
|
|
366
|
+
exportResult.available[li.file] = result.available;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// 3. Verify env vars
|
|
370
|
+
const envRefs = configVerifier.extractEnvRefs(text);
|
|
371
|
+
const envVars = configVerifier.verify(envRefs);
|
|
372
|
+
return { imports, exports: exportResult, envVars };
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=code-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-verifier.js","sourceRoot":"","sources":["../../src/scanners/code-verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Builder — Builds dynamic context for brain/context resource.
|
|
3
|
+
*
|
|
4
|
+
* Combines project info + top memories + relevant corrections
|
|
5
|
+
* into a compressed context string that fits any model's context window.
|
|
6
|
+
*/
|
|
7
|
+
import { MemoryStore } from '../db/memory-store';
|
|
8
|
+
export declare class ContextBuilder {
|
|
9
|
+
private memoryStore;
|
|
10
|
+
constructor(memoryStore: MemoryStore);
|
|
11
|
+
/** Build the full context string for injection */
|
|
12
|
+
build(options?: {
|
|
13
|
+
currentFile?: string;
|
|
14
|
+
maxChars?: number;
|
|
15
|
+
}): string;
|
|
16
|
+
/** Compress context to fit within character budget */
|
|
17
|
+
private compress;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=context-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/scanners/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,qBAAa,cAAc;IACvB,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,EAAE,WAAW;IAIpC,kDAAkD;IAClD,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAyFpE,sDAAsD;IACtD,OAAO,CAAC,QAAQ;CAWnB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContextBuilder = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const config_1 = require("../config/config");
|
|
6
|
+
class ContextBuilder {
|
|
7
|
+
memoryStore;
|
|
8
|
+
constructor(memoryStore) {
|
|
9
|
+
this.memoryStore = memoryStore;
|
|
10
|
+
}
|
|
11
|
+
/** Build the full context string for injection */
|
|
12
|
+
build(options) {
|
|
13
|
+
const maxChars = options?.maxChars || config_1.CONFIG.MAX_CONTEXT_CHARS;
|
|
14
|
+
const parts = [];
|
|
15
|
+
// 1. ALL Corrections (highest priority — prevent repeated mistakes)
|
|
16
|
+
const corrections = this.memoryStore.getByType(types_1.MemoryType.CORRECTION, 500);
|
|
17
|
+
if (corrections.length > 0) {
|
|
18
|
+
parts.push('## Corrections (DO NOT repeat these mistakes)');
|
|
19
|
+
for (const c of corrections) {
|
|
20
|
+
parts.push(`- ${c.intent}${c.reason ? ` (${c.reason})` : ''}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// 2. ALL Decisions (architectural choices)
|
|
24
|
+
const decisions = this.memoryStore.getByType(types_1.MemoryType.DECISION, 500);
|
|
25
|
+
if (decisions.length > 0) {
|
|
26
|
+
parts.push('\n## Decisions');
|
|
27
|
+
for (const d of decisions) {
|
|
28
|
+
parts.push(`- ${d.intent}${d.reason ? ` — ${d.reason}` : ''}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// 3. ALL Conventions (coding standards)
|
|
32
|
+
const conventions = this.memoryStore.getByType(types_1.MemoryType.CONVENTION, 500);
|
|
33
|
+
if (conventions.length > 0) {
|
|
34
|
+
parts.push('\n## Conventions');
|
|
35
|
+
for (const c of conventions) {
|
|
36
|
+
parts.push(`- ${c.intent}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// 4. ALL Bug Fixes (prevent re-introducing bugs)
|
|
40
|
+
const bugFixes = this.memoryStore.getByType(types_1.MemoryType.BUG_FIX, 500);
|
|
41
|
+
if (bugFixes.length > 0) {
|
|
42
|
+
parts.push('\n## Bug Fixes (already solved — do not re-introduce)');
|
|
43
|
+
for (const b of bugFixes) {
|
|
44
|
+
parts.push(`- ${b.intent}${b.reason ? ` — ${b.reason}` : ''}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// 5. Failed Suggestions (things that were tried and didn't work)
|
|
48
|
+
const failed = this.memoryStore.getByType(types_1.MemoryType.FAILED_SUGGESTION, 50);
|
|
49
|
+
if (failed.length > 0) {
|
|
50
|
+
parts.push('\n## Failed Attempts (DO NOT suggest these again)');
|
|
51
|
+
for (const f of failed.slice(0, 10)) {
|
|
52
|
+
parts.push(`- ${f.intent}${f.reason ? ` — ${f.reason}` : ''}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// 6. Proven Patterns (things that work well)
|
|
56
|
+
const patterns = this.memoryStore.getByType(types_1.MemoryType.PROVEN_PATTERN, 50);
|
|
57
|
+
if (patterns.length > 0) {
|
|
58
|
+
parts.push('\n## Proven Patterns');
|
|
59
|
+
for (const p of patterns.slice(0, 10)) {
|
|
60
|
+
parts.push(`- ${p.intent}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// 7. File-specific context (if a file is provided)
|
|
64
|
+
if (options?.currentFile) {
|
|
65
|
+
const fileMemories = this.memoryStore.getByFile(options.currentFile, 5);
|
|
66
|
+
if (fileMemories.length > 0) {
|
|
67
|
+
parts.push(`\n## Context for ${options.currentFile}`);
|
|
68
|
+
for (const m of fileMemories) {
|
|
69
|
+
parts.push(`- [${m.type}] ${m.intent}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// 5. Dependencies (what the project uses)
|
|
74
|
+
const deps = this.memoryStore.getByType(types_1.MemoryType.DEPENDENCY, 3);
|
|
75
|
+
if (deps.length > 0) {
|
|
76
|
+
parts.push('\n## Stack');
|
|
77
|
+
for (const d of deps) {
|
|
78
|
+
parts.push(`- ${d.intent}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
let context = parts.join('\n');
|
|
82
|
+
// Compress if over budget
|
|
83
|
+
if (context.length > maxChars) {
|
|
84
|
+
context = this.compress(context, maxChars);
|
|
85
|
+
}
|
|
86
|
+
// Header
|
|
87
|
+
return `# Brain Context (Auto-Injected)\n\n${context}\n\n> Always call \`recall_memory\` for specific queries.`;
|
|
88
|
+
}
|
|
89
|
+
/** Compress context to fit within character budget */
|
|
90
|
+
compress(text, maxChars) {
|
|
91
|
+
const lines = text.split('\n');
|
|
92
|
+
let result = '';
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
if (result.length + line.length + 1 > maxChars)
|
|
95
|
+
break;
|
|
96
|
+
result += line + '\n';
|
|
97
|
+
}
|
|
98
|
+
return result.trimEnd();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.ContextBuilder = ContextBuilder;
|
|
102
|
+
//# sourceMappingURL=context-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../../src/scanners/context-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MemoryStore } from '../db/memory-store';
|
|
2
|
+
export interface ExportEntry {
|
|
3
|
+
file: string;
|
|
4
|
+
name: string;
|
|
5
|
+
kind: 'function' | 'class' | 'const' | 'type' | 'interface' | 'enum' | 'default';
|
|
6
|
+
signature?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ExportMap {
|
|
9
|
+
files: Map<string, ExportEntry[]>;
|
|
10
|
+
allExports: ExportEntry[];
|
|
11
|
+
totalFiles: number;
|
|
12
|
+
totalExports: number;
|
|
13
|
+
}
|
|
14
|
+
/** Build complete export map for the project */
|
|
15
|
+
export declare function buildExportMap(workspaceRoot: string): ExportMap;
|
|
16
|
+
/** Store export map as memories for AI context injection */
|
|
17
|
+
export declare function storeExportMap(memoryStore: MemoryStore, exportMap: ExportMap): number;
|
|
18
|
+
/** Format export map for compact context injection */
|
|
19
|
+
export declare function formatExportMap(exportMap: ExportMap): string;
|
|
20
|
+
/** Find closest matching real export for a hallucinated name */
|
|
21
|
+
export declare function suggestRealExport(exportMap: ExportMap, hallucinated: string): string[];
|
|
22
|
+
//# sourceMappingURL=export-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-map.d.ts","sourceRoot":"","sources":["../../src/scanners/export-map.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAgC/D;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAsCrF;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAuB5D;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBtF"}
|