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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning-rate.js","sourceRoot":"","sources":["../../src/memory/learning-rate.ts"],"names":[],"mappings":";;AAoBA,gEAiCC;AAGD,4DA2BC;AAGD,oDAYC;AAxFD,
|
|
1
|
+
{"version":3,"file":"learning-rate.js","sourceRoot":"","sources":["../../src/memory/learning-rate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Enhancer — Optional LLM-powered memory enrichment.
|
|
3
|
+
*
|
|
4
|
+
* When the user provides an API key (OPENAI_API_KEY or CORTEX_LLM_KEY),
|
|
5
|
+
* this module uses an LLM to:
|
|
6
|
+
* 1. Better classify memories (vs. keyword matching)
|
|
7
|
+
* 2. Extract richer insights from commit messages
|
|
8
|
+
* 3. Generate smart tags and connections
|
|
9
|
+
* 4. Summarize and merge related memories
|
|
10
|
+
*
|
|
11
|
+
* When no API key is available, falls back to keyword-based classification.
|
|
12
|
+
* This ensures Cortex works for EVERYONE — free without an API key,
|
|
13
|
+
* but smarter WITH one.
|
|
14
|
+
*/
|
|
1
15
|
export interface LLMEnhancedMemory {
|
|
2
16
|
type: string;
|
|
3
17
|
intent: string;
|
|
@@ -11,8 +25,6 @@ export interface LLMConfig {
|
|
|
11
25
|
model: string;
|
|
12
26
|
baseUrl: string;
|
|
13
27
|
maxTokens: number;
|
|
14
|
-
provider: 'openrouter' | 'openai' | 'anthropic' | 'custom';
|
|
15
|
-
extraHeaders?: Record<string, string>;
|
|
16
28
|
}
|
|
17
29
|
/**
|
|
18
30
|
* Check if LLM enhancement is available (API key configured).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-enhancer.d.ts","sourceRoot":"","sources":["../../src/memory/llm-enhancer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"llm-enhancer.d.ts","sourceRoot":"","sources":["../../src/memory/llm-enhancer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAwHD;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAMxC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,iBAAiB,CAAC,CA2D5B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACnC,QAAQ,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACrE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LLM Enhancer — Optional LLM-powered memory enrichment.
|
|
4
|
+
*
|
|
5
|
+
* When the user provides an API key (OPENAI_API_KEY or CORTEX_LLM_KEY),
|
|
6
|
+
* this module uses an LLM to:
|
|
7
|
+
* 1. Better classify memories (vs. keyword matching)
|
|
8
|
+
* 2. Extract richer insights from commit messages
|
|
9
|
+
* 3. Generate smart tags and connections
|
|
10
|
+
* 4. Summarize and merge related memories
|
|
11
|
+
*
|
|
12
|
+
* When no API key is available, falls back to keyword-based classification.
|
|
13
|
+
* This ensures Cortex works for EVERYONE — free without an API key,
|
|
14
|
+
* but smarter WITH one.
|
|
15
|
+
*/
|
|
2
16
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
17
|
if (k2 === undefined) k2 = k;
|
|
4
18
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -37,76 +51,32 @@ exports.isLLMAvailable = isLLMAvailable;
|
|
|
37
51
|
exports.getLLMProvider = getLLMProvider;
|
|
38
52
|
exports.enhanceMemory = enhanceMemory;
|
|
39
53
|
exports.summarizeMemories = summarizeMemories;
|
|
40
|
-
/**
|
|
41
|
-
* LLM Enhancer — Optional LLM-powered memory enrichment.
|
|
42
|
-
*
|
|
43
|
-
* Supports multiple LLM providers:
|
|
44
|
-
* 1. OpenRouter (FREE models available!) — OPENROUTER_API_KEY
|
|
45
|
-
* 2. OpenAI — OPENAI_API_KEY
|
|
46
|
-
* 3. Anthropic — ANTHROPIC_API_KEY
|
|
47
|
-
* 4. Any OpenAI-compatible API — CORTEX_LLM_KEY + CORTEX_LLM_BASE_URL
|
|
48
|
-
*
|
|
49
|
-
* When the user provides an API key, this module uses an LLM to:
|
|
50
|
-
* 1. Better classify memories (vs. keyword matching)
|
|
51
|
-
* 2. Extract richer insights from conversations
|
|
52
|
-
* 3. Generate smart tags and connections
|
|
53
|
-
* 4. Summarize and merge related memories
|
|
54
|
-
*
|
|
55
|
-
* When no API key is available, falls back to keyword-based classification.
|
|
56
|
-
* This ensures Cortex works for EVERYONE — free without an API key,
|
|
57
|
-
* but smarter WITH one.
|
|
58
|
-
*
|
|
59
|
-
* === HOW TO GET A FREE OPENROUTER KEY ===
|
|
60
|
-
* 1. Go to https://openrouter.ai/keys
|
|
61
|
-
* 2. Create a free account
|
|
62
|
-
* 3. Generate an API key (free tier included)
|
|
63
|
-
* 4. Set: OPENROUTER_API_KEY=sk-or-v1-... in your environment
|
|
64
|
-
* 5. Cortex will automatically use free models for smarter memory extraction!
|
|
65
|
-
*/
|
|
66
|
-
const extract_tags_1 = require("../utils/extract-tags");
|
|
67
54
|
const https = __importStar(require("https"));
|
|
68
55
|
const http = __importStar(require("http"));
|
|
69
56
|
// ─── Config Detection ─────────────────────────────────────────────────────────
|
|
70
57
|
function detectLLMConfig() {
|
|
71
|
-
//
|
|
72
|
-
const openrouterKey = process.env.OPENROUTER_API_KEY;
|
|
73
|
-
if (openrouterKey) {
|
|
74
|
-
return {
|
|
75
|
-
apiKey: openrouterKey,
|
|
76
|
-
model: process.env.CORTEX_LLM_MODEL || 'meta-llama/llama-4-scout:free',
|
|
77
|
-
baseUrl: 'https://openrouter.ai/api',
|
|
78
|
-
maxTokens: 200,
|
|
79
|
-
provider: 'openrouter',
|
|
80
|
-
extraHeaders: {
|
|
81
|
-
'HTTP-Referer': 'https://github.com/jaswanthkumarj1234-beep/cortex-mcp',
|
|
82
|
-
'X-Title': 'Cortex MCP',
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
// 2. Check other API key sources
|
|
58
|
+
// Check multiple API key sources
|
|
87
59
|
const apiKey = process.env.OPENAI_API_KEY
|
|
88
60
|
|| process.env.CORTEX_LLM_KEY
|
|
89
61
|
|| process.env.ANTHROPIC_API_KEY
|
|
90
62
|
|| null;
|
|
91
63
|
if (!apiKey)
|
|
92
64
|
return null;
|
|
93
|
-
//
|
|
65
|
+
// Detect which provider based on key prefix
|
|
94
66
|
if (apiKey.startsWith('sk-ant-')) {
|
|
95
67
|
return {
|
|
96
68
|
apiKey,
|
|
97
69
|
model: process.env.CORTEX_LLM_MODEL || 'claude-3-haiku-20240307',
|
|
98
70
|
baseUrl: 'https://api.anthropic.com',
|
|
99
71
|
maxTokens: 200,
|
|
100
|
-
provider: 'anthropic',
|
|
101
72
|
};
|
|
102
73
|
}
|
|
103
|
-
//
|
|
74
|
+
// Default to OpenAI-compatible (works with OpenAI, OpenRouter, local)
|
|
104
75
|
return {
|
|
105
76
|
apiKey,
|
|
106
77
|
model: process.env.CORTEX_LLM_MODEL || 'gpt-4o-mini',
|
|
107
78
|
baseUrl: process.env.CORTEX_LLM_BASE_URL || 'https://api.openai.com',
|
|
108
79
|
maxTokens: 200,
|
|
109
|
-
provider: 'openai',
|
|
110
80
|
};
|
|
111
81
|
}
|
|
112
82
|
// ─── LLM Call ─────────────────────────────────────────────────────────────────
|
|
@@ -119,21 +89,16 @@ function callOpenAI(config, prompt) {
|
|
|
119
89
|
max_tokens: config.maxTokens,
|
|
120
90
|
temperature: 0.1,
|
|
121
91
|
});
|
|
122
|
-
const headers = {
|
|
123
|
-
'Content-Type': 'application/json',
|
|
124
|
-
'Authorization': `Bearer ${config.apiKey}`,
|
|
125
|
-
'Content-Length': Buffer.byteLength(body),
|
|
126
|
-
};
|
|
127
|
-
// Add provider-specific headers (OpenRouter requires HTTP-Referer and X-Title)
|
|
128
|
-
if (config.extraHeaders) {
|
|
129
|
-
Object.assign(headers, config.extraHeaders);
|
|
130
|
-
}
|
|
131
92
|
const options = {
|
|
132
93
|
hostname: url.hostname,
|
|
133
94
|
port: url.port || 443,
|
|
134
95
|
path: url.pathname,
|
|
135
96
|
method: 'POST',
|
|
136
|
-
headers
|
|
97
|
+
headers: {
|
|
98
|
+
'Content-Type': 'application/json',
|
|
99
|
+
'Authorization': `Bearer ${config.apiKey}`,
|
|
100
|
+
'Content-Length': Buffer.byteLength(body),
|
|
101
|
+
},
|
|
137
102
|
};
|
|
138
103
|
const transport = url.protocol === 'https:' ? https : http;
|
|
139
104
|
const req = transport.request(options, (res) => {
|
|
@@ -142,10 +107,6 @@ function callOpenAI(config, prompt) {
|
|
|
142
107
|
res.on('end', () => {
|
|
143
108
|
try {
|
|
144
109
|
const json = JSON.parse(data);
|
|
145
|
-
if (json.error) {
|
|
146
|
-
reject(new Error(`LLM API error: ${json.error.message || JSON.stringify(json.error)}`));
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
110
|
const content = json.choices?.[0]?.message?.content || '';
|
|
150
111
|
resolve(content.trim());
|
|
151
112
|
}
|
|
@@ -155,7 +116,7 @@ function callOpenAI(config, prompt) {
|
|
|
155
116
|
});
|
|
156
117
|
});
|
|
157
118
|
req.on('error', reject);
|
|
158
|
-
req.setTimeout(
|
|
119
|
+
req.setTimeout(10000, () => {
|
|
159
120
|
req.destroy();
|
|
160
121
|
reject(new Error('LLM request timeout'));
|
|
161
122
|
});
|
|
@@ -180,6 +141,27 @@ function classifyByKeywords(text) {
|
|
|
180
141
|
return 'BUG_FIX';
|
|
181
142
|
return 'DECISION';
|
|
182
143
|
}
|
|
144
|
+
function extractKeywordTags(text) {
|
|
145
|
+
const tags = [];
|
|
146
|
+
const lower = text.toLowerCase();
|
|
147
|
+
const patterns = [
|
|
148
|
+
[/\b(auth|login|session|token|jwt|oauth)\b/, 'auth'],
|
|
149
|
+
[/\b(database|sql|query|migration|schema)\b/, 'database'],
|
|
150
|
+
[/\b(api|endpoint|route|rest|graphql)\b/, 'api'],
|
|
151
|
+
[/\b(ui|component|render|style|css|html)\b/, 'ui'],
|
|
152
|
+
[/\b(test|spec|mock|assert|coverage)\b/, 'testing'],
|
|
153
|
+
[/\b(deploy|ci|cd|pipeline|docker|k8s)\b/, 'devops'],
|
|
154
|
+
[/\b(security|encrypt|permission|vulnerability)\b/, 'security'],
|
|
155
|
+
[/\b(perf|optimize|cache|speed|memory)\b/, 'performance'],
|
|
156
|
+
[/\b(config|env|setting|option)\b/, 'config'],
|
|
157
|
+
[/\b(error|exception|crash|debug|log)\b/, 'error-handling'],
|
|
158
|
+
];
|
|
159
|
+
for (const [pattern, tag] of patterns) {
|
|
160
|
+
if (pattern.test(lower))
|
|
161
|
+
tags.push(tag);
|
|
162
|
+
}
|
|
163
|
+
return tags;
|
|
164
|
+
}
|
|
183
165
|
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
184
166
|
let _config = undefined;
|
|
185
167
|
let _available = undefined;
|
|
@@ -199,9 +181,7 @@ function isLLMAvailable() {
|
|
|
199
181
|
function getLLMProvider() {
|
|
200
182
|
if (!isLLMAvailable() || !_config)
|
|
201
183
|
return 'none';
|
|
202
|
-
if (_config.
|
|
203
|
-
return `openrouter/${_config.model}`;
|
|
204
|
-
if (_config.provider === 'anthropic')
|
|
184
|
+
if (_config.baseUrl.includes('anthropic'))
|
|
205
185
|
return `anthropic/${_config.model}`;
|
|
206
186
|
return `openai/${_config.model}`;
|
|
207
187
|
}
|
|
@@ -215,7 +195,7 @@ async function enhanceMemory(text, context) {
|
|
|
215
195
|
type: classifyByKeywords(text),
|
|
216
196
|
intent: text.length > 200 ? text.slice(0, 200) + '...' : text,
|
|
217
197
|
action: text,
|
|
218
|
-
tags: (
|
|
198
|
+
tags: extractKeywordTags(text),
|
|
219
199
|
};
|
|
220
200
|
if (!isLLMAvailable() || !_config) {
|
|
221
201
|
return fallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-enhancer.js","sourceRoot":"","sources":["../../src/memory/llm-enhancer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"llm-enhancer.js","sourceRoot":"","sources":["../../src/memory/llm-enhancer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/memory/memory-cache.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAQjD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/memory/memory-cache.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAQjD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAMvD;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
|
|
@@ -21,16 +21,6 @@ function getCached(key) {
|
|
|
21
21
|
return entry.result;
|
|
22
22
|
}
|
|
23
23
|
function setCache(key, result) {
|
|
24
|
-
// Proactive stale eviction: sweep expired entries before inserting
|
|
25
|
-
if (recallCache.size >= config_1.CONFIG.CACHE_MAX) {
|
|
26
|
-
const now = Date.now();
|
|
27
|
-
for (const [k, v] of recallCache) {
|
|
28
|
-
if (now - v.time > config_1.CONFIG.CACHE_TTL) {
|
|
29
|
-
recallCache.delete(k);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// If still full after eviction, remove the oldest entry
|
|
34
24
|
if (recallCache.size >= config_1.CONFIG.CACHE_MAX) {
|
|
35
25
|
const oldest = recallCache.keys().next().value;
|
|
36
26
|
if (oldest)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/memory/memory-cache.ts"],"names":[],"mappings":";;AAQA,8BAQC;AAED,
|
|
1
|
+
{"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/memory/memory-cache.ts"],"names":[],"mappings":";;AAQA,8BAQC;AAED,4BAMC;AAED,0CAEC;AAED,8BAEC;AAhCD;;;GAGG;AACH,6CAA0C;AAE1C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyC,CAAC;AAErE,SAAgB,SAAS,CAAC,GAAW;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,eAAM,CAAC,SAAS,EAAE,CAAC;QAC7C,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAW,EAAE,MAAW;IAC7C,IAAI,WAAW,CAAC,IAAI,IAAI,eAAM,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC/C,IAAI,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,eAAe;IAC3B,WAAW,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,SAAS;IACrB,OAAO,WAAW,CAAC,IAAI,CAAC;AAC5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-consolidator.d.ts","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUjD,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"memory-consolidator.d.ts","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUjD,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CA2CpE;AAyHD,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAEnE"}
|
|
@@ -5,7 +5,7 @@ exports.shouldConsolidate = shouldConsolidate;
|
|
|
5
5
|
const types_1 = require("../types");
|
|
6
6
|
/** Run consolidation — merges similar active memories. Returns count of merges. */
|
|
7
7
|
function consolidateMemories(memoryStore) {
|
|
8
|
-
const active = memoryStore.getActive(
|
|
8
|
+
const active = memoryStore.getActive(10000);
|
|
9
9
|
if (active.length < 10)
|
|
10
10
|
return 0; // Not enough to consolidate
|
|
11
11
|
let mergeCount = 0;
|
|
@@ -27,19 +27,17 @@ function consolidateMemories(memoryStore) {
|
|
|
27
27
|
// Create merged memory
|
|
28
28
|
const merged = createMergedMemory(group, type);
|
|
29
29
|
const newMemory = memoryStore.add(merged);
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
});
|
|
30
|
+
// Deactivate originals, link to merged
|
|
31
|
+
for (const old of group.memories) {
|
|
32
|
+
memoryStore.deactivate(old.id, newMemory.id);
|
|
33
|
+
memoryStore.addEdge({
|
|
34
|
+
sourceId: old.id,
|
|
35
|
+
targetId: newMemory.id,
|
|
36
|
+
relation: types_1.EdgeRelation.REPLACED_BY,
|
|
37
|
+
weight: 0.9,
|
|
38
|
+
timestamp: Date.now(),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
43
41
|
mergeCount++;
|
|
44
42
|
}
|
|
45
43
|
}
|
|
@@ -58,9 +56,6 @@ function findSimilarGroups(memories) {
|
|
|
58
56
|
if (used.has(memories[j].id))
|
|
59
57
|
continue;
|
|
60
58
|
const wordsJ = tokenize(memories[j].intent);
|
|
61
|
-
// Skip dedup for very short memories (< 5 words) — Jaccard false positives
|
|
62
|
-
if (wordsI.length < 5 || wordsJ.length < 5)
|
|
63
|
-
continue;
|
|
64
59
|
const similarity = jaccardSimilarity(wordsI, wordsJ);
|
|
65
60
|
if (similarity > 0.5) { // 50% word overlap = similar enough
|
|
66
61
|
group.push(memories[j]);
|
|
@@ -146,14 +141,13 @@ function jaccardSimilarity(a, b) {
|
|
|
146
141
|
const union = setA.size + setB.size - intersection;
|
|
147
142
|
return union === 0 ? 0 : intersection / union;
|
|
148
143
|
}
|
|
149
|
-
// Module-level constant (not re-created per call)
|
|
150
|
-
const CONSOLIDATOR_STOP_WORDS = new Set(['the', 'a', 'an', 'is', 'was', 'are', 'were', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'it', 'this', 'that', 'and', 'or', 'but']);
|
|
151
144
|
/** Tokenize text into lowercase words */
|
|
152
145
|
function tokenize(text) {
|
|
146
|
+
const stopWords = new Set(['the', 'a', 'an', 'is', 'was', 'are', 'were', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'it', 'this', 'that', 'and', 'or', 'but']);
|
|
153
147
|
return text.toLowerCase()
|
|
154
148
|
.replace(/[^a-z0-9\s]/g, ' ')
|
|
155
149
|
.split(/\s+/)
|
|
156
|
-
.filter(w => w.length > 2 && !
|
|
150
|
+
.filter(w => w.length > 2 && !stopWords.has(w));
|
|
157
151
|
}
|
|
158
152
|
/** Check if consolidation should run (e.g., after force_recall) */
|
|
159
153
|
function shouldConsolidate(memoryStore) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-consolidator.js","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":";;AAmBA,
|
|
1
|
+
{"version":3,"file":"memory-consolidator.js","sourceRoot":"","sources":["../../src/memory/memory-consolidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-decay.d.ts","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"memory-decay.d.ts","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CA8E9D"}
|
|
@@ -1,102 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cleanupMemories = cleanupMemories;
|
|
4
|
+
const types_1 = require("../types");
|
|
4
5
|
const config_1 = require("../config/config");
|
|
5
6
|
const memory_cache_1 = require("./memory-cache");
|
|
6
7
|
function cleanupMemories(memoryStore) {
|
|
8
|
+
const now = Date.now();
|
|
7
9
|
const DAY = 24 * 60 * 60 * 1000;
|
|
8
10
|
try {
|
|
9
11
|
let cleaned = 0;
|
|
10
|
-
//
|
|
11
|
-
memoryStore.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
for (const m of allForTaskCleanup) {
|
|
17
|
-
if (m.type === 'CURRENT_TASK') {
|
|
18
|
-
const age = Date.now() - (m.createdAt || m.timestamp || 0);
|
|
19
|
-
if (age > TASK_MAX_AGE) {
|
|
20
|
-
memoryStore.deactivate(m.id);
|
|
21
|
-
cleaned++;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
// 1. Two-tier OpenClaw-style decay:
|
|
26
|
-
// TRANSACTIONAL (high volume, decays fast): INSIGHT, CONVERSATION
|
|
27
|
-
// OPERATIONAL (low volume, persists): DECISION, CORRECTION, CONVENTION, BUG_FIX
|
|
28
|
-
const OPERATIONAL_TYPES = new Set(['DECISION', 'CORRECTION', 'CONVENTION', 'BUG_FIX', 'PROVEN_PATTERN']);
|
|
29
|
-
const TRANSACTIONAL_MAX_AGE = 5 * DAY; // 5 days for junk
|
|
30
|
-
const OPERATIONAL_MAX_AGE = 60 * DAY; // 60 days for gold (if 0 access)
|
|
31
|
-
const staleInsights = memoryStore.getStaleMemories(TRANSACTIONAL_MAX_AGE, 500);
|
|
32
|
-
for (const m of staleInsights) {
|
|
33
|
-
if (!OPERATIONAL_TYPES.has(m.type)) {
|
|
34
|
-
memoryStore.deactivate(m.id);
|
|
35
|
-
cleaned++;
|
|
36
|
-
}
|
|
12
|
+
// 1. Deactivate INSIGHT memories > 14 days with 0 access
|
|
13
|
+
const insights = memoryStore.getByType(types_1.MemoryType.INSIGHT, 5000);
|
|
14
|
+
for (const m of insights) {
|
|
15
|
+
if (m.accessCount === 0 && now - m.createdAt > config_1.CONFIG.INSIGHT_MAX_AGE_DAYS * DAY) {
|
|
16
|
+
memoryStore.deactivate(m.id);
|
|
17
|
+
cleaned++;
|
|
37
18
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
19
|
+
}
|
|
20
|
+
// 2. Deactivate any memory > 30 days with 0 access
|
|
21
|
+
const all = memoryStore.getActive(5000);
|
|
22
|
+
for (const m of all) {
|
|
23
|
+
if (m.accessCount === 0 && now - m.createdAt > config_1.CONFIG.UNUSED_MAX_AGE_DAYS * DAY) {
|
|
41
24
|
memoryStore.deactivate(m.id);
|
|
42
25
|
cleaned++;
|
|
43
26
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
27
|
+
}
|
|
28
|
+
// 3. Cap at MEMORY_CAP active memories
|
|
29
|
+
const active = memoryStore.getActive(5000);
|
|
30
|
+
if (active.length > config_1.CONFIG.MEMORY_CAP) {
|
|
31
|
+
const sorted = active.sort((a, b) => a.importance - b.importance);
|
|
32
|
+
const toRemove = sorted.slice(0, active.length - config_1.CONFIG.MEMORY_CAP);
|
|
33
|
+
for (const m of toRemove) {
|
|
34
|
+
memoryStore.deactivate(m.id);
|
|
35
|
+
cleaned++;
|
|
52
36
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
else {
|
|
63
|
-
intentMap.set(key, [m]);
|
|
64
|
-
}
|
|
37
|
+
}
|
|
38
|
+
// 4. NEW: Duplicate detection — find memories with identical intents
|
|
39
|
+
const activeAfterClean = memoryStore.getActive(5000);
|
|
40
|
+
const intentMap = new Map();
|
|
41
|
+
for (const m of activeAfterClean) {
|
|
42
|
+
const key = m.intent.toLowerCase().trim();
|
|
43
|
+
const existing = intentMap.get(key);
|
|
44
|
+
if (existing) {
|
|
45
|
+
existing.push(m);
|
|
65
46
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (dupes.length <= 1)
|
|
69
|
-
continue;
|
|
70
|
-
// Sort by importance desc, keep the first
|
|
71
|
-
dupes.sort((a, b) => b.importance - a.importance);
|
|
72
|
-
const keeper = dupes[0];
|
|
73
|
-
// Strengthen the keeper (repeated = more important)
|
|
74
|
-
const strengthBoost = Math.min(dupes.length * 0.05, 0.3);
|
|
75
|
-
memoryStore.update(keeper.id, {
|
|
76
|
-
importance: Math.min(keeper.importance + strengthBoost, 1.0),
|
|
77
|
-
accessCount: keeper.accessCount + dupes.length - 1,
|
|
78
|
-
});
|
|
79
|
-
// Deactivate the rest
|
|
80
|
-
for (let i = 1; i < dupes.length; i++) {
|
|
81
|
-
memoryStore.deactivate(dupes[i].id, keeper.id);
|
|
82
|
-
cleaned++;
|
|
83
|
-
}
|
|
47
|
+
else {
|
|
48
|
+
intentMap.set(key, [m]);
|
|
84
49
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
50
|
+
}
|
|
51
|
+
// Merge duplicates — keep highest importance, boost it
|
|
52
|
+
for (const [, dupes] of intentMap) {
|
|
53
|
+
if (dupes.length <= 1)
|
|
54
|
+
continue;
|
|
55
|
+
// Sort by importance desc, keep the first
|
|
56
|
+
dupes.sort((a, b) => b.importance - a.importance);
|
|
57
|
+
const keeper = dupes[0];
|
|
58
|
+
// Strengthen the keeper (repeated = more important)
|
|
59
|
+
const strengthBoost = Math.min(dupes.length * 0.05, 0.3);
|
|
60
|
+
memoryStore.update(keeper.id, {
|
|
61
|
+
importance: Math.min(keeper.importance + strengthBoost, 1.0),
|
|
62
|
+
accessCount: keeper.accessCount + dupes.length - 1,
|
|
63
|
+
});
|
|
64
|
+
// Deactivate the rest
|
|
65
|
+
for (let i = 1; i < dupes.length; i++) {
|
|
66
|
+
memoryStore.deactivate(dupes[i].id, keeper.id);
|
|
67
|
+
cleaned++;
|
|
98
68
|
}
|
|
99
|
-
}
|
|
69
|
+
}
|
|
100
70
|
if (cleaned > 0) {
|
|
101
71
|
console.log(` 🧹 Decay: cleaned ${cleaned} stale/duplicate memories`);
|
|
102
72
|
(0, memory_cache_1.invalidateCache)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-decay.js","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":";;AAYA,
|
|
1
|
+
{"version":3,"file":"memory-decay.js","sourceRoot":"","sources":["../../src/memory/memory-decay.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { MemoryType } from '../types';
|
|
|
10
10
|
* Check if a memory is worth storing.
|
|
11
11
|
* Returns null if good, or a rejection reason if bad.
|
|
12
12
|
*/
|
|
13
|
-
export declare function qualityCheck(intent: string,
|
|
13
|
+
export declare function qualityCheck(intent: string, type: string): string | null;
|
|
14
14
|
/**
|
|
15
15
|
* Check if a new memory contradicts existing ones.
|
|
16
16
|
* Returns the contradicting memory if found.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-quality.d.ts","sourceRoot":"","sources":["../../src/memory/memory-quality.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-quality.d.ts","sourceRoot":"","sources":["../../src/memory/memory-quality.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAetC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8ExE;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GACpB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA4E5E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC5B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE;IACJ,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,GACF,GAAG,GAAG,IAAI,CAqCZ"}
|