claude-cortex 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +291 -0
- package/dist/api/events.d.ts +134 -0
- package/dist/api/events.d.ts.map +1 -0
- package/dist/api/events.js +73 -0
- package/dist/api/events.js.map +1 -0
- package/dist/api/visualization-server.d.ts +11 -0
- package/dist/api/visualization-server.d.ts.map +1 -0
- package/dist/api/visualization-server.js +653 -0
- package/dist/api/visualization-server.js.map +1 -0
- package/dist/context/project-context.d.ts +57 -0
- package/dist/context/project-context.d.ts.map +1 -0
- package/dist/context/project-context.js +135 -0
- package/dist/context/project-context.js.map +1 -0
- package/dist/database/init.d.ts +49 -0
- package/dist/database/init.d.ts.map +1 -0
- package/dist/database/init.js +336 -0
- package/dist/database/init.js.map +1 -0
- package/dist/embeddings/generator.d.ts +20 -0
- package/dist/embeddings/generator.d.ts.map +1 -0
- package/dist/embeddings/generator.js +77 -0
- package/dist/embeddings/generator.js.map +1 -0
- package/dist/embeddings/index.d.ts +2 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +2 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/errors.d.ts +74 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +131 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/activation.d.ts +69 -0
- package/dist/memory/activation.d.ts.map +1 -0
- package/dist/memory/activation.js +168 -0
- package/dist/memory/activation.js.map +1 -0
- package/dist/memory/consolidate.d.ts +96 -0
- package/dist/memory/consolidate.d.ts.map +1 -0
- package/dist/memory/consolidate.js +400 -0
- package/dist/memory/consolidate.js.map +1 -0
- package/dist/memory/contradiction.d.ts +69 -0
- package/dist/memory/contradiction.d.ts.map +1 -0
- package/dist/memory/contradiction.js +286 -0
- package/dist/memory/contradiction.js.map +1 -0
- package/dist/memory/decay.d.ts +62 -0
- package/dist/memory/decay.d.ts.map +1 -0
- package/dist/memory/decay.js +184 -0
- package/dist/memory/decay.js.map +1 -0
- package/dist/memory/salience.d.ts +36 -0
- package/dist/memory/salience.d.ts.map +1 -0
- package/dist/memory/salience.js +200 -0
- package/dist/memory/salience.js.map +1 -0
- package/dist/memory/similarity.d.ts +57 -0
- package/dist/memory/similarity.d.ts.map +1 -0
- package/dist/memory/similarity.js +114 -0
- package/dist/memory/similarity.js.map +1 -0
- package/dist/memory/store.d.ts +170 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +973 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/types.d.ts +91 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +30 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +466 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/context.d.ts +135 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +273 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/forget.d.ts +53 -0
- package/dist/tools/forget.d.ts.map +1 -0
- package/dist/tools/forget.js +179 -0
- package/dist/tools/forget.js.map +1 -0
- package/dist/tools/recall.d.ts +74 -0
- package/dist/tools/recall.d.ts.map +1 -0
- package/dist/tools/recall.js +140 -0
- package/dist/tools/recall.js.map +1 -0
- package/dist/tools/remember.d.ts +65 -0
- package/dist/tools/remember.d.ts.map +1 -0
- package/dist/tools/remember.js +147 -0
- package/dist/tools/remember.js.map +1 -0
- package/dist/worker/brain-worker.d.ts +100 -0
- package/dist/worker/brain-worker.d.ts.map +1 -0
- package/dist/worker/brain-worker.js +261 -0
- package/dist/worker/brain-worker.js.map +1 -0
- package/dist/worker/link-discovery.d.ts +47 -0
- package/dist/worker/link-discovery.d.ts.map +1 -0
- package/dist/worker/link-discovery.js +103 -0
- package/dist/worker/link-discovery.js.map +1 -0
- package/dist/worker/predictive-consolidation.d.ts +46 -0
- package/dist/worker/predictive-consolidation.d.ts.map +1 -0
- package/dist/worker/predictive-consolidation.js +110 -0
- package/dist/worker/predictive-consolidation.js.map +1 -0
- package/dist/worker/types.d.ts +91 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +22 -0
- package/dist/worker/types.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/memory/consolidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contradiction Detection System
|
|
3
|
+
*
|
|
4
|
+
* Detects potentially contradictory memories based on:
|
|
5
|
+
* - Opposite statements about the same topic
|
|
6
|
+
* - Different solutions to the same problem
|
|
7
|
+
* - Conflicting preferences or decisions
|
|
8
|
+
*
|
|
9
|
+
* Phase 3 Organic Brain Feature
|
|
10
|
+
*/
|
|
11
|
+
import { Memory } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Result of checking two memories for contradiction
|
|
14
|
+
*/
|
|
15
|
+
export interface ContradictionResult {
|
|
16
|
+
memoryA: Memory;
|
|
17
|
+
memoryB: Memory;
|
|
18
|
+
score: number;
|
|
19
|
+
reason: string;
|
|
20
|
+
sharedTopics: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if two memories might contradict each other
|
|
24
|
+
*
|
|
25
|
+
* @param memoryA - First memory to compare
|
|
26
|
+
* @param memoryB - Second memory to compare
|
|
27
|
+
* @returns ContradictionResult if contradiction detected, null otherwise
|
|
28
|
+
*/
|
|
29
|
+
export declare function checkContradiction(memoryA: Memory, memoryB: Memory): ContradictionResult | null;
|
|
30
|
+
/**
|
|
31
|
+
* Options for detecting contradictions
|
|
32
|
+
*/
|
|
33
|
+
export interface DetectContradictionsOptions {
|
|
34
|
+
project?: string;
|
|
35
|
+
category?: string;
|
|
36
|
+
minScore?: number;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Detect contradictions across all memories matching the filter
|
|
41
|
+
*
|
|
42
|
+
* @param options - Filtering and limit options
|
|
43
|
+
* @returns Array of ContradictionResults sorted by score
|
|
44
|
+
*/
|
|
45
|
+
export declare function detectContradictions(options?: DetectContradictionsOptions): ContradictionResult[];
|
|
46
|
+
/**
|
|
47
|
+
* Create 'contradicts' links between memories
|
|
48
|
+
* Called during consolidation to persist detected contradictions
|
|
49
|
+
*
|
|
50
|
+
* @param contradictions - Array of detected contradictions
|
|
51
|
+
* @returns Number of links created
|
|
52
|
+
*/
|
|
53
|
+
export declare function linkContradictions(contradictions: ContradictionResult[]): number;
|
|
54
|
+
/**
|
|
55
|
+
* Get all contradictions for a specific memory
|
|
56
|
+
*
|
|
57
|
+
* @param memoryId - ID of the memory to check
|
|
58
|
+
* @returns Array of ContradictionResults
|
|
59
|
+
*/
|
|
60
|
+
export declare function getContradictionsFor(memoryId: number): ContradictionResult[];
|
|
61
|
+
/**
|
|
62
|
+
* Check if a contradiction link already exists between two memories
|
|
63
|
+
*
|
|
64
|
+
* @param memoryAId - First memory ID
|
|
65
|
+
* @param memoryBId - Second memory ID
|
|
66
|
+
* @returns True if a contradiction link exists
|
|
67
|
+
*/
|
|
68
|
+
export declare function hasContradictionLink(memoryAId: number, memoryBId: number): boolean;
|
|
69
|
+
//# sourceMappingURL=contradiction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contradiction.d.ts","sourceRoot":"","sources":["../../src/memory/contradiction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAuDpC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAgFD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,mBAAmB,GAAG,IAAI,CA8D5B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,mBAAmB,EAAE,CAwCvB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAchF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAoB5E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAUlF"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contradiction Detection System
|
|
3
|
+
*
|
|
4
|
+
* Detects potentially contradictory memories based on:
|
|
5
|
+
* - Opposite statements about the same topic
|
|
6
|
+
* - Different solutions to the same problem
|
|
7
|
+
* - Conflicting preferences or decisions
|
|
8
|
+
*
|
|
9
|
+
* Phase 3 Organic Brain Feature
|
|
10
|
+
*/
|
|
11
|
+
import { getDatabase } from '../database/init.js';
|
|
12
|
+
import { rowToMemory, createMemoryLink, getRelatedMemories } from './store.js';
|
|
13
|
+
import { jaccardSimilarity, extractKeyPhrases } from './similarity.js';
|
|
14
|
+
/**
|
|
15
|
+
* Contradiction pattern pairs
|
|
16
|
+
* If memory A matches pattern[0] and memory B matches pattern[1], they may contradict
|
|
17
|
+
*/
|
|
18
|
+
const CONTRADICTION_PATTERNS = [
|
|
19
|
+
{
|
|
20
|
+
patterns: [/\b(?:don'?t|never|avoid)\s+use\b/i, /\buse\b/i],
|
|
21
|
+
description: 'Conflicting usage recommendation',
|
|
22
|
+
weight: 0.8,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
patterns: [/\b(?:don'?t|never|avoid)\b/i, /\b(?:always|should|must)\b/i],
|
|
26
|
+
description: 'Conflicting advice',
|
|
27
|
+
weight: 0.6,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
patterns: [/\bfixed\s+by\s+/i, /\bfixed\s+by\s+/i],
|
|
31
|
+
description: 'Different fixes for same issue',
|
|
32
|
+
weight: 0.7,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
patterns: [/\bdecided\s+to\s+/i, /\bdecided\s+to\s+/i],
|
|
36
|
+
description: 'Different decisions on same topic',
|
|
37
|
+
weight: 0.5,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
patterns: [/\busing\s+(\w+)/i, /\bnot\s+using\s+(\w+)/i],
|
|
41
|
+
description: 'Conflicting usage statement',
|
|
42
|
+
weight: 0.8,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
patterns: [/\b(?:deprecated|removed|dropped)\b/i, /\b(?:added|introduced|using)\b/i],
|
|
46
|
+
description: 'Conflicting status',
|
|
47
|
+
weight: 0.6,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
patterns: [/\bprefer\s+(\w+)/i, /\bavoid\s+(\w+)/i],
|
|
51
|
+
description: 'Conflicting preference',
|
|
52
|
+
weight: 0.7,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
patterns: [/\b(?:works?|working)\b/i, /\b(?:broken|doesn'?t\s+work|failed)\b/i],
|
|
56
|
+
description: 'Conflicting status report',
|
|
57
|
+
weight: 0.6,
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
/**
|
|
61
|
+
* Calculate topic similarity between two memories
|
|
62
|
+
* Based on tags, category, project, and key phrases
|
|
63
|
+
*
|
|
64
|
+
* @param memoryA - First memory
|
|
65
|
+
* @param memoryB - Second memory
|
|
66
|
+
* @returns Similarity score 0-1
|
|
67
|
+
*/
|
|
68
|
+
function calculateTopicSimilarity(memoryA, memoryB) {
|
|
69
|
+
let score = 0;
|
|
70
|
+
// Same project (+0.3)
|
|
71
|
+
if (memoryA.project && memoryA.project === memoryB.project) {
|
|
72
|
+
score += 0.3;
|
|
73
|
+
}
|
|
74
|
+
// Same category (+0.2)
|
|
75
|
+
if (memoryA.category === memoryB.category) {
|
|
76
|
+
score += 0.2;
|
|
77
|
+
}
|
|
78
|
+
// Shared tags (Jaccard on tags, up to +0.3)
|
|
79
|
+
const tagsA = new Set(memoryA.tags);
|
|
80
|
+
const tagsB = new Set(memoryB.tags);
|
|
81
|
+
if (tagsA.size > 0 || tagsB.size > 0) {
|
|
82
|
+
let tagIntersection = 0;
|
|
83
|
+
for (const tag of tagsA) {
|
|
84
|
+
if (tagsB.has(tag))
|
|
85
|
+
tagIntersection++;
|
|
86
|
+
}
|
|
87
|
+
const tagUnion = tagsA.size + tagsB.size - tagIntersection;
|
|
88
|
+
if (tagUnion > 0) {
|
|
89
|
+
score += (tagIntersection / tagUnion) * 0.3;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Title similarity (+0.2)
|
|
93
|
+
const titleSim = jaccardSimilarity(memoryA.title, memoryB.title);
|
|
94
|
+
score += titleSim * 0.2;
|
|
95
|
+
return Math.min(1.0, score);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Find shared topics between two memories
|
|
99
|
+
*
|
|
100
|
+
* @param memoryA - First memory
|
|
101
|
+
* @param memoryB - Second memory
|
|
102
|
+
* @returns Array of shared topic strings
|
|
103
|
+
*/
|
|
104
|
+
function findSharedTopics(memoryA, memoryB) {
|
|
105
|
+
const topics = [];
|
|
106
|
+
// Shared tags
|
|
107
|
+
const tagsA = new Set(memoryA.tags);
|
|
108
|
+
for (const tag of memoryB.tags) {
|
|
109
|
+
if (tagsA.has(tag))
|
|
110
|
+
topics.push(`tag:${tag}`);
|
|
111
|
+
}
|
|
112
|
+
// Shared key phrases
|
|
113
|
+
const textA = `${memoryA.title} ${memoryA.content}`;
|
|
114
|
+
const textB = `${memoryB.title} ${memoryB.content}`;
|
|
115
|
+
const phrasesA = new Set(extractKeyPhrases(textA));
|
|
116
|
+
const phrasesB = extractKeyPhrases(textB);
|
|
117
|
+
for (const phrase of phrasesB) {
|
|
118
|
+
if (phrasesA.has(phrase) && phrase.length > 3) {
|
|
119
|
+
topics.push(phrase);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Same project
|
|
123
|
+
if (memoryA.project && memoryA.project === memoryB.project) {
|
|
124
|
+
topics.push(`project:${memoryA.project}`);
|
|
125
|
+
}
|
|
126
|
+
return [...new Set(topics)].slice(0, 5);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if two memories might contradict each other
|
|
130
|
+
*
|
|
131
|
+
* @param memoryA - First memory to compare
|
|
132
|
+
* @param memoryB - Second memory to compare
|
|
133
|
+
* @returns ContradictionResult if contradiction detected, null otherwise
|
|
134
|
+
*/
|
|
135
|
+
export function checkContradiction(memoryA, memoryB) {
|
|
136
|
+
// Same memory can't contradict itself
|
|
137
|
+
if (memoryA.id === memoryB.id)
|
|
138
|
+
return null;
|
|
139
|
+
// Must share some topic/context to contradict
|
|
140
|
+
const topicSimilarity = calculateTopicSimilarity(memoryA, memoryB);
|
|
141
|
+
if (topicSimilarity < 0.2)
|
|
142
|
+
return null;
|
|
143
|
+
// Check for contradiction patterns
|
|
144
|
+
const textA = `${memoryA.title} ${memoryA.content}`;
|
|
145
|
+
const textB = `${memoryB.title} ${memoryB.content}`;
|
|
146
|
+
let maxScore = 0;
|
|
147
|
+
let matchedReason = '';
|
|
148
|
+
for (const { patterns, description, weight } of CONTRADICTION_PATTERNS) {
|
|
149
|
+
const [patternA, patternB] = patterns;
|
|
150
|
+
// Check both directions
|
|
151
|
+
const aMatchesFirst = patternA.test(textA);
|
|
152
|
+
const bMatchesSecond = patternB.test(textB);
|
|
153
|
+
const aMatchesSecond = patternB.test(textA);
|
|
154
|
+
const bMatchesFirst = patternA.test(textB);
|
|
155
|
+
if ((aMatchesFirst && bMatchesSecond) || (aMatchesSecond && bMatchesFirst)) {
|
|
156
|
+
// For "different fixes" and "different decisions", we need to check
|
|
157
|
+
// that they're actually different, not the same
|
|
158
|
+
if (description.includes('Different')) {
|
|
159
|
+
// Extract the captured content and compare
|
|
160
|
+
const matchA = textA.match(patternA);
|
|
161
|
+
const matchB = textB.match(patternB);
|
|
162
|
+
if (matchA && matchB) {
|
|
163
|
+
const contentA = matchA[0].toLowerCase();
|
|
164
|
+
const contentB = matchB[0].toLowerCase();
|
|
165
|
+
// If the content is too similar, it's not a contradiction
|
|
166
|
+
if (jaccardSimilarity(contentA, contentB) > 0.8) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const score = weight * topicSimilarity;
|
|
172
|
+
if (score > maxScore) {
|
|
173
|
+
maxScore = score;
|
|
174
|
+
matchedReason = description;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Minimum score threshold
|
|
179
|
+
if (maxScore < 0.3)
|
|
180
|
+
return null;
|
|
181
|
+
// Find shared topics for context
|
|
182
|
+
const sharedTopics = findSharedTopics(memoryA, memoryB);
|
|
183
|
+
return {
|
|
184
|
+
memoryA,
|
|
185
|
+
memoryB,
|
|
186
|
+
score: maxScore,
|
|
187
|
+
reason: matchedReason,
|
|
188
|
+
sharedTopics,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Detect contradictions across all memories matching the filter
|
|
193
|
+
*
|
|
194
|
+
* @param options - Filtering and limit options
|
|
195
|
+
* @returns Array of ContradictionResults sorted by score
|
|
196
|
+
*/
|
|
197
|
+
export function detectContradictions(options = {}) {
|
|
198
|
+
const { project, category, minScore = 0.4, limit = 20 } = options;
|
|
199
|
+
const db = getDatabase();
|
|
200
|
+
// Build query
|
|
201
|
+
let sql = 'SELECT * FROM memories WHERE 1=1';
|
|
202
|
+
const params = [];
|
|
203
|
+
if (project) {
|
|
204
|
+
sql += ' AND project = ?';
|
|
205
|
+
params.push(project);
|
|
206
|
+
}
|
|
207
|
+
if (category) {
|
|
208
|
+
sql += ' AND category = ?';
|
|
209
|
+
params.push(category);
|
|
210
|
+
}
|
|
211
|
+
// Order by salience to prioritize important memories
|
|
212
|
+
sql += ' ORDER BY salience DESC, last_accessed DESC LIMIT 200';
|
|
213
|
+
const rows = db.prepare(sql).all(...params);
|
|
214
|
+
const memories = rows.map(rowToMemory);
|
|
215
|
+
const contradictions = [];
|
|
216
|
+
// Compare pairs (O(n^2) but limited to 200 memories max)
|
|
217
|
+
for (let i = 0; i < memories.length; i++) {
|
|
218
|
+
for (let j = i + 1; j < memories.length; j++) {
|
|
219
|
+
const result = checkContradiction(memories[i], memories[j]);
|
|
220
|
+
if (result && result.score >= minScore) {
|
|
221
|
+
contradictions.push(result);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Sort by score (highest first) and limit
|
|
226
|
+
return contradictions
|
|
227
|
+
.sort((a, b) => b.score - a.score)
|
|
228
|
+
.slice(0, limit);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Create 'contradicts' links between memories
|
|
232
|
+
* Called during consolidation to persist detected contradictions
|
|
233
|
+
*
|
|
234
|
+
* @param contradictions - Array of detected contradictions
|
|
235
|
+
* @returns Number of links created
|
|
236
|
+
*/
|
|
237
|
+
export function linkContradictions(contradictions) {
|
|
238
|
+
let linksCreated = 0;
|
|
239
|
+
for (const contradiction of contradictions) {
|
|
240
|
+
const link = createMemoryLink(contradiction.memoryA.id, contradiction.memoryB.id, 'contradicts', contradiction.score);
|
|
241
|
+
if (link)
|
|
242
|
+
linksCreated++;
|
|
243
|
+
}
|
|
244
|
+
return linksCreated;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get all contradictions for a specific memory
|
|
248
|
+
*
|
|
249
|
+
* @param memoryId - ID of the memory to check
|
|
250
|
+
* @returns Array of ContradictionResults
|
|
251
|
+
*/
|
|
252
|
+
export function getContradictionsFor(memoryId) {
|
|
253
|
+
const db = getDatabase();
|
|
254
|
+
// Get the source memory
|
|
255
|
+
const memoryRow = db.prepare('SELECT * FROM memories WHERE id = ?').get(memoryId);
|
|
256
|
+
if (!memoryRow)
|
|
257
|
+
return [];
|
|
258
|
+
const memory = rowToMemory(memoryRow);
|
|
259
|
+
// Get related memories with 'contradicts' relationship
|
|
260
|
+
const related = getRelatedMemories(memoryId);
|
|
261
|
+
const contradicting = related.filter(r => r.relationship === 'contradicts');
|
|
262
|
+
return contradicting.map(c => ({
|
|
263
|
+
memoryA: memory,
|
|
264
|
+
memoryB: c.memory,
|
|
265
|
+
score: c.strength,
|
|
266
|
+
reason: 'Previously detected contradiction',
|
|
267
|
+
sharedTopics: findSharedTopics(memory, c.memory),
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Check if a contradiction link already exists between two memories
|
|
272
|
+
*
|
|
273
|
+
* @param memoryAId - First memory ID
|
|
274
|
+
* @param memoryBId - Second memory ID
|
|
275
|
+
* @returns True if a contradiction link exists
|
|
276
|
+
*/
|
|
277
|
+
export function hasContradictionLink(memoryAId, memoryBId) {
|
|
278
|
+
const db = getDatabase();
|
|
279
|
+
const link = db.prepare(`
|
|
280
|
+
SELECT 1 FROM memory_links
|
|
281
|
+
WHERE relationship = 'contradicts'
|
|
282
|
+
AND ((source_id = ? AND target_id = ?) OR (source_id = ? AND target_id = ?))
|
|
283
|
+
`).get(memoryAId, memoryBId, memoryBId, memoryAId);
|
|
284
|
+
return !!link;
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=contradiction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contradiction.js","sourceRoot":"","sources":["../../src/memory/contradiction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temporal Decay System
|
|
3
|
+
*
|
|
4
|
+
* Implements memory decay similar to human forgetting curves.
|
|
5
|
+
* Memories fade over time but can be reinforced through access.
|
|
6
|
+
*/
|
|
7
|
+
import { Memory, MemoryConfig } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Calculate the current decayed score for a memory
|
|
10
|
+
* Uses exponential decay: score = base_score * (decay_rate ^ effective_hours)
|
|
11
|
+
*
|
|
12
|
+
* Memory types have different decay rates:
|
|
13
|
+
* - Short-term: hourly decay (fastest)
|
|
14
|
+
* - Episodic: 6-hour decay (medium)
|
|
15
|
+
* - Long-term: daily decay (slowest)
|
|
16
|
+
*
|
|
17
|
+
* Access count slows decay (multiplicative bonus, not additive)
|
|
18
|
+
*/
|
|
19
|
+
export declare function calculateDecayedScore(memory: Memory, config?: MemoryConfig): number;
|
|
20
|
+
/**
|
|
21
|
+
* Calculate reinforcement boost when memory is accessed
|
|
22
|
+
*/
|
|
23
|
+
export declare function calculateReinforcementBoost(memory: Memory, config?: MemoryConfig): number;
|
|
24
|
+
/**
|
|
25
|
+
* Determine if a memory should be promoted from short-term to long-term
|
|
26
|
+
* Based on access patterns and salience
|
|
27
|
+
*/
|
|
28
|
+
export declare function shouldPromoteToLongTerm(memory: Memory, config?: MemoryConfig): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Determine if an episodic memory should be promoted to long-term
|
|
31
|
+
* Episodic memories (session markers) promote if they're accessed frequently,
|
|
32
|
+
* indicating an important session that's being referenced
|
|
33
|
+
*/
|
|
34
|
+
export declare function shouldPromoteEpisodic(memory: Memory): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Determine if a memory should be deleted due to decay
|
|
37
|
+
* Uses category-specific thresholds - architecture/errors are harder to delete
|
|
38
|
+
*/
|
|
39
|
+
export declare function shouldDelete(memory: Memory, config?: MemoryConfig): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Get memories sorted by priority (salience + recency + access count)
|
|
42
|
+
*/
|
|
43
|
+
export declare function calculatePriority(memory: Memory): number;
|
|
44
|
+
/**
|
|
45
|
+
* Batch process memories for decay and cleanup
|
|
46
|
+
* Returns IDs of memories to delete and promote
|
|
47
|
+
*/
|
|
48
|
+
export declare function processDecay(memories: Memory[], config?: MemoryConfig): {
|
|
49
|
+
toDelete: number[];
|
|
50
|
+
toPromote: number[];
|
|
51
|
+
updated: Map<number, number>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Calculate optimal time for next consolidation
|
|
55
|
+
* Based on current memory state
|
|
56
|
+
*/
|
|
57
|
+
export declare function calculateNextConsolidationTime(memories: Memory[], config?: MemoryConfig): Date;
|
|
58
|
+
/**
|
|
59
|
+
* Human-readable time since last access
|
|
60
|
+
*/
|
|
61
|
+
export declare function formatTimeSinceAccess(memory: Memory): string;
|
|
62
|
+
//# sourceMappingURL=decay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decay.d.ts","sourceRoot":"","sources":["../../src/memory/decay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAuC,MAAM,YAAY,CAAC;AAEvF;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,YAA6B,GACpC,MAAM,CA2BR;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,YAA6B,GACpC,MAAM,CAYR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,YAA6B,GACpC,OAAO,CAcT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAW7D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,YAA6B,GACpC,OAAO,CAaT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoBxD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,GAAE,YAA6B,GACpC;IACD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAoBA;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,GAAE,YAA6B,GACpC,IAAI,CAaN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa5D"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temporal Decay System
|
|
3
|
+
*
|
|
4
|
+
* Implements memory decay similar to human forgetting curves.
|
|
5
|
+
* Memories fade over time but can be reinforced through access.
|
|
6
|
+
*/
|
|
7
|
+
import { DEFAULT_CONFIG, DELETION_THRESHOLDS } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Calculate the current decayed score for a memory
|
|
10
|
+
* Uses exponential decay: score = base_score * (decay_rate ^ effective_hours)
|
|
11
|
+
*
|
|
12
|
+
* Memory types have different decay rates:
|
|
13
|
+
* - Short-term: hourly decay (fastest)
|
|
14
|
+
* - Episodic: 6-hour decay (medium)
|
|
15
|
+
* - Long-term: daily decay (slowest)
|
|
16
|
+
*
|
|
17
|
+
* Access count slows decay (multiplicative bonus, not additive)
|
|
18
|
+
*/
|
|
19
|
+
export function calculateDecayedScore(memory, config = DEFAULT_CONFIG) {
|
|
20
|
+
const now = new Date();
|
|
21
|
+
const lastAccessed = new Date(memory.lastAccessed);
|
|
22
|
+
const hoursSinceAccess = (now.getTime() - lastAccessed.getTime()) / (1000 * 60 * 60);
|
|
23
|
+
// Determine effective decay period based on memory type
|
|
24
|
+
// This is applied FIRST, not as a replacement after calculation
|
|
25
|
+
let effectiveHours = hoursSinceAccess;
|
|
26
|
+
if (memory.type === 'long_term') {
|
|
27
|
+
effectiveHours = hoursSinceAccess / 24; // Daily decay instead of hourly
|
|
28
|
+
}
|
|
29
|
+
else if (memory.type === 'episodic') {
|
|
30
|
+
effectiveHours = hoursSinceAccess / 6; // 6-hour decay rate
|
|
31
|
+
}
|
|
32
|
+
// Apply access count bonus to SLOW decay (multiplicative, not additive)
|
|
33
|
+
// Frequently accessed memories decay slower - up to 30% slower
|
|
34
|
+
// This prevents score inflation beyond original salience
|
|
35
|
+
const accessSlowdown = 1 + Math.min(0.3, memory.accessCount * 0.02);
|
|
36
|
+
effectiveHours = effectiveHours / accessSlowdown;
|
|
37
|
+
// Calculate decay factor with type-adjusted and access-adjusted time
|
|
38
|
+
const decayFactor = Math.pow(config.decayRate, effectiveHours);
|
|
39
|
+
// Apply decay to salience - score can never exceed original salience
|
|
40
|
+
const score = memory.salience * decayFactor;
|
|
41
|
+
return Math.max(0, Math.min(1, score));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Calculate reinforcement boost when memory is accessed
|
|
45
|
+
*/
|
|
46
|
+
export function calculateReinforcementBoost(memory, config = DEFAULT_CONFIG) {
|
|
47
|
+
// Diminishing returns on reinforcement
|
|
48
|
+
const currentBoost = Math.min(0.5, (config.reinforcementFactor - 1) * Math.pow(0.9, memory.accessCount));
|
|
49
|
+
// New score after reinforcement
|
|
50
|
+
let newScore = memory.salience + currentBoost;
|
|
51
|
+
// Cap at 1.0
|
|
52
|
+
return Math.min(1.0, newScore);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Determine if a memory should be promoted from short-term to long-term
|
|
56
|
+
* Based on access patterns and salience
|
|
57
|
+
*/
|
|
58
|
+
export function shouldPromoteToLongTerm(memory, config = DEFAULT_CONFIG) {
|
|
59
|
+
if (memory.type !== 'short_term')
|
|
60
|
+
return false;
|
|
61
|
+
// Check if salience is above consolidation threshold
|
|
62
|
+
if (memory.salience < config.consolidationThreshold)
|
|
63
|
+
return false;
|
|
64
|
+
// Check if accessed multiple times (spaced repetition indicator)
|
|
65
|
+
if (memory.accessCount >= 3)
|
|
66
|
+
return true;
|
|
67
|
+
// Check if memory has survived for a while with good salience
|
|
68
|
+
const ageHours = (Date.now() - new Date(memory.createdAt).getTime()) / (1000 * 60 * 60);
|
|
69
|
+
if (ageHours >= config.autoConsolidateHours && memory.salience >= 0.7)
|
|
70
|
+
return true;
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Determine if an episodic memory should be promoted to long-term
|
|
75
|
+
* Episodic memories (session markers) promote if they're accessed frequently,
|
|
76
|
+
* indicating an important session that's being referenced
|
|
77
|
+
*/
|
|
78
|
+
export function shouldPromoteEpisodic(memory) {
|
|
79
|
+
if (memory.type !== 'episodic')
|
|
80
|
+
return false;
|
|
81
|
+
// Promote if accessed 5+ times (indicates important session marker)
|
|
82
|
+
if (memory.accessCount >= 5)
|
|
83
|
+
return true;
|
|
84
|
+
// Promote if high salience and relatively old
|
|
85
|
+
const ageHours = (Date.now() - new Date(memory.createdAt).getTime()) / (1000 * 60 * 60);
|
|
86
|
+
if (ageHours >= 24 && memory.salience >= 0.8)
|
|
87
|
+
return true;
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Determine if a memory should be deleted due to decay
|
|
92
|
+
* Uses category-specific thresholds - architecture/errors are harder to delete
|
|
93
|
+
*/
|
|
94
|
+
export function shouldDelete(memory, config = DEFAULT_CONFIG) {
|
|
95
|
+
const decayedScore = calculateDecayedScore(memory, config);
|
|
96
|
+
// Don't delete long-term memories easily
|
|
97
|
+
if (memory.type === 'long_term') {
|
|
98
|
+
return decayedScore < 0.1 && memory.accessCount < 2;
|
|
99
|
+
}
|
|
100
|
+
// Get category-specific threshold (defaults to config threshold if not found)
|
|
101
|
+
const categoryThreshold = DELETION_THRESHOLDS[memory.category] ?? config.salienceThreshold;
|
|
102
|
+
// Short-term and episodic memories use category-specific thresholds
|
|
103
|
+
return decayedScore < categoryThreshold;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get memories sorted by priority (salience + recency + access count)
|
|
107
|
+
*/
|
|
108
|
+
export function calculatePriority(memory) {
|
|
109
|
+
const decayedScore = calculateDecayedScore(memory);
|
|
110
|
+
// Weight factors
|
|
111
|
+
const salienceWeight = 0.4;
|
|
112
|
+
const recencyWeight = 0.3;
|
|
113
|
+
const accessWeight = 0.3;
|
|
114
|
+
// Calculate recency score (1.0 for recent, decreasing with age)
|
|
115
|
+
const ageHours = (Date.now() - new Date(memory.lastAccessed).getTime()) / (1000 * 60 * 60);
|
|
116
|
+
const recencyScore = Math.exp(-ageHours / 24); // Half-life of ~17 hours
|
|
117
|
+
// Calculate access score (capped at 1.0)
|
|
118
|
+
const accessScore = Math.min(1.0, memory.accessCount / 10);
|
|
119
|
+
return (decayedScore * salienceWeight +
|
|
120
|
+
recencyScore * recencyWeight +
|
|
121
|
+
accessScore * accessWeight);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Batch process memories for decay and cleanup
|
|
125
|
+
* Returns IDs of memories to delete and promote
|
|
126
|
+
*/
|
|
127
|
+
export function processDecay(memories, config = DEFAULT_CONFIG) {
|
|
128
|
+
const toDelete = [];
|
|
129
|
+
const toPromote = [];
|
|
130
|
+
const updated = new Map();
|
|
131
|
+
for (const memory of memories) {
|
|
132
|
+
const decayedScore = calculateDecayedScore(memory, config);
|
|
133
|
+
updated.set(memory.id, decayedScore);
|
|
134
|
+
if (shouldDelete(memory, config)) {
|
|
135
|
+
toDelete.push(memory.id);
|
|
136
|
+
}
|
|
137
|
+
else if (shouldPromoteToLongTerm(memory, config)) {
|
|
138
|
+
toPromote.push(memory.id);
|
|
139
|
+
}
|
|
140
|
+
else if (shouldPromoteEpisodic(memory)) {
|
|
141
|
+
// Also consider episodic memories for promotion
|
|
142
|
+
toPromote.push(memory.id);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return { toDelete, toPromote, updated };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Calculate optimal time for next consolidation
|
|
149
|
+
* Based on current memory state
|
|
150
|
+
*/
|
|
151
|
+
export function calculateNextConsolidationTime(memories, config = DEFAULT_CONFIG) {
|
|
152
|
+
const shortTermCount = memories.filter(m => m.type === 'short_term').length;
|
|
153
|
+
// If we have many short-term memories, consolidate sooner
|
|
154
|
+
if (shortTermCount > config.maxShortTermMemories * 0.8) {
|
|
155
|
+
return new Date(Date.now() + 30 * 60 * 1000); // 30 minutes
|
|
156
|
+
}
|
|
157
|
+
if (shortTermCount > config.maxShortTermMemories * 0.5) {
|
|
158
|
+
return new Date(Date.now() + 2 * 60 * 60 * 1000); // 2 hours
|
|
159
|
+
}
|
|
160
|
+
return new Date(Date.now() + config.autoConsolidateHours * 60 * 60 * 1000);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Human-readable time since last access
|
|
164
|
+
*/
|
|
165
|
+
export function formatTimeSinceAccess(memory) {
|
|
166
|
+
const hours = (Date.now() - new Date(memory.lastAccessed).getTime()) / (1000 * 60 * 60);
|
|
167
|
+
if (hours < 1)
|
|
168
|
+
return 'just now';
|
|
169
|
+
if (hours < 2)
|
|
170
|
+
return '1 hour ago';
|
|
171
|
+
if (hours < 24)
|
|
172
|
+
return `${Math.floor(hours)} hours ago`;
|
|
173
|
+
if (hours < 48)
|
|
174
|
+
return 'yesterday';
|
|
175
|
+
const days = Math.floor(hours / 24);
|
|
176
|
+
if (days < 7)
|
|
177
|
+
return `${days} days ago`;
|
|
178
|
+
const weeks = Math.floor(days / 7);
|
|
179
|
+
if (weeks < 4)
|
|
180
|
+
return `${weeks} week${weeks > 1 ? 's' : ''} ago`;
|
|
181
|
+
const months = Math.floor(days / 30);
|
|
182
|
+
return `${months} month${months > 1 ? 's' : ''} ago`;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=decay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decay.js","sourceRoot":"","sources":["../../src/memory/decay.ts"],"names":[],"mappings":"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"}
|