cortex-mcp 2.6.0 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +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 +52 -82
- 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 -12
- 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 +827 -1002
- package/dist/server/mcp-handler.js.map +1 -1
- package/package.json +8 -18
- package/dist/memory/access-pattern-tracker.d.ts +0 -51
- package/dist/memory/access-pattern-tracker.d.ts.map +0 -1
- package/dist/memory/access-pattern-tracker.js +0 -92
- package/dist/memory/access-pattern-tracker.js.map +0 -1
- 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/cross-memory-linker.d.ts +0 -18
- package/dist/memory/cross-memory-linker.d.ts.map +0 -1
- package/dist/memory/cross-memory-linker.js +0 -115
- package/dist/memory/cross-memory-linker.js.map +0 -1
- package/dist/memory/daily-diary.d.ts +0 -30
- package/dist/memory/daily-diary.d.ts.map +0 -1
- package/dist/memory/daily-diary.js +0 -159
- package/dist/memory/daily-diary.js.map +0 -1
- package/dist/memory/embedding-cache.d.ts +0 -32
- package/dist/memory/embedding-cache.d.ts.map +0 -1
- package/dist/memory/embedding-cache.js +0 -76
- package/dist/memory/embedding-cache.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/memory-export-md.d.ts +0 -12
- package/dist/memory/memory-export-md.d.ts.map +0 -1
- package/dist/memory/memory-export-md.js +0 -188
- package/dist/memory/memory-export-md.js.map +0 -1
- package/dist/memory/mmr-reranker.d.ts +0 -39
- package/dist/memory/mmr-reranker.d.ts.map +0 -1
- package/dist/memory/mmr-reranker.js +0 -115
- package/dist/memory/mmr-reranker.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/query-expansion.d.ts +0 -28
- package/dist/memory/query-expansion.d.ts.map +0 -1
- package/dist/memory/query-expansion.js +0 -140
- package/dist/memory/query-expansion.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/soul-manager.d.ts +0 -30
- package/dist/memory/soul-manager.d.ts.map +0 -1
- package/dist/memory/soul-manager.js +0 -171
- package/dist/memory/soul-manager.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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cross-memory-linker.d.ts","sourceRoot":"","sources":["../../src/memory/cross-memory-linker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,UAAU,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,GAAG,MAAM,CAyEtF"}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.autoLinkMemory = autoLinkMemory;
|
|
4
|
-
/**
|
|
5
|
-
* After storing a new memory, auto-link it to related existing memories.
|
|
6
|
-
* Uses 3 signals: shared files, shared tags, and word overlap.
|
|
7
|
-
*/
|
|
8
|
-
function autoLinkMemory(memoryStore, newMemory) {
|
|
9
|
-
let linksCreated = 0;
|
|
10
|
-
try {
|
|
11
|
-
// 1. Find memories sharing the same files
|
|
12
|
-
const fileRelated = [];
|
|
13
|
-
if (newMemory.relatedFiles && newMemory.relatedFiles.length > 0) {
|
|
14
|
-
for (const file of newMemory.relatedFiles.slice(0, 3)) {
|
|
15
|
-
const basename = file.split(/[/\\]/).pop() || file;
|
|
16
|
-
const related = memoryStore.getByFile(basename, 10);
|
|
17
|
-
for (const m of related) {
|
|
18
|
-
if (m.id !== newMemory.id && m.isActive) {
|
|
19
|
-
fileRelated.push(m);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
// 2. Find memories sharing tags
|
|
25
|
-
const tagRelated = [];
|
|
26
|
-
const newTags = parseTags(newMemory.tags);
|
|
27
|
-
if (newTags.length > 0) {
|
|
28
|
-
for (const tag of newTags.slice(0, 3)) {
|
|
29
|
-
try {
|
|
30
|
-
const tagged = memoryStore.findByTag(tag, 10);
|
|
31
|
-
for (const m of tagged) {
|
|
32
|
-
if (m.id !== newMemory.id && m.isActive) {
|
|
33
|
-
tagRelated.push(m);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch { /* tag search might fail */ }
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// 3. Compute word overlap with recent memories
|
|
41
|
-
const newWords = extractKeywords(newMemory.intent);
|
|
42
|
-
const recentMemories = memoryStore.getActive(50);
|
|
43
|
-
const wordRelated = [];
|
|
44
|
-
for (const m of recentMemories) {
|
|
45
|
-
if (m.id === newMemory.id)
|
|
46
|
-
continue;
|
|
47
|
-
const mWords = extractKeywords(m.intent);
|
|
48
|
-
const overlap = wordOverlap(newWords, mWords);
|
|
49
|
-
if (overlap >= 0.3) { // 30%+ word overlap → related
|
|
50
|
-
wordRelated.push(m);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// Deduplicate and create edges
|
|
54
|
-
const seen = new Set();
|
|
55
|
-
const candidates = [...fileRelated, ...tagRelated, ...wordRelated];
|
|
56
|
-
for (const related of candidates) {
|
|
57
|
-
if (seen.has(related.id))
|
|
58
|
-
continue;
|
|
59
|
-
seen.add(related.id);
|
|
60
|
-
if (linksCreated >= 5)
|
|
61
|
-
break; // Max 5 links per memory
|
|
62
|
-
const edgeType = fileRelated.includes(related) ? 'same_file' :
|
|
63
|
-
tagRelated.includes(related) ? 'same_topic' : 'similar';
|
|
64
|
-
try {
|
|
65
|
-
memoryStore.addEdge({
|
|
66
|
-
sourceId: newMemory.id,
|
|
67
|
-
targetId: related.id,
|
|
68
|
-
edgeType,
|
|
69
|
-
weight: edgeType === 'same_file' ? 0.9 :
|
|
70
|
-
edgeType === 'same_topic' ? 0.7 : 0.5,
|
|
71
|
-
});
|
|
72
|
-
linksCreated++;
|
|
73
|
-
}
|
|
74
|
-
catch { /* edge might already exist */ }
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
catch { /* don't break memory storage if linking fails */ }
|
|
78
|
-
return linksCreated;
|
|
79
|
-
}
|
|
80
|
-
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
81
|
-
function parseTags(tags) {
|
|
82
|
-
if (!tags)
|
|
83
|
-
return [];
|
|
84
|
-
if (Array.isArray(tags))
|
|
85
|
-
return tags;
|
|
86
|
-
if (typeof tags === 'string') {
|
|
87
|
-
try {
|
|
88
|
-
return JSON.parse(tags);
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
return [];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return [];
|
|
95
|
-
}
|
|
96
|
-
function extractKeywords(text) {
|
|
97
|
-
const STOP = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'to', 'of', 'in',
|
|
98
|
-
'for', 'on', 'with', 'at', 'by', 'from', 'use', 'always', 'never', 'should',
|
|
99
|
-
'must', 'not', 'do', 'be', 'it', 'this', 'that', 'and', 'or', 'but', 'we', 'i']);
|
|
100
|
-
return new Set(text.toLowerCase()
|
|
101
|
-
.replace(/[^a-z0-9\s]/g, ' ')
|
|
102
|
-
.split(/\s+/)
|
|
103
|
-
.filter(w => w.length > 2 && !STOP.has(w)));
|
|
104
|
-
}
|
|
105
|
-
function wordOverlap(a, b) {
|
|
106
|
-
if (a.size === 0 || b.size === 0)
|
|
107
|
-
return 0;
|
|
108
|
-
let shared = 0;
|
|
109
|
-
for (const word of a) {
|
|
110
|
-
if (b.has(word))
|
|
111
|
-
shared++;
|
|
112
|
-
}
|
|
113
|
-
return shared / Math.min(a.size, b.size);
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=cross-memory-linker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cross-memory-linker.js","sourceRoot":"","sources":["../../src/memory/cross-memory-linker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface DiaryEntry {
|
|
2
|
-
type: 'decision' | 'correction' | 'bug_fix' | 'convention' | 'insight' | 'task' | 'file_change';
|
|
3
|
-
content: string;
|
|
4
|
-
file?: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Append an entry to today's diary.
|
|
8
|
-
*/
|
|
9
|
-
export declare function appendDiaryEntry(entry: DiaryEntry): void;
|
|
10
|
-
/**
|
|
11
|
-
* Get diary content for a specific date.
|
|
12
|
-
*/
|
|
13
|
-
export declare function getDiaryForDate(date: string): string | null;
|
|
14
|
-
/**
|
|
15
|
-
* Get the last N days of diary entries combined.
|
|
16
|
-
*/
|
|
17
|
-
export declare function getRecentDiary(days?: number): string;
|
|
18
|
-
/**
|
|
19
|
-
* Format diary context for injection into force_recall.
|
|
20
|
-
* Returns last 2 days of diary, condensed.
|
|
21
|
-
*/
|
|
22
|
-
export declare function formatDiaryContext(): string;
|
|
23
|
-
/**
|
|
24
|
-
* Get diary stats for dashboard.
|
|
25
|
-
*/
|
|
26
|
-
export declare function getDiaryStats(): {
|
|
27
|
-
totalDays: number;
|
|
28
|
-
todayEntries: number;
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=daily-diary.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daily-diary.d.ts","sourceRoot":"","sources":["../../src/memory/daily-diary.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;IAChG,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAoBxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAU,GAAG,MAAM,CAevD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAU3C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAY3E"}
|
|
@@ -1,159 +0,0 @@
|
|
|
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.appendDiaryEntry = appendDiaryEntry;
|
|
37
|
-
exports.getDiaryForDate = getDiaryForDate;
|
|
38
|
-
exports.getRecentDiary = getRecentDiary;
|
|
39
|
-
exports.formatDiaryContext = formatDiaryContext;
|
|
40
|
-
exports.getDiaryStats = getDiaryStats;
|
|
41
|
-
/**
|
|
42
|
-
* Daily Diary — OpenClaw-style daily Markdown logs.
|
|
43
|
-
*
|
|
44
|
-
* Writes append-only daily notes like OpenClaw's memory/YYYY-MM-DD.md.
|
|
45
|
-
* Each day gets its own file with timestamped entries:
|
|
46
|
-
* - What was learned
|
|
47
|
-
* - What files changed
|
|
48
|
-
* - What decisions were made
|
|
49
|
-
* - What bugs were fixed
|
|
50
|
-
*
|
|
51
|
-
* This gives the AI a "running journal" of recent work.
|
|
52
|
-
* Injected into force_recall as Layer 7.5 (recent context).
|
|
53
|
-
*
|
|
54
|
-
* Stored in: ~/.cortex-memory/diary/YYYY-MM-DD.md
|
|
55
|
-
*/
|
|
56
|
-
const fs = __importStar(require("fs"));
|
|
57
|
-
const path = __importStar(require("path"));
|
|
58
|
-
const os = __importStar(require("os"));
|
|
59
|
-
const DIARY_DIR = path.join(os.homedir(), '.cortex-memory', 'diary');
|
|
60
|
-
/**
|
|
61
|
-
* Append an entry to today's diary.
|
|
62
|
-
*/
|
|
63
|
-
function appendDiaryEntry(entry) {
|
|
64
|
-
try {
|
|
65
|
-
if (!fs.existsSync(DIARY_DIR))
|
|
66
|
-
fs.mkdirSync(DIARY_DIR, { recursive: true });
|
|
67
|
-
const today = getDateString();
|
|
68
|
-
const diaryPath = path.join(DIARY_DIR, `${today}.md`);
|
|
69
|
-
const time = new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit' });
|
|
70
|
-
const icon = ICONS[entry.type] || '📝';
|
|
71
|
-
const fileSuffix = entry.file ? ` _(${path.basename(entry.file)})_` : '';
|
|
72
|
-
const line = `- ${time} ${icon} **${entry.type.toUpperCase()}**: ${entry.content}${fileSuffix}\n`;
|
|
73
|
-
// Create header if new file
|
|
74
|
-
if (!fs.existsSync(diaryPath)) {
|
|
75
|
-
const header = `# 📔 Cortex Diary — ${today}\n\n`;
|
|
76
|
-
fs.writeFileSync(diaryPath, header, 'utf-8');
|
|
77
|
-
}
|
|
78
|
-
fs.appendFileSync(diaryPath, line, 'utf-8');
|
|
79
|
-
}
|
|
80
|
-
catch { /* diary is non-critical */ }
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Get diary content for a specific date.
|
|
84
|
-
*/
|
|
85
|
-
function getDiaryForDate(date) {
|
|
86
|
-
try {
|
|
87
|
-
const diaryPath = path.join(DIARY_DIR, `${date}.md`);
|
|
88
|
-
if (fs.existsSync(diaryPath)) {
|
|
89
|
-
return fs.readFileSync(diaryPath, 'utf-8');
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch { /* */ }
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get the last N days of diary entries combined.
|
|
97
|
-
*/
|
|
98
|
-
function getRecentDiary(days = 3) {
|
|
99
|
-
const entries = [];
|
|
100
|
-
const now = Date.now();
|
|
101
|
-
const DAY = 24 * 60 * 60 * 1000;
|
|
102
|
-
for (let i = 0; i < days; i++) {
|
|
103
|
-
const date = new Date(now - i * DAY);
|
|
104
|
-
const dateStr = formatDate(date);
|
|
105
|
-
const content = getDiaryForDate(dateStr);
|
|
106
|
-
if (content && content.trim().length > 50) {
|
|
107
|
-
entries.push(content.trim());
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return entries.join('\n\n---\n\n');
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Format diary context for injection into force_recall.
|
|
114
|
-
* Returns last 2 days of diary, condensed.
|
|
115
|
-
*/
|
|
116
|
-
function formatDiaryContext() {
|
|
117
|
-
const diary = getRecentDiary(2);
|
|
118
|
-
if (!diary || diary.length < 50)
|
|
119
|
-
return '';
|
|
120
|
-
// Truncate to last 20 entries to avoid flooding context
|
|
121
|
-
const lines = diary.split('\n').filter(l => l.startsWith('- '));
|
|
122
|
-
const recent = lines.slice(-20);
|
|
123
|
-
if (recent.length === 0)
|
|
124
|
-
return '';
|
|
125
|
-
return `\n## 📔 Recent Diary (last 2 days)\n${recent.join('\n')}`;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Get diary stats for dashboard.
|
|
129
|
-
*/
|
|
130
|
-
function getDiaryStats() {
|
|
131
|
-
try {
|
|
132
|
-
if (!fs.existsSync(DIARY_DIR))
|
|
133
|
-
return { totalDays: 0, todayEntries: 0 };
|
|
134
|
-
const files = fs.readdirSync(DIARY_DIR).filter(f => f.endsWith('.md'));
|
|
135
|
-
const today = getDiaryForDate(getDateString());
|
|
136
|
-
const todayEntries = today ? today.split('\n').filter(l => l.startsWith('- ')).length : 0;
|
|
137
|
-
return { totalDays: files.length, todayEntries };
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
return { totalDays: 0, todayEntries: 0 };
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
144
|
-
const ICONS = {
|
|
145
|
-
decision: '📌',
|
|
146
|
-
correction: '🔴',
|
|
147
|
-
bug_fix: '🐛',
|
|
148
|
-
convention: '📏',
|
|
149
|
-
insight: '💡',
|
|
150
|
-
task: '📋',
|
|
151
|
-
file_change: '📁',
|
|
152
|
-
};
|
|
153
|
-
function getDateString() {
|
|
154
|
-
return formatDate(new Date());
|
|
155
|
-
}
|
|
156
|
-
function formatDate(d) {
|
|
157
|
-
return d.toISOString().split('T')[0]; // YYYY-MM-DD
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=daily-diary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daily-diary.js","sourceRoot":"","sources":["../../src/memory/daily-diary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Embedding Cache — Avoids re-computing embeddings for identical text.
|
|
3
|
-
*
|
|
4
|
-
* Extracted from OpenClaw's embedding_cache table architecture.
|
|
5
|
-
*
|
|
6
|
-
* Problem: Every recall re-embeds the query, even if it's the exact same text.
|
|
7
|
-
* With MiniLM this takes ~50ms per embedding — adds up fast.
|
|
8
|
-
*
|
|
9
|
-
* Solution: Cache embeddings in memory with an LRU eviction policy.
|
|
10
|
-
* Cache key = hash of the text content.
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Get a cached embedding for text, or null if not cached.
|
|
14
|
-
*/
|
|
15
|
-
export declare function getCachedEmbedding(text: string): number[] | null;
|
|
16
|
-
/**
|
|
17
|
-
* Store an embedding in the cache.
|
|
18
|
-
* Uses LRU eviction when cache is full.
|
|
19
|
-
*/
|
|
20
|
-
export declare function cacheEmbedding(text: string, embedding: number[]): void;
|
|
21
|
-
/**
|
|
22
|
-
* Clear the entire embedding cache.
|
|
23
|
-
*/
|
|
24
|
-
export declare function clearEmbeddingCache(): void;
|
|
25
|
-
/**
|
|
26
|
-
* Get cache stats for debugging/dashboard.
|
|
27
|
-
*/
|
|
28
|
-
export declare function getEmbeddingCacheStats(): {
|
|
29
|
-
size: number;
|
|
30
|
-
maxSize: number;
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=embedding-cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-cache.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAQhE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAiBtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAE1E"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Embedding Cache — Avoids re-computing embeddings for identical text.
|
|
4
|
-
*
|
|
5
|
-
* Extracted from OpenClaw's embedding_cache table architecture.
|
|
6
|
-
*
|
|
7
|
-
* Problem: Every recall re-embeds the query, even if it's the exact same text.
|
|
8
|
-
* With MiniLM this takes ~50ms per embedding — adds up fast.
|
|
9
|
-
*
|
|
10
|
-
* Solution: Cache embeddings in memory with an LRU eviction policy.
|
|
11
|
-
* Cache key = hash of the text content.
|
|
12
|
-
*/
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.getCachedEmbedding = getCachedEmbedding;
|
|
15
|
-
exports.cacheEmbedding = cacheEmbedding;
|
|
16
|
-
exports.clearEmbeddingCache = clearEmbeddingCache;
|
|
17
|
-
exports.getEmbeddingCacheStats = getEmbeddingCacheStats;
|
|
18
|
-
const CACHE_MAX = 256;
|
|
19
|
-
const cache = new Map();
|
|
20
|
-
/**
|
|
21
|
-
* Simple FNV-1a hash — fast and good enough for cache keys.
|
|
22
|
-
*/
|
|
23
|
-
function hashText(text) {
|
|
24
|
-
let hash = 0x811c9dc5;
|
|
25
|
-
for (let i = 0; i < text.length; i++) {
|
|
26
|
-
hash ^= text.charCodeAt(i);
|
|
27
|
-
hash = (hash * 0x01000193) >>> 0;
|
|
28
|
-
}
|
|
29
|
-
return hash.toString(36);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Get a cached embedding for text, or null if not cached.
|
|
33
|
-
*/
|
|
34
|
-
function getCachedEmbedding(text) {
|
|
35
|
-
const key = hashText(text);
|
|
36
|
-
const entry = cache.get(key);
|
|
37
|
-
if (entry) {
|
|
38
|
-
entry.timestamp = Date.now(); // Touch for LRU
|
|
39
|
-
return entry.embedding;
|
|
40
|
-
}
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Store an embedding in the cache.
|
|
45
|
-
* Uses LRU eviction when cache is full.
|
|
46
|
-
*/
|
|
47
|
-
function cacheEmbedding(text, embedding) {
|
|
48
|
-
const key = hashText(text);
|
|
49
|
-
// LRU eviction if full
|
|
50
|
-
if (cache.size >= CACHE_MAX && !cache.has(key)) {
|
|
51
|
-
let oldestKey = '';
|
|
52
|
-
let oldestTime = Infinity;
|
|
53
|
-
for (const [k, v] of cache) {
|
|
54
|
-
if (v.timestamp < oldestTime) {
|
|
55
|
-
oldestTime = v.timestamp;
|
|
56
|
-
oldestKey = k;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (oldestKey)
|
|
60
|
-
cache.delete(oldestKey);
|
|
61
|
-
}
|
|
62
|
-
cache.set(key, { embedding, timestamp: Date.now() });
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Clear the entire embedding cache.
|
|
66
|
-
*/
|
|
67
|
-
function clearEmbeddingCache() {
|
|
68
|
-
cache.clear();
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Get cache stats for debugging/dashboard.
|
|
72
|
-
*/
|
|
73
|
-
function getEmbeddingCacheStats() {
|
|
74
|
-
return { size: cache.size, maxSize: CACHE_MAX };
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=embedding-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-cache.js","sourceRoot":"","sources":["../../src/memory/embedding-cache.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA0BH,gDAQC;AAMD,wCAiBC;AAKD,kDAEC;AAKD,wDAEC;AArED,MAAM,SAAS,GAAG,GAAG,CAAC;AAOtB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE5C;;GAEG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC1B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,gBAAgB;QAC9C,OAAO,KAAK,CAAC,SAAS,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,SAAmB;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE3B,uBAAuB;IACvB,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,UAAU,GAAG,QAAQ,CAAC;QAC1B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,SAAS,GAAG,UAAU,EAAE,CAAC;gBAC3B,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC;gBACzB,SAAS,GAAG,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;QACD,IAAI,SAAS;YAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IAC/B,KAAK,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IAClC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error Learner — Auto-captures build/test error patterns.
|
|
3
|
-
*
|
|
4
|
-
* When build output or test output contains errors, this module:
|
|
5
|
-
* 1. Extracts the error pattern (TS error codes, common messages)
|
|
6
|
-
* 2. Maps to a human-readable lesson ("TS2345: argument type mismatch")
|
|
7
|
-
* 3. Stores as BUG_FIX memory so the AI avoids repeating the same mistake
|
|
8
|
-
*
|
|
9
|
-
* This is the #1 gap: the AI keeps making the same TS compile errors
|
|
10
|
-
* because it forgets what went wrong last time.
|
|
11
|
-
*/
|
|
12
|
-
export interface ErrorPattern {
|
|
13
|
-
errorType: string;
|
|
14
|
-
message: string;
|
|
15
|
-
file?: string;
|
|
16
|
-
confidence: number;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Extract error patterns from build/test output text.
|
|
20
|
-
*/
|
|
21
|
-
export declare function extractErrorPatterns(text: string): ErrorPattern[];
|
|
22
|
-
/**
|
|
23
|
-
* Check if text contains build/test error indicators.
|
|
24
|
-
*/
|
|
25
|
-
export declare function containsErrors(text: string): boolean;
|
|
26
|
-
//# sourceMappingURL=error-learner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-learner.d.ts","sourceRoot":"","sources":["../../src/memory/error-learner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACtB;AAyBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAwFjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAcpD"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Error Learner — Auto-captures build/test error patterns.
|
|
4
|
-
*
|
|
5
|
-
* When build output or test output contains errors, this module:
|
|
6
|
-
* 1. Extracts the error pattern (TS error codes, common messages)
|
|
7
|
-
* 2. Maps to a human-readable lesson ("TS2345: argument type mismatch")
|
|
8
|
-
* 3. Stores as BUG_FIX memory so the AI avoids repeating the same mistake
|
|
9
|
-
*
|
|
10
|
-
* This is the #1 gap: the AI keeps making the same TS compile errors
|
|
11
|
-
* because it forgets what went wrong last time.
|
|
12
|
-
*/
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.extractErrorPatterns = extractErrorPatterns;
|
|
15
|
-
exports.containsErrors = containsErrors;
|
|
16
|
-
// ─── TypeScript Error Patterns ────────────────────────────────────────────────
|
|
17
|
-
const TS_ERROR_LESSONS = {
|
|
18
|
-
'TS2345': 'Argument type mismatch — check function parameter types match expected signatures',
|
|
19
|
-
'TS2322': 'Type assignment error — ensure the value matches the declared type',
|
|
20
|
-
'TS2339': 'Property does not exist — check spelling or add the property to the interface',
|
|
21
|
-
'TS2304': 'Cannot find name — missing import or undeclared variable',
|
|
22
|
-
'TS2305': 'Module has no exported member — check the export name matches exactly',
|
|
23
|
-
'TS2307': 'Cannot find module — check the import path is correct',
|
|
24
|
-
'TS2554': 'Wrong number of arguments — check function signature for required params',
|
|
25
|
-
'TS2769': 'No overload matches this call — check argument types against all overload signatures',
|
|
26
|
-
'TS7006': 'Parameter implicitly has any type — add explicit type annotation',
|
|
27
|
-
'TS2741': 'Missing property in type — add required properties to the object',
|
|
28
|
-
'TS18046': 'Variable is of type unknown — add type assertion or type guard',
|
|
29
|
-
'TS2352': 'Conversion of type may be a mistake — use "as unknown as T" for forced cast',
|
|
30
|
-
'TS1005': 'Expected token — syntax error, check for missing brackets/semicolons',
|
|
31
|
-
'TS2531': 'Object is possibly null — add null check or use optional chaining',
|
|
32
|
-
'TS2532': 'Object is possibly undefined — add undefined check or use optional chaining',
|
|
33
|
-
'TS2349': 'Not callable — value is not a function, check the type',
|
|
34
|
-
'TS2551': 'Property does not exist, did you mean? — typo in property name',
|
|
35
|
-
'TS6133': 'Declared but never used — remove unused variable or prefix with _',
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Extract error patterns from build/test output text.
|
|
39
|
-
*/
|
|
40
|
-
function extractErrorPatterns(text) {
|
|
41
|
-
const errors = [];
|
|
42
|
-
const seen = new Set();
|
|
43
|
-
// 1. TypeScript errors: TS2345, TS2322, etc.
|
|
44
|
-
const tsErrorRegex = /(?:error\s+)?(TS\d{4,5})\s*:\s*(.+?)(?:\r?\n|$)/gi;
|
|
45
|
-
let match;
|
|
46
|
-
while ((match = tsErrorRegex.exec(text)) !== null) {
|
|
47
|
-
const code = match[1].toUpperCase();
|
|
48
|
-
const msg = match[2].trim().slice(0, 150);
|
|
49
|
-
if (seen.has(code))
|
|
50
|
-
continue;
|
|
51
|
-
seen.add(code);
|
|
52
|
-
const lesson = TS_ERROR_LESSONS[code] || `${code}: ${msg}`;
|
|
53
|
-
errors.push({
|
|
54
|
-
errorType: code,
|
|
55
|
-
message: lesson,
|
|
56
|
-
confidence: 0.90,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
// 2. TypeScript "not assignable" pattern (without error code)
|
|
60
|
-
if (!seen.has('TYPE_MISMATCH')) {
|
|
61
|
-
const assignRegex = /Type '([^']+)' is not assignable to type '([^']+)'/gi;
|
|
62
|
-
while ((match = assignRegex.exec(text)) !== null) {
|
|
63
|
-
if (seen.has('TYPE_MISMATCH'))
|
|
64
|
-
break;
|
|
65
|
-
seen.add('TYPE_MISMATCH');
|
|
66
|
-
errors.push({
|
|
67
|
-
errorType: 'TYPE_MISMATCH',
|
|
68
|
-
message: `Type mismatch: '${match[1].slice(0, 40)}' cannot be assigned to '${match[2].slice(0, 40)}' — check type compatibility`,
|
|
69
|
-
confidence: 0.85,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// 3. Module not found
|
|
74
|
-
const moduleRegex = /(?:Cannot find module|Module not found)[:\s]+['"]([^'"]+)['"]/gi;
|
|
75
|
-
while ((match = moduleRegex.exec(text)) !== null) {
|
|
76
|
-
const mod = match[1];
|
|
77
|
-
if (seen.has(`MOD:${mod}`))
|
|
78
|
-
continue;
|
|
79
|
-
seen.add(`MOD:${mod}`);
|
|
80
|
-
errors.push({
|
|
81
|
-
errorType: 'MODULE_NOT_FOUND',
|
|
82
|
-
message: `Module '${mod}' not found — verify it's installed in package.json and the import path is correct`,
|
|
83
|
-
confidence: 0.90,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
// 4. Property does not exist on type
|
|
87
|
-
const propRegex = /Property '(\w+)' does not exist on type '([^']+)'/gi;
|
|
88
|
-
while ((match = propRegex.exec(text)) !== null) {
|
|
89
|
-
const key = `PROP:${match[1]}`;
|
|
90
|
-
if (seen.has(key))
|
|
91
|
-
continue;
|
|
92
|
-
seen.add(key);
|
|
93
|
-
errors.push({
|
|
94
|
-
errorType: 'MISSING_PROPERTY',
|
|
95
|
-
message: `Property '${match[1]}' not on type '${match[2].slice(0, 40)}' — check interface definition or use type assertion`,
|
|
96
|
-
confidence: 0.85,
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
// 5. Test failures
|
|
100
|
-
const testFailRegex = /(?:FAIL|FAILED|Error)[\s:]+(.+?test.+?)(?:\r?\n|$)/gi;
|
|
101
|
-
while ((match = testFailRegex.exec(text)) !== null) {
|
|
102
|
-
const key = `TEST:${match[1].slice(0, 30)}`;
|
|
103
|
-
if (seen.has(key))
|
|
104
|
-
continue;
|
|
105
|
-
seen.add(key);
|
|
106
|
-
errors.push({
|
|
107
|
-
errorType: 'TEST_FAILURE',
|
|
108
|
-
message: `Test failed: ${match[1].trim().slice(0, 100)}`,
|
|
109
|
-
file: match[1].trim(),
|
|
110
|
-
confidence: 0.75,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
// 6. Function signature mismatch
|
|
114
|
-
const sigRegex = /Expected (\d+) arguments?, but got (\d+)/gi;
|
|
115
|
-
while ((match = sigRegex.exec(text)) !== null) {
|
|
116
|
-
if (seen.has('SIG_MISMATCH'))
|
|
117
|
-
continue;
|
|
118
|
-
seen.add('SIG_MISMATCH');
|
|
119
|
-
errors.push({
|
|
120
|
-
errorType: 'SIGNATURE_MISMATCH',
|
|
121
|
-
message: `Wrong argument count: expected ${match[1]} but got ${match[2]} — check the function signature`,
|
|
122
|
-
confidence: 0.90,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
return errors;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Check if text contains build/test error indicators.
|
|
129
|
-
*/
|
|
130
|
-
function containsErrors(text) {
|
|
131
|
-
const errorIndicators = [
|
|
132
|
-
/error TS\d{4}/i,
|
|
133
|
-
/\bFAIL\b.*test/i,
|
|
134
|
-
/Build failed/i,
|
|
135
|
-
/compilation error/i,
|
|
136
|
-
/Cannot find module/i,
|
|
137
|
-
/SyntaxError:/i,
|
|
138
|
-
/TypeError:/i,
|
|
139
|
-
/ReferenceError:/i,
|
|
140
|
-
/npm ERR!/,
|
|
141
|
-
/Exit code: [1-9]/,
|
|
142
|
-
];
|
|
143
|
-
return errorIndicators.some(r => r.test(text));
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=error-learner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-learner.js","sourceRoot":"","sources":["../../src/memory/error-learner.ts"],"names":[],"mappings":"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"}
|