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 @@
1
+ {"version":3,"file":"cortex-run.js","sourceRoot":"","sources":["../../src/hooks/cortex-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cortex Git Capture — Auto-stores git commits as memories.
4
+ *
5
+ * Called by the post-commit git hook after every commit.
6
+ * Reads the latest commit info and stores it as a memory
7
+ * so the AI remembers what code changes were made and why.
8
+ *
9
+ * IMPORTANT: This script must be FAST (<500ms) since it runs
10
+ * in a git hook. It uses direct SQLite inserts instead of the
11
+ * full CognitiveDatabase/MemoryStore classes.
12
+ *
13
+ * Usage (automatic via git hook):
14
+ * .git/hooks/post-commit → calls this script
15
+ *
16
+ * Usage (manual):
17
+ * cortex-capture
18
+ * node dist/hooks/git-capture.js
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=git-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-capture.d.ts","sourceRoot":"","sources":["../../src/hooks/git-capture.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Cortex Git Capture — Auto-stores git commits as memories.
5
+ *
6
+ * Called by the post-commit git hook after every commit.
7
+ * Reads the latest commit info and stores it as a memory
8
+ * so the AI remembers what code changes were made and why.
9
+ *
10
+ * IMPORTANT: This script must be FAST (<500ms) since it runs
11
+ * in a git hook. It uses direct SQLite inserts instead of the
12
+ * full CognitiveDatabase/MemoryStore classes.
13
+ *
14
+ * Usage (automatic via git hook):
15
+ * .git/hooks/post-commit → calls this script
16
+ *
17
+ * Usage (manual):
18
+ * cortex-capture
19
+ * node dist/hooks/git-capture.js
20
+ */
21
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ var desc = Object.getOwnPropertyDescriptor(m, k);
24
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
25
+ desc = { enumerable: true, get: function() { return m[k]; } };
26
+ }
27
+ Object.defineProperty(o, k2, desc);
28
+ }) : (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ o[k2] = m[k];
31
+ }));
32
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
33
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
34
+ }) : function(o, v) {
35
+ o["default"] = v;
36
+ });
37
+ var __importStar = (this && this.__importStar) || (function () {
38
+ var ownKeys = function(o) {
39
+ ownKeys = Object.getOwnPropertyNames || function (o) {
40
+ var ar = [];
41
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
42
+ return ar;
43
+ };
44
+ return ownKeys(o);
45
+ };
46
+ return function (mod) {
47
+ if (mod && mod.__esModule) return mod;
48
+ var result = {};
49
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
50
+ __setModuleDefault(result, mod);
51
+ return result;
52
+ };
53
+ })();
54
+ Object.defineProperty(exports, "__esModule", { value: true });
55
+ const child_process_1 = require("child_process");
56
+ const path = __importStar(require("path"));
57
+ const fs = __importStar(require("fs"));
58
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
59
+ function gitCmd(cmd) {
60
+ try {
61
+ return (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000 }).trim();
62
+ }
63
+ catch {
64
+ return '';
65
+ }
66
+ }
67
+ function generateId() {
68
+ const timestamp = Date.now().toString(36);
69
+ const random = Math.random().toString(36).slice(2, 10);
70
+ return `gc_${timestamp}_${random}`;
71
+ }
72
+ /**
73
+ * Auto-classify commit into a memory type based on commit message.
74
+ */
75
+ function classifyCommit(message) {
76
+ const lower = message.toLowerCase();
77
+ if (/\b(fix|bug|patch|hotfix|resolve|repair|correct|issue)\b/.test(lower))
78
+ return 'BUG_FIX';
79
+ if (/\b(refactor|clean|rename|restructure|reorganize|lint|format|style|convention)\b/.test(lower))
80
+ return 'CONVENTION';
81
+ if (/\b(feat|add|implement|create|new|introduce|support|enable|integrate)\b/.test(lower))
82
+ return 'DECISION';
83
+ if (/\b(doc|readme|comment|explain|note|changelog)\b/.test(lower))
84
+ return 'INSIGHT';
85
+ if (/\b(test|spec|coverage|assert|verify)\b/.test(lower))
86
+ return 'CONVENTION';
87
+ if (/\b(upgrade|downgrade|bump|deps?|dependency|package)\b/.test(lower))
88
+ return 'DECISION';
89
+ if (/\b(revert|rollback|undo)\b/.test(lower))
90
+ return 'BUG_FIX';
91
+ if (/\b(perf|optimize|speed|cache)\b/.test(lower))
92
+ return 'INSIGHT';
93
+ if (/\b(security|auth|encrypt|permission|vulnerability)\b/.test(lower))
94
+ return 'BUG_FIX';
95
+ return 'DECISION';
96
+ }
97
+ // ─── Main ─────────────────────────────────────────────────────────────────────
98
+ function main() {
99
+ // 1. Find git root
100
+ const workspaceRoot = gitCmd('git rev-parse --show-toplevel');
101
+ if (!workspaceRoot)
102
+ process.exit(0);
103
+ // 2. Check Cortex is initialized
104
+ const dataDir = path.join(workspaceRoot, '.ai', 'brain-data');
105
+ const dbPath = path.join(dataDir, 'cortex.db');
106
+ if (!fs.existsSync(dbPath))
107
+ process.exit(0);
108
+ // 3. Read commit info
109
+ const subject = gitCmd('git log -1 --pretty=%s');
110
+ if (!subject || subject.startsWith('Merge '))
111
+ process.exit(0);
112
+ const hash = gitCmd('git log -1 --pretty=%H');
113
+ const shortHash = hash.slice(0, 8);
114
+ const body = gitCmd('git log -1 --pretty=%b');
115
+ const filesRaw = gitCmd('git log -1 --name-only --pretty=');
116
+ const files = filesRaw ? filesRaw.split('\n').filter(Boolean) : [];
117
+ // Get stats
118
+ const statLine = gitCmd('git log -1 --pretty= --shortstat');
119
+ const insMatch = statLine.match(/(\d+) insertion/);
120
+ const delMatch = statLine.match(/(\d+) deletion/);
121
+ const insertions = insMatch ? insMatch[1] : '0';
122
+ const deletions = delMatch ? delMatch[1] : '0';
123
+ // 4. Build memory fields
124
+ const type = classifyCommit(subject);
125
+ const id = generateId();
126
+ let intent = subject;
127
+ if (files.length <= 3 && files.length > 0) {
128
+ intent += ` (in ${files.map(f => path.basename(f)).join(', ')})`;
129
+ }
130
+ else if (files.length > 3) {
131
+ intent += ` (${files.length} files)`;
132
+ }
133
+ let action = `[${shortHash}] +${insertions}/-${deletions} in ${files.length} file(s)`;
134
+ if (body)
135
+ action = body.slice(0, 200) + ' | ' + action;
136
+ const tags = ['git-commit', shortHash];
137
+ // Add top-level dirs
138
+ const dirs = new Set();
139
+ for (const f of files) {
140
+ const parts = f.split('/');
141
+ if (parts.length > 1)
142
+ dirs.add(parts[0]);
143
+ }
144
+ for (const d of dirs)
145
+ tags.push(d);
146
+ const relatedFiles = files.map(f => path.join(workspaceRoot, f));
147
+ const now = Date.now();
148
+ // 5. Direct SQLite insert (lightweight, no class init overhead)
149
+ try {
150
+ const Database = require('better-sqlite3');
151
+ const db = new Database(dbPath);
152
+ db.pragma('journal_mode = WAL');
153
+ // Check if already captured
154
+ const existing = db.prepare(`SELECT id FROM memory_units WHERE tags LIKE ? AND is_active = 1`).get(`%${shortHash}%`);
155
+ if (!existing) {
156
+ db.prepare(`
157
+ INSERT INTO memory_units (id, type, intent, action, reason, related_files, tags, timestamp, confidence, importance, is_active)
158
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
159
+ `).run(id, type, intent, action, `Auto-captured from git commit ${shortHash}`, JSON.stringify(relatedFiles), JSON.stringify(tags), now, 0.6, 0.5);
160
+ // Also insert into FTS index if it exists
161
+ try {
162
+ db.prepare(`INSERT INTO memory_fts (rowid, intent, action, tags) VALUES (
163
+ (SELECT rowid FROM memory_units WHERE id = ?), ?, ?, ?
164
+ )`).run(id, intent, action, tags.join(' '));
165
+ }
166
+ catch {
167
+ // FTS table might not exist yet, that's OK
168
+ }
169
+ }
170
+ db.close();
171
+ }
172
+ catch {
173
+ // Database issues — fail silently, never block git
174
+ process.exit(0);
175
+ }
176
+ }
177
+ main();
178
+ //# sourceMappingURL=git-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-capture.js","sourceRoot":"","sources":["../../src/hooks/git-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cortex Git Hooks — Captures branch switches and merges.
4
+ *
5
+ * Git hooks captured:
6
+ * post-checkout → remembers branch switches
7
+ * post-merge → remembers merges
8
+ *
9
+ * Usage: called automatically by git hooks installed via cortex-setup
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=git-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-hooks.d.ts","sourceRoot":"","sources":["../../src/hooks/git-hooks.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Cortex Git Hooks — Captures branch switches and merges.
5
+ *
6
+ * Git hooks captured:
7
+ * post-checkout → remembers branch switches
8
+ * post-merge → remembers merges
9
+ *
10
+ * Usage: called automatically by git hooks installed via cortex-setup
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ const child_process_1 = require("child_process");
47
+ const path = __importStar(require("path"));
48
+ const fs = __importStar(require("fs"));
49
+ function gitCmd(cmd) {
50
+ try {
51
+ return (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000 }).trim();
52
+ }
53
+ catch {
54
+ return '';
55
+ }
56
+ }
57
+ function generateId() {
58
+ return `gh_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
59
+ }
60
+ function main() {
61
+ const hookType = process.argv[2] || ''; // 'checkout' or 'merge'
62
+ // Find workspace root
63
+ const workspaceRoot = gitCmd('git rev-parse --show-toplevel');
64
+ if (!workspaceRoot)
65
+ process.exit(0);
66
+ // Check DB exists
67
+ const dbPath = path.join(workspaceRoot, '.ai', 'brain-data', 'cortex.db');
68
+ if (!fs.existsSync(dbPath))
69
+ process.exit(0);
70
+ let type = 'INSIGHT';
71
+ let intent = '';
72
+ let action = '';
73
+ let tags = ['git'];
74
+ if (hookType === 'checkout') {
75
+ // post-checkout: $3 $4 $5 = prev_head, new_head, is_branch_checkout
76
+ const prevRef = process.argv[3] || '';
77
+ const newRef = process.argv[4] || '';
78
+ const isBranch = process.argv[5] === '1';
79
+ if (!isBranch)
80
+ process.exit(0); // Skip file checkouts
81
+ const branchName = gitCmd('git rev-parse --abbrev-ref HEAD');
82
+ if (!branchName || branchName === 'HEAD')
83
+ process.exit(0);
84
+ type = 'INSIGHT';
85
+ intent = `Switched to branch: ${branchName}`;
86
+ action = `Branch checkout from ${prevRef.slice(0, 8)} to ${newRef.slice(0, 8)}`;
87
+ tags = ['git', 'branch-switch', branchName];
88
+ // Add context based on branch name
89
+ if (/fix|bug|hotfix/i.test(branchName))
90
+ tags.push('bugfix');
91
+ if (/feat|feature/i.test(branchName))
92
+ tags.push('feature');
93
+ if (/release|deploy/i.test(branchName))
94
+ tags.push('release');
95
+ }
96
+ else if (hookType === 'merge') {
97
+ // post-merge: $3 = is_squash_merge
98
+ const currentBranch = gitCmd('git rev-parse --abbrev-ref HEAD');
99
+ const mergeCommit = gitCmd('git log -1 --pretty=%s');
100
+ type = 'DECISION';
101
+ intent = `Merged into ${currentBranch}: ${mergeCommit}`;
102
+ action = `Merge completed on branch ${currentBranch}`;
103
+ tags = ['git', 'merge', currentBranch];
104
+ }
105
+ else {
106
+ process.exit(0);
107
+ }
108
+ if (!intent)
109
+ process.exit(0);
110
+ // Store in database
111
+ try {
112
+ const Database = require('better-sqlite3');
113
+ const db = new Database(dbPath);
114
+ db.pragma('journal_mode = WAL');
115
+ // Check dedup
116
+ const existing = db.prepare(`SELECT id FROM memory_units WHERE intent = ? AND is_active = 1`).get(intent);
117
+ if (!existing) {
118
+ db.prepare(`
119
+ INSERT INTO memory_units (id, type, intent, action, reason, tags, timestamp, confidence, importance, is_active)
120
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
121
+ `).run(generateId(), type, intent, action, `Auto-captured from git ${hookType}`, JSON.stringify(tags), Date.now(), 0.5, 0.4);
122
+ }
123
+ db.close();
124
+ }
125
+ catch {
126
+ process.exit(0);
127
+ }
128
+ }
129
+ main();
130
+ //# sourceMappingURL=git-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-hooks.js","sourceRoot":"","sources":["../../src/hooks/git-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cortex MCP — stdio transport for Antigravity / Gemini integration.
4
+ *
5
+ * CRITICAL: In stdio mode, stdout is ONLY for JSON-RPC messages.
6
+ * All logging MUST go to stderr. We override console.log/warn/error
7
+ * BEFORE importing any modules to prevent protocol corruption.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=mcp-stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-stdio.d.ts","sourceRoot":"","sources":["../src/mcp-stdio.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
@@ -0,0 +1,247 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Cortex MCP — stdio transport for Antigravity / Gemini integration.
5
+ *
6
+ * CRITICAL: In stdio mode, stdout is ONLY for JSON-RPC messages.
7
+ * All logging MUST go to stderr. We override console.log/warn/error
8
+ * BEFORE importing any modules to prevent protocol corruption.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ // === MUST BE FIRST: Redirect ALL console output to stderr ===
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const DEBUG = process.env.DEBUG === '1' || process.env.CORTEX_DEBUG === '1';
48
+ const debugLogPath = DEBUG ? path.join(process.cwd(), 'cortex.log') : null;
49
+ function logToFile(msg) {
50
+ if (!debugLogPath)
51
+ return;
52
+ try {
53
+ const timestamp = new Date().toISOString();
54
+ fs.appendFileSync(debugLogPath, `[${timestamp}] ${msg}\n`);
55
+ }
56
+ catch (e) { /* ignore */ }
57
+ }
58
+ console.log = (...args) => {
59
+ const msg = args.join(' ');
60
+ process.stderr.write(msg + '\n');
61
+ logToFile(`INFO: ${msg}`);
62
+ };
63
+ console.warn = (...args) => {
64
+ const msg = args.join(' ');
65
+ process.stderr.write(msg + '\n');
66
+ logToFile(`WARN: ${msg}`);
67
+ };
68
+ console.error = (...args) => {
69
+ const msg = args.join(' ');
70
+ process.stderr.write(msg + '\n');
71
+ logToFile(`ERROR: ${msg}`);
72
+ };
73
+ if (DEBUG) {
74
+ logToFile("=== CORTEX SERVER STARTING ===");
75
+ logToFile(`CWD: ${process.cwd()}`);
76
+ logToFile(`ARGS: ${process.argv.join(' ')}`);
77
+ }
78
+ // --- Crash protection: keep server alive on errors ---
79
+ process.on('uncaughtException', (err) => {
80
+ console.log(`[cortex-mcp] UNCAUGHT EXCEPTION (survived): ${err.message}`);
81
+ console.log(`[cortex-mcp] Stack: ${err.stack}`);
82
+ // Do NOT exit — keep the MCP connection alive
83
+ });
84
+ process.on('unhandledRejection', (reason) => {
85
+ console.log(`[cortex-mcp] UNHANDLED REJECTION (survived): ${reason?.message || reason}`);
86
+ // Do NOT exit — keep the MCP connection alive
87
+ });
88
+ const readline = __importStar(require("readline"));
89
+ const database_1 = require("./db/database");
90
+ const event_log_1 = require("./db/event-log");
91
+ const memory_store_1 = require("./db/memory-store");
92
+ const mcp_handler_1 = require("./server/mcp-handler");
93
+ const embedding_manager_1 = require("./memory/embedding-manager");
94
+ const memory_decay_1 = require("./memory/memory-decay");
95
+ // ─── CLI Routing ─────────────────────────────────────────────────────────────
96
+ // Handle subcommands BEFORE starting the MCP server
97
+ const firstArg = process.argv[2];
98
+ if (firstArg === 'setup') {
99
+ // Route to setup CLI
100
+ const setupPath = path.join(__dirname, 'cli', 'setup.js');
101
+ process.argv.splice(2, 1); // Remove 'setup' so setup.ts sees clean args
102
+ require(setupPath);
103
+ // Don't continue — setup runs and exits
104
+ }
105
+ else if (firstArg === '--version' || firstArg === '-v') {
106
+ const pkg = require(path.join(__dirname, '..', 'package.json'));
107
+ process.stderr.write(`cortex-mcp v${pkg.version}\n`);
108
+ process.exit(0);
109
+ }
110
+ else if (firstArg === '--help' || firstArg === '-h' || firstArg === 'help') {
111
+ process.stderr.write(`
112
+ Cortex MCP Server — Persistent memory for AI coding assistants
113
+
114
+ USAGE:
115
+ npx @cortex-mcp/server Start MCP server (used by AI clients)
116
+ npx @cortex-mcp/server setup Auto-configure your AI client
117
+ npx @cortex-mcp/server --version Show version
118
+ npx @cortex-mcp/server --help Show this help
119
+
120
+ COMPANION TOOLS (installed automatically):
121
+ cortex-setup Configure AI client + git hooks
122
+ cortex-capture Capture git commits as memories
123
+ cortex-hooks <checkout|merge> Capture branch/merge events
124
+ cortex-run <command> Run any command and capture errors
125
+
126
+ ENVIRONMENT VARIABLES:
127
+ CORTEX_DEBUG=1 Enable file logging (cortex.log)
128
+ CORTEX_PORT=4000 Custom dashboard port (default: 3456)
129
+ OPENAI_API_KEY=sk-... Enable LLM-enhanced classification
130
+ ANTHROPIC_API_KEY=sk-ant-... Alternative LLM provider
131
+ CORTEX_LLM_BASE_URL=http://... Custom LLM endpoint (Ollama, etc.)
132
+
133
+ SUPPORTED AI CLIENTS:
134
+ Antigravity, Claude Desktop, Cursor, GitHub Copilot, Windsurf, Zed
135
+ Also works with: Claude Code (terminal), any MCP-compatible client
136
+
137
+ DOCS: https://github.com/cortex-mcp/server
138
+ `);
139
+ process.exit(0);
140
+ }
141
+ // Determine data directory — use workspace if provided, else cwd
142
+ // Skip arg if it looks like a flag (starts with -)
143
+ const workspaceRoot = (firstArg && !firstArg.startsWith('-')) ? firstArg : process.cwd();
144
+ const dataDir = path.join(workspaceRoot, '.ai', 'brain-data');
145
+ // Initialize database (wrapped to catch lock errors)
146
+ let database;
147
+ let eventLog;
148
+ let memoryStore;
149
+ let handleMCPRequest;
150
+ try {
151
+ // Initialize database and memory store (console.log now goes to stderr)
152
+ database = new database_1.CognitiveDatabase(dataDir);
153
+ eventLog = new event_log_1.EventLog(database);
154
+ memoryStore = new memory_store_1.MemoryStore(database);
155
+ // Start embedding worker for vector search
156
+ (0, embedding_manager_1.startEmbeddingWorker)();
157
+ // Create MCP handler (reuses all existing logic)
158
+ const handler = (0, mcp_handler_1.createMCPHandler)(memoryStore, eventLog, workspaceRoot);
159
+ handleMCPRequest = handler ? handler.handleMCPRequest : null;
160
+ console.log(`[cortex-mcp] Started with ${memoryStore.activeCount()} memories from ${dataDir}`);
161
+ // Run memory decay on startup, then every 6 hours
162
+ (0, memory_decay_1.cleanupMemories)(memoryStore);
163
+ setInterval(() => (0, memory_decay_1.cleanupMemories)(memoryStore), 6 * 60 * 60 * 1000);
164
+ // Auto-scan project on first run (0 memories = brand new install)
165
+ if (memoryStore.activeCount() === 0) {
166
+ try {
167
+ const scanner = new (require('./scanners/project-scanner').ProjectScanner)(memoryStore, workspaceRoot);
168
+ scanner.scan().then((count) => {
169
+ if (count > 0)
170
+ console.log(`[cortex-mcp] Auto-scanned project: ${count} memories created`);
171
+ }).catch(() => { });
172
+ }
173
+ catch (err) {
174
+ console.log(`[cortex-mcp] Auto-scan skipped: ${err.message}`);
175
+ }
176
+ }
177
+ // Start web dashboard (non-blocking, port 3456)
178
+ try {
179
+ const { startDashboard } = require('./server/dashboard');
180
+ const { CONFIG } = require('./config/config');
181
+ startDashboard(memoryStore);
182
+ const port = process.env.CORTEX_PORT || CONFIG.DASHBOARD_PORT || 3456;
183
+ console.log(`[cortex-mcp] Dashboard: http://localhost:${port}`);
184
+ }
185
+ catch (err) {
186
+ console.log(`[cortex-mcp] Dashboard unavailable: ${err.message}`);
187
+ }
188
+ }
189
+ catch (err) {
190
+ console.error(`[cortex-mcp] FATAL INIT ERROR: ${err.message}`);
191
+ console.error(`[cortex-mcp] Server running in degraded mode (no DB)`);
192
+ // Fallback: minimal handler that reports error
193
+ handleMCPRequest = async (rpc) => ({
194
+ jsonrpc: '2.0', id: rpc.id,
195
+ error: { code: -32603, message: `Server Init Failed: ${err.message}` }
196
+ });
197
+ }
198
+ // --- stdio JSON-RPC transport ---
199
+ // Read line-delimited JSON from stdin, write responses to stdout
200
+ const rl = readline.createInterface({
201
+ input: process.stdin,
202
+ terminal: false,
203
+ });
204
+ rl.on('line', async (line) => {
205
+ if (!line.trim())
206
+ return;
207
+ try {
208
+ const rpc = JSON.parse(line);
209
+ console.log(`[cortex-mcp] ${rpc.method} (id: ${rpc.id})`);
210
+ if (!handleMCPRequest) {
211
+ throw new Error("Handler not initialized");
212
+ }
213
+ const response = await handleMCPRequest(rpc);
214
+ if (response) {
215
+ const json = JSON.stringify(response);
216
+ process.stdout.write(json + '\n');
217
+ }
218
+ }
219
+ catch (err) {
220
+ console.log(`[cortex-mcp] Error: ${err.message}`);
221
+ const errorResponse = {
222
+ jsonrpc: '2.0',
223
+ error: { code: -32700, message: `Parse error: ${err.message}` },
224
+ id: null,
225
+ };
226
+ process.stdout.write(JSON.stringify(errorResponse) + '\n');
227
+ }
228
+ });
229
+ rl.on('close', () => {
230
+ console.log('[cortex-mcp] stdin closed, shutting down');
231
+ if (database)
232
+ database.close();
233
+ process.exit(0);
234
+ });
235
+ process.on('SIGTERM', () => {
236
+ console.log('[cortex-mcp] SIGTERM received, shutting down');
237
+ if (database)
238
+ database.close();
239
+ process.exit(0);
240
+ });
241
+ process.on('SIGINT', () => {
242
+ console.log('[cortex-mcp] SIGINT received, shutting down');
243
+ if (database)
244
+ database.close();
245
+ process.exit(0);
246
+ });
247
+ //# sourceMappingURL=mcp-stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-stdio.js","sourceRoot":"","sources":["../src/mcp-stdio.ts"],"names":[],"mappings":"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"}