stellar-memory 0.8.4 → 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/dist/api/routes/memories.js +5 -4
- package/dist/api/routes/memories.js.map +1 -1
- package/dist/api/websocket.d.ts +0 -6
- package/dist/api/websocket.js +1 -1
- package/dist/api/websocket.js.map +1 -1
- package/dist/engine/analytics.js +4 -33
- package/dist/engine/analytics.js.map +1 -1
- package/dist/engine/conflict.js +2 -4
- package/dist/engine/conflict.js.map +1 -1
- package/dist/engine/consolidation.js +3 -21
- package/dist/engine/consolidation.js.map +1 -1
- package/dist/engine/constellation.js +6 -14
- package/dist/engine/constellation.js.map +1 -1
- package/dist/engine/corona.js +3 -1
- package/dist/engine/corona.js.map +1 -1
- package/dist/engine/embedding.js.map +1 -1
- package/dist/engine/multiproject.js +6 -73
- package/dist/engine/multiproject.js.map +1 -1
- package/dist/engine/observation.d.ts +1 -42
- package/dist/engine/observation.js +4 -23
- package/dist/engine/observation.js.map +1 -1
- package/dist/engine/orbit.js +50 -11
- package/dist/engine/orbit.js.map +1 -1
- package/dist/engine/planet.d.ts +3 -0
- package/dist/engine/planet.js +16 -11
- package/dist/engine/planet.js.map +1 -1
- package/dist/engine/procedural.d.ts +0 -13
- package/dist/engine/procedural.js +2 -47
- package/dist/engine/procedural.js.map +1 -1
- package/dist/engine/services/commit-service.d.ts +29 -0
- package/dist/engine/services/commit-service.js +35 -0
- package/dist/engine/services/commit-service.js.map +1 -0
- package/dist/engine/services/index.d.ts +4 -0
- package/dist/engine/services/index.js +4 -0
- package/dist/engine/services/index.js.map +1 -0
- package/dist/engine/services/memory-service.d.ts +48 -0
- package/dist/engine/services/memory-service.js +85 -0
- package/dist/engine/services/memory-service.js.map +1 -0
- package/dist/engine/services/recall-service.d.ts +31 -0
- package/dist/engine/services/recall-service.js +35 -0
- package/dist/engine/services/recall-service.js.map +1 -0
- package/dist/engine/sun.d.ts +9 -5
- package/dist/engine/sun.js +111 -12
- package/dist/engine/sun.js.map +1 -1
- package/dist/engine/temporal.js +8 -67
- package/dist/engine/temporal.js.map +1 -1
- package/dist/engine/types.d.ts +0 -15
- package/dist/engine/types.js +0 -7
- package/dist/engine/types.js.map +1 -1
- package/dist/mcp/server.js +88 -123
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/analytics-handlers.d.ts +20 -0
- package/dist/mcp/tools/analytics-handlers.js +292 -0
- package/dist/mcp/tools/analytics-handlers.js.map +1 -0
- package/dist/mcp/tools/graph-handlers.d.ts +20 -0
- package/dist/mcp/tools/graph-handlers.js +126 -0
- package/dist/mcp/tools/graph-handlers.js.map +1 -0
- package/dist/mcp/tools/memory-handlers.d.ts +27 -0
- package/dist/mcp/tools/memory-handlers.js +177 -0
- package/dist/mcp/tools/memory-handlers.js.map +1 -0
- package/dist/mcp/tools/memory-tools.d.ts +19 -117
- package/dist/mcp/tools/memory-tools.js +19 -1049
- package/dist/mcp/tools/memory-tools.js.map +1 -1
- package/dist/mcp/tools/observation-handlers.d.ts +15 -0
- package/dist/mcp/tools/observation-handlers.js +74 -0
- package/dist/mcp/tools/observation-handlers.js.map +1 -0
- package/dist/mcp/tools/shared.d.ts +36 -0
- package/dist/mcp/tools/shared.js +71 -0
- package/dist/mcp/tools/shared.js.map +1 -0
- package/dist/mcp/tools/sun-handler.d.ts +12 -0
- package/dist/mcp/tools/sun-handler.js +35 -0
- package/dist/mcp/tools/sun-handler.js.map +1 -0
- package/dist/mcp/tools/system-handlers.d.ts +27 -0
- package/dist/mcp/tools/system-handlers.js +259 -0
- package/dist/mcp/tools/system-handlers.js.map +1 -0
- package/dist/mcp/tools/temporal-handlers.d.ts +15 -0
- package/dist/mcp/tools/temporal-handlers.js +82 -0
- package/dist/mcp/tools/temporal-handlers.js.map +1 -0
- package/dist/scanner/local/filesystem.d.ts +0 -2
- package/dist/scanner/local/filesystem.js +1 -5
- package/dist/scanner/local/filesystem.js.map +1 -1
- package/dist/scanner/local/git.d.ts +0 -5
- package/dist/scanner/local/git.js +1 -1
- package/dist/scanner/local/git.js.map +1 -1
- package/dist/scanner/metadata-scanner.d.ts +3 -14
- package/dist/scanner/metadata-scanner.js +10 -10
- package/dist/scanner/metadata-scanner.js.map +1 -1
- package/dist/service/scheduler.js +32 -13
- package/dist/service/scheduler.js.map +1 -1
- package/dist/storage/database.js +81 -2
- package/dist/storage/database.js.map +1 -1
- package/dist/storage/queries/analytics-queries.d.ts +59 -0
- package/dist/storage/queries/analytics-queries.js +265 -0
- package/dist/storage/queries/analytics-queries.js.map +1 -0
- package/dist/storage/queries/conflict-queries.d.ts +16 -0
- package/dist/storage/queries/conflict-queries.js +56 -0
- package/dist/storage/queries/conflict-queries.js.map +1 -0
- package/dist/storage/queries/constellation-queries.d.ts +18 -0
- package/dist/storage/queries/constellation-queries.js +101 -0
- package/dist/storage/queries/constellation-queries.js.map +1 -0
- package/dist/storage/queries/datasource-queries.d.ts +9 -0
- package/dist/storage/queries/datasource-queries.js +53 -0
- package/dist/storage/queries/datasource-queries.js.map +1 -0
- package/dist/storage/queries/memory-queries.d.ts +53 -0
- package/dist/storage/queries/memory-queries.js +415 -0
- package/dist/storage/queries/memory-queries.js.map +1 -0
- package/dist/storage/queries/observation-queries.d.ts +7 -0
- package/dist/storage/queries/observation-queries.js +23 -0
- package/dist/storage/queries/observation-queries.js.map +1 -0
- package/dist/storage/queries/orbit-queries.d.ts +7 -0
- package/dist/storage/queries/orbit-queries.js +23 -0
- package/dist/storage/queries/orbit-queries.js.map +1 -0
- package/dist/storage/queries/shared.d.ts +106 -0
- package/dist/storage/queries/shared.js +120 -0
- package/dist/storage/queries/shared.js.map +1 -0
- package/dist/storage/queries/sun-queries.d.ts +9 -0
- package/dist/storage/queries/sun-queries.js +43 -0
- package/dist/storage/queries/sun-queries.js.map +1 -0
- package/dist/storage/queries/temporal-queries.d.ts +32 -0
- package/dist/storage/queries/temporal-queries.js +112 -0
- package/dist/storage/queries/temporal-queries.js.map +1 -0
- package/dist/storage/queries.d.ts +15 -84
- package/dist/storage/queries.js +15 -896
- package/dist/storage/queries.js.map +1 -1
- package/dist/storage/vec.d.ts +5 -1
- package/dist/storage/vec.js +48 -24
- package/dist/storage/vec.js.map +1 -1
- package/dist/utils/config.d.ts +0 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/logger.d.ts +0 -2
- package/dist/utils/logger.js +0 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/stopwords.d.ts +6 -0
- package/dist/utils/stopwords.js +22 -0
- package/dist/utils/stopwords.js.map +1 -0
- package/dist/utils/tokenizer.d.ts +2 -1
- package/dist/utils/tokenizer.js +7 -5
- package/dist/utils/tokenizer.js.map +1 -1
- package/package.json +79 -78
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* storage/queries/memory-queries.ts — Memory CRUD and search operations
|
|
3
|
+
*/
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
import { getDatabase } from '../database.js';
|
|
6
|
+
import { ORBIT_ZONES } from '../../engine/types.js';
|
|
7
|
+
import { filterActiveMemories } from '../../engine/validity.js';
|
|
8
|
+
import { asRawMemory, deserializeMemory, escapeFtsQuery, } from './shared.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Memory CRUD
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
export function insertMemory(memory) {
|
|
13
|
+
const db = getDatabase();
|
|
14
|
+
const now = new Date().toISOString();
|
|
15
|
+
const id = memory.id ?? randomUUID();
|
|
16
|
+
const project = memory.project ?? 'default';
|
|
17
|
+
const content = memory.content ?? '';
|
|
18
|
+
const summary = memory.summary ?? '';
|
|
19
|
+
const type = memory.type ?? 'observation';
|
|
20
|
+
const tags = JSON.stringify(memory.tags ?? []);
|
|
21
|
+
const distance = memory.distance ?? 5.0;
|
|
22
|
+
const importance = memory.importance ?? 0.5;
|
|
23
|
+
const velocity = memory.velocity ?? 0.0;
|
|
24
|
+
const impact = memory.impact ?? 0.5;
|
|
25
|
+
const access_count = memory.access_count ?? 0;
|
|
26
|
+
const last_accessed_at = memory.last_accessed_at ?? null;
|
|
27
|
+
const metadata = JSON.stringify(memory.metadata ?? {});
|
|
28
|
+
const source = memory.source ?? 'manual';
|
|
29
|
+
const source_path = memory.source_path ?? null;
|
|
30
|
+
const source_hash = memory.source_hash ?? null;
|
|
31
|
+
const content_hash = memory.content_hash ?? null;
|
|
32
|
+
const created_at = memory.created_at ?? now;
|
|
33
|
+
const updated_at = memory.updated_at ?? now;
|
|
34
|
+
const deleted_at = memory.deleted_at ?? null;
|
|
35
|
+
const valid_from = memory.valid_from ?? null;
|
|
36
|
+
const valid_until = memory.valid_until ?? null;
|
|
37
|
+
const superseded_by = memory.superseded_by ?? null;
|
|
38
|
+
const consolidated_into = memory.consolidated_into ?? null;
|
|
39
|
+
const quality_score = memory.quality_score ?? null;
|
|
40
|
+
const is_universal = memory.is_universal ? 1 : 0;
|
|
41
|
+
db.prepare(`
|
|
42
|
+
INSERT INTO memories (
|
|
43
|
+
id, project, content, summary, type, tags,
|
|
44
|
+
distance, importance, velocity, impact,
|
|
45
|
+
access_count, last_accessed_at, metadata,
|
|
46
|
+
source, source_path, source_hash, content_hash,
|
|
47
|
+
created_at, updated_at, deleted_at,
|
|
48
|
+
valid_from, valid_until, superseded_by,
|
|
49
|
+
consolidated_into, quality_score, is_universal
|
|
50
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
51
|
+
`).run(id, project, content, summary, type, tags, distance, importance, velocity, impact, access_count, last_accessed_at, metadata, source, source_path, source_hash, content_hash, created_at, updated_at, deleted_at, valid_from, valid_until, superseded_by, consolidated_into, quality_score, is_universal);
|
|
52
|
+
return {
|
|
53
|
+
id, project, content, summary,
|
|
54
|
+
type: type,
|
|
55
|
+
tags: memory.tags ?? [],
|
|
56
|
+
distance, importance, velocity, impact,
|
|
57
|
+
access_count, last_accessed_at, metadata: memory.metadata ?? {},
|
|
58
|
+
source, source_path, source_hash, content_hash,
|
|
59
|
+
created_at, updated_at, deleted_at,
|
|
60
|
+
valid_from: valid_from ?? undefined,
|
|
61
|
+
valid_until: valid_until ?? undefined,
|
|
62
|
+
superseded_by: superseded_by ?? undefined,
|
|
63
|
+
consolidated_into: consolidated_into ?? undefined,
|
|
64
|
+
quality_score: quality_score ?? undefined,
|
|
65
|
+
is_universal: Boolean(is_universal),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export function getMemoryById(id) {
|
|
69
|
+
const db = getDatabase();
|
|
70
|
+
const row = db.prepare(`SELECT * FROM memories WHERE id = ?`).get(id);
|
|
71
|
+
return row ? deserializeMemory(asRawMemory(row)) : null;
|
|
72
|
+
}
|
|
73
|
+
export function getMemoryByIds(ids) {
|
|
74
|
+
if (ids.length === 0)
|
|
75
|
+
return [];
|
|
76
|
+
const db = getDatabase();
|
|
77
|
+
const placeholders = ids.map(() => '?').join(', ');
|
|
78
|
+
const rows = db.prepare(`
|
|
79
|
+
SELECT * FROM memories
|
|
80
|
+
WHERE id IN (${placeholders})
|
|
81
|
+
AND deleted_at IS NULL
|
|
82
|
+
`).all(...ids);
|
|
83
|
+
return filterActiveMemories(rows.map((r) => deserializeMemory(asRawMemory(r))));
|
|
84
|
+
}
|
|
85
|
+
export function getMemoriesByProject(project, includeDeleted = false) {
|
|
86
|
+
const db = getDatabase();
|
|
87
|
+
const sql = includeDeleted
|
|
88
|
+
? `SELECT * FROM memories WHERE project = ? ORDER BY distance ASC`
|
|
89
|
+
: `SELECT * FROM memories WHERE project = ? AND deleted_at IS NULL ORDER BY distance ASC`;
|
|
90
|
+
const rows = db.prepare(sql).all(project);
|
|
91
|
+
return filterActiveMemories(rows.map((r) => deserializeMemory(asRawMemory(r))));
|
|
92
|
+
}
|
|
93
|
+
export function getRecentMemories(project, hoursAgo = 3) {
|
|
94
|
+
const db = getDatabase();
|
|
95
|
+
const cutoff = new Date(Date.now() - hoursAgo * 60 * 60 * 1000).toISOString();
|
|
96
|
+
const rows = db.prepare(`
|
|
97
|
+
SELECT * FROM memories
|
|
98
|
+
WHERE project = ?
|
|
99
|
+
AND deleted_at IS NULL
|
|
100
|
+
AND created_at > ?
|
|
101
|
+
ORDER BY created_at DESC
|
|
102
|
+
`).all(project, cutoff);
|
|
103
|
+
return filterActiveMemories(rows.map((r) => deserializeMemory(asRawMemory(r))));
|
|
104
|
+
}
|
|
105
|
+
export function getMemoriesInZone(project, zone) {
|
|
106
|
+
const db = getDatabase();
|
|
107
|
+
const { min, max } = ORBIT_ZONES[zone];
|
|
108
|
+
const rows = db.prepare(`
|
|
109
|
+
SELECT * FROM memories
|
|
110
|
+
WHERE project = ?
|
|
111
|
+
AND deleted_at IS NULL
|
|
112
|
+
AND distance >= ?
|
|
113
|
+
AND distance < ?
|
|
114
|
+
ORDER BY distance ASC
|
|
115
|
+
`).all(project, min, max);
|
|
116
|
+
return filterActiveMemories(rows.map((r) => deserializeMemory(asRawMemory(r))));
|
|
117
|
+
}
|
|
118
|
+
export function getNearestMemories(project, limit) {
|
|
119
|
+
const db = getDatabase();
|
|
120
|
+
const rows = db.prepare(`
|
|
121
|
+
SELECT * FROM memories
|
|
122
|
+
WHERE project = ? AND deleted_at IS NULL
|
|
123
|
+
ORDER BY distance ASC
|
|
124
|
+
LIMIT ?
|
|
125
|
+
`).all(project, limit);
|
|
126
|
+
return rows.map((r) => deserializeMemory(asRawMemory(r)));
|
|
127
|
+
}
|
|
128
|
+
export function updateMemoryOrbit(id, distance, importance, velocity) {
|
|
129
|
+
const db = getDatabase();
|
|
130
|
+
const now = new Date().toISOString();
|
|
131
|
+
db.prepare(`
|
|
132
|
+
UPDATE memories
|
|
133
|
+
SET distance = ?, importance = ?, velocity = ?, updated_at = ?
|
|
134
|
+
WHERE id = ?
|
|
135
|
+
`).run(distance, importance, velocity, now, id);
|
|
136
|
+
}
|
|
137
|
+
export function updateMemoryAccess(id) {
|
|
138
|
+
const db = getDatabase();
|
|
139
|
+
const now = new Date().toISOString();
|
|
140
|
+
db.prepare(`
|
|
141
|
+
UPDATE memories
|
|
142
|
+
SET access_count = access_count + 1,
|
|
143
|
+
last_accessed_at = ?,
|
|
144
|
+
updated_at = ?
|
|
145
|
+
WHERE id = ?
|
|
146
|
+
`).run(now, now, id);
|
|
147
|
+
}
|
|
148
|
+
export function softDeleteMemory(id) {
|
|
149
|
+
const db = getDatabase();
|
|
150
|
+
const now = new Date().toISOString();
|
|
151
|
+
db.prepare(`
|
|
152
|
+
UPDATE memories
|
|
153
|
+
SET deleted_at = ?, updated_at = ?
|
|
154
|
+
WHERE id = ?
|
|
155
|
+
`).run(now, now, id);
|
|
156
|
+
}
|
|
157
|
+
export function updateMemoryContent(id, content) {
|
|
158
|
+
const db = getDatabase();
|
|
159
|
+
const now = new Date().toISOString();
|
|
160
|
+
db.prepare(`
|
|
161
|
+
UPDATE memories SET content = ?, updated_at = ? WHERE id = ?
|
|
162
|
+
`).run(content, now, id);
|
|
163
|
+
}
|
|
164
|
+
export function updateQualityScore(memoryId, score) {
|
|
165
|
+
const db = getDatabase();
|
|
166
|
+
const now = new Date().toISOString();
|
|
167
|
+
db.prepare(`
|
|
168
|
+
UPDATE memories SET quality_score = ?, updated_at = ? WHERE id = ?
|
|
169
|
+
`).run(score, now, memoryId);
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Source-path deduplication
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
export function memoryExistsForSource(sourcePath, sourceHash) {
|
|
175
|
+
const db = getDatabase();
|
|
176
|
+
const row = db.prepare(`
|
|
177
|
+
SELECT id FROM memories
|
|
178
|
+
WHERE source_path = ? AND source_hash = ? AND deleted_at IS NULL
|
|
179
|
+
LIMIT 1
|
|
180
|
+
`).get(sourcePath, sourceHash);
|
|
181
|
+
return row !== undefined;
|
|
182
|
+
}
|
|
183
|
+
export function getMemoryBySourcePath(sourcePath) {
|
|
184
|
+
const db = getDatabase();
|
|
185
|
+
const row = db.prepare(`
|
|
186
|
+
SELECT * FROM memories
|
|
187
|
+
WHERE source_path = ? AND deleted_at IS NULL
|
|
188
|
+
LIMIT 1
|
|
189
|
+
`).get(sourcePath);
|
|
190
|
+
return row ? deserializeMemory(asRawMemory(row)) : null;
|
|
191
|
+
}
|
|
192
|
+
export function getMemoryByContentHash(project, contentHash) {
|
|
193
|
+
const db = getDatabase();
|
|
194
|
+
const row = db.prepare(`
|
|
195
|
+
SELECT * FROM memories
|
|
196
|
+
WHERE project = ? AND content_hash = ? AND deleted_at IS NULL
|
|
197
|
+
LIMIT 1
|
|
198
|
+
`).get(project, contentHash);
|
|
199
|
+
return row ? deserializeMemory(asRawMemory(row)) : null;
|
|
200
|
+
}
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// Full-text search (FTS5)
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
export function searchMemories(project, query, limit = 20) {
|
|
205
|
+
const db = getDatabase();
|
|
206
|
+
const escapedQuery = escapeFtsQuery(query);
|
|
207
|
+
const rows = db.prepare(`
|
|
208
|
+
SELECT m.*
|
|
209
|
+
FROM memories m
|
|
210
|
+
JOIN memories_fts fts ON m.rowid = fts.rowid
|
|
211
|
+
WHERE memories_fts MATCH ?
|
|
212
|
+
AND m.project = ?
|
|
213
|
+
AND m.deleted_at IS NULL
|
|
214
|
+
AND m.superseded_by IS NULL
|
|
215
|
+
AND (m.valid_from IS NULL OR m.valid_from <= datetime('now'))
|
|
216
|
+
AND (m.valid_until IS NULL OR m.valid_until > datetime('now'))
|
|
217
|
+
ORDER BY rank
|
|
218
|
+
LIMIT ?
|
|
219
|
+
`).all(escapedQuery, project, limit);
|
|
220
|
+
return filterActiveMemories(rows.map((r) => deserializeMemory(asRawMemory(r))));
|
|
221
|
+
}
|
|
222
|
+
export function searchMemoriesInRange(project, query, minDistance, maxDistance, limit) {
|
|
223
|
+
const db = getDatabase();
|
|
224
|
+
const escapedQuery = escapeFtsQuery(query);
|
|
225
|
+
const rows = db.prepare(`
|
|
226
|
+
SELECT m.*
|
|
227
|
+
FROM memories m
|
|
228
|
+
JOIN memories_fts fts ON m.rowid = fts.rowid
|
|
229
|
+
WHERE memories_fts MATCH ?
|
|
230
|
+
AND m.project = ?
|
|
231
|
+
AND m.deleted_at IS NULL
|
|
232
|
+
AND m.superseded_by IS NULL
|
|
233
|
+
AND (m.valid_from IS NULL OR m.valid_from <= datetime('now'))
|
|
234
|
+
AND (m.valid_until IS NULL OR m.valid_until > datetime('now'))
|
|
235
|
+
AND m.distance >= ?
|
|
236
|
+
AND m.distance < ?
|
|
237
|
+
ORDER BY rank
|
|
238
|
+
LIMIT ?
|
|
239
|
+
`).all(escapedQuery, project, minDistance, maxDistance, limit);
|
|
240
|
+
return filterActiveMemories(rows.map((r) => deserializeMemory(asRawMemory(r))));
|
|
241
|
+
}
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
// Consolidation queries
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
export function consolidateMemories(sourceIds, targetId) {
|
|
246
|
+
if (sourceIds.length === 0)
|
|
247
|
+
return;
|
|
248
|
+
const db = getDatabase();
|
|
249
|
+
const now = new Date().toISOString();
|
|
250
|
+
const placeholders = sourceIds.map(() => '?').join(', ');
|
|
251
|
+
db.prepare(`
|
|
252
|
+
UPDATE memories
|
|
253
|
+
SET consolidated_into = ?, updated_at = ?
|
|
254
|
+
WHERE id IN (${placeholders})
|
|
255
|
+
`).run(targetId, now, ...sourceIds);
|
|
256
|
+
}
|
|
257
|
+
export function getConsolidationHistory(memoryId) {
|
|
258
|
+
const db = getDatabase();
|
|
259
|
+
const rows = db.prepare(`
|
|
260
|
+
SELECT * FROM memories
|
|
261
|
+
WHERE consolidated_into = ?
|
|
262
|
+
ORDER BY created_at ASC
|
|
263
|
+
`).all(memoryId);
|
|
264
|
+
return rows.map((r) => deserializeMemory(asRawMemory(r)));
|
|
265
|
+
}
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
// Multi-project queries
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
export function getUniversalMemories(limit = 50) {
|
|
270
|
+
const db = getDatabase();
|
|
271
|
+
const rows = db.prepare(`
|
|
272
|
+
SELECT * FROM memories
|
|
273
|
+
WHERE is_universal = 1 AND deleted_at IS NULL
|
|
274
|
+
ORDER BY importance DESC
|
|
275
|
+
LIMIT ?
|
|
276
|
+
`).all(limit);
|
|
277
|
+
return rows.map((r) => deserializeMemory(asRawMemory(r)));
|
|
278
|
+
}
|
|
279
|
+
export function setUniversal(memoryId, isUniversal) {
|
|
280
|
+
const db = getDatabase();
|
|
281
|
+
const now = new Date().toISOString();
|
|
282
|
+
db.prepare(`
|
|
283
|
+
UPDATE memories SET is_universal = ?, updated_at = ? WHERE id = ?
|
|
284
|
+
`).run(isUniversal ? 1 : 0, now, memoryId);
|
|
285
|
+
}
|
|
286
|
+
export function listProjects() {
|
|
287
|
+
const db = getDatabase();
|
|
288
|
+
const rows = db.prepare(`
|
|
289
|
+
SELECT project, COUNT(*) as count
|
|
290
|
+
FROM memories
|
|
291
|
+
WHERE deleted_at IS NULL
|
|
292
|
+
GROUP BY project
|
|
293
|
+
ORDER BY count DESC
|
|
294
|
+
`).all();
|
|
295
|
+
return rows.map((r) => {
|
|
296
|
+
const row = r;
|
|
297
|
+
return { project: row.project, count: row.count };
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
// ---------------------------------------------------------------------------
|
|
301
|
+
// Stored embedding lookup (used by orbit.ts and consolidation.ts)
|
|
302
|
+
// ---------------------------------------------------------------------------
|
|
303
|
+
export function getStoredEmbeddingForMemory(memoryId) {
|
|
304
|
+
try {
|
|
305
|
+
const db = getDatabase();
|
|
306
|
+
const row = db.prepare(`SELECT me.embedding
|
|
307
|
+
FROM memory_embeddings me
|
|
308
|
+
JOIN memory_embedding_map mm ON mm.vec_rowid = me.rowid
|
|
309
|
+
WHERE mm.memory_id = ?`).get(memoryId);
|
|
310
|
+
if (!row?.embedding)
|
|
311
|
+
return null;
|
|
312
|
+
return new Float32Array(row.embedding.buffer, row.embedding.byteOffset, row.embedding.byteLength / 4);
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Get the embedding of the highest-importance memory in a project.
|
|
320
|
+
* Used by orbit.ts to compute sun-context relevance via hybridRelevance.
|
|
321
|
+
*/
|
|
322
|
+
export function getTopProjectEmbedding(project) {
|
|
323
|
+
try {
|
|
324
|
+
const db = getDatabase();
|
|
325
|
+
const sunRow = db.prepare(`SELECT e.embedding
|
|
326
|
+
FROM memory_embeddings e
|
|
327
|
+
JOIN memory_embedding_map map ON map.vec_rowid = e.rowid
|
|
328
|
+
JOIN memories m ON m.id = map.memory_id
|
|
329
|
+
WHERE m.project = ? AND m.deleted_at IS NULL
|
|
330
|
+
ORDER BY m.importance DESC LIMIT 1`).get(project);
|
|
331
|
+
if (!sunRow?.embedding)
|
|
332
|
+
return null;
|
|
333
|
+
return new Float32Array(sunRow.embedding.buffer, sunRow.embedding.byteOffset, sunRow.embedding.byteLength / 4);
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// ---------------------------------------------------------------------------
|
|
340
|
+
// Project listing
|
|
341
|
+
// ---------------------------------------------------------------------------
|
|
342
|
+
/**
|
|
343
|
+
* Return the list of distinct project names that have at least one non-deleted memory.
|
|
344
|
+
*/
|
|
345
|
+
export function getAllProjects() {
|
|
346
|
+
const db = getDatabase();
|
|
347
|
+
const rows = db.prepare('SELECT DISTINCT project FROM memories WHERE deleted_at IS NULL').all();
|
|
348
|
+
return rows.map((r) => r.project);
|
|
349
|
+
}
|
|
350
|
+
// ---------------------------------------------------------------------------
|
|
351
|
+
// Hard-delete (purge) and curation
|
|
352
|
+
// ---------------------------------------------------------------------------
|
|
353
|
+
/**
|
|
354
|
+
* Permanently remove soft-deleted memories older than the given number of days.
|
|
355
|
+
* Also cleans up related embeddings, constellation edges, and orbit log entries.
|
|
356
|
+
*/
|
|
357
|
+
export function purgeDeletedMemories(project, olderThanDays = 30) {
|
|
358
|
+
const db = getDatabase();
|
|
359
|
+
const cutoff = new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1000).toISOString();
|
|
360
|
+
const rawIds = db.prepare(`
|
|
361
|
+
SELECT id FROM memories
|
|
362
|
+
WHERE project = ? AND deleted_at IS NOT NULL AND deleted_at < ?
|
|
363
|
+
`).all(project, cutoff);
|
|
364
|
+
if (rawIds.length === 0)
|
|
365
|
+
return 0;
|
|
366
|
+
const ids = rawIds.map((r) => r.id);
|
|
367
|
+
const placeholders = ids.map(() => '?').join(', ');
|
|
368
|
+
db.prepare(`DELETE FROM constellation_edges WHERE source_id IN (${placeholders}) OR target_id IN (${placeholders})`).run(...ids, ...ids);
|
|
369
|
+
db.prepare(`DELETE FROM orbit_log WHERE memory_id IN (${placeholders})`).run(...ids);
|
|
370
|
+
const mapRows = db.prepare(`SELECT vec_rowid FROM memory_embedding_map WHERE memory_id IN (${placeholders})`).all(...ids);
|
|
371
|
+
if (mapRows.length > 0) {
|
|
372
|
+
const vecRowids = mapRows.map((r) => r.vec_rowid);
|
|
373
|
+
const vecPlaceholders = vecRowids.map(() => '?').join(', ');
|
|
374
|
+
try {
|
|
375
|
+
db.prepare(`DELETE FROM memory_embeddings WHERE rowid IN (${vecPlaceholders})`).run(...vecRowids);
|
|
376
|
+
}
|
|
377
|
+
catch { /* sqlite-vec may be unavailable */ }
|
|
378
|
+
}
|
|
379
|
+
db.prepare(`DELETE FROM memory_embedding_map WHERE memory_id IN (${placeholders})`).run(...ids);
|
|
380
|
+
db.prepare(`DELETE FROM memories WHERE id IN (${placeholders})`).run(...ids);
|
|
381
|
+
return ids.length;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Soft-delete noisy or superseded memories.
|
|
385
|
+
* Returns count and breakdown by reason.
|
|
386
|
+
*/
|
|
387
|
+
export function curateMemories(project) {
|
|
388
|
+
const db = getDatabase();
|
|
389
|
+
const now = new Date().toISOString();
|
|
390
|
+
const reasons = {};
|
|
391
|
+
const lowQuality = db.prepare(`
|
|
392
|
+
UPDATE memories SET deleted_at = ?
|
|
393
|
+
WHERE project = ? AND deleted_at IS NULL
|
|
394
|
+
AND quality_score < 0.3 AND access_count = 0
|
|
395
|
+
AND created_at < datetime('now', '-14 days')
|
|
396
|
+
`).run(now, project);
|
|
397
|
+
reasons['low_quality_unaccessed'] = Number(lowQuality.changes);
|
|
398
|
+
const superseded = db.prepare(`
|
|
399
|
+
UPDATE memories SET deleted_at = ?
|
|
400
|
+
WHERE project = ? AND deleted_at IS NULL
|
|
401
|
+
AND superseded_by IS NOT NULL
|
|
402
|
+
AND updated_at < datetime('now', '-7 days')
|
|
403
|
+
`).run(now, project);
|
|
404
|
+
reasons['superseded'] = Number(superseded.changes);
|
|
405
|
+
const consolidated = db.prepare(`
|
|
406
|
+
UPDATE memories SET deleted_at = ?
|
|
407
|
+
WHERE project = ? AND deleted_at IS NULL
|
|
408
|
+
AND consolidated_into IS NOT NULL
|
|
409
|
+
AND updated_at < datetime('now', '-7 days')
|
|
410
|
+
`).run(now, project);
|
|
411
|
+
reasons['consolidated_sources'] = Number(consolidated.changes);
|
|
412
|
+
const total = Object.values(reasons).reduce((a, b) => a + b, 0);
|
|
413
|
+
return { deleted: total, reasons };
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=memory-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-queries.js","sourceRoot":"","sources":["../../../src/storage/queries/memory-queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* storage/queries/observation-queries.ts — Observation log operations
|
|
3
|
+
*/
|
|
4
|
+
import type { ObservationEntry } from '../../engine/types.js';
|
|
5
|
+
export declare function createObservation(entry: ObservationEntry): void;
|
|
6
|
+
export declare function getObservations(project: string, limit?: number): ObservationEntry[];
|
|
7
|
+
//# sourceMappingURL=observation-queries.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* storage/queries/observation-queries.ts — Observation log operations
|
|
3
|
+
*/
|
|
4
|
+
import { getDatabase } from '../database.js';
|
|
5
|
+
import { deserializeObservation } from './shared.js';
|
|
6
|
+
export function createObservation(entry) {
|
|
7
|
+
const db = getDatabase();
|
|
8
|
+
db.prepare(`
|
|
9
|
+
INSERT INTO observation_log (id, content, extracted_memories, source, project, created_at)
|
|
10
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
11
|
+
`).run(entry.id, entry.content, JSON.stringify(entry.extracted_memories), entry.source, entry.project, entry.created_at);
|
|
12
|
+
}
|
|
13
|
+
export function getObservations(project, limit = 20) {
|
|
14
|
+
const db = getDatabase();
|
|
15
|
+
const rows = db.prepare(`
|
|
16
|
+
SELECT * FROM observation_log
|
|
17
|
+
WHERE project = ?
|
|
18
|
+
ORDER BY created_at DESC
|
|
19
|
+
LIMIT ?
|
|
20
|
+
`).all(project, limit);
|
|
21
|
+
return rows.map((r) => deserializeObservation(r));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=observation-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-queries.js","sourceRoot":"","sources":["../../../src/storage/queries/observation-queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAqB,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,OAAO,EACb,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,EACxC,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,UAAU,CACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,KAAK,GAAG,EAAE;IACzD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKvB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAc,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAsB,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* storage/queries/orbit-queries.ts — Orbit log operations
|
|
3
|
+
*/
|
|
4
|
+
import type { OrbitChange } from '../../engine/types.js';
|
|
5
|
+
export declare function insertOrbitLog(change: OrbitChange): void;
|
|
6
|
+
export declare function cleanupOrbitLog(retentionDays?: number): number;
|
|
7
|
+
//# sourceMappingURL=orbit-queries.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* storage/queries/orbit-queries.ts — Orbit log operations
|
|
3
|
+
*/
|
|
4
|
+
import { getDatabase } from '../database.js';
|
|
5
|
+
export function insertOrbitLog(change) {
|
|
6
|
+
const db = getDatabase();
|
|
7
|
+
const now = new Date().toISOString();
|
|
8
|
+
db.prepare(`
|
|
9
|
+
INSERT INTO orbit_log (
|
|
10
|
+
memory_id, project,
|
|
11
|
+
old_distance, new_distance,
|
|
12
|
+
old_importance, new_importance,
|
|
13
|
+
trigger, created_at
|
|
14
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
15
|
+
`).run(change.memory_id, change.project, change.old_distance, change.new_distance, change.old_importance, change.new_importance, change.trigger, now);
|
|
16
|
+
}
|
|
17
|
+
export function cleanupOrbitLog(retentionDays = 90) {
|
|
18
|
+
const db = getDatabase();
|
|
19
|
+
const cutoff = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000).toISOString();
|
|
20
|
+
const result = db.prepare('DELETE FROM orbit_log WHERE created_at < ?').run(cutoff);
|
|
21
|
+
return Number(result.changes);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=orbit-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbit-queries.js","sourceRoot":"","sources":["../../../src/storage/queries/orbit-queries.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,EAAE,CAAC,OAAO,CAAC;;;;;;;GAOV,CAAC,CAAC,GAAG,CACJ,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,OAAO,EACd,GAAG,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,gBAAwB,EAAE;IACxD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACxF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* storage/queries/shared.ts — Raw DB row shapes, cast helpers, and deserializers
|
|
3
|
+
*
|
|
4
|
+
* These are internal to the queries layer. Nothing outside storage/ should
|
|
5
|
+
* import from this file directly.
|
|
6
|
+
*/
|
|
7
|
+
import type { Memory, SunState, ConstellationEdge, MemoryConflict, ObservationEntry } from '../../engine/types.js';
|
|
8
|
+
import type { DataSource } from '../../scanner/types.js';
|
|
9
|
+
export interface RawMemoryRow {
|
|
10
|
+
id: string;
|
|
11
|
+
project: string;
|
|
12
|
+
content: string;
|
|
13
|
+
summary: string;
|
|
14
|
+
type: string;
|
|
15
|
+
tags: string;
|
|
16
|
+
distance: number;
|
|
17
|
+
importance: number;
|
|
18
|
+
velocity: number;
|
|
19
|
+
impact: number;
|
|
20
|
+
access_count: number;
|
|
21
|
+
last_accessed_at: string | null;
|
|
22
|
+
metadata: string;
|
|
23
|
+
source: string | null;
|
|
24
|
+
source_path: string | null;
|
|
25
|
+
source_hash: string | null;
|
|
26
|
+
content_hash: string | null;
|
|
27
|
+
created_at: string;
|
|
28
|
+
updated_at: string;
|
|
29
|
+
deleted_at: string | null;
|
|
30
|
+
valid_from: string | null;
|
|
31
|
+
valid_until: string | null;
|
|
32
|
+
superseded_by: string | null;
|
|
33
|
+
consolidated_into: string | null;
|
|
34
|
+
quality_score: number | null;
|
|
35
|
+
is_universal: number | null;
|
|
36
|
+
}
|
|
37
|
+
export interface RawConstellationEdgeRow {
|
|
38
|
+
id: string;
|
|
39
|
+
source_id: string;
|
|
40
|
+
target_id: string;
|
|
41
|
+
relation: string;
|
|
42
|
+
weight: number;
|
|
43
|
+
project: string;
|
|
44
|
+
metadata: string;
|
|
45
|
+
created_at: string;
|
|
46
|
+
}
|
|
47
|
+
export interface RawConflictRow {
|
|
48
|
+
id: string;
|
|
49
|
+
memory_id: string;
|
|
50
|
+
conflicting_memory_id: string;
|
|
51
|
+
severity: string;
|
|
52
|
+
description: string;
|
|
53
|
+
status: string;
|
|
54
|
+
resolution: string | null;
|
|
55
|
+
project: string;
|
|
56
|
+
created_at: string;
|
|
57
|
+
resolved_at: string | null;
|
|
58
|
+
}
|
|
59
|
+
export interface RawObservationRow {
|
|
60
|
+
id: string;
|
|
61
|
+
content: string;
|
|
62
|
+
extracted_memories: string;
|
|
63
|
+
source: string;
|
|
64
|
+
project: string;
|
|
65
|
+
created_at: string;
|
|
66
|
+
}
|
|
67
|
+
export interface RawDataSourceRow {
|
|
68
|
+
id: string;
|
|
69
|
+
path: string;
|
|
70
|
+
type: string;
|
|
71
|
+
status: string;
|
|
72
|
+
last_scanned_at: string | null;
|
|
73
|
+
file_count: number;
|
|
74
|
+
total_size: number;
|
|
75
|
+
config: string;
|
|
76
|
+
created_at: string;
|
|
77
|
+
updated_at: string;
|
|
78
|
+
}
|
|
79
|
+
export interface RawSunStateRow {
|
|
80
|
+
project: string;
|
|
81
|
+
content: string;
|
|
82
|
+
current_work: string;
|
|
83
|
+
recent_decisions: string;
|
|
84
|
+
next_steps: string;
|
|
85
|
+
active_errors: string;
|
|
86
|
+
project_context: string;
|
|
87
|
+
token_count: number;
|
|
88
|
+
last_commit_at: string | null;
|
|
89
|
+
updated_at: string;
|
|
90
|
+
}
|
|
91
|
+
export declare function asRawMemory(row: unknown): RawMemoryRow;
|
|
92
|
+
export declare function asRawSunState(row: unknown): RawSunStateRow;
|
|
93
|
+
export declare function asRawDataSource(row: unknown): RawDataSourceRow;
|
|
94
|
+
export declare function deserializeMemory(row: RawMemoryRow): Memory;
|
|
95
|
+
export declare function deserializeConstellationEdge(row: RawConstellationEdgeRow): ConstellationEdge;
|
|
96
|
+
export declare function deserializeConflict(row: RawConflictRow): MemoryConflict;
|
|
97
|
+
export declare function deserializeObservation(row: RawObservationRow): ObservationEntry;
|
|
98
|
+
export declare function deserializeDataSource(row: RawDataSourceRow): DataSource;
|
|
99
|
+
export declare function deserializeSunState(row: RawSunStateRow): SunState;
|
|
100
|
+
export declare function parseJsonArray(value: string | null | undefined): string[];
|
|
101
|
+
export declare function parseJsonObject(value: string | null | undefined): Record<string, unknown>;
|
|
102
|
+
/**
|
|
103
|
+
* Escape a user-supplied string for use in an FTS5 MATCH clause.
|
|
104
|
+
*/
|
|
105
|
+
export declare function escapeFtsQuery(query: string): string;
|
|
106
|
+
//# sourceMappingURL=shared.d.ts.map
|