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,398 @@
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.ProjectScanner = void 0;
37
+ /**
38
+ * Project Scanner — Scans project on first activation.
39
+ * Solves the "Day 1 Empty Brain" problem.
40
+ *
41
+ * Pure Node.js — no VS Code dependency.
42
+ * Captures: package.json, README, directory structure, git log, config files.
43
+ */
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const child_process_1 = require("child_process");
47
+ const types_1 = require("../types");
48
+ class ProjectScanner {
49
+ memoryStore;
50
+ workspaceRoot;
51
+ constructor(memoryStore, workspaceRoot) {
52
+ this.memoryStore = memoryStore;
53
+ this.workspaceRoot = workspaceRoot;
54
+ }
55
+ /** Check if project was already scanned */
56
+ isAlreadyScanned() {
57
+ const existing = this.memoryStore.getByType(types_1.MemoryType.INSIGHT, 10);
58
+ return existing.some(m => m.intent.startsWith('Project structure'));
59
+ }
60
+ /** Full project scan — returns number of memories created */
61
+ async scan() {
62
+ if (this.isAlreadyScanned()) {
63
+ return 0;
64
+ }
65
+ let count = 0;
66
+ count += this.scanPackageJson();
67
+ count += this.scanReadme();
68
+ count += this.scanDirectoryStructure();
69
+ count += this.scanConfigFiles();
70
+ count += this.scanArchitecture();
71
+ count += this.scanEnvironment();
72
+ count += await this.scanGitLog();
73
+ return count;
74
+ }
75
+ /** Scan package.json for stack info */
76
+ scanPackageJson() {
77
+ const pkgPath = path.join(this.workspaceRoot, 'package.json');
78
+ if (!fs.existsSync(pkgPath))
79
+ return 0;
80
+ try {
81
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
82
+ const deps = Object.keys(pkg.dependencies || {}).slice(0, 15).join(', ');
83
+ const devDeps = Object.keys(pkg.devDependencies || {}).slice(0, 10).join(', ');
84
+ const intent = `Project dependencies: ${deps}`;
85
+ this.memoryStore.add({
86
+ type: types_1.MemoryType.DEPENDENCY,
87
+ intent: intent.slice(0, 300),
88
+ action: `Scanned package.json: ${pkg.name || 'unknown'}`,
89
+ reason: devDeps ? `Dev deps: ${devDeps}` : undefined,
90
+ tags: ['project-scan', 'dependencies'],
91
+ confidence: 0.9,
92
+ importance: 0.7,
93
+ timestamp: Date.now(),
94
+ isActive: true,
95
+ accessCount: 0,
96
+ createdAt: Date.now(),
97
+ id: '',
98
+ });
99
+ return 1;
100
+ }
101
+ catch {
102
+ return 0;
103
+ }
104
+ }
105
+ /** Scan README for project purpose */
106
+ scanReadme() {
107
+ const readmePaths = ['README.md', 'readme.md', 'README.txt'];
108
+ for (const name of readmePaths) {
109
+ const readmePath = path.join(this.workspaceRoot, name);
110
+ if (!fs.existsSync(readmePath))
111
+ continue;
112
+ try {
113
+ const content = fs.readFileSync(readmePath, 'utf-8');
114
+ // Get first 3 non-empty lines as summary
115
+ const summary = content.split('\n')
116
+ .filter(l => l.trim().length > 0)
117
+ .slice(0, 3)
118
+ .join(' ')
119
+ .slice(0, 300);
120
+ this.memoryStore.add({
121
+ type: types_1.MemoryType.INSIGHT,
122
+ intent: `Project README: ${summary}`,
123
+ action: `Scanned ${name}`,
124
+ tags: ['project-scan', 'readme'],
125
+ confidence: 0.8,
126
+ importance: 0.6,
127
+ timestamp: Date.now(),
128
+ isActive: true,
129
+ accessCount: 0,
130
+ createdAt: Date.now(),
131
+ id: '',
132
+ });
133
+ return 1;
134
+ }
135
+ catch {
136
+ return 0;
137
+ }
138
+ }
139
+ return 0;
140
+ }
141
+ /** Scan directory structure (top 3 levels) */
142
+ scanDirectoryStructure() {
143
+ const tree = this.getDirectoryTree(this.workspaceRoot, 3);
144
+ if (!tree)
145
+ return 0;
146
+ this.memoryStore.add({
147
+ type: types_1.MemoryType.INSIGHT,
148
+ intent: `Project structure (top 3 levels)`,
149
+ action: tree.slice(0, 300),
150
+ tags: ['project-scan', 'structure'],
151
+ confidence: 0.9,
152
+ importance: 0.5,
153
+ timestamp: Date.now(),
154
+ isActive: true,
155
+ accessCount: 0,
156
+ createdAt: Date.now(),
157
+ id: '',
158
+ });
159
+ return 1;
160
+ }
161
+ /** Build directory tree string */
162
+ getDirectoryTree(dir, maxDepth, depth = 0, prefix = '') {
163
+ if (depth >= maxDepth)
164
+ return '';
165
+ const ignore = new Set(['node_modules', '.git', 'dist', '.ai', '.gemini', 'coverage', '.next']);
166
+ try {
167
+ const entries = fs.readdirSync(dir, { withFileTypes: true })
168
+ .filter(e => !ignore.has(e.name) && !e.name.startsWith('.'))
169
+ .sort((a, b) => {
170
+ if (a.isDirectory() && !b.isDirectory())
171
+ return -1;
172
+ if (!a.isDirectory() && b.isDirectory())
173
+ return 1;
174
+ return a.name.localeCompare(b.name);
175
+ })
176
+ .slice(0, 20);
177
+ let result = '';
178
+ for (const entry of entries) {
179
+ result += `${prefix}${entry.isDirectory() ? '[DIR]' : '[FILE]'} ${entry.name}\n`;
180
+ if (entry.isDirectory()) {
181
+ result += this.getDirectoryTree(path.join(dir, entry.name), maxDepth, depth + 1, prefix + ' ');
182
+ }
183
+ }
184
+ return result;
185
+ }
186
+ catch {
187
+ return '';
188
+ }
189
+ }
190
+ /** Scan config files for conventions */
191
+ scanConfigFiles() {
192
+ const configs = ['tsconfig.json', '.eslintrc.json', '.prettierrc', 'next.config.js', 'vite.config.ts'];
193
+ let count = 0;
194
+ for (const name of configs) {
195
+ const configPath = path.join(this.workspaceRoot, name);
196
+ if (!fs.existsSync(configPath))
197
+ continue;
198
+ this.memoryStore.add({
199
+ type: types_1.MemoryType.CONVENTION,
200
+ intent: `Project uses ${name}`,
201
+ action: `Config file found: ${name}`,
202
+ tags: ['project-scan', 'config'],
203
+ confidence: 0.9,
204
+ importance: 0.4,
205
+ timestamp: Date.now(),
206
+ isActive: true,
207
+ accessCount: 0,
208
+ createdAt: Date.now(),
209
+ id: '',
210
+ });
211
+ count++;
212
+ }
213
+ return count;
214
+ }
215
+ /** Scan git log for recent history */
216
+ async scanGitLog() {
217
+ try {
218
+ const log = (0, child_process_1.execSync)('git log --oneline -10', {
219
+ cwd: this.workspaceRoot,
220
+ encoding: 'utf-8',
221
+ timeout: 5000,
222
+ }).trim();
223
+ if (!log)
224
+ return 0;
225
+ this.memoryStore.add({
226
+ type: types_1.MemoryType.INSIGHT,
227
+ intent: `Recent git history (last 10 commits)`,
228
+ action: log.slice(0, 300),
229
+ tags: ['project-scan', 'git'],
230
+ confidence: 0.9,
231
+ importance: 0.5,
232
+ timestamp: Date.now(),
233
+ isActive: true,
234
+ accessCount: 0,
235
+ createdAt: Date.now(),
236
+ id: '',
237
+ });
238
+ return 1;
239
+ }
240
+ catch {
241
+ return 0;
242
+ }
243
+ }
244
+ /** Scan import chains to build architecture flow */
245
+ scanArchitecture() {
246
+ const srcDirs = ['src', 'lib', 'app', 'pages', 'components'];
247
+ const sourceFiles = [];
248
+ for (const dir of srcDirs) {
249
+ const dirPath = path.join(this.workspaceRoot, dir);
250
+ if (!fs.existsSync(dirPath))
251
+ continue;
252
+ this.collectImports(dirPath, sourceFiles, 0);
253
+ }
254
+ if (sourceFiles.length === 0)
255
+ return 0;
256
+ // Build architecture map: which files import which
257
+ const flowLines = [];
258
+ const entryPoints = [];
259
+ const mostImported = new Map();
260
+ for (const { file, imports } of sourceFiles) {
261
+ for (const imp of imports) {
262
+ mostImported.set(imp, (mostImported.get(imp) || 0) + 1);
263
+ }
264
+ if (file.includes('index') || file.includes('main') || file.includes('app') || file.includes('server')) {
265
+ entryPoints.push(file);
266
+ }
267
+ }
268
+ // Top 10 most-imported files = core components
269
+ const sorted = [...mostImported.entries()].sort((a, b) => b[1] - a[1]).slice(0, 10);
270
+ if (sorted.length > 0) {
271
+ flowLines.push('Core components (most imported):');
272
+ for (const [file, count] of sorted) {
273
+ flowLines.push(` ${file} (imported by ${count} files)`);
274
+ }
275
+ }
276
+ if (entryPoints.length > 0) {
277
+ flowLines.push(`Entry points: ${entryPoints.join(', ')}`);
278
+ }
279
+ flowLines.push(`Total source files: ${sourceFiles.length}`);
280
+ const flowText = flowLines.join('\n').slice(0, 500);
281
+ this.memoryStore.add({
282
+ type: types_1.MemoryType.INSIGHT,
283
+ intent: 'Architecture flow — component relationships',
284
+ action: flowText,
285
+ tags: ['project-scan', 'architecture'],
286
+ confidence: 0.85,
287
+ importance: 0.7,
288
+ timestamp: Date.now(),
289
+ isActive: true,
290
+ accessCount: 0,
291
+ createdAt: Date.now(),
292
+ id: '',
293
+ });
294
+ return 1;
295
+ }
296
+ /** Collect imports from source files */
297
+ collectImports(dir, results, depth) {
298
+ if (depth > 4)
299
+ return;
300
+ const ignore = new Set(['node_modules', '.git', 'dist', 'coverage', '__tests__', '__mocks__']);
301
+ try {
302
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
303
+ for (const entry of entries) {
304
+ if (ignore.has(entry.name))
305
+ continue;
306
+ const fullPath = path.join(dir, entry.name);
307
+ if (entry.isDirectory()) {
308
+ this.collectImports(fullPath, results, depth + 1);
309
+ }
310
+ else if (/\.(ts|js|tsx|jsx)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
311
+ try {
312
+ const content = fs.readFileSync(fullPath, 'utf-8').slice(0, 3000); // Only first 3KB
313
+ const imports = [];
314
+ const importRegex = /(?:import|require)\s*\(?['"]([^'"]+)['"]\)?/g;
315
+ let match;
316
+ while ((match = importRegex.exec(content)) !== null) {
317
+ const imp = match[1];
318
+ if (imp.startsWith('.') || imp.startsWith('/')) {
319
+ imports.push(imp);
320
+ }
321
+ }
322
+ const relPath = path.relative(this.workspaceRoot, fullPath).replace(/\\/g, '/');
323
+ if (imports.length > 0) {
324
+ results.push({ file: relPath, imports });
325
+ }
326
+ }
327
+ catch { }
328
+ }
329
+ }
330
+ }
331
+ catch { }
332
+ }
333
+ /** Scan .env files for environment context */
334
+ scanEnvironment() {
335
+ const envFiles = ['.env', '.env.local', '.env.development', '.env.production', '.env.staging', '.env.example'];
336
+ const envVars = [];
337
+ for (const name of envFiles) {
338
+ const envPath = path.join(this.workspaceRoot, name);
339
+ if (!fs.existsSync(envPath))
340
+ continue;
341
+ try {
342
+ const content = fs.readFileSync(envPath, 'utf-8');
343
+ const keys = content.split('\n')
344
+ .filter(l => l.trim() && !l.startsWith('#'))
345
+ .map(l => l.split('=')[0].trim())
346
+ .filter(k => k.length > 0);
347
+ if (keys.length > 0) {
348
+ envVars.push(`${name}: ${keys.slice(0, 10).join(', ')}`);
349
+ }
350
+ }
351
+ catch { }
352
+ }
353
+ if (envVars.length === 0)
354
+ return 0;
355
+ this.memoryStore.add({
356
+ type: types_1.MemoryType.INSIGHT,
357
+ intent: `Environment config — ${envVars.length} env files found`,
358
+ action: envVars.join('\n').slice(0, 400),
359
+ tags: ['project-scan', 'environment'],
360
+ confidence: 0.9,
361
+ importance: 0.6,
362
+ timestamp: Date.now(),
363
+ isActive: true,
364
+ accessCount: 0,
365
+ createdAt: Date.now(),
366
+ id: '',
367
+ });
368
+ return 1;
369
+ }
370
+ /** Get list of all source files (for file verification) */
371
+ getSourceFiles() {
372
+ const files = [];
373
+ const ignore = new Set(['node_modules', '.git', 'dist', '.ai', '.gemini', 'coverage']);
374
+ const walk = (dir, depth = 0) => {
375
+ if (depth > 5)
376
+ return;
377
+ try {
378
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
379
+ for (const entry of entries) {
380
+ if (ignore.has(entry.name))
381
+ continue;
382
+ const full = path.join(dir, entry.name);
383
+ if (entry.isDirectory()) {
384
+ walk(full, depth + 1);
385
+ }
386
+ else {
387
+ files.push(path.relative(this.workspaceRoot, full));
388
+ }
389
+ }
390
+ }
391
+ catch { }
392
+ };
393
+ walk(this.workspaceRoot);
394
+ return files;
395
+ }
396
+ }
397
+ exports.ProjectScanner = ProjectScanner;
398
+ //# sourceMappingURL=project-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scanner.js","sourceRoot":"","sources":["../../src/scanners/project-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Encrypt plaintext content.
3
+ * Returns a base64 string: iv:tag:ciphertext
4
+ */
5
+ export declare function encrypt(plaintext: string): string;
6
+ /**
7
+ * Decrypt encrypted content.
8
+ * Expects format: ENC:iv:tag:ciphertext
9
+ */
10
+ export declare function decrypt(encrypted: string): string;
11
+ /**
12
+ * Check if a string is encrypted
13
+ */
14
+ export declare function isEncrypted(text: string): boolean;
15
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/security/encryption.ts"],"names":[],"mappings":"AAgCA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAajD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD"}
@@ -0,0 +1,116 @@
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.encrypt = encrypt;
37
+ exports.decrypt = decrypt;
38
+ exports.isEncrypted = isEncrypted;
39
+ /**
40
+ * Memory Encryption — AES-256-GCM encryption at rest for sensitive memory content.
41
+ *
42
+ * Uses Node.js built-in crypto module (no external deps).
43
+ * Encryption key derived from a machine-specific seed using PBKDF2.
44
+ *
45
+ * When enabled:
46
+ * - Memory `intent` and `action` fields are encrypted before storage
47
+ * - Decrypted on read
48
+ * - FTS index uses plaintext (searched in-memory) — only DB at rest is encrypted
49
+ */
50
+ const crypto = __importStar(require("crypto"));
51
+ const os = __importStar(require("os"));
52
+ const ALGORITHM = 'aes-256-gcm';
53
+ const KEY_LENGTH = 32;
54
+ const IV_LENGTH = 16;
55
+ const TAG_LENGTH = 16;
56
+ const SALT = 'cortex-memory-salt-v1';
57
+ // Derive key from machine-specific info (hostname + username + homedir hash)
58
+ function deriveKey() {
59
+ const seed = `${os.hostname()}:${os.userInfo().username}:${os.homedir()}`;
60
+ return crypto.pbkdf2Sync(seed, SALT, 100000, KEY_LENGTH, 'sha512');
61
+ }
62
+ let _key = null;
63
+ function getKey() {
64
+ if (!_key)
65
+ _key = deriveKey();
66
+ return _key;
67
+ }
68
+ /**
69
+ * Encrypt plaintext content.
70
+ * Returns a base64 string: iv:tag:ciphertext
71
+ */
72
+ function encrypt(plaintext) {
73
+ if (!plaintext)
74
+ return plaintext;
75
+ const key = getKey();
76
+ const iv = crypto.randomBytes(IV_LENGTH);
77
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
78
+ let encrypted = cipher.update(plaintext, 'utf8', 'base64');
79
+ encrypted += cipher.final('base64');
80
+ const tag = cipher.getAuthTag();
81
+ // Format: iv:tag:ciphertext (all base64)
82
+ return `ENC:${iv.toString('base64')}:${tag.toString('base64')}:${encrypted}`;
83
+ }
84
+ /**
85
+ * Decrypt encrypted content.
86
+ * Expects format: ENC:iv:tag:ciphertext
87
+ */
88
+ function decrypt(encrypted) {
89
+ if (!encrypted || !encrypted.startsWith('ENC:'))
90
+ return encrypted;
91
+ try {
92
+ const parts = encrypted.split(':');
93
+ if (parts.length !== 4)
94
+ return encrypted;
95
+ const iv = Buffer.from(parts[1], 'base64');
96
+ const tag = Buffer.from(parts[2], 'base64');
97
+ const ciphertext = parts[3];
98
+ const key = getKey();
99
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
100
+ decipher.setAuthTag(tag);
101
+ let decrypted = decipher.update(ciphertext, 'base64', 'utf8');
102
+ decrypted += decipher.final('utf8');
103
+ return decrypted;
104
+ }
105
+ catch {
106
+ // If decryption fails, return original (might be plaintext from before encryption was enabled)
107
+ return encrypted;
108
+ }
109
+ }
110
+ /**
111
+ * Check if a string is encrypted
112
+ */
113
+ function isEncrypted(text) {
114
+ return text?.startsWith('ENC:') ?? false;
115
+ }
116
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/security/encryption.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface FeatureLimits {
2
+ maxMemories: number;
3
+ brainLayers: boolean;
4
+ autoLearn: boolean;
5
+ exportMap: boolean;
6
+ architectureGraph: boolean;
7
+ gitMemory: boolean;
8
+ contradictionDetection: boolean;
9
+ confidenceDecay: boolean;
10
+ memoryConsolidation: boolean;
11
+ attentionRanking: boolean;
12
+ anticipation: boolean;
13
+ knowledgeGaps: boolean;
14
+ temporalContext: boolean;
15
+ crossSessionThreading: boolean;
16
+ }
17
+ /** Get current feature limits based on license */
18
+ export declare function getFeatureLimits(): FeatureLimits;
19
+ /** Check if a specific feature is allowed */
20
+ export declare function isFeatureAllowed(feature: keyof FeatureLimits): boolean;
21
+ /** Check if user can store more memories */
22
+ export declare function canStoreMemory(currentCount: number): {
23
+ allowed: boolean;
24
+ message: string;
25
+ };
26
+ /** Get upgrade message for gated features */
27
+ export declare function getUpgradeMessage(feature: string): string;
28
+ /** Format plan status for display */
29
+ export declare function formatPlanStatus(): string;
30
+ //# sourceMappingURL=feature-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-gate.d.ts","sourceRoot":"","sources":["../../src/security/feature-gate.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;CAClC;AAoCD,kDAAkD;AAClD,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,aAAa,GAAG,OAAO,CAKtE;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAS1F;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,qCAAqC;AACrC,wBAAgB,gBAAgB,IAAI,MAAM,CASzC"}