@kybernesis/brain-storage-sqlite 0.2.0 → 0.5.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/dist/entity-graph.d.ts +12 -0
- package/dist/entity-graph.d.ts.map +1 -0
- package/dist/entity-graph.js +620 -0
- package/dist/entity-graph.js.map +1 -0
- package/dist/fact-store.d.ts +8 -0
- package/dist/fact-store.d.ts.map +1 -0
- package/dist/fact-store.js +222 -0
- package/dist/fact-store.js.map +1 -0
- package/dist/fts-sanitizer.d.ts +30 -0
- package/dist/fts-sanitizer.d.ts.map +1 -0
- package/dist/fts-sanitizer.js +59 -0
- package/dist/fts-sanitizer.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +16 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +82 -0
- package/dist/provider.js.map +1 -0
- package/dist/sleep-store.d.ts +12 -0
- package/dist/sleep-store.d.ts.map +1 -0
- package/dist/sleep-store.js +35 -0
- package/dist/sleep-store.js.map +1 -0
- package/dist/timeline.d.ts +11 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +351 -0
- package/dist/timeline.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-graph.js","sourceRoot":"","sources":["../src/entity-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FactStore (SQLite impl). SQL moved verbatim from brain-core/fact-store.ts
|
|
3
|
+
* during the storage-seam migration (G1) — behaviour held constant.
|
|
4
|
+
* Facts physically live in timeline.db (same file as timeline_events).
|
|
5
|
+
*/
|
|
6
|
+
import type { FactStore } from '@kybernesis/brain-contracts';
|
|
7
|
+
export declare const sqliteFactStore: FactStore;
|
|
8
|
+
//# sourceMappingURL=fact-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fact-store.d.ts","sourceRoot":"","sources":["../src/fact-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAqC,SAAS,EAAE,MAAM,6BAA6B,CAAC;AA8FhG,eAAO,MAAM,eAAe,EAAE,SAgM7B,CAAC"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FactStore (SQLite impl). SQL moved verbatim from brain-core/fact-store.ts
|
|
3
|
+
* during the storage-seam migration (G1) — behaviour held constant.
|
|
4
|
+
* Facts physically live in timeline.db (same file as timeline_events).
|
|
5
|
+
*/
|
|
6
|
+
import { getDb } from './index.js';
|
|
7
|
+
import { sanitizeFtsQuery } from './fts-sanitizer.js';
|
|
8
|
+
function rowToFact(row) {
|
|
9
|
+
return {
|
|
10
|
+
id: row.id,
|
|
11
|
+
content: row.content,
|
|
12
|
+
source_path: row.source_path,
|
|
13
|
+
source_conversation_id: row.source_conversation_id,
|
|
14
|
+
entities: JSON.parse(row.entities_json || '[]'),
|
|
15
|
+
timestamp: row.timestamp,
|
|
16
|
+
confidence: row.confidence,
|
|
17
|
+
category: row.category,
|
|
18
|
+
created_at: row.created_at,
|
|
19
|
+
is_latest: (row.is_latest ?? 1) === 1,
|
|
20
|
+
superseded_by: row.superseded_by ?? undefined,
|
|
21
|
+
expires_at: row.expires_at ?? undefined,
|
|
22
|
+
updated_at: row.updated_at ?? undefined,
|
|
23
|
+
access_count: row.access_count ?? 0,
|
|
24
|
+
source_type: row.source_type ?? 'chat',
|
|
25
|
+
is_retracted: (row.is_retracted ?? 0) === 1,
|
|
26
|
+
retracted_by: row.retracted_by ?? undefined,
|
|
27
|
+
last_reinforced_at: row.last_reinforced_at ?? undefined,
|
|
28
|
+
project_id: row.project_id ?? undefined,
|
|
29
|
+
tags: JSON.parse(row.tags_json || '[]'),
|
|
30
|
+
classification: row.classification ?? undefined,
|
|
31
|
+
connection_id: row.connection_id ?? undefined,
|
|
32
|
+
source_did: row.source_did ?? undefined,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Facts table is created by timeline.ts ensureSchema. This impl only ensures
|
|
36
|
+
// the FTS index + triggers. Per-slug init cache (moved with the code).
|
|
37
|
+
const initialized = new Set();
|
|
38
|
+
function ensureFactsFts(t) {
|
|
39
|
+
if (initialized.has(t.slug))
|
|
40
|
+
return;
|
|
41
|
+
const db = getDb(t, 'timeline');
|
|
42
|
+
// Bug Fix 1 (CANONICAL.md §6): the non-contentless facts_fts table must use
|
|
43
|
+
// explicit DELETE FROM ... WHERE rowid = ? in triggers, NOT the ('delete', ...)
|
|
44
|
+
// command form which is only valid for contentless FTS5 tables.
|
|
45
|
+
db.exec(`
|
|
46
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS facts_fts USING fts5(
|
|
47
|
+
content, entities,
|
|
48
|
+
tokenize = 'unicode61 remove_diacritics 2'
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE TRIGGER IF NOT EXISTS facts_fts_ai AFTER INSERT ON facts BEGIN
|
|
52
|
+
INSERT INTO facts_fts(rowid, content, entities) VALUES (new.id, new.content, new.entities_json);
|
|
53
|
+
END;
|
|
54
|
+
|
|
55
|
+
CREATE TRIGGER IF NOT EXISTS facts_fts_ad AFTER DELETE ON facts BEGIN
|
|
56
|
+
DELETE FROM facts_fts WHERE rowid = old.id;
|
|
57
|
+
END;
|
|
58
|
+
|
|
59
|
+
CREATE TRIGGER IF NOT EXISTS facts_fts_au AFTER UPDATE ON facts BEGIN
|
|
60
|
+
DELETE FROM facts_fts WHERE rowid = old.id;
|
|
61
|
+
INSERT INTO facts_fts(rowid, content, entities) VALUES (new.id, new.content, new.entities_json);
|
|
62
|
+
END;
|
|
63
|
+
`);
|
|
64
|
+
initialized.add(t.slug);
|
|
65
|
+
}
|
|
66
|
+
export const sqliteFactStore = {
|
|
67
|
+
async ensureFactsTable(t) {
|
|
68
|
+
ensureFactsFts(t);
|
|
69
|
+
},
|
|
70
|
+
async storeFact(t, fact) {
|
|
71
|
+
ensureFactsFts(t);
|
|
72
|
+
const db = getDb(t, 'timeline');
|
|
73
|
+
const result = db.prepare(`
|
|
74
|
+
INSERT OR REPLACE INTO facts
|
|
75
|
+
(content, source_path, source_conversation_id, entities_json, timestamp, confidence, category,
|
|
76
|
+
expires_at, source_type, project_id, tags_json, classification, connection_id, source_did)
|
|
77
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
78
|
+
`).run(fact.content, fact.source_path, fact.source_conversation_id, JSON.stringify(fact.entities), fact.timestamp, fact.confidence, fact.category, fact.expires_at ?? null, fact.source_type ?? 'chat', fact.project_id ?? null, JSON.stringify(fact.tags ?? []), fact.classification ?? null, fact.connection_id ?? null, fact.source_did ?? null);
|
|
79
|
+
return result.lastInsertRowid;
|
|
80
|
+
},
|
|
81
|
+
async retractFact(t, factId, retractedBy = 'user-correction') {
|
|
82
|
+
ensureFactsFts(t);
|
|
83
|
+
const db = getDb(t, 'timeline');
|
|
84
|
+
db.prepare(`
|
|
85
|
+
UPDATE facts SET is_retracted = 1, retracted_by = ?, is_latest = 0, updated_at = datetime('now')
|
|
86
|
+
WHERE id = ?
|
|
87
|
+
`).run(retractedBy, factId);
|
|
88
|
+
},
|
|
89
|
+
async reinforceFact(t, factId) {
|
|
90
|
+
ensureFactsFts(t);
|
|
91
|
+
const db = getDb(t, 'timeline');
|
|
92
|
+
db.prepare(`UPDATE facts SET last_reinforced_at = datetime('now'), updated_at = datetime('now') WHERE id = ?`).run(factId);
|
|
93
|
+
},
|
|
94
|
+
async getFactById(t, factId) {
|
|
95
|
+
ensureFactsFts(t);
|
|
96
|
+
const db = getDb(t, 'timeline');
|
|
97
|
+
const row = db.prepare('SELECT * FROM facts WHERE id = ?').get(factId);
|
|
98
|
+
return row ? rowToFact(row) : null;
|
|
99
|
+
},
|
|
100
|
+
async getFactsForEntity(t, entity, options = {}) {
|
|
101
|
+
const { latestOnly = true, limit = 20, category } = options;
|
|
102
|
+
ensureFactsFts(t);
|
|
103
|
+
const db = getDb(t, 'timeline');
|
|
104
|
+
const escapedEntity = entity.toLowerCase().replace(/[%_\\]/g, ch => `\\${ch}`);
|
|
105
|
+
const entityPattern = `%${escapedEntity}%`;
|
|
106
|
+
let sql = `
|
|
107
|
+
SELECT * FROM facts
|
|
108
|
+
WHERE LOWER(entities_json) LIKE ? ESCAPE '\\'
|
|
109
|
+
AND COALESCE(is_retracted, 0) = 0
|
|
110
|
+
`;
|
|
111
|
+
const params = [entityPattern];
|
|
112
|
+
if (latestOnly) {
|
|
113
|
+
sql += ` AND COALESCE(is_latest, 1) = 1`;
|
|
114
|
+
}
|
|
115
|
+
if (category) {
|
|
116
|
+
sql += ` AND category = ?`;
|
|
117
|
+
params.push(category);
|
|
118
|
+
}
|
|
119
|
+
sql += ` ORDER BY timestamp DESC LIMIT ?`;
|
|
120
|
+
params.push(limit);
|
|
121
|
+
return db.prepare(sql).all(...params).map(rowToFact);
|
|
122
|
+
},
|
|
123
|
+
async markFactSuperseded(t, oldFactId, newFactId) {
|
|
124
|
+
ensureFactsFts(t);
|
|
125
|
+
const db = getDb(t, 'timeline');
|
|
126
|
+
db.prepare('UPDATE facts SET is_latest = 0, superseded_by = ? WHERE id = ?').run(newFactId, oldFactId);
|
|
127
|
+
},
|
|
128
|
+
async factsCount(t) {
|
|
129
|
+
ensureFactsFts(t);
|
|
130
|
+
const db = getDb(t, 'timeline');
|
|
131
|
+
const { count } = db.prepare('SELECT COUNT(*) as count FROM facts WHERE COALESCE(is_retracted, 0) = 0').get();
|
|
132
|
+
return count;
|
|
133
|
+
},
|
|
134
|
+
async listFacts(t, options = {}) {
|
|
135
|
+
const { limit = 50, offset = 0, latestOnly = true, category } = options;
|
|
136
|
+
ensureFactsFts(t);
|
|
137
|
+
const db = getDb(t, 'timeline');
|
|
138
|
+
let sql = 'SELECT * FROM facts WHERE COALESCE(is_retracted, 0) = 0';
|
|
139
|
+
const params = [];
|
|
140
|
+
if (latestOnly) {
|
|
141
|
+
sql += ' AND COALESCE(is_latest, 1) = 1';
|
|
142
|
+
}
|
|
143
|
+
if (category) {
|
|
144
|
+
sql += ' AND category = ?';
|
|
145
|
+
params.push(category);
|
|
146
|
+
}
|
|
147
|
+
sql += ' ORDER BY timestamp DESC LIMIT ? OFFSET ?';
|
|
148
|
+
params.push(limit, offset);
|
|
149
|
+
return db.prepare(sql).all(...params).map(rowToFact);
|
|
150
|
+
},
|
|
151
|
+
async listTemporalFacts(t, options = {}) {
|
|
152
|
+
const { includeExpired = false, limit = 50 } = options;
|
|
153
|
+
ensureFactsFts(t);
|
|
154
|
+
const db = getDb(t, 'timeline');
|
|
155
|
+
let sql = `SELECT * FROM facts WHERE expires_at IS NOT NULL AND COALESCE(is_retracted, 0) = 0`;
|
|
156
|
+
const params = [];
|
|
157
|
+
if (!includeExpired) {
|
|
158
|
+
sql += ` AND (expires_at IS NULL OR expires_at > datetime('now'))`;
|
|
159
|
+
}
|
|
160
|
+
sql += ' ORDER BY expires_at ASC LIMIT ?';
|
|
161
|
+
params.push(limit);
|
|
162
|
+
return db.prepare(sql).all(...params).map(rowToFact);
|
|
163
|
+
},
|
|
164
|
+
async searchFactsFts(t, query, limit = 20) {
|
|
165
|
+
ensureFactsFts(t);
|
|
166
|
+
const db = getDb(t, 'timeline');
|
|
167
|
+
const sanitized = sanitizeFtsQuery(query);
|
|
168
|
+
if (!sanitized)
|
|
169
|
+
return [];
|
|
170
|
+
try {
|
|
171
|
+
const rowids = db.prepare(`SELECT rowid FROM facts_fts WHERE facts_fts MATCH ? LIMIT ?`).all(sanitized, limit);
|
|
172
|
+
if (rowids.length === 0)
|
|
173
|
+
return [];
|
|
174
|
+
const placeholders = rowids.map(() => '?').join(',');
|
|
175
|
+
return db.prepare(`SELECT * FROM facts WHERE id IN (${placeholders})`).all(...rowids.map(r => r.rowid)).map(rowToFact);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
async getFactContentsByCategory(t, category, limit, order) {
|
|
182
|
+
ensureFactsFts(t);
|
|
183
|
+
const db = getDb(t, 'timeline');
|
|
184
|
+
const where = `
|
|
185
|
+
WHERE category = ?
|
|
186
|
+
AND is_latest = 1
|
|
187
|
+
AND (expires_at IS NULL OR expires_at > datetime('now'))
|
|
188
|
+
`;
|
|
189
|
+
if (order === 'recent') {
|
|
190
|
+
const rows = db.prepare(`
|
|
191
|
+
SELECT content FROM facts ${where}
|
|
192
|
+
ORDER BY timestamp DESC
|
|
193
|
+
LIMIT ?
|
|
194
|
+
`).all(category, limit);
|
|
195
|
+
return rows.map(r => r.content);
|
|
196
|
+
}
|
|
197
|
+
// frecency: confidence DESC, access_count DESC — with a fallback for older DBs
|
|
198
|
+
// that predate the access_count column (port-faithful with user-profile.ts).
|
|
199
|
+
try {
|
|
200
|
+
const rows = db.prepare(`
|
|
201
|
+
SELECT content FROM facts ${where}
|
|
202
|
+
ORDER BY confidence DESC, access_count DESC
|
|
203
|
+
LIMIT ?
|
|
204
|
+
`).all(category, limit);
|
|
205
|
+
return rows.map(r => r.content);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
try {
|
|
209
|
+
const rows = db.prepare(`
|
|
210
|
+
SELECT content FROM facts ${where}
|
|
211
|
+
ORDER BY confidence DESC
|
|
212
|
+
LIMIT ?
|
|
213
|
+
`).all(category, limit);
|
|
214
|
+
return rows.map(r => r.content);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
//# sourceMappingURL=fact-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fact-store.js","sourceRoot":"","sources":["../src/fact-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FTS5 query sanitizer — Bug Fix #2. (Moved here from brain-core during the
|
|
3
|
+
* storage-seam migration: FTS5 is a SQLite-dialect concern owned by the impl.
|
|
4
|
+
* brain-core re-exports `sanitizeFtsQuery` so its public API is unchanged, and
|
|
5
|
+
* a Stage-3 libsql impl — which keeps FTS5 — can share this verbatim.)
|
|
6
|
+
*
|
|
7
|
+
* KAD's naive sanitizer (`replace(/[?.,!'"]/g, '')`) silently breaks on:
|
|
8
|
+
* - Hyphenated terms: "post-mortem" → FTS5 reads as "post NOT mortem"
|
|
9
|
+
* - Unicode: "café" — the quote-strip mangled accented chars
|
|
10
|
+
* - FTS5 operator tokens: bare AND/OR/NOT/NEAR are taken as operators
|
|
11
|
+
* - Quoted phrases: embedded quotes broke the MATCH string
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Convert a natural-language query into a safe FTS5 MATCH expression.
|
|
15
|
+
*
|
|
16
|
+
* Strategy:
|
|
17
|
+
* - Normalize unicode (NFC)
|
|
18
|
+
* - Split on whitespace
|
|
19
|
+
* - Strip leading/trailing punctuation from each token
|
|
20
|
+
* - Replace hyphens with spaces (FTS5 leading `-` = NOT operator)
|
|
21
|
+
* - Drop FTS5 reserved operator words
|
|
22
|
+
* - Drop tokens shorter than 2 chars
|
|
23
|
+
* - Double-quote each token so FTS5 treats it as a literal phrase
|
|
24
|
+
* - Join with OR for broad matching
|
|
25
|
+
*
|
|
26
|
+
* Returns empty string when no usable tokens remain; callers must
|
|
27
|
+
* skip the FTS query entirely on empty string to avoid a syntax error.
|
|
28
|
+
*/
|
|
29
|
+
export declare function sanitizeFtsQuery(query: string): string;
|
|
30
|
+
//# sourceMappingURL=fts-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fts-sanitizer.d.ts","sourceRoot":"","sources":["../src/fts-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BtD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FTS5 query sanitizer — Bug Fix #2. (Moved here from brain-core during the
|
|
3
|
+
* storage-seam migration: FTS5 is a SQLite-dialect concern owned by the impl.
|
|
4
|
+
* brain-core re-exports `sanitizeFtsQuery` so its public API is unchanged, and
|
|
5
|
+
* a Stage-3 libsql impl — which keeps FTS5 — can share this verbatim.)
|
|
6
|
+
*
|
|
7
|
+
* KAD's naive sanitizer (`replace(/[?.,!'"]/g, '')`) silently breaks on:
|
|
8
|
+
* - Hyphenated terms: "post-mortem" → FTS5 reads as "post NOT mortem"
|
|
9
|
+
* - Unicode: "café" — the quote-strip mangled accented chars
|
|
10
|
+
* - FTS5 operator tokens: bare AND/OR/NOT/NEAR are taken as operators
|
|
11
|
+
* - Quoted phrases: embedded quotes broke the MATCH string
|
|
12
|
+
*/
|
|
13
|
+
const FTS5_RESERVED = new Set(['NEAR', 'AND', 'OR', 'NOT']);
|
|
14
|
+
/**
|
|
15
|
+
* Convert a natural-language query into a safe FTS5 MATCH expression.
|
|
16
|
+
*
|
|
17
|
+
* Strategy:
|
|
18
|
+
* - Normalize unicode (NFC)
|
|
19
|
+
* - Split on whitespace
|
|
20
|
+
* - Strip leading/trailing punctuation from each token
|
|
21
|
+
* - Replace hyphens with spaces (FTS5 leading `-` = NOT operator)
|
|
22
|
+
* - Drop FTS5 reserved operator words
|
|
23
|
+
* - Drop tokens shorter than 2 chars
|
|
24
|
+
* - Double-quote each token so FTS5 treats it as a literal phrase
|
|
25
|
+
* - Join with OR for broad matching
|
|
26
|
+
*
|
|
27
|
+
* Returns empty string when no usable tokens remain; callers must
|
|
28
|
+
* skip the FTS query entirely on empty string to avoid a syntax error.
|
|
29
|
+
*/
|
|
30
|
+
export function sanitizeFtsQuery(query) {
|
|
31
|
+
const normalized = query.normalize('NFC');
|
|
32
|
+
const rawTokens = normalized.split(/\s+/).filter(Boolean);
|
|
33
|
+
const quoted = [];
|
|
34
|
+
for (const raw of rawTokens) {
|
|
35
|
+
// Strip leading/trailing punctuation (preserve inner chars including unicode)
|
|
36
|
+
const stripped = raw.replace(/^[.,!?;:'"()\[\]{}|\\^*]+|[.,!?;:'"()\[\]{}|\\^*]+$/g, '');
|
|
37
|
+
if (!stripped)
|
|
38
|
+
continue;
|
|
39
|
+
// Replace hyphens with spaces — FTS5 treats leading "-" as NOT operator
|
|
40
|
+
const dehyphenated = stripped.replace(/-/g, ' ').trim();
|
|
41
|
+
if (!dehyphenated)
|
|
42
|
+
continue;
|
|
43
|
+
// Split any sub-tokens produced by hyphen removal
|
|
44
|
+
for (const sub of dehyphenated.split(/\s+/)) {
|
|
45
|
+
if (sub.length < 2)
|
|
46
|
+
continue;
|
|
47
|
+
// Skip bare FTS5 reserved words
|
|
48
|
+
if (FTS5_RESERVED.has(sub.toUpperCase()))
|
|
49
|
+
continue;
|
|
50
|
+
// Escape embedded double-quotes and wrap in quotes
|
|
51
|
+
const escaped = sub.replace(/"/g, '');
|
|
52
|
+
if (!escaped)
|
|
53
|
+
continue;
|
|
54
|
+
quoted.push(`"${escaped}"`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return quoted.join(' OR ');
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=fts-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fts-sanitizer.js","sourceRoot":"","sources":["../src/fts-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,sDAAsD,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,wEAAwE;QACxE,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,kDAAkD;QAClD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC7B,gCAAgC;YAChC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YACnD,mDAAmD;YACnD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
|
+
export { createSqliteStorageProvider } from './provider.js';
|
|
3
|
+
export { sanitizeFtsQuery } from './fts-sanitizer.js';
|
|
4
|
+
export { resetTimelineSchemaCache } from './timeline.js';
|
|
5
|
+
export { resetEntityGraphSchemaCache } from './entity-graph.js';
|
|
2
6
|
import type { TenantContext } from '@kybernesis/brain-contracts';
|
|
3
7
|
export type DbKind = 'timeline' | 'entityGraph' | 'vectors' | 'sleep' | 'idempotency';
|
|
4
8
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;AAgBtF;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAevE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOjD;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAK/B"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
2
|
import { mkdirSync } from 'node:fs';
|
|
3
3
|
import { dirname } from 'node:path';
|
|
4
|
+
export { createSqliteStorageProvider } from './provider.js';
|
|
5
|
+
export { sanitizeFtsQuery } from './fts-sanitizer.js';
|
|
6
|
+
export { resetTimelineSchemaCache } from './timeline.js';
|
|
7
|
+
export { resetEntityGraphSchemaCache } from './entity-graph.js';
|
|
4
8
|
const pool = new Map();
|
|
5
9
|
function resolveDbPath(t, kind) {
|
|
6
10
|
switch (kind) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAKhE,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6B,CAAC;AAElD,SAAS,aAAa,CAAC,CAAgB,EAAE,IAAY;IACnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAI,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;QAClD,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACrD,KAAK,SAAS,CAAC,CAAK,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;QACjD,KAAK,OAAO,CAAC,CAAO,OAAO,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;QAC/C,KAAK,aAAa;YAChB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,4BAA4B,CAAC,CAAC;YACtG,OAAO,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,CAAgB,EAAE,IAAY;IAClD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC;YAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite StorageProvider — the default backend wired by brain-core's seam.
|
|
3
|
+
*
|
|
4
|
+
* The persistence stores (timeline, entities, facts) + the minimal sleep read +
|
|
5
|
+
* the lazy vector store are all real as of 0.3.0. The sleep maintenance engine,
|
|
6
|
+
* hybrid-search, and fact-retrieval remain on guarded direct getDb (deferred to
|
|
7
|
+
* 0.4.0 — see docs/specs/storage-architecture-0.3-and-0.4.md).
|
|
8
|
+
*
|
|
9
|
+
* The SQL that lands here is moved verbatim (port-faithful) from the
|
|
10
|
+
* corresponding brain-core module; behaviour is held constant.
|
|
11
|
+
*/
|
|
12
|
+
import type { StorageProvider } from '@kybernesis/brain-contracts';
|
|
13
|
+
/** Reset the lazy vec-store cache (test/utility). */
|
|
14
|
+
export declare function resetLazyVectorStore(): void;
|
|
15
|
+
export declare function createSqliteStorageProvider(): StorageProvider;
|
|
16
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AA6BrC,qDAAqD;AACrD,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AA6BD,wBAAgB,2BAA2B,IAAI,eAAe,CAQ7D"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite StorageProvider — the default backend wired by brain-core's seam.
|
|
3
|
+
*
|
|
4
|
+
* The persistence stores (timeline, entities, facts) + the minimal sleep read +
|
|
5
|
+
* the lazy vector store are all real as of 0.3.0. The sleep maintenance engine,
|
|
6
|
+
* hybrid-search, and fact-retrieval remain on guarded direct getDb (deferred to
|
|
7
|
+
* 0.4.0 — see docs/specs/storage-architecture-0.3-and-0.4.md).
|
|
8
|
+
*
|
|
9
|
+
* The SQL that lands here is moved verbatim (port-faithful) from the
|
|
10
|
+
* corresponding brain-core module; behaviour is held constant.
|
|
11
|
+
*/
|
|
12
|
+
import { sqliteFactStore } from './fact-store.js';
|
|
13
|
+
import { sqliteTimelineStore } from './timeline.js';
|
|
14
|
+
import { sqliteEntityGraphStore } from './entity-graph.js';
|
|
15
|
+
import { sqliteSleepStore } from './sleep-store.js';
|
|
16
|
+
// ─── Lazy vector store ────────────────────────────────────────────────────────
|
|
17
|
+
// VectorStore is a first-class member of the bundle (decision #3 Option A), but
|
|
18
|
+
// brain-storage-vec carries the sqlite-vec NATIVE binary. We load it lazily on
|
|
19
|
+
// first vector use so it never costs apps anything at provider-creation time,
|
|
20
|
+
// and brain-storage-sqlite keeps NO static dependency on sqlite-vec. If the
|
|
21
|
+
// package can't be loaded (not installed / wrong platform), the store degrades
|
|
22
|
+
// to safe no-ops — brain-core's vectors layer maps these to its graceful results.
|
|
23
|
+
let _vecStore = null;
|
|
24
|
+
let _vecAttempted = false;
|
|
25
|
+
async function loadVecStore() {
|
|
26
|
+
if (_vecAttempted)
|
|
27
|
+
return _vecStore;
|
|
28
|
+
_vecAttempted = true;
|
|
29
|
+
try {
|
|
30
|
+
const mod = await import('@kybernesis/brain-storage-vec');
|
|
31
|
+
_vecStore = mod.sqliteVecStore;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
_vecStore = null;
|
|
35
|
+
}
|
|
36
|
+
return _vecStore;
|
|
37
|
+
}
|
|
38
|
+
/** Reset the lazy vec-store cache (test/utility). */
|
|
39
|
+
export function resetLazyVectorStore() {
|
|
40
|
+
_vecStore = null;
|
|
41
|
+
_vecAttempted = false;
|
|
42
|
+
}
|
|
43
|
+
const lazyVectorStore = {
|
|
44
|
+
async available(t) {
|
|
45
|
+
const s = await loadVecStore();
|
|
46
|
+
return s ? s.available(t) : false;
|
|
47
|
+
},
|
|
48
|
+
async hasOrigin(t, originId) {
|
|
49
|
+
const s = await loadVecStore();
|
|
50
|
+
if (!s)
|
|
51
|
+
return false;
|
|
52
|
+
return s.hasOrigin(t, originId);
|
|
53
|
+
},
|
|
54
|
+
async insertChunk(t, chunk) {
|
|
55
|
+
const s = await loadVecStore();
|
|
56
|
+
if (!s)
|
|
57
|
+
throw new Error('[brain-storage-sqlite] vector backend unavailable');
|
|
58
|
+
return s.insertChunk(t, chunk);
|
|
59
|
+
},
|
|
60
|
+
async search(t, embedding, limit) {
|
|
61
|
+
const s = await loadVecStore();
|
|
62
|
+
if (!s)
|
|
63
|
+
return [];
|
|
64
|
+
return s.search(t, embedding, limit);
|
|
65
|
+
},
|
|
66
|
+
async stats(t) {
|
|
67
|
+
const s = await loadVecStore();
|
|
68
|
+
if (!s)
|
|
69
|
+
return { count: 0, available: false };
|
|
70
|
+
return s.stats(t);
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
export function createSqliteStorageProvider() {
|
|
74
|
+
return {
|
|
75
|
+
timeline: sqliteTimelineStore,
|
|
76
|
+
entities: sqliteEntityGraphStore,
|
|
77
|
+
facts: sqliteFactStore,
|
|
78
|
+
sleep: sqliteSleepStore,
|
|
79
|
+
vectors: lazyVectorStore,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,iFAAiF;AACjF,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,+EAA+E;AAC/E,kFAAkF;AAElF,IAAI,SAAS,GAAuB,IAAI,CAAC;AACzC,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B,KAAK,UAAU,YAAY;IACzB,IAAI,aAAa;QAAE,OAAO,SAAS,CAAC;IACpC,aAAa,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAC1D,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,oBAAoB;IAClC,SAAS,GAAG,IAAI,CAAC;IACjB,aAAa,GAAG,KAAK,CAAC;AACxB,CAAC;AAED,MAAM,eAAe,GAAgB;IACnC,KAAK,CAAC,SAAS,CAAC,CAAgB;QAC9B,MAAM,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,CAAgB,EAAE,QAAgB;QAChD,MAAM,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrB,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,CAAgB,EAAE,KAAuB;QACzD,MAAM,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC7E,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAgB,EAAE,SAAmB,EAAE,KAAa;QAC/D,MAAM,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,CAAgB;QAC1B,MAAM,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,eAAe;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SleepStore (SQLite impl) — minimal 0.3.0 surface.
|
|
3
|
+
*
|
|
4
|
+
* The sleep maintenance engine is DEFERRED to 0.4.0 (it stays on direct
|
|
5
|
+
* getDb/ensureSleepSchema in brain-core/sleep/**). The only sleep-table access a
|
|
6
|
+
* migrated 0.3.0 module needs is ops.ts reading memory_edges, so that is all this
|
|
7
|
+
* store implements. The read is tolerant of the table not existing yet (no sleep
|
|
8
|
+
* run has happened) — matching ops.ts's original try/catch behaviour.
|
|
9
|
+
*/
|
|
10
|
+
import type { SleepStore } from '@kybernesis/brain-contracts';
|
|
11
|
+
export declare const sqliteSleepStore: SleepStore;
|
|
12
|
+
//# sourceMappingURL=sleep-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep-store.d.ts","sourceRoot":"","sources":["../src/sleep-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAiB,MAAM,6BAA6B,CAAC;AAG5F,eAAO,MAAM,gBAAgB,EAAE,UAiB9B,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SleepStore (SQLite impl) — minimal 0.3.0 surface.
|
|
3
|
+
*
|
|
4
|
+
* The sleep maintenance engine is DEFERRED to 0.4.0 (it stays on direct
|
|
5
|
+
* getDb/ensureSleepSchema in brain-core/sleep/**). The only sleep-table access a
|
|
6
|
+
* migrated 0.3.0 module needs is ops.ts reading memory_edges, so that is all this
|
|
7
|
+
* store implements. The read is tolerant of the table not existing yet (no sleep
|
|
8
|
+
* run has happened) — matching ops.ts's original try/catch behaviour.
|
|
9
|
+
*/
|
|
10
|
+
import { getDb } from './index.js';
|
|
11
|
+
export const sqliteSleepStore = {
|
|
12
|
+
async getRelatedEdges(t, sourcePath, limit) {
|
|
13
|
+
let db;
|
|
14
|
+
try {
|
|
15
|
+
db = getDb(t, 'sleep');
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return db.prepare(`
|
|
22
|
+
SELECT CASE WHEN from_path = ? THEN to_path ELSE from_path END as related_path,
|
|
23
|
+
confidence, shared_tags
|
|
24
|
+
FROM memory_edges
|
|
25
|
+
WHERE from_path = ? OR to_path = ?
|
|
26
|
+
ORDER BY confidence DESC LIMIT ?
|
|
27
|
+
`).all(sourcePath, sourcePath, sourcePath, limit);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// memory_edges may not exist yet (no sleep run has created the schema)
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=sleep-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep-store.js","sourceRoot":"","sources":["../src/sleep-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,KAAK,CAAC,eAAe,CAAC,CAAgB,EAAE,UAAkB,EAAE,KAAa;QACvE,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YAAC,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QACpD,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;OAMjB,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAoB,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TimelineStore (SQLite impl). SQL moved verbatim from brain-core/timeline.ts
|
|
3
|
+
* during the storage-seam migration (G2) — behaviour held constant.
|
|
4
|
+
* ensureSchema creates timeline_events + timeline_fts + the facts TABLE (the
|
|
5
|
+
* facts FTS index is owned by FactStore.ensureFactsTable).
|
|
6
|
+
*/
|
|
7
|
+
import type { TimelineStore } from '@kybernesis/brain-contracts';
|
|
8
|
+
/** Test/utility hook — clears the per-slug schema-init cache. */
|
|
9
|
+
export declare function resetTimelineSchemaCache(slug?: string): void;
|
|
10
|
+
export declare const sqliteTimelineStore: TimelineStore;
|
|
11
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAOV,aAAa,EACd,MAAM,6BAA6B,CAAC;AAwDrC,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAG5D;AAuGD,eAAO,MAAM,mBAAmB,EAAE,aAiNjC,CAAC"}
|