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.
- package/CHANGELOG.md +54 -0
- package/LICENSE +21 -0
- package/README.md +202 -0
- package/dist/cli/setup.d.ts +12 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +293 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config/config.d.ts +13 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +33 -0
- package/dist/config/config.js.map +1 -0
- package/dist/core/event-bus.d.ts +19 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +51 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/db/database.d.ts +19 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +254 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/event-log.d.ts +28 -0
- package/dist/db/event-log.d.ts.map +1 -0
- package/dist/db/event-log.js +87 -0
- package/dist/db/event-log.js.map +1 -0
- package/dist/db/memory-store.d.ts +65 -0
- package/dist/db/memory-store.d.ts.map +1 -0
- package/dist/db/memory-store.js +370 -0
- package/dist/db/memory-store.js.map +1 -0
- package/dist/embedding-worker.d.ts +3 -0
- package/dist/embedding-worker.d.ts.map +1 -0
- package/dist/embedding-worker.js +94 -0
- package/dist/embedding-worker.js.map +1 -0
- package/dist/hooks/cortex-run.d.ts +15 -0
- package/dist/hooks/cortex-run.d.ts.map +1 -0
- package/dist/hooks/cortex-run.js +148 -0
- package/dist/hooks/cortex-run.js.map +1 -0
- package/dist/hooks/git-capture.d.ts +21 -0
- package/dist/hooks/git-capture.d.ts.map +1 -0
- package/dist/hooks/git-capture.js +178 -0
- package/dist/hooks/git-capture.js.map +1 -0
- package/dist/hooks/git-hooks.d.ts +12 -0
- package/dist/hooks/git-hooks.d.ts.map +1 -0
- package/dist/hooks/git-hooks.js +130 -0
- package/dist/hooks/git-hooks.js.map +1 -0
- package/dist/mcp-stdio.d.ts +10 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js +247 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/memory/anticipation-engine.d.ts +19 -0
- package/dist/memory/anticipation-engine.d.ts.map +1 -0
- package/dist/memory/anticipation-engine.js +76 -0
- package/dist/memory/anticipation-engine.js.map +1 -0
- package/dist/memory/attention-ranker.d.ts +19 -0
- package/dist/memory/attention-ranker.d.ts.map +1 -0
- package/dist/memory/attention-ranker.js +97 -0
- package/dist/memory/attention-ranker.js.map +1 -0
- package/dist/memory/auto-learner.d.ts +20 -0
- package/dist/memory/auto-learner.d.ts.map +1 -0
- package/dist/memory/auto-learner.js +179 -0
- package/dist/memory/auto-learner.js.map +1 -0
- package/dist/memory/confidence-decay.d.ts +22 -0
- package/dist/memory/confidence-decay.d.ts.map +1 -0
- package/dist/memory/confidence-decay.js +54 -0
- package/dist/memory/confidence-decay.js.map +1 -0
- package/dist/memory/embedding-manager.d.ts +5 -0
- package/dist/memory/embedding-manager.d.ts.map +1 -0
- package/dist/memory/embedding-manager.js +118 -0
- package/dist/memory/embedding-manager.js.map +1 -0
- package/dist/memory/export-import.d.ts +49 -0
- package/dist/memory/export-import.d.ts.map +1 -0
- package/dist/memory/export-import.js +131 -0
- package/dist/memory/export-import.js.map +1 -0
- package/dist/memory/git-memory.d.ts +15 -0
- package/dist/memory/git-memory.d.ts.map +1 -0
- package/dist/memory/git-memory.js +178 -0
- package/dist/memory/git-memory.js.map +1 -0
- package/dist/memory/learning-rate.d.ts +24 -0
- package/dist/memory/learning-rate.d.ts.map +1 -0
- package/dist/memory/learning-rate.js +95 -0
- package/dist/memory/learning-rate.js.map +1 -0
- package/dist/memory/llm-enhancer.d.ts +54 -0
- package/dist/memory/llm-enhancer.d.ts.map +1 -0
- package/dist/memory/llm-enhancer.js +270 -0
- package/dist/memory/llm-enhancer.js.map +1 -0
- package/dist/memory/memory-cache.d.ts +5 -0
- package/dist/memory/memory-cache.d.ts.map +1 -0
- package/dist/memory/memory-cache.js +37 -0
- package/dist/memory/memory-cache.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +14 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +156 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/memory-decay.d.ts +10 -0
- package/dist/memory/memory-decay.d.ts.map +1 -0
- package/dist/memory/memory-decay.js +79 -0
- package/dist/memory/memory-decay.js.map +1 -0
- package/dist/memory/memory-quality.d.ts +37 -0
- package/dist/memory/memory-quality.d.ts.map +1 -0
- package/dist/memory/memory-quality.js +203 -0
- package/dist/memory/memory-quality.js.map +1 -0
- package/dist/memory/memory-ranker.d.ts +14 -0
- package/dist/memory/memory-ranker.d.ts.map +1 -0
- package/dist/memory/memory-ranker.js +68 -0
- package/dist/memory/memory-ranker.js.map +1 -0
- package/dist/memory/meta-memory.d.ts +11 -0
- package/dist/memory/meta-memory.d.ts.map +1 -0
- package/dist/memory/meta-memory.js +141 -0
- package/dist/memory/meta-memory.js.map +1 -0
- package/dist/memory/session-tracker.d.ts +39 -0
- package/dist/memory/session-tracker.d.ts.map +1 -0
- package/dist/memory/session-tracker.js +127 -0
- package/dist/memory/session-tracker.js.map +1 -0
- package/dist/memory/temporal-engine.d.ts +25 -0
- package/dist/memory/temporal-engine.d.ts.map +1 -0
- package/dist/memory/temporal-engine.js +106 -0
- package/dist/memory/temporal-engine.js.map +1 -0
- package/dist/retrieval/hybrid-retriever.d.ts +23 -0
- package/dist/retrieval/hybrid-retriever.d.ts.map +1 -0
- package/dist/retrieval/hybrid-retriever.js +120 -0
- package/dist/retrieval/hybrid-retriever.js.map +1 -0
- package/dist/scanners/architecture-graph.d.ts +30 -0
- package/dist/scanners/architecture-graph.d.ts.map +1 -0
- package/dist/scanners/architecture-graph.js +315 -0
- package/dist/scanners/architecture-graph.js.map +1 -0
- package/dist/scanners/code-verifier.d.ts +70 -0
- package/dist/scanners/code-verifier.d.ts.map +1 -0
- package/dist/scanners/code-verifier.js +374 -0
- package/dist/scanners/code-verifier.js.map +1 -0
- package/dist/scanners/context-builder.d.ts +19 -0
- package/dist/scanners/context-builder.d.ts.map +1 -0
- package/dist/scanners/context-builder.js +102 -0
- package/dist/scanners/context-builder.js.map +1 -0
- package/dist/scanners/export-map.d.ts +22 -0
- package/dist/scanners/export-map.d.ts.map +1 -0
- package/dist/scanners/export-map.js +249 -0
- package/dist/scanners/export-map.js.map +1 -0
- package/dist/scanners/file-verifier.d.ts +22 -0
- package/dist/scanners/file-verifier.d.ts.map +1 -0
- package/dist/scanners/file-verifier.js +140 -0
- package/dist/scanners/file-verifier.js.map +1 -0
- package/dist/scanners/project-scanner.d.ts +31 -0
- package/dist/scanners/project-scanner.d.ts.map +1 -0
- package/dist/scanners/project-scanner.js +398 -0
- package/dist/scanners/project-scanner.js.map +1 -0
- package/dist/security/encryption.d.ts +15 -0
- package/dist/security/encryption.d.ts.map +1 -0
- package/dist/security/encryption.js +116 -0
- package/dist/security/encryption.js.map +1 -0
- package/dist/security/feature-gate.d.ts +30 -0
- package/dist/security/feature-gate.d.ts.map +1 -0
- package/dist/security/feature-gate.js +91 -0
- package/dist/security/feature-gate.js.map +1 -0
- package/dist/security/license.d.ts +24 -0
- package/dist/security/license.d.ts.map +1 -0
- package/dist/security/license.js +168 -0
- package/dist/security/license.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +20 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +60 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/server/dashboard.d.ts +3 -0
- package/dist/server/dashboard.d.ts.map +1 -0
- package/dist/server/dashboard.js +258 -0
- package/dist/server/dashboard.js.map +1 -0
- package/dist/server/mcp-handler.d.ts +12 -0
- package/dist/server/mcp-handler.d.ts.map +1 -0
- package/dist/server/mcp-handler.js +1392 -0
- package/dist/server/mcp-handler.js.map +1 -0
- package/dist/strategies/embedders/local-minilm.d.ts +35 -0
- package/dist/strategies/embedders/local-minilm.d.ts.map +1 -0
- package/dist/strategies/embedders/local-minilm.js +176 -0
- package/dist/strategies/embedders/local-minilm.js.map +1 -0
- package/dist/types.d.ts +207 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +83 -0
- package/dist/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,118 @@
|
|
|
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.startEmbeddingWorker = startEmbeddingWorker;
|
|
37
|
+
exports.embedText = embedText;
|
|
38
|
+
exports.isWorkerReady = isWorkerReady;
|
|
39
|
+
exports.terminateWorker = terminateWorker;
|
|
40
|
+
/**
|
|
41
|
+
* Embedding Manager — Worker thread lifecycle for MiniLM embeddings.
|
|
42
|
+
* Extracted from standalone.ts L591-643.
|
|
43
|
+
*/
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const worker_threads_1 = require("worker_threads");
|
|
47
|
+
const config_1 = require("../config/config");
|
|
48
|
+
let embeddingWorker = null;
|
|
49
|
+
let workerReady = false;
|
|
50
|
+
const pendingEmbeddings = new Map();
|
|
51
|
+
function startEmbeddingWorker() {
|
|
52
|
+
try {
|
|
53
|
+
// Worker compiles to dist/embedding-worker.js, manager is in dist/memory/
|
|
54
|
+
const workerPath = path.join(__dirname, '..', 'embedding-worker.js');
|
|
55
|
+
if (!fs.existsSync(workerPath)) {
|
|
56
|
+
console.log(' [cortex-mcp] Embedding worker not found, running FTS-only mode');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
embeddingWorker = new worker_threads_1.Worker(workerPath);
|
|
60
|
+
embeddingWorker.on('message', (msg) => {
|
|
61
|
+
if (msg.type === 'ready') {
|
|
62
|
+
workerReady = true;
|
|
63
|
+
console.log(' [cortex-mcp] Embedding model loaded (worker thread)');
|
|
64
|
+
}
|
|
65
|
+
else if (msg.type === 'result') {
|
|
66
|
+
const pending = pendingEmbeddings.get(msg.id);
|
|
67
|
+
if (pending) {
|
|
68
|
+
pending.resolve(msg.vector);
|
|
69
|
+
pendingEmbeddings.delete(msg.id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (msg.type === 'error') {
|
|
73
|
+
const pending = pendingEmbeddings.get(msg.id);
|
|
74
|
+
if (pending) {
|
|
75
|
+
pending.reject(new Error(msg.message));
|
|
76
|
+
pendingEmbeddings.delete(msg.id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
embeddingWorker.on('error', (err) => {
|
|
81
|
+
console.error(' [cortex-mcp] Embedding worker error:', err.message);
|
|
82
|
+
workerReady = false;
|
|
83
|
+
});
|
|
84
|
+
console.log(' [cortex-mcp] Loading embedding model in background...');
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
console.log(' [cortex-mcp] Could not start embedding worker:', err.message);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function embedText(text) {
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
if (!embeddingWorker || !workerReady) {
|
|
93
|
+
reject(new Error('Worker not ready'));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const id = `embed_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
97
|
+
const timeout = setTimeout(() => {
|
|
98
|
+
pendingEmbeddings.delete(id);
|
|
99
|
+
reject(new Error('Embedding timeout'));
|
|
100
|
+
}, config_1.CONFIG.EMBEDDING_TIMEOUT);
|
|
101
|
+
pendingEmbeddings.set(id, {
|
|
102
|
+
resolve: (v) => { clearTimeout(timeout); resolve(v); },
|
|
103
|
+
reject: (e) => { clearTimeout(timeout); reject(e); },
|
|
104
|
+
});
|
|
105
|
+
embeddingWorker.postMessage({ type: 'embed', id, text });
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function isWorkerReady() {
|
|
109
|
+
return workerReady;
|
|
110
|
+
}
|
|
111
|
+
function terminateWorker() {
|
|
112
|
+
if (embeddingWorker) {
|
|
113
|
+
embeddingWorker.terminate();
|
|
114
|
+
embeddingWorker = null;
|
|
115
|
+
workerReady = false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=embedding-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-manager.js","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { MemoryStore } from '../db/memory-store';
|
|
2
|
+
export interface ExportedMemory {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
intent: string;
|
|
6
|
+
action: string;
|
|
7
|
+
reason: string | null;
|
|
8
|
+
tags: string[];
|
|
9
|
+
relatedFiles: string[];
|
|
10
|
+
confidence: number;
|
|
11
|
+
importance: number;
|
|
12
|
+
accessCount: number;
|
|
13
|
+
createdAt: number;
|
|
14
|
+
timestamp: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ExportBundle {
|
|
17
|
+
version: 1;
|
|
18
|
+
exportedAt: string;
|
|
19
|
+
memoryCount: number;
|
|
20
|
+
memories: ExportedMemory[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Export all active memories to a JSON bundle
|
|
24
|
+
*/
|
|
25
|
+
export declare function exportMemories(memoryStore: MemoryStore): ExportBundle;
|
|
26
|
+
/**
|
|
27
|
+
* Export memories to a file
|
|
28
|
+
*/
|
|
29
|
+
export declare function exportToFile(memoryStore: MemoryStore, filePath: string): {
|
|
30
|
+
count: number;
|
|
31
|
+
path: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Import memories from a JSON bundle, skipping duplicates
|
|
35
|
+
*/
|
|
36
|
+
export declare function importMemories(memoryStore: MemoryStore, bundle: ExportBundle): {
|
|
37
|
+
imported: number;
|
|
38
|
+
skipped: number;
|
|
39
|
+
errors: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Import memories from a file
|
|
43
|
+
*/
|
|
44
|
+
export declare function importFromFile(memoryStore: MemoryStore, filePath: string): {
|
|
45
|
+
imported: number;
|
|
46
|
+
skipped: number;
|
|
47
|
+
errors: number;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=export-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-import.d.ts","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY,CAwBrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKxG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,YAAY,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqCvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,GACjB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAUvD"}
|
|
@@ -0,0 +1,131 @@
|
|
|
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.exportMemories = exportMemories;
|
|
37
|
+
exports.exportToFile = exportToFile;
|
|
38
|
+
exports.importMemories = importMemories;
|
|
39
|
+
exports.importFromFile = importFromFile;
|
|
40
|
+
/**
|
|
41
|
+
* Memory Export/Import — Backup, share, and transfer memories.
|
|
42
|
+
*
|
|
43
|
+
* Export: Writes all active memories to a JSON file
|
|
44
|
+
* Import: Reads a JSON file and merges memories (dedup-aware)
|
|
45
|
+
*/
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
/**
|
|
49
|
+
* Export all active memories to a JSON bundle
|
|
50
|
+
*/
|
|
51
|
+
function exportMemories(memoryStore) {
|
|
52
|
+
const active = memoryStore.getActive(5000);
|
|
53
|
+
const memories = active.map(m => ({
|
|
54
|
+
id: m.id,
|
|
55
|
+
type: m.type,
|
|
56
|
+
intent: m.intent,
|
|
57
|
+
action: m.action,
|
|
58
|
+
reason: m.reason || null,
|
|
59
|
+
tags: m.tags || [],
|
|
60
|
+
relatedFiles: m.relatedFiles || [],
|
|
61
|
+
confidence: m.confidence,
|
|
62
|
+
importance: m.importance,
|
|
63
|
+
accessCount: m.accessCount,
|
|
64
|
+
createdAt: m.createdAt,
|
|
65
|
+
timestamp: new Date(m.createdAt).toISOString(),
|
|
66
|
+
}));
|
|
67
|
+
return {
|
|
68
|
+
version: 1,
|
|
69
|
+
exportedAt: new Date().toISOString(),
|
|
70
|
+
memoryCount: memories.length,
|
|
71
|
+
memories,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Export memories to a file
|
|
76
|
+
*/
|
|
77
|
+
function exportToFile(memoryStore, filePath) {
|
|
78
|
+
const bundle = exportMemories(memoryStore);
|
|
79
|
+
const resolved = path.resolve(filePath);
|
|
80
|
+
fs.writeFileSync(resolved, JSON.stringify(bundle, null, 2), 'utf-8');
|
|
81
|
+
return { count: bundle.memoryCount, path: resolved };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Import memories from a JSON bundle, skipping duplicates
|
|
85
|
+
*/
|
|
86
|
+
function importMemories(memoryStore, bundle) {
|
|
87
|
+
let imported = 0;
|
|
88
|
+
let skipped = 0;
|
|
89
|
+
let errors = 0;
|
|
90
|
+
// Load active memories ONCE — O(n) instead of O(n²)
|
|
91
|
+
const active = memoryStore.getActive(5000);
|
|
92
|
+
const existingKeys = new Set(active.map(e => `${e.type}::${e.intent.toLowerCase().trim()}`));
|
|
93
|
+
for (const m of bundle.memories) {
|
|
94
|
+
try {
|
|
95
|
+
const key = `${m.type}::${m.intent.toLowerCase().trim()}`;
|
|
96
|
+
if (existingKeys.has(key)) {
|
|
97
|
+
skipped++;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
memoryStore.add({
|
|
101
|
+
type: m.type,
|
|
102
|
+
intent: m.intent,
|
|
103
|
+
action: m.action,
|
|
104
|
+
reason: m.reason || undefined,
|
|
105
|
+
tags: m.tags,
|
|
106
|
+
relatedFiles: m.relatedFiles,
|
|
107
|
+
confidence: m.confidence,
|
|
108
|
+
importance: m.importance,
|
|
109
|
+
});
|
|
110
|
+
existingKeys.add(key); // Prevent dupes within the same import batch
|
|
111
|
+
imported++;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
errors++;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { imported, skipped, errors };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Import memories from a file
|
|
121
|
+
*/
|
|
122
|
+
function importFromFile(memoryStore, filePath) {
|
|
123
|
+
const resolved = path.resolve(filePath);
|
|
124
|
+
const content = fs.readFileSync(resolved, 'utf-8');
|
|
125
|
+
const bundle = JSON.parse(content);
|
|
126
|
+
if (bundle.version !== 1) {
|
|
127
|
+
throw new Error(`Unsupported export version: ${bundle.version}`);
|
|
128
|
+
}
|
|
129
|
+
return importMemories(memoryStore, bundle);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=export-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MemoryStore } from '../db/memory-store';
|
|
2
|
+
interface FileChangeReport {
|
|
3
|
+
newFiles: string[];
|
|
4
|
+
deletedFiles: string[];
|
|
5
|
+
modifiedFiles: string[];
|
|
6
|
+
totalChanges: number;
|
|
7
|
+
}
|
|
8
|
+
/** Capture recent git commits as memories */
|
|
9
|
+
export declare function captureGitCommits(memoryStore: MemoryStore, workspaceRoot: string, maxCommits?: number): number;
|
|
10
|
+
/** Detect file changes since last session */
|
|
11
|
+
export declare function detectFileChanges(workspaceRoot: string): FileChangeReport;
|
|
12
|
+
/** Format file changes for injection */
|
|
13
|
+
export declare function formatFileChanges(report: FileChangeReport): string;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=git-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.captureGitCommits = captureGitCommits;
|
|
4
|
+
exports.detectFileChanges = detectFileChanges;
|
|
5
|
+
exports.formatFileChanges = formatFileChanges;
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
// Track the last processed commit hash to avoid duplicates
|
|
8
|
+
let lastProcessedCommit = null;
|
|
9
|
+
/** Capture recent git commits as memories */
|
|
10
|
+
function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
|
|
11
|
+
if (!workspaceRoot)
|
|
12
|
+
return 0;
|
|
13
|
+
try {
|
|
14
|
+
const { execSync } = require('child_process');
|
|
15
|
+
// Get recent commits with file changes
|
|
16
|
+
const gitLog = execSync(`git log --oneline --name-only -${maxCommits} --no-merges 2>nul`, { cwd: workspaceRoot, encoding: 'utf-8', timeout: 5000 }).trim();
|
|
17
|
+
if (!gitLog)
|
|
18
|
+
return 0;
|
|
19
|
+
const commits = parseGitLog(gitLog);
|
|
20
|
+
let stored = 0;
|
|
21
|
+
for (const commit of commits) {
|
|
22
|
+
// Skip if already processed
|
|
23
|
+
if (commit.hash === lastProcessedCommit)
|
|
24
|
+
break;
|
|
25
|
+
// Classify commit type based on message
|
|
26
|
+
const type = classifyCommit(commit.message);
|
|
27
|
+
// Check for duplicate — skip if already stored
|
|
28
|
+
const existing = memoryStore.getActive(200).find(m => m.tags?.includes(`commit:${commit.hash}`));
|
|
29
|
+
if (existing)
|
|
30
|
+
continue;
|
|
31
|
+
memoryStore.add({
|
|
32
|
+
type,
|
|
33
|
+
intent: `Git commit: ${commit.message}`,
|
|
34
|
+
action: commit.filesChanged.length > 0
|
|
35
|
+
? `Changed: ${commit.filesChanged.slice(0, 5).join(', ')}`
|
|
36
|
+
: commit.message,
|
|
37
|
+
reason: 'Auto-captured from git history',
|
|
38
|
+
tags: ['git-commit', `commit:${commit.hash}`, ...extractTopicTags(commit.message)],
|
|
39
|
+
relatedFiles: commit.filesChanged.slice(0, 10),
|
|
40
|
+
confidence: 0.8,
|
|
41
|
+
importance: type === types_1.MemoryType.BUG_FIX ? 0.85 : 0.6,
|
|
42
|
+
timestamp: Date.now(),
|
|
43
|
+
isActive: true,
|
|
44
|
+
accessCount: 0,
|
|
45
|
+
createdAt: Date.now(),
|
|
46
|
+
id: '',
|
|
47
|
+
});
|
|
48
|
+
stored++;
|
|
49
|
+
}
|
|
50
|
+
if (commits.length > 0) {
|
|
51
|
+
lastProcessedCommit = commits[0].hash;
|
|
52
|
+
}
|
|
53
|
+
return stored;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Detect file changes since last session */
|
|
60
|
+
function detectFileChanges(workspaceRoot) {
|
|
61
|
+
const report = { newFiles: [], deletedFiles: [], modifiedFiles: [], totalChanges: 0 };
|
|
62
|
+
if (!workspaceRoot)
|
|
63
|
+
return report;
|
|
64
|
+
try {
|
|
65
|
+
const { execSync } = require('child_process');
|
|
66
|
+
// Get uncommitted changes (working tree vs HEAD)
|
|
67
|
+
const status = execSync('git status --porcelain 2>nul', {
|
|
68
|
+
cwd: workspaceRoot,
|
|
69
|
+
encoding: 'utf-8',
|
|
70
|
+
timeout: 5000,
|
|
71
|
+
}).trim();
|
|
72
|
+
if (!status)
|
|
73
|
+
return report;
|
|
74
|
+
for (const line of status.split('\n')) {
|
|
75
|
+
const code = line.slice(0, 2).trim();
|
|
76
|
+
const file = line.slice(3).trim();
|
|
77
|
+
if (!file)
|
|
78
|
+
continue;
|
|
79
|
+
switch (code) {
|
|
80
|
+
case '??':
|
|
81
|
+
case 'A':
|
|
82
|
+
report.newFiles.push(file);
|
|
83
|
+
break;
|
|
84
|
+
case 'D':
|
|
85
|
+
report.deletedFiles.push(file);
|
|
86
|
+
break;
|
|
87
|
+
case 'M':
|
|
88
|
+
case 'MM':
|
|
89
|
+
report.modifiedFiles.push(file);
|
|
90
|
+
break;
|
|
91
|
+
default:
|
|
92
|
+
report.modifiedFiles.push(file);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
report.totalChanges = report.newFiles.length + report.deletedFiles.length + report.modifiedFiles.length;
|
|
97
|
+
return report;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return report;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Format file changes for injection */
|
|
104
|
+
function formatFileChanges(report) {
|
|
105
|
+
if (report.totalChanges === 0)
|
|
106
|
+
return '';
|
|
107
|
+
const lines = [`## 📝 Uncommitted Changes (${report.totalChanges} files)`];
|
|
108
|
+
if (report.newFiles.length > 0) {
|
|
109
|
+
lines.push(`**New:** ${report.newFiles.slice(0, 5).join(', ')}`);
|
|
110
|
+
}
|
|
111
|
+
if (report.deletedFiles.length > 0) {
|
|
112
|
+
lines.push(`**Deleted:** ${report.deletedFiles.slice(0, 5).join(', ')}`);
|
|
113
|
+
}
|
|
114
|
+
if (report.modifiedFiles.length > 0) {
|
|
115
|
+
lines.push(`**Modified:** ${report.modifiedFiles.slice(0, 5).join(', ')}`);
|
|
116
|
+
}
|
|
117
|
+
return lines.join('\n');
|
|
118
|
+
}
|
|
119
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
120
|
+
function parseGitLog(log) {
|
|
121
|
+
const commits = [];
|
|
122
|
+
const lines = log.split('\n');
|
|
123
|
+
let current = null;
|
|
124
|
+
for (const line of lines) {
|
|
125
|
+
// Commit line: "abc1234 Fix auth bug"
|
|
126
|
+
const commitMatch = line.match(/^([a-f0-9]{7,12})\s+(.+)$/);
|
|
127
|
+
if (commitMatch) {
|
|
128
|
+
if (current)
|
|
129
|
+
commits.push(current);
|
|
130
|
+
current = {
|
|
131
|
+
hash: commitMatch[1],
|
|
132
|
+
message: commitMatch[2],
|
|
133
|
+
author: '',
|
|
134
|
+
date: '',
|
|
135
|
+
filesChanged: [],
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
else if (current && line.trim()) {
|
|
139
|
+
// File change line
|
|
140
|
+
current.filesChanged.push(line.trim());
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (current)
|
|
144
|
+
commits.push(current);
|
|
145
|
+
return commits;
|
|
146
|
+
}
|
|
147
|
+
function classifyCommit(message) {
|
|
148
|
+
const lower = message.toLowerCase();
|
|
149
|
+
if (/\b(fix|bug|patch|hotfix|resolve|crash|error|issue)\b/.test(lower))
|
|
150
|
+
return types_1.MemoryType.BUG_FIX;
|
|
151
|
+
if (/\b(refactor|clean|lint|format|style|rename)\b/.test(lower))
|
|
152
|
+
return types_1.MemoryType.CONVENTION;
|
|
153
|
+
if (/\b(add|feat|implement|create|support|enable)\b/.test(lower))
|
|
154
|
+
return types_1.MemoryType.DECISION;
|
|
155
|
+
if (/\b(doc|readme|comment|note)\b/.test(lower))
|
|
156
|
+
return types_1.MemoryType.INSIGHT;
|
|
157
|
+
return types_1.MemoryType.DECISION;
|
|
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
|
+
}
|
|
178
|
+
//# sourceMappingURL=git-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-memory.js","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning Rate Adjuster — Tracks correction frequency and auto-boosts importance.
|
|
3
|
+
*
|
|
4
|
+
* If the AI gets corrected 3 times about "auth", auth corrections become
|
|
5
|
+
* ultra-priority and surface at the very top of every recall.
|
|
6
|
+
*
|
|
7
|
+
* Like how your brain learns faster from repeated mistakes:
|
|
8
|
+
* burn your hand once = careful. Burn it 3 times = NEVER touch stove.
|
|
9
|
+
*/
|
|
10
|
+
import { MemoryStore } from '../db/memory-store';
|
|
11
|
+
interface CorrectionFrequency {
|
|
12
|
+
topic: string;
|
|
13
|
+
count: number;
|
|
14
|
+
lastCorrected: number;
|
|
15
|
+
memoryIds: string[];
|
|
16
|
+
}
|
|
17
|
+
/** Analyze correction frequency across all memories */
|
|
18
|
+
export declare function analyzeCorrectionFrequency(memoryStore: MemoryStore): CorrectionFrequency[];
|
|
19
|
+
/** Auto-boost importance of frequently corrected topics */
|
|
20
|
+
export declare function boostFrequentCorrections(memoryStore: MemoryStore): number;
|
|
21
|
+
/** Format hot corrections for injection */
|
|
22
|
+
export declare function formatHotCorrections(memoryStore: MemoryStore): string;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=learning-rate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-rate.d.ts","sourceRoot":"","sources":["../../src/memory/learning-rate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,UAAU,mBAAmB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,uDAAuD;AACvD,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,mBAAmB,EAAE,CAiC1F;AAED,2DAA2D;AAC3D,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CA2BzE;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAYrE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeCorrectionFrequency = analyzeCorrectionFrequency;
|
|
4
|
+
exports.boostFrequentCorrections = boostFrequentCorrections;
|
|
5
|
+
exports.formatHotCorrections = formatHotCorrections;
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
/** Analyze correction frequency across all memories */
|
|
8
|
+
function analyzeCorrectionFrequency(memoryStore) {
|
|
9
|
+
const corrections = memoryStore.getByType(types_1.MemoryType.CORRECTION, 200);
|
|
10
|
+
if (corrections.length < 2)
|
|
11
|
+
return [];
|
|
12
|
+
// Extract topic keywords from each correction
|
|
13
|
+
const topicMap = new Map();
|
|
14
|
+
for (const c of corrections) {
|
|
15
|
+
const words = extractTopicWords(c.intent);
|
|
16
|
+
for (const word of words) {
|
|
17
|
+
const existing = topicMap.get(word);
|
|
18
|
+
if (existing) {
|
|
19
|
+
existing.count++;
|
|
20
|
+
existing.lastCorrected = Math.max(existing.lastCorrected, c.timestamp);
|
|
21
|
+
if (!existing.memoryIds.includes(c.id)) {
|
|
22
|
+
existing.memoryIds.push(c.id);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
topicMap.set(word, {
|
|
27
|
+
topic: word,
|
|
28
|
+
count: 1,
|
|
29
|
+
lastCorrected: c.timestamp,
|
|
30
|
+
memoryIds: [c.id],
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Only return topics with 2+ corrections
|
|
36
|
+
return [...topicMap.values()]
|
|
37
|
+
.filter(t => t.count >= 2)
|
|
38
|
+
.sort((a, b) => b.count - a.count)
|
|
39
|
+
.slice(0, 10);
|
|
40
|
+
}
|
|
41
|
+
/** Auto-boost importance of frequently corrected topics */
|
|
42
|
+
function boostFrequentCorrections(memoryStore) {
|
|
43
|
+
const freqs = analyzeCorrectionFrequency(memoryStore);
|
|
44
|
+
let boosted = 0;
|
|
45
|
+
for (const freq of freqs) {
|
|
46
|
+
if (freq.count >= 3) {
|
|
47
|
+
// 3+ corrections = ultra-priority
|
|
48
|
+
for (const id of freq.memoryIds) {
|
|
49
|
+
const m = memoryStore.get(id);
|
|
50
|
+
if (m && m.importance < 0.95) {
|
|
51
|
+
memoryStore.update(id, { importance: 0.95 });
|
|
52
|
+
boosted++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (freq.count >= 2) {
|
|
57
|
+
// 2 corrections = high priority
|
|
58
|
+
for (const id of freq.memoryIds) {
|
|
59
|
+
const m = memoryStore.get(id);
|
|
60
|
+
if (m && m.importance < 0.85) {
|
|
61
|
+
memoryStore.update(id, { importance: 0.85 });
|
|
62
|
+
boosted++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return boosted;
|
|
68
|
+
}
|
|
69
|
+
/** Format hot corrections for injection */
|
|
70
|
+
function formatHotCorrections(memoryStore) {
|
|
71
|
+
const freqs = analyzeCorrectionFrequency(memoryStore);
|
|
72
|
+
const hot = freqs.filter(f => f.count >= 2);
|
|
73
|
+
if (hot.length === 0)
|
|
74
|
+
return '';
|
|
75
|
+
const lines = ['## Hot Corrections (repeatedly corrected -- CRITICAL)'];
|
|
76
|
+
for (const h of hot.slice(0, 5)) {
|
|
77
|
+
const emoji = h.count >= 3 ? '[CRITICAL]' : '[WARN]';
|
|
78
|
+
lines.push(`${emoji} "${h.topic}" — corrected ${h.count}x`);
|
|
79
|
+
}
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
/** Extract meaningful topic words from correction text */
|
|
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
|
+
]);
|
|
90
|
+
return text.toLowerCase()
|
|
91
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
92
|
+
.split(/\s+/)
|
|
93
|
+
.filter(w => w.length > 3 && !stopWords.has(w));
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=learning-rate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-rate.js","sourceRoot":"","sources":["../../src/memory/learning-rate.ts"],"names":[],"mappings":"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"}
|