@timmeck/brain-core 2.36.85 → 2.36.86
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/dist/dream/consolidator.d.ts +7 -1
- package/dist/dream/consolidator.js +81 -0
- package/dist/dream/consolidator.js.map +1 -1
- package/dist/dream/dream-engine.js +24 -3
- package/dist/dream/dream-engine.js.map +1 -1
- package/dist/dream/index.d.ts +1 -1
- package/dist/dream/types.d.ts +6 -0
- package/dist/experiments/experiment-ledger.d.ts +85 -0
- package/dist/experiments/experiment-ledger.js +195 -0
- package/dist/experiments/experiment-ledger.js.map +1 -0
- package/dist/experiments/index.d.ts +2 -0
- package/dist/experiments/index.js +2 -0
- package/dist/experiments/index.js.map +1 -0
- package/dist/hypothesis/engine.d.ts +8 -2
- package/dist/hypothesis/engine.js +21 -1
- package/dist/hypothesis/engine.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/conversation-memory.d.ts +27 -0
- package/dist/memory/conversation-memory.js +235 -7
- package/dist/memory/conversation-memory.js.map +1 -1
- package/dist/memory/retrieval-maintenance.d.ts +57 -0
- package/dist/memory/retrieval-maintenance.js +201 -0
- package/dist/memory/retrieval-maintenance.js.map +1 -0
- package/dist/memory/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// ── Retrieval Maintenance Engine ──────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Offline maintenance for memory retrieval quality.
|
|
4
|
+
// Runs periodically (every 2h) to:
|
|
5
|
+
// 1. Mark cold memories as archive candidates
|
|
6
|
+
// 2. Build pre-computed candidate sets for fast typed retrieval
|
|
7
|
+
//
|
|
8
|
+
// Design principle (ChatGPT): "Retrieval online einfach halten, Struktur offline pflegen."
|
|
9
|
+
import { getLogger } from '../utils/logger.js';
|
|
10
|
+
// ── Intent Definitions ────────────────────────────────────
|
|
11
|
+
const INTENT_DEFINITIONS = {
|
|
12
|
+
decision_lookup: { categories: ['decision'], minImportance: 3 },
|
|
13
|
+
project_context: { categories: ['context', 'fact'], minImportance: 3 },
|
|
14
|
+
user_preference_lookup: { categories: ['preference', 'constraint'], minImportance: 2 },
|
|
15
|
+
open_problem_lookup: { categories: ['open_question', 'goal'], minImportance: 2 },
|
|
16
|
+
};
|
|
17
|
+
// ── Engine ────────────────────────────────────────────────
|
|
18
|
+
export class RetrievalMaintenanceEngine {
|
|
19
|
+
db;
|
|
20
|
+
config;
|
|
21
|
+
log = getLogger();
|
|
22
|
+
timer = null;
|
|
23
|
+
totalRuns = 0;
|
|
24
|
+
lastRunAt = null;
|
|
25
|
+
constructor(db, config = {}) {
|
|
26
|
+
this.db = db;
|
|
27
|
+
this.config = {
|
|
28
|
+
coldThresholdDays: config.coldThresholdDays ?? 30,
|
|
29
|
+
minImportanceForProtection: config.minImportanceForProtection ?? 4,
|
|
30
|
+
candidateSetSize: config.candidateSetSize ?? 50,
|
|
31
|
+
};
|
|
32
|
+
this.ensureTable();
|
|
33
|
+
}
|
|
34
|
+
/** Start periodic maintenance (default: every 2h). */
|
|
35
|
+
start(intervalMs = 2 * 60 * 60 * 1000) {
|
|
36
|
+
if (this.timer)
|
|
37
|
+
return;
|
|
38
|
+
this.timer = setInterval(() => {
|
|
39
|
+
try {
|
|
40
|
+
this.runMaintenance();
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
this.log.debug(`[retrieval-maintenance] Cycle error: ${err.message}`);
|
|
44
|
+
}
|
|
45
|
+
}, intervalMs);
|
|
46
|
+
this.log.info(`[retrieval-maintenance] Started (interval: ${Math.round(intervalMs / 3600000)}h)`);
|
|
47
|
+
}
|
|
48
|
+
/** Stop periodic maintenance. */
|
|
49
|
+
stop() {
|
|
50
|
+
if (this.timer) {
|
|
51
|
+
clearInterval(this.timer);
|
|
52
|
+
this.timer = null;
|
|
53
|
+
this.log.info('[retrieval-maintenance] Stopped');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Main cycle — call periodically (every 2h). */
|
|
57
|
+
runMaintenance() {
|
|
58
|
+
const start = Date.now();
|
|
59
|
+
const archiveCandidatesMarked = this.markArchiveCandidates();
|
|
60
|
+
const candidateReport = this.refreshCandidateSets();
|
|
61
|
+
this.totalRuns++;
|
|
62
|
+
this.lastRunAt = new Date().toISOString();
|
|
63
|
+
const durationMs = Date.now() - start;
|
|
64
|
+
this.log.info(`[retrieval-maintenance] Run #${this.totalRuns}: ${archiveCandidatesMarked} archive candidates, ${candidateReport.setsCreated} sets refreshed (${durationMs}ms)`);
|
|
65
|
+
return {
|
|
66
|
+
archiveCandidatesMarked,
|
|
67
|
+
candidateSetsRefreshed: candidateReport.setsCreated,
|
|
68
|
+
durationMs,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Cold Memory Detection.
|
|
73
|
+
* Mark as archive_candidate = 1 when:
|
|
74
|
+
* - created_at > coldThresholdDays AND
|
|
75
|
+
* - access_count = 0 AND use_count = 0 AND
|
|
76
|
+
* - importance < minImportanceForProtection
|
|
77
|
+
*
|
|
78
|
+
* Safety: No automatic deletion, only marking.
|
|
79
|
+
*/
|
|
80
|
+
markArchiveCandidates() {
|
|
81
|
+
try {
|
|
82
|
+
// Reset existing candidates that no longer qualify (accessed since last run)
|
|
83
|
+
this.db.prepare(`
|
|
84
|
+
UPDATE conversation_memories SET archive_candidate = 0
|
|
85
|
+
WHERE archive_candidate = 1 AND (access_count > 0 OR use_count > 0 OR importance >= ?)
|
|
86
|
+
`).run(this.config.minImportanceForProtection);
|
|
87
|
+
// Mark new cold memories
|
|
88
|
+
const result = this.db.prepare(`
|
|
89
|
+
UPDATE conversation_memories SET archive_candidate = 1
|
|
90
|
+
WHERE active = 1
|
|
91
|
+
AND archive_candidate = 0
|
|
92
|
+
AND created_at < datetime('now', '-' || ? || ' days')
|
|
93
|
+
AND access_count = 0
|
|
94
|
+
AND use_count = 0
|
|
95
|
+
AND importance < ?
|
|
96
|
+
`).run(this.config.coldThresholdDays, this.config.minImportanceForProtection);
|
|
97
|
+
return result.changes;
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
this.log.debug(`[retrieval-maintenance] markArchiveCandidates error: ${err.message}`);
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Refresh pre-computed candidate sets for typed retrieval. */
|
|
105
|
+
refreshCandidateSets() {
|
|
106
|
+
let setsCreated = 0;
|
|
107
|
+
let totalMemories = 0;
|
|
108
|
+
// Per-category sets
|
|
109
|
+
const categories = ['preference', 'decision', 'context', 'fact', 'goal', 'lesson', 'constraint', 'open_question'];
|
|
110
|
+
for (const cat of categories) {
|
|
111
|
+
const count = this.buildCandidateSet('category', cat, [cat]);
|
|
112
|
+
if (count > 0) {
|
|
113
|
+
setsCreated++;
|
|
114
|
+
totalMemories += count;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Per-intent sets
|
|
118
|
+
for (const [intent, def] of Object.entries(INTENT_DEFINITIONS)) {
|
|
119
|
+
const count = this.buildCandidateSet('intent', intent, def.categories, def.minImportance);
|
|
120
|
+
if (count > 0) {
|
|
121
|
+
setsCreated++;
|
|
122
|
+
totalMemories += count;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return { setsCreated, totalMemories };
|
|
126
|
+
}
|
|
127
|
+
/** Get current status. */
|
|
128
|
+
getStatus() {
|
|
129
|
+
let totalArchiveCandidates = 0;
|
|
130
|
+
let candidateSets = 0;
|
|
131
|
+
try {
|
|
132
|
+
const archiveRow = this.db.prepare('SELECT COUNT(*) as cnt FROM conversation_memories WHERE archive_candidate = 1').get();
|
|
133
|
+
totalArchiveCandidates = archiveRow?.cnt ?? 0;
|
|
134
|
+
}
|
|
135
|
+
catch { /* table may not have column yet */ }
|
|
136
|
+
try {
|
|
137
|
+
const setsRow = this.db.prepare('SELECT COUNT(*) as cnt FROM retrieval_candidate_sets').get();
|
|
138
|
+
candidateSets = setsRow?.cnt ?? 0;
|
|
139
|
+
}
|
|
140
|
+
catch { /* table may not exist */ }
|
|
141
|
+
return {
|
|
142
|
+
lastRunAt: this.lastRunAt,
|
|
143
|
+
totalRuns: this.totalRuns,
|
|
144
|
+
totalArchiveCandidates,
|
|
145
|
+
candidateSets,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/** Get a candidate set by type and key. Returns memory IDs. */
|
|
149
|
+
getCandidateSet(setType, setKey) {
|
|
150
|
+
try {
|
|
151
|
+
const row = this.db.prepare('SELECT memory_ids FROM retrieval_candidate_sets WHERE set_type = ? AND set_key = ?').get(setType, setKey);
|
|
152
|
+
if (!row)
|
|
153
|
+
return [];
|
|
154
|
+
return JSON.parse(row.memory_ids);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// ── Private ─────────────────────────────────────────────
|
|
161
|
+
ensureTable() {
|
|
162
|
+
this.db.exec(`
|
|
163
|
+
CREATE TABLE IF NOT EXISTS retrieval_candidate_sets (
|
|
164
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
165
|
+
set_type TEXT NOT NULL,
|
|
166
|
+
set_key TEXT NOT NULL,
|
|
167
|
+
memory_ids TEXT NOT NULL DEFAULT '[]',
|
|
168
|
+
set_size INTEGER NOT NULL DEFAULT 0,
|
|
169
|
+
refreshed_at TEXT DEFAULT (datetime('now')),
|
|
170
|
+
UNIQUE(set_type, set_key)
|
|
171
|
+
);
|
|
172
|
+
`);
|
|
173
|
+
}
|
|
174
|
+
buildCandidateSet(setType, setKey, categories, minImportance = 1) {
|
|
175
|
+
try {
|
|
176
|
+
const placeholders = categories.map(() => '?').join(',');
|
|
177
|
+
const rows = this.db.prepare(`
|
|
178
|
+
SELECT id FROM conversation_memories
|
|
179
|
+
WHERE active = 1
|
|
180
|
+
AND archive_candidate = 0
|
|
181
|
+
AND category IN (${placeholders})
|
|
182
|
+
AND importance >= ?
|
|
183
|
+
ORDER BY importance DESC, use_count DESC, access_count DESC
|
|
184
|
+
LIMIT ?
|
|
185
|
+
`).all(...categories, minImportance, this.config.candidateSetSize);
|
|
186
|
+
const ids = rows.map(r => r.id);
|
|
187
|
+
this.db.prepare(`
|
|
188
|
+
INSERT INTO retrieval_candidate_sets (set_type, set_key, memory_ids, set_size, refreshed_at)
|
|
189
|
+
VALUES (?, ?, ?, ?, datetime('now'))
|
|
190
|
+
ON CONFLICT(set_type, set_key)
|
|
191
|
+
DO UPDATE SET memory_ids = excluded.memory_ids, set_size = excluded.set_size, refreshed_at = datetime('now')
|
|
192
|
+
`).run(setType, setKey, JSON.stringify(ids), ids.length);
|
|
193
|
+
return ids.length;
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
this.log.debug(`[retrieval-maintenance] buildCandidateSet error for ${setType}/${setKey}: ${err.message}`);
|
|
197
|
+
return 0;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=retrieval-maintenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-maintenance.js","sourceRoot":"","sources":["../../src/memory/retrieval-maintenance.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type MemoryCategory = 'preference' | 'decision' | 'context' | 'fact' | 'goal' | 'lesson';
|
|
1
|
+
export type MemoryCategory = 'preference' | 'decision' | 'context' | 'fact' | 'goal' | 'lesson' | 'constraint' | 'open_question';
|
|
2
2
|
export type MemorySource = 'explicit' | 'inferred' | 'hook';
|
|
3
3
|
export type SessionOutcome = 'completed' | 'paused' | 'abandoned';
|
|
4
4
|
export interface MemoryRecord {
|
package/package.json
CHANGED