cortex-mcp 2.5.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -279
- package/README.md +224 -393
- package/dist/cli/setup.js +60 -58
- package/dist/cli/setup.js.map +1 -1
- package/dist/config/config.js +2 -2
- package/dist/config/config.js.map +1 -1
- package/dist/db/database.d.ts +0 -8
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +2 -34
- package/dist/db/database.js.map +1 -1
- package/dist/db/event-log.d.ts +0 -4
- package/dist/db/event-log.d.ts.map +1 -1
- package/dist/db/event-log.js +10 -14
- package/dist/db/event-log.js.map +1 -1
- package/dist/db/memory-store.d.ts +3 -30
- package/dist/db/memory-store.d.ts.map +1 -1
- package/dist/db/memory-store.js +44 -140
- package/dist/db/memory-store.js.map +1 -1
- package/dist/embedding-worker.js +1 -1
- package/dist/embedding-worker.js.map +1 -1
- package/dist/hooks/git-capture.js +3 -3
- package/dist/hooks/git-hooks.js +2 -5
- package/dist/mcp-stdio.js +3 -34
- package/dist/mcp-stdio.js.map +1 -1
- package/dist/memory/anticipation-engine.d.ts.map +1 -1
- package/dist/memory/anticipation-engine.js +10 -18
- package/dist/memory/anticipation-engine.js.map +1 -1
- package/dist/memory/auto-learner.d.ts.map +1 -1
- package/dist/memory/auto-learner.js +43 -190
- package/dist/memory/auto-learner.js.map +1 -1
- package/dist/memory/confidence-decay.d.ts.map +1 -1
- package/dist/memory/confidence-decay.js +9 -13
- package/dist/memory/confidence-decay.js.map +1 -1
- package/dist/memory/embedding-manager.d.ts.map +1 -1
- package/dist/memory/embedding-manager.js +4 -6
- package/dist/memory/embedding-manager.js.map +1 -1
- package/dist/memory/export-import.js +2 -2
- package/dist/memory/export-import.js.map +1 -1
- package/dist/memory/git-memory.d.ts.map +1 -1
- package/dist/memory/git-memory.js +26 -20
- package/dist/memory/git-memory.js.map +1 -1
- package/dist/memory/learning-rate.js +7 -8
- package/dist/memory/learning-rate.js.map +1 -1
- package/dist/memory/llm-enhancer.d.ts +14 -2
- package/dist/memory/llm-enhancer.d.ts.map +1 -1
- package/dist/memory/llm-enhancer.js +46 -66
- package/dist/memory/llm-enhancer.js.map +1 -1
- package/dist/memory/memory-cache.d.ts.map +1 -1
- package/dist/memory/memory-cache.js +0 -10
- package/dist/memory/memory-cache.js.map +1 -1
- package/dist/memory/memory-consolidator.d.ts.map +1 -1
- package/dist/memory/memory-consolidator.js +14 -20
- package/dist/memory/memory-consolidator.js.map +1 -1
- package/dist/memory/memory-decay.d.ts.map +1 -1
- package/dist/memory/memory-decay.js +51 -77
- package/dist/memory/memory-decay.js.map +1 -1
- package/dist/memory/memory-quality.d.ts +1 -1
- package/dist/memory/memory-quality.d.ts.map +1 -1
- package/dist/memory/memory-quality.js +6 -9
- package/dist/memory/memory-quality.js.map +1 -1
- package/dist/memory/memory-ranker.d.ts.map +1 -1
- package/dist/memory/memory-ranker.js +3 -7
- package/dist/memory/memory-ranker.js.map +1 -1
- package/dist/memory/meta-memory.js +3 -3
- package/dist/memory/meta-memory.js.map +1 -1
- package/dist/memory/session-tracker.d.ts +0 -2
- package/dist/memory/session-tracker.d.ts.map +1 -1
- package/dist/memory/session-tracker.js +8 -26
- package/dist/memory/session-tracker.js.map +1 -1
- package/dist/memory/temporal-engine.d.ts.map +1 -1
- package/dist/memory/temporal-engine.js +13 -9
- package/dist/memory/temporal-engine.js.map +1 -1
- package/dist/retrieval/hybrid-retriever.d.ts +2 -0
- package/dist/retrieval/hybrid-retriever.d.ts.map +1 -1
- package/dist/retrieval/hybrid-retriever.js +13 -3
- package/dist/retrieval/hybrid-retriever.js.map +1 -1
- package/dist/scanners/architecture-graph.js +2 -2
- package/dist/scanners/architecture-graph.js.map +1 -1
- package/dist/scanners/code-verifier.d.ts +0 -1
- package/dist/scanners/code-verifier.d.ts.map +1 -1
- package/dist/scanners/code-verifier.js +14 -14
- package/dist/scanners/code-verifier.js.map +1 -1
- package/dist/scanners/context-builder.d.ts.map +1 -1
- package/dist/scanners/context-builder.js +45 -33
- package/dist/scanners/context-builder.js.map +1 -1
- package/dist/scanners/export-map.js +2 -2
- package/dist/scanners/export-map.js.map +1 -1
- package/dist/scanners/project-scanner.js +2 -2
- package/dist/scanners/project-scanner.js.map +1 -1
- package/dist/security/encryption.js +1 -1
- package/dist/security/encryption.js.map +1 -1
- package/dist/security/feature-gate.d.ts.map +1 -1
- package/dist/security/feature-gate.js +20 -62
- package/dist/security/feature-gate.js.map +1 -1
- package/dist/security/license.js +35 -282
- package/dist/security/license.js.map +1 -1
- package/dist/security/rate-limiter.d.ts +3 -4
- package/dist/security/rate-limiter.d.ts.map +1 -1
- package/dist/security/rate-limiter.js +29 -11
- package/dist/security/rate-limiter.js.map +1 -1
- package/dist/server/dashboard.js +327 -166
- package/dist/server/dashboard.js.map +1 -1
- package/dist/server/mcp-handler.d.ts.map +1 -1
- package/dist/server/mcp-handler.js +771 -891
- package/dist/server/mcp-handler.js.map +1 -1
- package/package.json +8 -18
- package/dist/memory/completion-resolver.d.ts +0 -38
- package/dist/memory/completion-resolver.d.ts.map +0 -1
- package/dist/memory/completion-resolver.js +0 -127
- package/dist/memory/completion-resolver.js.map +0 -1
- package/dist/memory/convention-detector.d.ts +0 -11
- package/dist/memory/convention-detector.d.ts.map +0 -1
- package/dist/memory/convention-detector.js +0 -294
- package/dist/memory/convention-detector.js.map +0 -1
- package/dist/memory/correction-detector.d.ts +0 -33
- package/dist/memory/correction-detector.d.ts.map +0 -1
- package/dist/memory/correction-detector.js +0 -129
- package/dist/memory/correction-detector.js.map +0 -1
- package/dist/memory/error-learner.d.ts +0 -26
- package/dist/memory/error-learner.d.ts.map +0 -1
- package/dist/memory/error-learner.js +0 -145
- package/dist/memory/error-learner.js.map +0 -1
- package/dist/memory/file-relationships.d.ts +0 -47
- package/dist/memory/file-relationships.d.ts.map +0 -1
- package/dist/memory/file-relationships.js +0 -130
- package/dist/memory/file-relationships.js.map +0 -1
- package/dist/memory/impact-analyzer.d.ts +0 -16
- package/dist/memory/impact-analyzer.d.ts.map +0 -1
- package/dist/memory/impact-analyzer.js +0 -189
- package/dist/memory/impact-analyzer.js.map +0 -1
- package/dist/memory/instructions-generator.d.ts +0 -30
- package/dist/memory/instructions-generator.d.ts.map +0 -1
- package/dist/memory/instructions-generator.js +0 -117
- package/dist/memory/instructions-generator.js.map +0 -1
- package/dist/memory/pre-flight.d.ts +0 -24
- package/dist/memory/pre-flight.d.ts.map +0 -1
- package/dist/memory/pre-flight.js +0 -121
- package/dist/memory/pre-flight.js.map +0 -1
- package/dist/memory/preference-learner.d.ts +0 -28
- package/dist/memory/preference-learner.d.ts.map +0 -1
- package/dist/memory/preference-learner.js +0 -144
- package/dist/memory/preference-learner.js.map +0 -1
- package/dist/memory/regression-guard.d.ts +0 -35
- package/dist/memory/regression-guard.d.ts.map +0 -1
- package/dist/memory/regression-guard.js +0 -90
- package/dist/memory/regression-guard.js.map +0 -1
- package/dist/memory/resume-work.d.ts +0 -37
- package/dist/memory/resume-work.d.ts.map +0 -1
- package/dist/memory/resume-work.js +0 -141
- package/dist/memory/resume-work.js.map +0 -1
- package/dist/memory/success-tracker.d.ts +0 -33
- package/dist/memory/success-tracker.d.ts.map +0 -1
- package/dist/memory/success-tracker.js +0 -75
- package/dist/memory/success-tracker.js.map +0 -1
- package/dist/memory/tool-recommender.d.ts +0 -29
- package/dist/memory/tool-recommender.d.ts.map +0 -1
- package/dist/memory/tool-recommender.js +0 -117
- package/dist/memory/tool-recommender.js.map +0 -1
- package/dist/memory/usage-stats.d.ts +0 -98
- package/dist/memory/usage-stats.d.ts.map +0 -1
- package/dist/memory/usage-stats.js +0 -345
- package/dist/memory/usage-stats.js.map +0 -1
- package/dist/utils/extract-tags.d.ts +0 -16
- package/dist/utils/extract-tags.d.ts.map +0 -1
- package/dist/utils/extract-tags.js +0 -40
- package/dist/utils/extract-tags.js.map +0 -1
|
@@ -21,40 +21,22 @@ const PATTERNS = [
|
|
|
21
21
|
/\b(don'?t|do not|never|avoid|stop using|instead of|rather than)\b.{5,80}/gi,
|
|
22
22
|
/\b(wrong|incorrect|mistake|bug|error|issue|problem)\b.{5,60}(fix|correct|should|use|replace)/gi,
|
|
23
23
|
/\b(fixed|corrected|resolved)\b.{5,60}/gi,
|
|
24
|
-
/\b(should have|should've|that was wrong|my bad|oops|actually no)\b.{5,80}/gi,
|
|
25
|
-
/\b(I was wrong|we were wrong|that's not right|not correct)\b.{5,60}/gi,
|
|
26
|
-
/\b(better approach|better way|improved by|changed to)\b.{5,80}/gi,
|
|
27
24
|
],
|
|
28
25
|
confidence: 0.75,
|
|
29
26
|
reason: 'Auto-detected correction pattern',
|
|
30
27
|
},
|
|
31
|
-
// DECISION — "we decided", "
|
|
28
|
+
// DECISION — "we decided", "we'll use", "going with", "chosen"
|
|
32
29
|
{
|
|
33
30
|
type: 'DECISION',
|
|
34
31
|
signals: [
|
|
35
|
-
/\b(
|
|
36
|
-
/\b((?:we|I)\s+(?:used|chose|picked|adopted|switched to|went with|opted for))\b.{5,80}/gi,
|
|
32
|
+
/\b(we('ll| will| are going to| decided to)?)\s+(use|adopt|switch|go with|choose|pick|implement)\b.{5,80}/gi,
|
|
37
33
|
/\b(decided|chosen|selected|picked|going with|sticking with)\b.{5,80}/gi,
|
|
38
34
|
/\b(use|using)\s+\w+\s+(instead of|over|rather than)\s+\w+/gi,
|
|
39
|
-
/\b(chose|opted for|went with|settled on|landed on)\b.{5,80}/gi,
|
|
40
|
-
/\b(changed? from|switch(ed|ing) from|migrat(ed|ing) from)\b.{5,80}/gi,
|
|
41
|
-
/\b(the plan is|approach is|strategy is|our approach)\b.{5,80}/gi,
|
|
42
35
|
],
|
|
43
|
-
confidence: 0.
|
|
36
|
+
confidence: 0.70,
|
|
44
37
|
reason: 'Auto-detected decision pattern',
|
|
45
38
|
},
|
|
46
|
-
// CONVENTION
|
|
47
|
-
{
|
|
48
|
-
type: 'CONVENTION',
|
|
49
|
-
signals: [
|
|
50
|
-
/\b(best practice|recommended|idiomatic|canonical|proper way)\b.{5,80}/gi,
|
|
51
|
-
/\b(we always|our convention|preferred way|house rule|team rule)\b.{5,80}/gi,
|
|
52
|
-
/\b(in this (project|codebase|repo)|across the (project|codebase))\b.{5,80}/gi,
|
|
53
|
-
],
|
|
54
|
-
confidence: 0.85,
|
|
55
|
-
reason: 'Auto-detected convention pattern (specific)',
|
|
56
|
-
},
|
|
57
|
-
// CONVENTION (generic) — lower confidence
|
|
39
|
+
// CONVENTION — "always", "should always", "must", "standard", "convention"
|
|
58
40
|
{
|
|
59
41
|
type: 'CONVENTION',
|
|
60
42
|
signals: [
|
|
@@ -72,26 +54,11 @@ const PATTERNS = [
|
|
|
72
54
|
/\b(bug|the (issue|problem|cause) was|root cause|was causing|the fix)\b.{5,80}/gi,
|
|
73
55
|
/\b(fixed by|resolved by|the solution (is|was))\b.{5,80}/gi,
|
|
74
56
|
/\b(crash|exception|error|fail(ed|ure)?)\b.{5,60}(because|due to|caused by|fixed)/gi,
|
|
75
|
-
/\b(the fix was|worked after|the trick was|solved by)\b.{5,80}/gi,
|
|
76
|
-
/\b(turns out|it was because|the real issue)\b.{5,80}/gi,
|
|
77
|
-
/\b(workaround|hack|temporary fix|quick fix)\b.{5,80}/gi,
|
|
78
57
|
],
|
|
79
58
|
confidence: 0.80,
|
|
80
59
|
reason: 'Auto-detected bug fix pattern',
|
|
81
60
|
},
|
|
82
|
-
// INSIGHT
|
|
83
|
-
{
|
|
84
|
-
type: 'INSIGHT',
|
|
85
|
-
signals: [
|
|
86
|
-
/\b(for future reference|next time|in the future)\b.{5,80}/gi,
|
|
87
|
-
/\b(learned that|realized|discovered|found out|it turns out)\b.{5,80}/gi,
|
|
88
|
-
/\b(the key is|the secret is|the trick is|pro tip)\b.{5,80}/gi,
|
|
89
|
-
/\b(interestingly|surprisingly|counterintuitively|unexpectedly)\b.{5,80}/gi,
|
|
90
|
-
],
|
|
91
|
-
confidence: 0.85,
|
|
92
|
-
reason: 'Auto-detected insight pattern (specific)',
|
|
93
|
-
},
|
|
94
|
-
// INSIGHT (generic) — lower confidence
|
|
61
|
+
// INSIGHT — "key insight", "important to note", "worth remembering"
|
|
95
62
|
{
|
|
96
63
|
type: 'INSIGHT',
|
|
97
64
|
signals: [
|
|
@@ -152,102 +119,13 @@ const PATTERNS = [
|
|
|
152
119
|
confidence: 0.60,
|
|
153
120
|
reason: 'Auto-detected current task / priority',
|
|
154
121
|
},
|
|
155
|
-
// IMPLICIT DECISION — "let's go with", "I'll use", "we're using", "going to use"
|
|
156
|
-
{
|
|
157
|
-
type: 'DECISION',
|
|
158
|
-
signals: [
|
|
159
|
-
/\b(let'?s (go with|use|try|do|build|implement))\b.{5,80}/gi,
|
|
160
|
-
/\b(I'?ll (use|go with|try|implement|build|create|set up))\b.{5,80}/gi,
|
|
161
|
-
/\b(we'?re (using|going with|building with|switching to))\b.{5,80}/gi,
|
|
162
|
-
/\b(going to use|plan to use|want to use)\b.{5,80}/gi,
|
|
163
|
-
/\b(set up|configured|installed)\s+\w+\s+(for|as|to handle)\b.{5,60}/gi,
|
|
164
|
-
],
|
|
165
|
-
confidence: 0.68,
|
|
166
|
-
reason: 'Auto-detected implicit decision',
|
|
167
|
-
},
|
|
168
|
-
// COMPARISON — "X works better than Y", "X is faster", "prefer X over Y"
|
|
169
|
-
{
|
|
170
|
-
type: 'DECISION',
|
|
171
|
-
signals: [
|
|
172
|
-
/\b\w+\s+(works? better|is (better|faster|simpler|cleaner|safer)|outperforms?)\s+(than\s+)?\w+/gi,
|
|
173
|
-
/\b(prefer|recommend)\s+\w+\s+(over|instead of|rather than)\s+\w+/gi,
|
|
174
|
-
/\b(X|the|this)\s+(approach|solution|method|pattern)\s+is\s+(better|worse|simpler|faster)/gi,
|
|
175
|
-
/\b(more (reliable|scalable|maintainable|readable|performant))\b.{5,60}/gi,
|
|
176
|
-
],
|
|
177
|
-
confidence: 0.65,
|
|
178
|
-
reason: 'Auto-detected comparison / preference',
|
|
179
|
-
},
|
|
180
|
-
// PREFERENCE — "I like", "I want", "please always", user style preferences
|
|
181
|
-
{
|
|
182
|
-
type: 'CONVENTION',
|
|
183
|
-
signals: [
|
|
184
|
-
/\b(I (like|want|prefer|need) (you to|it to|the))\b.{5,80}/gi,
|
|
185
|
-
/\b(please (always|never|don'?t|make sure))\b.{5,80}/gi,
|
|
186
|
-
/\b(be more (concise|verbose|detailed|careful|specific))\b.{5,60}/gi,
|
|
187
|
-
/\b(I don'?t (like|want|need))\b.{5,80}/gi,
|
|
188
|
-
/\b(from now on|going forward|in the future)\b.{5,80}/gi,
|
|
189
|
-
],
|
|
190
|
-
confidence: 0.72,
|
|
191
|
-
reason: 'Auto-detected user preference',
|
|
192
|
-
},
|
|
193
|
-
// ENVIRONMENT — "runs on", "deployed to", "uses port", config knowledge
|
|
194
|
-
{
|
|
195
|
-
type: 'INSIGHT',
|
|
196
|
-
signals: [
|
|
197
|
-
/\b(runs? on|deployed to|hosted on|hosted at)\b.{5,80}/gi,
|
|
198
|
-
/\b(port\s+\d+|localhost:\d+|\.env)\b.{5,60}/gi,
|
|
199
|
-
/\b(database is|DB is|using\s+(postgres|mysql|mongo|redis|sqlite))\b.{5,80}/gi,
|
|
200
|
-
/\b(API (key|token|secret|endpoint) is)\b.{5,60}/gi,
|
|
201
|
-
/\b(production|staging|development)\s+(server|environment|URL|database)\b.{5,60}/gi,
|
|
202
|
-
],
|
|
203
|
-
confidence: 0.70,
|
|
204
|
-
reason: 'Auto-detected environment/config knowledge',
|
|
205
|
-
},
|
|
206
|
-
// ARCHITECTURE — "X calls Y", "X depends on", "flow is", structure knowledge
|
|
207
|
-
{
|
|
208
|
-
type: 'INSIGHT',
|
|
209
|
-
signals: [
|
|
210
|
-
/\b(depends? on|imports? from|calls?|wraps?|extends?|inherits? from)\b.{5,80}/gi,
|
|
211
|
-
/\b(the flow is|data flows?|pipeline is|architecture is)\b.{5,80}/gi,
|
|
212
|
-
/\b(entry point|main file|bootstrap|initialization)\b.{5,60}/gi,
|
|
213
|
-
/\b(this (file|module|component|service) (handles?|manages?|is responsible))\b.{5,80}/gi,
|
|
214
|
-
/\b(layer|tier|service|controller|middleware|handler)\s+(for|handles?|processes?)\b.{5,60}/gi,
|
|
215
|
-
],
|
|
216
|
-
confidence: 0.60,
|
|
217
|
-
reason: 'Auto-detected architecture knowledge',
|
|
218
|
-
},
|
|
219
|
-
// ERROR FINGERPRINT — captures error codes, stack traces, error messages for recall
|
|
220
|
-
{
|
|
221
|
-
type: 'BUG_FIX',
|
|
222
|
-
signals: [
|
|
223
|
-
/\b(Error|TypeError|ReferenceError|SyntaxError|RangeError):\s*.{10,100}/gi,
|
|
224
|
-
/\b(ERR_|ENOENT|EACCES|ECONNREFUSED|EPERM|EISDIR)\b.{5,80}/gi,
|
|
225
|
-
/\b(HTTP\s*(4\d\d|5\d\d))\b.{5,80}/gi,
|
|
226
|
-
/\b(npm ERR|build failed|compilation error|test failed)\b.{5,80}/gi,
|
|
227
|
-
/\b(stack trace|at\s+\w+\s+\()/gi,
|
|
228
|
-
/\b(exit code\s*[1-9]|process exited|segfault|out of memory)\b.{5,60}/gi,
|
|
229
|
-
/\b(cannot find module|module not found|import error|no such file)\b.{5,80}/gi,
|
|
230
|
-
],
|
|
231
|
-
confidence: 0.82,
|
|
232
|
-
reason: 'Auto-detected error fingerprint — enables instant fix recall when same error recurs',
|
|
233
|
-
},
|
|
234
122
|
];
|
|
235
123
|
// ─── Sentence Splitter ────────────────────────────────────────────────────────
|
|
236
124
|
function splitSentences(text) {
|
|
237
|
-
//
|
|
238
|
-
// AI responses use markdown bullets (- ), numbered lists (1. ), and newlines
|
|
239
|
-
// — not just periods. Without this, markdown bullets merge into one giant
|
|
240
|
-
// sentence and only the strongest pattern fires.
|
|
125
|
+
// Split on sentence boundaries, keeping reasonable length
|
|
241
126
|
return text
|
|
242
|
-
.replace(
|
|
243
|
-
.
|
|
244
|
-
.split(/\n+/) // Split on newlines FIRST
|
|
245
|
-
.flatMap(line => {
|
|
246
|
-
// Strip markdown bullet prefixes: "- ", "* ", "1. ", "> "
|
|
247
|
-
const cleaned = line.replace(/^\s*[-*>]\s+/, '').replace(/^\s*\d+\.\s+/, '').trim();
|
|
248
|
-
// Then split remaining on sentence boundaries
|
|
249
|
-
return cleaned.split(/(?<=[.!?])\s+/);
|
|
250
|
-
})
|
|
127
|
+
.replace(/\n+/g, ' ')
|
|
128
|
+
.split(/(?<=[.!?])\s+/)
|
|
251
129
|
.map(s => s.trim())
|
|
252
130
|
.filter(s => s.length > 20 && s.length < 300);
|
|
253
131
|
}
|
|
@@ -262,10 +140,7 @@ function extractMemories(text) {
|
|
|
262
140
|
const sentences = splitSentences(text);
|
|
263
141
|
const results = [];
|
|
264
142
|
const seen = new Set();
|
|
265
|
-
for (
|
|
266
|
-
const sentence = sentences[i];
|
|
267
|
-
// Collect ALL matching patterns for this sentence
|
|
268
|
-
const candidates = [];
|
|
143
|
+
for (const sentence of sentences) {
|
|
269
144
|
for (const pattern of PATTERNS) {
|
|
270
145
|
let matched = false;
|
|
271
146
|
for (const signal of pattern.signals) {
|
|
@@ -275,65 +150,43 @@ function extractMemories(text) {
|
|
|
275
150
|
break;
|
|
276
151
|
}
|
|
277
152
|
}
|
|
278
|
-
if (matched)
|
|
279
|
-
|
|
280
|
-
|
|
153
|
+
if (!matched)
|
|
154
|
+
continue;
|
|
155
|
+
// Clean up the sentence for storage
|
|
156
|
+
const content = sentence
|
|
157
|
+
.replace(/^(so|and|but|also|note that|remember that|keep in mind that)\s+/i, '')
|
|
158
|
+
.replace(/\s+/g, ' ')
|
|
159
|
+
.trim();
|
|
160
|
+
// Quality gate: reject low-value content
|
|
161
|
+
if (content.length < 40)
|
|
162
|
+
continue;
|
|
163
|
+
// Reject questions — they are not facts to remember
|
|
164
|
+
if (content.trim().endsWith('?'))
|
|
165
|
+
continue;
|
|
166
|
+
// Reject pure conversational filler that adds no value
|
|
167
|
+
const fillerPatterns = [
|
|
168
|
+
/^(you might|you should consider|i would suggest|please note|it's worth|it is worth|feel free to|don't hesitate)/i,
|
|
169
|
+
/^(as mentioned|as noted|as discussed|as i said|as we discussed)/i,
|
|
170
|
+
/^(in general|generally speaking|typically|usually|often|sometimes)/i,
|
|
171
|
+
/^(let me know|let us know|feel free|if you have|if you need)/i,
|
|
172
|
+
];
|
|
173
|
+
if (fillerPatterns.some(p => p.test(content)))
|
|
174
|
+
continue;
|
|
175
|
+
// Dedup by normalized content
|
|
176
|
+
const key = `${pattern.type}:${normalize(content).slice(0, 60)}`;
|
|
177
|
+
if (seen.has(key))
|
|
178
|
+
continue;
|
|
179
|
+
seen.add(key);
|
|
180
|
+
results.push({
|
|
181
|
+
type: pattern.type,
|
|
182
|
+
content,
|
|
183
|
+
confidence: pattern.confidence,
|
|
184
|
+
reason: pattern.reason,
|
|
185
|
+
});
|
|
186
|
+
break; // One match per sentence is enough
|
|
281
187
|
}
|
|
282
|
-
if (candidates.length === 0)
|
|
283
|
-
continue;
|
|
284
|
-
// Pick the highest-confidence match (most specific wins)
|
|
285
|
-
candidates.sort((a, b) => b.pattern.confidence - a.pattern.confidence);
|
|
286
|
-
const best = candidates[0].pattern;
|
|
287
|
-
// Clean up the sentence for storage
|
|
288
|
-
const content = sentence
|
|
289
|
-
.replace(/^(so|and|but|also|note that|remember that|keep in mind that)\s+/i, '')
|
|
290
|
-
.replace(/\s+/g, ' ')
|
|
291
|
-
.trim();
|
|
292
|
-
if (content.length < 15)
|
|
293
|
-
continue;
|
|
294
|
-
// Dedup by normalized content
|
|
295
|
-
const key = `${best.type}:${normalize(content).slice(0, 60)}`;
|
|
296
|
-
if (seen.has(key))
|
|
297
|
-
continue;
|
|
298
|
-
seen.add(key);
|
|
299
|
-
// --- NEW: Extract real reasoning from context ---
|
|
300
|
-
const reason = extractReason(sentence, sentences, i) || best.reason;
|
|
301
|
-
results.push({
|
|
302
|
-
type: best.type,
|
|
303
|
-
content,
|
|
304
|
-
confidence: best.confidence,
|
|
305
|
-
reason,
|
|
306
|
-
});
|
|
307
188
|
}
|
|
308
189
|
// Return only high-confidence matches (avoid noise)
|
|
309
190
|
return results.filter(r => r.confidence >= 0.55);
|
|
310
191
|
}
|
|
311
|
-
/**
|
|
312
|
-
* Extract the REAL reason from context — looks for "because", "since", "due to" etc.
|
|
313
|
-
* If the reason clause is in the same sentence, extract it.
|
|
314
|
-
* If it's in the next sentence, grab that as context.
|
|
315
|
-
*/
|
|
316
|
-
function extractReason(sentence, allSentences, index) {
|
|
317
|
-
// Check for inline reasoning: "X because Y", "X since Y", "X due to Y"
|
|
318
|
-
const reasonPatterns = [
|
|
319
|
-
/\b(?:because|since|as)\s+(.{10,120})/i,
|
|
320
|
-
/\b(?:due to|caused by|in order to|so that)\s+(.{10,100})/i,
|
|
321
|
-
/\b(?:the reason (?:is|was|being))\s+(.{10,100})/i,
|
|
322
|
-
/\b(?:this (?:is|was) (?:because|needed|required|necessary))\s+(.{10,100})/i,
|
|
323
|
-
];
|
|
324
|
-
for (const pat of reasonPatterns) {
|
|
325
|
-
const match = sentence.match(pat);
|
|
326
|
-
if (match && match[1]) {
|
|
327
|
-
return match[1].replace(/\s+/g, ' ').trim().slice(0, 120);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
// Check next sentence for reasoning context
|
|
331
|
-
if (index + 1 < allSentences.length) {
|
|
332
|
-
const next = allSentences[index + 1];
|
|
333
|
-
if (/^(because|since|this is because|the reason|due to|otherwise)/i.test(next.trim())) {
|
|
334
|
-
return next.trim().slice(0, 120);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
return null;
|
|
338
|
-
}
|
|
339
192
|
//# sourceMappingURL=auto-learner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-learner.js","sourceRoot":"","sources":["../../src/memory/auto-learner.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;
|
|
1
|
+
{"version":3,"file":"auto-learner.js","sourceRoot":"","sources":["../../src/memory/auto-learner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confidence-decay.d.ts","sourceRoot":"","sources":["../../src/memory/confidence-decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC,kEAAkE;AAClE,wBAAgB,mBAAmB,CAC/B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACtB,MAAM,CAmBR;AAED,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAc7E;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"confidence-decay.d.ts","sourceRoot":"","sources":["../../src/memory/confidence-decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC,kEAAkE;AAClE,wBAAgB,mBAAmB,CAC/B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACtB,MAAM,CAmBR;AAED,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAc7E;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAqBpE"}
|
|
@@ -38,21 +38,17 @@ function applyConfidenceDecay(memories) {
|
|
|
38
38
|
}
|
|
39
39
|
/** Run periodic maintenance — decay old, unused memories */
|
|
40
40
|
function runDecayMaintenance(memoryStore) {
|
|
41
|
-
|
|
42
|
-
const DAY = 24 * 60 * 60 * 1000;
|
|
43
|
-
const active = memoryStore.getStaleMemories(DAY, 500);
|
|
41
|
+
const active = memoryStore.getActive(10000);
|
|
44
42
|
let decayed = 0;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
decayed++;
|
|
53
|
-
}
|
|
43
|
+
for (const m of active) {
|
|
44
|
+
const current = m.importance;
|
|
45
|
+
const effective = effectiveImportance(current, m.timestamp, m.accessCount, m.lastAccessed);
|
|
46
|
+
// Only update if significant change (>5% difference)
|
|
47
|
+
if (Math.abs(current - effective) > 0.05) {
|
|
48
|
+
memoryStore.update(m.id, { importance: effective });
|
|
49
|
+
decayed++;
|
|
54
50
|
}
|
|
55
|
-
}
|
|
51
|
+
}
|
|
56
52
|
return decayed;
|
|
57
53
|
}
|
|
58
54
|
//# sourceMappingURL=confidence-decay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confidence-decay.js","sourceRoot":"","sources":["../../src/memory/confidence-decay.ts"],"names":[],"mappings":";;AAsBA,kDAwBC;AAGD,oDAcC;AAGD,
|
|
1
|
+
{"version":3,"file":"confidence-decay.js","sourceRoot":"","sources":["../../src/memory/confidence-decay.ts"],"names":[],"mappings":";;AAsBA,kDAwBC;AAGD,oDAcC;AAGD,kDAqBC;AAvED,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,aAAa;AACtC,MAAM,iBAAiB,GAAG,GAAG,CAAC,CAAC,iBAAiB;AAChD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,qBAAqB;AAEjD,kEAAkE;AAClE,SAAgB,mBAAmB,CAC/B,cAAsB,EACtB,SAAiB,EACjB,WAAmB,EACnB,YAAqB;IAErB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC;IAEtD,qDAAqD;IACrD,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;IAErD,2DAA2D;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAEtF,kCAAkC;IAClC,IAAI,YAAY,GAAG,GAAG,CAAC;IACvB,IAAI,YAAY,EAAE,CAAC;QACf,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,QAAQ,CAAC;QAC/D,IAAI,eAAe,GAAG,CAAC;YAAE,YAAY,GAAG,GAAG,CAAC,CAAC,iBAAiB;aACzD,IAAI,eAAe,GAAG,CAAC;YAAE,YAAY,GAAG,GAAG,CAAC,CAAC,qBAAqB;IAC3E,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,4DAA4D;AAC5D,SAAgB,oBAAoB,CAAC,QAAwB;IACzD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAC7B,CAAC,CAAC,MAAM,CAAC,UAAU,EACnB,CAAC,CAAC,MAAM,CAAC,SAAS,EAClB,CAAC,CAAC,MAAM,CAAC,WAAW,EACpB,CAAC,CAAC,MAAM,CAAC,YAAY,CACxB,CAAC;QAEF,OAAO;YACH,GAAG,CAAC;YACJ,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK;SACzB,CAAC;IACN,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,4DAA4D;AAC5D,SAAgB,mBAAmB,CAAC,WAAwB;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC;QAC7B,MAAM,SAAS,GAAG,mBAAmB,CACjC,OAAO,EACP,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,YAAY,CACjB,CAAC;QAEF,qDAAqD;QACrD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;YACvC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-manager.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":"AAeA,wBAAgB,oBAAoB,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"embedding-manager.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":"AAeA,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAiED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BzD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC"}
|
|
@@ -50,10 +50,8 @@ let workerReady = false;
|
|
|
50
50
|
const pendingEmbeddings = new Map();
|
|
51
51
|
let workerFailed = false;
|
|
52
52
|
function startEmbeddingWorker() {
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
console.log(' [cortex-mcp] Embedding worker unavailable, running FTS-only mode');
|
|
56
|
-
}
|
|
53
|
+
// Lazy: just mark that we want embedding. Actual worker starts on first use.
|
|
54
|
+
console.log(' [cortex-mcp] Embedding worker registered (lazy — starts on first use)');
|
|
57
55
|
}
|
|
58
56
|
function ensureWorkerStarted() {
|
|
59
57
|
if (embeddingWorker)
|
|
@@ -100,7 +98,7 @@ function ensureWorkerStarted() {
|
|
|
100
98
|
workerFailed = true;
|
|
101
99
|
embeddingWorker = null;
|
|
102
100
|
// Reject all pending embeddings
|
|
103
|
-
for (const [
|
|
101
|
+
for (const [id, pending] of pendingEmbeddings) {
|
|
104
102
|
pending.reject(new Error('Worker crashed'));
|
|
105
103
|
}
|
|
106
104
|
pendingEmbeddings.clear();
|
|
@@ -112,7 +110,7 @@ function ensureWorkerStarted() {
|
|
|
112
110
|
workerFailed = true;
|
|
113
111
|
embeddingWorker = null;
|
|
114
112
|
// Reject all pending embeddings
|
|
115
|
-
for (const [
|
|
113
|
+
for (const [id, pending] of pendingEmbeddings) {
|
|
116
114
|
pending.reject(new Error('Worker exited'));
|
|
117
115
|
}
|
|
118
116
|
pendingEmbeddings.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-manager.js","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,
|
|
1
|
+
{"version":3,"file":"embedding-manager.js","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,8 +87,8 @@ function importMemories(memoryStore, bundle) {
|
|
|
87
87
|
let imported = 0;
|
|
88
88
|
let skipped = 0;
|
|
89
89
|
let errors = 0;
|
|
90
|
-
// Load active memories
|
|
91
|
-
const active = memoryStore.getActive(
|
|
90
|
+
// Load active memories ONCE — O(n) instead of O(n²)
|
|
91
|
+
const active = memoryStore.getActive(5000);
|
|
92
92
|
const existingKeys = new Set(active.map(e => `${e.type}::${e.intent.toLowerCase().trim()}`));
|
|
93
93
|
for (const m of bundle.memories) {
|
|
94
94
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,wCAwBC;AAKD,oCAKC;AAKD,wCAwCC;AAKD,wCAaC;AArID;;;;;GAKG;AACH,uCAAyB;AACzB,2CAA6B;AA0B7B;;GAEG;AACH,SAAgB,cAAc,CAAC,WAAwB;IACnD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAqB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;QACxB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;QAClC,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;KACjD,CAAC,CAAC,CAAC;IAEJ,OAAO;QACH,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,WAAW,EAAE,QAAQ,CAAC,MAAM;QAC5B,QAAQ;KACX,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,WAAwB,EAAE,QAAgB;IACnE,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC1B,WAAwB,EACxB,MAAoB;IAEpB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,
|
|
1
|
+
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-memory.d.ts","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-memory.d.ts","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWjD,UAAU,gBAAgB;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACxB;AAKD,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CA0DjH;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB,CAkCzE;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgBlE"}
|
|
@@ -3,20 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.captureGitCommits = captureGitCommits;
|
|
4
4
|
exports.detectFileChanges = detectFileChanges;
|
|
5
5
|
exports.formatFileChanges = formatFileChanges;
|
|
6
|
-
/**
|
|
7
|
-
* Git Memory — Auto-captures code changes from git history.
|
|
8
|
-
*
|
|
9
|
-
* On each session start (force_recall), this module:
|
|
10
|
-
* 1. Reads recent git commits and stores them as memories
|
|
11
|
-
* 2. Tracks file changes (new/deleted/modified) since last session
|
|
12
|
-
* 3. Captures commit messages as DECISION/BUG_FIX based on keywords
|
|
13
|
-
*
|
|
14
|
-
* This solves the "what code changed and why?" gap that exists when
|
|
15
|
-
* files change outside the AI conversation.
|
|
16
|
-
*/
|
|
17
|
-
const child_process_1 = require("child_process");
|
|
18
6
|
const types_1 = require("../types");
|
|
19
|
-
const extract_tags_1 = require("../utils/extract-tags");
|
|
20
7
|
// Track the last processed commit hash to avoid duplicates
|
|
21
8
|
let lastProcessedCommit = null;
|
|
22
9
|
/** Capture recent git commits as memories */
|
|
@@ -24,9 +11,9 @@ function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
|
|
|
24
11
|
if (!workspaceRoot)
|
|
25
12
|
return 0;
|
|
26
13
|
try {
|
|
27
|
-
|
|
14
|
+
const { execSync } = require('child_process');
|
|
28
15
|
// Get recent commits with file changes
|
|
29
|
-
const gitLog =
|
|
16
|
+
const gitLog = execSync(`git log --oneline --name-only -${maxCommits} --no-merges 2>nul`, { cwd: workspaceRoot, encoding: 'utf-8', timeout: 5000 }).trim();
|
|
30
17
|
if (!gitLog)
|
|
31
18
|
return 0;
|
|
32
19
|
const commits = parseGitLog(gitLog);
|
|
@@ -38,8 +25,8 @@ function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
|
|
|
38
25
|
// Classify commit type based on message
|
|
39
26
|
const type = classifyCommit(commit.message);
|
|
40
27
|
// Check for duplicate — skip if already stored
|
|
41
|
-
const existing = memoryStore.
|
|
42
|
-
if (existing
|
|
28
|
+
const existing = memoryStore.getActive(200).find(m => m.tags?.includes(`commit:${commit.hash}`));
|
|
29
|
+
if (existing)
|
|
43
30
|
continue;
|
|
44
31
|
memoryStore.add({
|
|
45
32
|
type,
|
|
@@ -48,7 +35,7 @@ function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
|
|
|
48
35
|
? `Changed: ${commit.filesChanged.slice(0, 5).join(', ')}`
|
|
49
36
|
: commit.message,
|
|
50
37
|
reason: 'Auto-captured from git history',
|
|
51
|
-
tags: ['git-commit', `commit:${commit.hash}`, ...(
|
|
38
|
+
tags: ['git-commit', `commit:${commit.hash}`, ...extractTopicTags(commit.message)],
|
|
52
39
|
relatedFiles: commit.filesChanged.slice(0, 10),
|
|
53
40
|
confidence: 0.8,
|
|
54
41
|
importance: type === types_1.MemoryType.BUG_FIX ? 0.85 : 0.6,
|
|
@@ -75,9 +62,9 @@ function detectFileChanges(workspaceRoot) {
|
|
|
75
62
|
if (!workspaceRoot)
|
|
76
63
|
return report;
|
|
77
64
|
try {
|
|
78
|
-
|
|
65
|
+
const { execSync } = require('child_process');
|
|
79
66
|
// Get uncommitted changes (working tree vs HEAD)
|
|
80
|
-
const status =
|
|
67
|
+
const status = execSync('git status --porcelain 2>nul', {
|
|
81
68
|
cwd: workspaceRoot,
|
|
82
69
|
encoding: 'utf-8',
|
|
83
70
|
timeout: 5000,
|
|
@@ -169,4 +156,23 @@ function classifyCommit(message) {
|
|
|
169
156
|
return types_1.MemoryType.INSIGHT;
|
|
170
157
|
return types_1.MemoryType.DECISION;
|
|
171
158
|
}
|
|
159
|
+
function extractTopicTags(message) {
|
|
160
|
+
const tags = [];
|
|
161
|
+
const lower = message.toLowerCase();
|
|
162
|
+
const patterns = [
|
|
163
|
+
[/\b(auth|login|session|token|jwt)\b/, 'auth'],
|
|
164
|
+
[/\b(database|sql|query|migration)\b/, 'database'],
|
|
165
|
+
[/\b(api|endpoint|route)\b/, 'api'],
|
|
166
|
+
[/\b(ui|component|style|css)\b/, 'ui'],
|
|
167
|
+
[/\b(test|spec|coverage)\b/, 'testing'],
|
|
168
|
+
[/\b(deploy|ci|docker)\b/, 'devops'],
|
|
169
|
+
[/\b(security|permission)\b/, 'security'],
|
|
170
|
+
[/\b(perf|cache|optimize)\b/, 'performance'],
|
|
171
|
+
];
|
|
172
|
+
for (const [pattern, tag] of patterns) {
|
|
173
|
+
if (pattern.test(lower))
|
|
174
|
+
tags.push(tag);
|
|
175
|
+
}
|
|
176
|
+
return tags;
|
|
177
|
+
}
|
|
172
178
|
//# sourceMappingURL=git-memory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-memory.js","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":";;AAmCA,
|
|
1
|
+
{"version":3,"file":"git-memory.js","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,18 +79,17 @@ function formatHotCorrections(memoryStore) {
|
|
|
79
79
|
}
|
|
80
80
|
return lines.join('\n');
|
|
81
81
|
}
|
|
82
|
-
/** Module-level stopwords set — avoid recreation per call */
|
|
83
|
-
const TOPIC_STOP_WORDS = new Set([
|
|
84
|
-
'the', 'a', 'an', 'is', 'was', 'are', 'were', 'to', 'of', 'in', 'for',
|
|
85
|
-
'on', 'with', 'at', 'by', 'from', 'it', 'this', 'that', 'and', 'or',
|
|
86
|
-
'but', 'not', 'do', 'does', 'did', 'don', 'dont', 'use', 'using',
|
|
87
|
-
'should', 'must', 'never', 'always', 'avoid', 'instead',
|
|
88
|
-
]);
|
|
89
82
|
/** Extract meaningful topic words from correction text */
|
|
90
83
|
function extractTopicWords(text) {
|
|
84
|
+
const stopWords = new Set([
|
|
85
|
+
'the', 'a', 'an', 'is', 'was', 'are', 'were', 'to', 'of', 'in', 'for',
|
|
86
|
+
'on', 'with', 'at', 'by', 'from', 'it', 'this', 'that', 'and', 'or',
|
|
87
|
+
'but', 'not', 'do', 'does', 'did', 'don', 'dont', 'use', 'using',
|
|
88
|
+
'should', 'must', 'never', 'always', 'avoid', 'instead',
|
|
89
|
+
]);
|
|
91
90
|
return text.toLowerCase()
|
|
92
91
|
.replace(/[^a-z0-9\s]/g, ' ')
|
|
93
92
|
.split(/\s+/)
|
|
94
|
-
.filter(w => w.length > 3 && !
|
|
93
|
+
.filter(w => w.length > 3 && !stopWords.has(w));
|
|
95
94
|
}
|
|
96
95
|
//# sourceMappingURL=learning-rate.js.map
|