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.
Files changed (176) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +21 -0
  3. package/README.md +202 -0
  4. package/dist/cli/setup.d.ts +12 -0
  5. package/dist/cli/setup.d.ts.map +1 -0
  6. package/dist/cli/setup.js +293 -0
  7. package/dist/cli/setup.js.map +1 -0
  8. package/dist/config/config.d.ts +13 -0
  9. package/dist/config/config.d.ts.map +1 -0
  10. package/dist/config/config.js +33 -0
  11. package/dist/config/config.js.map +1 -0
  12. package/dist/core/event-bus.d.ts +19 -0
  13. package/dist/core/event-bus.d.ts.map +1 -0
  14. package/dist/core/event-bus.js +51 -0
  15. package/dist/core/event-bus.js.map +1 -0
  16. package/dist/db/database.d.ts +19 -0
  17. package/dist/db/database.d.ts.map +1 -0
  18. package/dist/db/database.js +254 -0
  19. package/dist/db/database.js.map +1 -0
  20. package/dist/db/event-log.d.ts +28 -0
  21. package/dist/db/event-log.d.ts.map +1 -0
  22. package/dist/db/event-log.js +87 -0
  23. package/dist/db/event-log.js.map +1 -0
  24. package/dist/db/memory-store.d.ts +65 -0
  25. package/dist/db/memory-store.d.ts.map +1 -0
  26. package/dist/db/memory-store.js +370 -0
  27. package/dist/db/memory-store.js.map +1 -0
  28. package/dist/embedding-worker.d.ts +3 -0
  29. package/dist/embedding-worker.d.ts.map +1 -0
  30. package/dist/embedding-worker.js +94 -0
  31. package/dist/embedding-worker.js.map +1 -0
  32. package/dist/hooks/cortex-run.d.ts +15 -0
  33. package/dist/hooks/cortex-run.d.ts.map +1 -0
  34. package/dist/hooks/cortex-run.js +148 -0
  35. package/dist/hooks/cortex-run.js.map +1 -0
  36. package/dist/hooks/git-capture.d.ts +21 -0
  37. package/dist/hooks/git-capture.d.ts.map +1 -0
  38. package/dist/hooks/git-capture.js +178 -0
  39. package/dist/hooks/git-capture.js.map +1 -0
  40. package/dist/hooks/git-hooks.d.ts +12 -0
  41. package/dist/hooks/git-hooks.d.ts.map +1 -0
  42. package/dist/hooks/git-hooks.js +130 -0
  43. package/dist/hooks/git-hooks.js.map +1 -0
  44. package/dist/mcp-stdio.d.ts +10 -0
  45. package/dist/mcp-stdio.d.ts.map +1 -0
  46. package/dist/mcp-stdio.js +247 -0
  47. package/dist/mcp-stdio.js.map +1 -0
  48. package/dist/memory/anticipation-engine.d.ts +19 -0
  49. package/dist/memory/anticipation-engine.d.ts.map +1 -0
  50. package/dist/memory/anticipation-engine.js +76 -0
  51. package/dist/memory/anticipation-engine.js.map +1 -0
  52. package/dist/memory/attention-ranker.d.ts +19 -0
  53. package/dist/memory/attention-ranker.d.ts.map +1 -0
  54. package/dist/memory/attention-ranker.js +97 -0
  55. package/dist/memory/attention-ranker.js.map +1 -0
  56. package/dist/memory/auto-learner.d.ts +20 -0
  57. package/dist/memory/auto-learner.d.ts.map +1 -0
  58. package/dist/memory/auto-learner.js +179 -0
  59. package/dist/memory/auto-learner.js.map +1 -0
  60. package/dist/memory/confidence-decay.d.ts +22 -0
  61. package/dist/memory/confidence-decay.d.ts.map +1 -0
  62. package/dist/memory/confidence-decay.js +54 -0
  63. package/dist/memory/confidence-decay.js.map +1 -0
  64. package/dist/memory/embedding-manager.d.ts +5 -0
  65. package/dist/memory/embedding-manager.d.ts.map +1 -0
  66. package/dist/memory/embedding-manager.js +118 -0
  67. package/dist/memory/embedding-manager.js.map +1 -0
  68. package/dist/memory/export-import.d.ts +49 -0
  69. package/dist/memory/export-import.d.ts.map +1 -0
  70. package/dist/memory/export-import.js +131 -0
  71. package/dist/memory/export-import.js.map +1 -0
  72. package/dist/memory/git-memory.d.ts +15 -0
  73. package/dist/memory/git-memory.d.ts.map +1 -0
  74. package/dist/memory/git-memory.js +178 -0
  75. package/dist/memory/git-memory.js.map +1 -0
  76. package/dist/memory/learning-rate.d.ts +24 -0
  77. package/dist/memory/learning-rate.d.ts.map +1 -0
  78. package/dist/memory/learning-rate.js +95 -0
  79. package/dist/memory/learning-rate.js.map +1 -0
  80. package/dist/memory/llm-enhancer.d.ts +54 -0
  81. package/dist/memory/llm-enhancer.d.ts.map +1 -0
  82. package/dist/memory/llm-enhancer.js +270 -0
  83. package/dist/memory/llm-enhancer.js.map +1 -0
  84. package/dist/memory/memory-cache.d.ts +5 -0
  85. package/dist/memory/memory-cache.d.ts.map +1 -0
  86. package/dist/memory/memory-cache.js +37 -0
  87. package/dist/memory/memory-cache.js.map +1 -0
  88. package/dist/memory/memory-consolidator.d.ts +14 -0
  89. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  90. package/dist/memory/memory-consolidator.js +156 -0
  91. package/dist/memory/memory-consolidator.js.map +1 -0
  92. package/dist/memory/memory-decay.d.ts +10 -0
  93. package/dist/memory/memory-decay.d.ts.map +1 -0
  94. package/dist/memory/memory-decay.js +79 -0
  95. package/dist/memory/memory-decay.js.map +1 -0
  96. package/dist/memory/memory-quality.d.ts +37 -0
  97. package/dist/memory/memory-quality.d.ts.map +1 -0
  98. package/dist/memory/memory-quality.js +203 -0
  99. package/dist/memory/memory-quality.js.map +1 -0
  100. package/dist/memory/memory-ranker.d.ts +14 -0
  101. package/dist/memory/memory-ranker.d.ts.map +1 -0
  102. package/dist/memory/memory-ranker.js +68 -0
  103. package/dist/memory/memory-ranker.js.map +1 -0
  104. package/dist/memory/meta-memory.d.ts +11 -0
  105. package/dist/memory/meta-memory.d.ts.map +1 -0
  106. package/dist/memory/meta-memory.js +141 -0
  107. package/dist/memory/meta-memory.js.map +1 -0
  108. package/dist/memory/session-tracker.d.ts +39 -0
  109. package/dist/memory/session-tracker.d.ts.map +1 -0
  110. package/dist/memory/session-tracker.js +127 -0
  111. package/dist/memory/session-tracker.js.map +1 -0
  112. package/dist/memory/temporal-engine.d.ts +25 -0
  113. package/dist/memory/temporal-engine.d.ts.map +1 -0
  114. package/dist/memory/temporal-engine.js +106 -0
  115. package/dist/memory/temporal-engine.js.map +1 -0
  116. package/dist/retrieval/hybrid-retriever.d.ts +23 -0
  117. package/dist/retrieval/hybrid-retriever.d.ts.map +1 -0
  118. package/dist/retrieval/hybrid-retriever.js +120 -0
  119. package/dist/retrieval/hybrid-retriever.js.map +1 -0
  120. package/dist/scanners/architecture-graph.d.ts +30 -0
  121. package/dist/scanners/architecture-graph.d.ts.map +1 -0
  122. package/dist/scanners/architecture-graph.js +315 -0
  123. package/dist/scanners/architecture-graph.js.map +1 -0
  124. package/dist/scanners/code-verifier.d.ts +70 -0
  125. package/dist/scanners/code-verifier.d.ts.map +1 -0
  126. package/dist/scanners/code-verifier.js +374 -0
  127. package/dist/scanners/code-verifier.js.map +1 -0
  128. package/dist/scanners/context-builder.d.ts +19 -0
  129. package/dist/scanners/context-builder.d.ts.map +1 -0
  130. package/dist/scanners/context-builder.js +102 -0
  131. package/dist/scanners/context-builder.js.map +1 -0
  132. package/dist/scanners/export-map.d.ts +22 -0
  133. package/dist/scanners/export-map.d.ts.map +1 -0
  134. package/dist/scanners/export-map.js +249 -0
  135. package/dist/scanners/export-map.js.map +1 -0
  136. package/dist/scanners/file-verifier.d.ts +22 -0
  137. package/dist/scanners/file-verifier.d.ts.map +1 -0
  138. package/dist/scanners/file-verifier.js +140 -0
  139. package/dist/scanners/file-verifier.js.map +1 -0
  140. package/dist/scanners/project-scanner.d.ts +31 -0
  141. package/dist/scanners/project-scanner.d.ts.map +1 -0
  142. package/dist/scanners/project-scanner.js +398 -0
  143. package/dist/scanners/project-scanner.js.map +1 -0
  144. package/dist/security/encryption.d.ts +15 -0
  145. package/dist/security/encryption.d.ts.map +1 -0
  146. package/dist/security/encryption.js +116 -0
  147. package/dist/security/encryption.js.map +1 -0
  148. package/dist/security/feature-gate.d.ts +30 -0
  149. package/dist/security/feature-gate.d.ts.map +1 -0
  150. package/dist/security/feature-gate.js +91 -0
  151. package/dist/security/feature-gate.js.map +1 -0
  152. package/dist/security/license.d.ts +24 -0
  153. package/dist/security/license.d.ts.map +1 -0
  154. package/dist/security/license.js +168 -0
  155. package/dist/security/license.js.map +1 -0
  156. package/dist/security/rate-limiter.d.ts +20 -0
  157. package/dist/security/rate-limiter.d.ts.map +1 -0
  158. package/dist/security/rate-limiter.js +60 -0
  159. package/dist/security/rate-limiter.js.map +1 -0
  160. package/dist/server/dashboard.d.ts +3 -0
  161. package/dist/server/dashboard.d.ts.map +1 -0
  162. package/dist/server/dashboard.js +258 -0
  163. package/dist/server/dashboard.js.map +1 -0
  164. package/dist/server/mcp-handler.d.ts +12 -0
  165. package/dist/server/mcp-handler.d.ts.map +1 -0
  166. package/dist/server/mcp-handler.js +1392 -0
  167. package/dist/server/mcp-handler.js.map +1 -0
  168. package/dist/strategies/embedders/local-minilm.d.ts +35 -0
  169. package/dist/strategies/embedders/local-minilm.d.ts.map +1 -0
  170. package/dist/strategies/embedders/local-minilm.js +176 -0
  171. package/dist/strategies/embedders/local-minilm.js.map +1 -0
  172. package/dist/types.d.ts +207 -0
  173. package/dist/types.d.ts.map +1 -0
  174. package/dist/types.js +83 -0
  175. package/dist/types.js.map +1 -0
  176. 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"}