@kybernesis/brain-core 0.1.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.
Files changed (129) hide show
  1. package/dist/claude-call.d.ts +37 -0
  2. package/dist/claude-call.d.ts.map +1 -0
  3. package/dist/claude-call.js +55 -0
  4. package/dist/claude-call.js.map +1 -0
  5. package/dist/entity-graph.d.ts +79 -0
  6. package/dist/entity-graph.d.ts.map +1 -0
  7. package/dist/entity-graph.js +611 -0
  8. package/dist/entity-graph.js.map +1 -0
  9. package/dist/fact-contradiction.d.ts +25 -0
  10. package/dist/fact-contradiction.d.ts.map +1 -0
  11. package/dist/fact-contradiction.js +109 -0
  12. package/dist/fact-contradiction.js.map +1 -0
  13. package/dist/fact-extractor.d.ts +26 -0
  14. package/dist/fact-extractor.d.ts.map +1 -0
  15. package/dist/fact-extractor.js +98 -0
  16. package/dist/fact-extractor.js.map +1 -0
  17. package/dist/fact-retrieval.d.ts +51 -0
  18. package/dist/fact-retrieval.d.ts.map +1 -0
  19. package/dist/fact-retrieval.js +401 -0
  20. package/dist/fact-retrieval.js.map +1 -0
  21. package/dist/fact-store.d.ts +26 -0
  22. package/dist/fact-store.d.ts.map +1 -0
  23. package/dist/fact-store.js +181 -0
  24. package/dist/fact-store.js.map +1 -0
  25. package/dist/fact-temporal.d.ts +20 -0
  26. package/dist/fact-temporal.d.ts.map +1 -0
  27. package/dist/fact-temporal.js +79 -0
  28. package/dist/fact-temporal.js.map +1 -0
  29. package/dist/fts-sanitizer.d.ts +32 -0
  30. package/dist/fts-sanitizer.d.ts.map +1 -0
  31. package/dist/fts-sanitizer.js +61 -0
  32. package/dist/fts-sanitizer.js.map +1 -0
  33. package/dist/hybrid-search.d.ts +44 -0
  34. package/dist/hybrid-search.d.ts.map +1 -0
  35. package/dist/hybrid-search.js +410 -0
  36. package/dist/hybrid-search.js.map +1 -0
  37. package/dist/index.d.ts +33 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +19 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/ops.d.ts +28 -0
  42. package/dist/ops.d.ts.map +1 -0
  43. package/dist/ops.js +307 -0
  44. package/dist/ops.js.map +1 -0
  45. package/dist/queue.d.ts +13 -0
  46. package/dist/queue.d.ts.map +1 -0
  47. package/dist/queue.js +28 -0
  48. package/dist/queue.js.map +1 -0
  49. package/dist/relationship-extractor.d.ts +38 -0
  50. package/dist/relationship-extractor.d.ts.map +1 -0
  51. package/dist/relationship-extractor.js +119 -0
  52. package/dist/relationship-extractor.js.map +1 -0
  53. package/dist/sleep/config.d.ts +47 -0
  54. package/dist/sleep/config.d.ts.map +1 -0
  55. package/dist/sleep/config.js +46 -0
  56. package/dist/sleep/config.js.map +1 -0
  57. package/dist/sleep/db.d.ts +16 -0
  58. package/dist/sleep/db.d.ts.map +1 -0
  59. package/dist/sleep/db.js +114 -0
  60. package/dist/sleep/db.js.map +1 -0
  61. package/dist/sleep/index.d.ts +69 -0
  62. package/dist/sleep/index.d.ts.map +1 -0
  63. package/dist/sleep/index.js +99 -0
  64. package/dist/sleep/index.js.map +1 -0
  65. package/dist/sleep/steps/consolidate.d.ts +19 -0
  66. package/dist/sleep/steps/consolidate.d.ts.map +1 -0
  67. package/dist/sleep/steps/consolidate.js +74 -0
  68. package/dist/sleep/steps/consolidate.js.map +1 -0
  69. package/dist/sleep/steps/decay.d.ts +19 -0
  70. package/dist/sleep/steps/decay.d.ts.map +1 -0
  71. package/dist/sleep/steps/decay.js +121 -0
  72. package/dist/sleep/steps/decay.js.map +1 -0
  73. package/dist/sleep/steps/entity-hygiene.d.ts +29 -0
  74. package/dist/sleep/steps/entity-hygiene.d.ts.map +1 -0
  75. package/dist/sleep/steps/entity-hygiene.js +452 -0
  76. package/dist/sleep/steps/entity-hygiene.js.map +1 -0
  77. package/dist/sleep/steps/link.d.ts +20 -0
  78. package/dist/sleep/steps/link.d.ts.map +1 -0
  79. package/dist/sleep/steps/link.js +216 -0
  80. package/dist/sleep/steps/link.js.map +1 -0
  81. package/dist/sleep/steps/observe.d.ts +17 -0
  82. package/dist/sleep/steps/observe.d.ts.map +1 -0
  83. package/dist/sleep/steps/observe.js +192 -0
  84. package/dist/sleep/steps/observe.js.map +1 -0
  85. package/dist/sleep/steps/profile.d.ts +15 -0
  86. package/dist/sleep/steps/profile.d.ts.map +1 -0
  87. package/dist/sleep/steps/profile.js +26 -0
  88. package/dist/sleep/steps/profile.js.map +1 -0
  89. package/dist/sleep/steps/reasoning.d.ts +19 -0
  90. package/dist/sleep/steps/reasoning.d.ts.map +1 -0
  91. package/dist/sleep/steps/reasoning.js +173 -0
  92. package/dist/sleep/steps/reasoning.js.map +1 -0
  93. package/dist/sleep/steps/summarize.d.ts +21 -0
  94. package/dist/sleep/steps/summarize.d.ts.map +1 -0
  95. package/dist/sleep/steps/summarize.js +206 -0
  96. package/dist/sleep/steps/summarize.js.map +1 -0
  97. package/dist/sleep/steps/tag.d.ts +16 -0
  98. package/dist/sleep/steps/tag.d.ts.map +1 -0
  99. package/dist/sleep/steps/tag.js +84 -0
  100. package/dist/sleep/steps/tag.js.map +1 -0
  101. package/dist/sleep/steps/tier.d.ts +18 -0
  102. package/dist/sleep/steps/tier.d.ts.map +1 -0
  103. package/dist/sleep/steps/tier.js +112 -0
  104. package/dist/sleep/steps/tier.js.map +1 -0
  105. package/dist/sleep/utils/checkpoint.d.ts +11 -0
  106. package/dist/sleep/utils/checkpoint.d.ts.map +1 -0
  107. package/dist/sleep/utils/checkpoint.js +26 -0
  108. package/dist/sleep/utils/checkpoint.js.map +1 -0
  109. package/dist/sleep/utils/jaccard.d.ts +7 -0
  110. package/dist/sleep/utils/jaccard.d.ts.map +1 -0
  111. package/dist/sleep/utils/jaccard.js +19 -0
  112. package/dist/sleep/utils/jaccard.js.map +1 -0
  113. package/dist/store-conversation.d.ts +29 -0
  114. package/dist/store-conversation.d.ts.map +1 -0
  115. package/dist/store-conversation.js +227 -0
  116. package/dist/store-conversation.js.map +1 -0
  117. package/dist/timeline.d.ts +50 -0
  118. package/dist/timeline.d.ts.map +1 -0
  119. package/dist/timeline.js +389 -0
  120. package/dist/timeline.js.map +1 -0
  121. package/dist/user-profile.d.ts +30 -0
  122. package/dist/user-profile.d.ts.map +1 -0
  123. package/dist/user-profile.js +147 -0
  124. package/dist/user-profile.js.map +1 -0
  125. package/dist/vectors.d.ts +56 -0
  126. package/dist/vectors.d.ts.map +1 -0
  127. package/dist/vectors.js +132 -0
  128. package/dist/vectors.js.map +1 -0
  129. package/package.json +53 -0
@@ -0,0 +1,410 @@
1
+ /**
2
+ * Hybrid search — port of KAD's hybrid-search.ts.
3
+ *
4
+ * Combines semantic search (vectors), keyword search (FTS5), and temporal
5
+ * search. Uses Reciprocal Rank Fusion (RRF k=60) to merge ranked lists.
6
+ *
7
+ * Bug Fix #3: the null `getSleepDb` stub that made sleep-edge enrichment
8
+ * dead code has been deleted. Uses `getDb(t, 'sleep')` directly.
9
+ */
10
+ import { getDb } from '@kybernesis/brain-storage-sqlite';
11
+ import { semanticSearch } from './vectors.js';
12
+ import { callClaude } from './claude-call.js';
13
+ // ─── RRF ─────────────────────────────────────────────────────────────────────
14
+ function reciprocalRankFusion(lists, k = 60) {
15
+ const fused = new Map();
16
+ for (const list of lists) {
17
+ const sorted = [...list].sort((a, b) => b.score - a.score);
18
+ for (let rank = 0; rank < sorted.length; rank++) {
19
+ const item = sorted[rank];
20
+ const contribution = 1 / (k + rank + 1);
21
+ const existing = fused.get(item.source_path);
22
+ if (existing) {
23
+ existing.rrfScore += contribution;
24
+ if (item.data['content'] && String(item.data['content']).length > String(existing.data['content'] ?? '').length) {
25
+ Object.assign(existing.data, item.data);
26
+ }
27
+ }
28
+ else {
29
+ fused.set(item.source_path, { rrfScore: contribution, data: { ...item.data } });
30
+ }
31
+ }
32
+ }
33
+ return fused;
34
+ }
35
+ // ─── Temporal search channel ──────────────────────────────────────────────────
36
+ async function temporalSearch(t, query, limit) {
37
+ const datePatterns = [
38
+ /\b(january|february|march|april|may|june|july|august|september|october|november|december)\b/gi,
39
+ /\b(20\d{2})\b/g,
40
+ /\b(\d{1,2})\s+(january|february|march|april|may|june|july|august|september|october|november|december)/gi,
41
+ ];
42
+ const dateTerms = [];
43
+ for (const p of datePatterns) {
44
+ const m = query.match(p);
45
+ if (m)
46
+ dateTerms.push(...m);
47
+ }
48
+ if (dateTerms.length === 0)
49
+ return [];
50
+ const db = getDb(t, 'timeline');
51
+ const results = [];
52
+ for (const term of dateTerms) {
53
+ try {
54
+ const rows = db.prepare(`
55
+ SELECT id, title, summary, source_path, timestamp, type
56
+ FROM timeline_events
57
+ WHERE LOWER(title) LIKE ? OR LOWER(summary) LIKE ?
58
+ ORDER BY timestamp DESC LIMIT ?
59
+ `).all(`%${term.toLowerCase()}%`, `%${term.toLowerCase()}%`, limit);
60
+ for (const row of rows) {
61
+ results.push({
62
+ source_path: row.source_path,
63
+ score: 1.0,
64
+ data: {
65
+ id: String(row.id), title: row.title, content: row.summary || '',
66
+ source_path: row.source_path, timestamp: row.timestamp, type: row.type,
67
+ },
68
+ });
69
+ }
70
+ }
71
+ catch { /* best-effort */ }
72
+ }
73
+ return results;
74
+ }
75
+ // ─── Haiku reranking (opt-in) ─────────────────────────────────────────────────
76
+ async function haikuRerank(query, candidates, limit) {
77
+ if (candidates.length <= 3)
78
+ return candidates;
79
+ const toRerank = candidates.slice(0, Math.min(20, candidates.length));
80
+ const numbered = toRerank.map((r, i) => `[${i + 1}] ${r.content.slice(0, 200)}`).join('\n');
81
+ const prompt = `Given the search query, rank these ${toRerank.length} text passages by relevance. Return ONLY a JSON array of the passage numbers in order of relevance, most relevant first. Example: [3, 1, 7, 2]
82
+
83
+ Query: "${query}"
84
+
85
+ Passages:
86
+ ${numbered}
87
+
88
+ Ranking (JSON array of numbers):`;
89
+ try {
90
+ const response = await callClaude(prompt, { maxTokens: 200 });
91
+ if (!response)
92
+ return candidates;
93
+ const match = response.match(/\[[\d,\s]+\]/);
94
+ if (!match)
95
+ return candidates;
96
+ const ranking = JSON.parse(match[0]);
97
+ const reranked = [];
98
+ for (const idx of ranking) {
99
+ const i = idx - 1;
100
+ if (i >= 0 && i < toRerank.length) {
101
+ const r = toRerank[i];
102
+ r.hybridScore = 1.0 - reranked.length * 0.05;
103
+ reranked.push(r);
104
+ }
105
+ }
106
+ for (const c of toRerank) {
107
+ if (!reranked.includes(c)) {
108
+ c.hybridScore = 0.1;
109
+ reranked.push(c);
110
+ }
111
+ }
112
+ reranked.push(...candidates.slice(20));
113
+ return reranked.slice(0, limit);
114
+ }
115
+ catch (err) {
116
+ console.warn('[brain-core/hybrid-search] rerank failed, returning unranked', { err: String(err) });
117
+ return candidates;
118
+ }
119
+ }
120
+ // ─── Query expansion ──────────────────────────────────────────────────────────
121
+ function expandQueryTerms(query) {
122
+ const stopwords = new Set([
123
+ 'what', 'when', 'where', 'who', 'how', 'does', 'did', 'is', 'was',
124
+ 'are', 'were', 'the', 'a', 'an', 'in', 'on', 'at', 'to', 'for',
125
+ 'of', 'with', 'has', 'have', 'had', 'do', 'from', 'about', 'been',
126
+ 'they', 'this', 'that', 'would', 'could', 'should', 'which', 'will',
127
+ 'can', 'but', 'not', 'all', 'her', 'his', 'its', 'our', 'your',
128
+ ]);
129
+ const words = query.toLowerCase().replace(/[?.,!'"]/g, '').split(/\s+/)
130
+ .filter(w => w.length >= 3 && !stopwords.has(w));
131
+ if (words.length <= 3)
132
+ return [query];
133
+ const subs = [query];
134
+ for (let i = 0; i < words.length && subs.length < 5; i++) {
135
+ for (let j = i + 1; j < words.length && j < i + 3 && subs.length < 5; j++) {
136
+ subs.push(`${words[i]} ${words[j]}`);
137
+ }
138
+ }
139
+ return subs;
140
+ }
141
+ function metadataSearch(t, query, limit) {
142
+ const db = getDb(t, 'timeline');
143
+ const words = query.toLowerCase().split(/\s+/).filter(w => w.length >= 3);
144
+ if (words.length === 0)
145
+ return [];
146
+ const ftsQuery = words.join(' OR ');
147
+ let candidates = [];
148
+ try {
149
+ candidates = db.prepare(`
150
+ SELECT t.id, t.source_path, t.title, t.summary, t.type, t.timestamp,
151
+ t.tier, t.priority, t.tags_json
152
+ FROM timeline_events t
153
+ JOIN timeline_fts fts ON t.id = fts.rowid
154
+ WHERE timeline_fts MATCH ? ORDER BY rank LIMIT ?
155
+ `).all(ftsQuery, limit);
156
+ }
157
+ catch { /* FTS query failed (e.g. bad token) — candidates stays [] */ }
158
+ return candidates.map(r => {
159
+ let score = 0;
160
+ const titleL = (r.title || '').toLowerCase();
161
+ const summaryL = (r.summary || '').toLowerCase();
162
+ const parsed = JSON.parse(r.tags_json || '[]');
163
+ const tags = (Array.isArray(parsed) ? parsed :
164
+ (typeof parsed === 'string' ? parsed.split(',').map((s) => s.trim()) : [])).map((t) => t.toLowerCase());
165
+ for (const w of words) {
166
+ if (titleL === w)
167
+ score += 10;
168
+ else if (titleL.includes(w))
169
+ score += 5;
170
+ if (tags.includes(w))
171
+ score += 8;
172
+ else if (tags.some(t => t.includes(w)))
173
+ score += 4;
174
+ if (summaryL.includes(w))
175
+ score += 2;
176
+ }
177
+ score *= 1 + (r.priority || 0.5);
178
+ if (r.tier === 'hot')
179
+ score *= 1.2;
180
+ else if (r.tier === 'archive')
181
+ score *= 0.8;
182
+ return {
183
+ id: r.id, source_path: r.source_path, title: r.title, summary: r.summary,
184
+ type: r.type, timestamp: r.timestamp, tier: r.tier || 'warm',
185
+ priority: r.priority || 0.5, tags, score,
186
+ };
187
+ }).sort((a, b) => b.score - a.score);
188
+ }
189
+ // ─── Sleep-edge enrichment (Bug Fix #3) ──────────────────────────────────────
190
+ function addRelatedMemories(t, results) {
191
+ // Bug Fix #3: use real getDb(t, 'sleep') — the null stub from KAD is gone.
192
+ // sleep.db may not exist yet (it's seeded by the sleep pipeline in Day 4).
193
+ // Open gracefully; if the DB has no memory_edges table the query simply
194
+ // returns [] and we pass through unchanged.
195
+ let sleep = null;
196
+ try {
197
+ sleep = getDb(t, 'sleep');
198
+ }
199
+ catch {
200
+ return results;
201
+ }
202
+ for (const result of results) {
203
+ try {
204
+ const related = sleep.prepare(`
205
+ SELECT
206
+ CASE WHEN from_path = ? THEN to_path ELSE from_path END as related_path,
207
+ confidence
208
+ FROM memory_edges
209
+ WHERE from_path = ? OR to_path = ?
210
+ ORDER BY confidence DESC LIMIT 3
211
+ `).all(result.source_path, result.source_path, result.source_path);
212
+ if (related.length > 0)
213
+ result.relatedMemories = related.map(r => r.related_path);
214
+ }
215
+ catch { /* memory_edges may not exist yet */ }
216
+ }
217
+ return results;
218
+ }
219
+ // ─── Enrichment ───────────────────────────────────────────────────────────────
220
+ function enrichResults(t, merged) {
221
+ const needs = Array.from(merged.values()).filter(r => !r.tier || !r.tags);
222
+ if (needs.length === 0)
223
+ return;
224
+ const db = getDb(t, 'timeline');
225
+ for (const result of needs) {
226
+ try {
227
+ const row = db.prepare(`
228
+ SELECT tier, priority, tags_json, entities_json FROM timeline_events WHERE source_path = ?
229
+ `).get(result.source_path);
230
+ if (row) {
231
+ result.tier = row.tier || 'warm';
232
+ result.priority = row.priority ?? 0.5;
233
+ const parsed = JSON.parse(row.tags_json || '[]');
234
+ result.tags = Array.isArray(parsed) ? parsed :
235
+ (typeof parsed === 'string' ? parsed.split(',').map((s) => s.trim()).filter(Boolean) : []);
236
+ result.hybridScore *= 1 + (result.priority || 0.5);
237
+ if (result.tier === 'hot')
238
+ result.hybridScore *= 1.2;
239
+ else if (result.tier === 'archive')
240
+ result.hybridScore *= 0.8;
241
+ }
242
+ }
243
+ catch { /* non-critical */ }
244
+ }
245
+ }
246
+ // ─── Main ─────────────────────────────────────────────────────────────────────
247
+ export async function hybridSearch(t, query, options = {}) {
248
+ const { limit = 20, tier = 'all', minPriority = 0, includeRelated = true, type, entity, entityMatch = 'all', after, before, expandQuery = false, factFirst = false, rerank = false, } = options;
249
+ // Fact-first delegation
250
+ if (factFirst) {
251
+ const { factFirstSearch } = await import('./fact-retrieval.js');
252
+ const result = await factFirstSearch(t, query, { limit, tokenBudget: 4000, includeSupporting: true });
253
+ return result.facts.map(f => ({
254
+ id: String(f.id), title: `[${f.category}] ${f.content.slice(0, 80)}`,
255
+ content: f.content, source_path: `fact://${f.id}`, timestamp: f.timestamp,
256
+ type: 'note', semanticScore: f.score, metadataScore: 0,
257
+ hybridScore: f.score, matchType: 'semantic',
258
+ }));
259
+ }
260
+ const queries = expandQuery ? expandQueryTerms(query) : [query];
261
+ // Channel 1: semantic
262
+ let semanticResults = [];
263
+ for (const q of queries) {
264
+ try {
265
+ const r = await semanticSearch(t, q, { limit: limit * 3, type });
266
+ semanticResults.push(...r);
267
+ }
268
+ catch { /* semantic unavailable */ }
269
+ }
270
+ const seenPaths = new Map();
271
+ for (const r of semanticResults) {
272
+ const ex = seenPaths.get(r.metadata.source_path);
273
+ if (!ex || r.distance < ex.distance)
274
+ seenPaths.set(r.metadata.source_path, r);
275
+ }
276
+ semanticResults = Array.from(seenPaths.values());
277
+ const semanticList = semanticResults.map(r => ({
278
+ source_path: r.metadata.source_path,
279
+ score: 1 - r.distance,
280
+ data: {
281
+ id: r.id, title: r.metadata.title || 'Untitled', content: r.content,
282
+ source_path: r.metadata.source_path, timestamp: r.metadata.timestamp,
283
+ type: r.metadata.type,
284
+ },
285
+ }));
286
+ // Channel 2: metadata keyword
287
+ const metaResults = metadataSearch(t, query, limit * 3);
288
+ const metaList = metaResults.map(r => ({
289
+ source_path: r.source_path, score: r.score,
290
+ data: {
291
+ id: String(r.id), title: r.title, content: r.summary || '',
292
+ source_path: r.source_path, timestamp: r.timestamp, type: r.type,
293
+ tier: r.tier, priority: r.priority, tags: r.tags,
294
+ },
295
+ }));
296
+ // Channel 3: temporal
297
+ const temporalList = await temporalSearch(t, query, limit * 3);
298
+ // Channel 4: entity graph augmentation
299
+ const entityList = [];
300
+ if (expandQuery) {
301
+ try {
302
+ const db = getDb(t, 'timeline');
303
+ const entityDb = getDb(t, 'entityGraph');
304
+ const queryLower = query.toLowerCase();
305
+ const allEntities = entityDb.prepare('SELECT id, name FROM entities ORDER BY mention_count DESC LIMIT 100').all();
306
+ const matched = allEntities.filter(e => queryLower.includes(e.name.toLowerCase()) && e.name.length >= 3);
307
+ for (const ent of matched.slice(0, 3)) {
308
+ const mentions = entityDb.prepare('SELECT DISTINCT source_path FROM entity_mentions WHERE entity_id = ? ORDER BY timestamp DESC LIMIT 10').all(ent.id);
309
+ for (const m of mentions) {
310
+ const event = db.prepare('SELECT id, title, summary, source_path, timestamp, type FROM timeline_events WHERE source_path = ?').get(m.source_path);
311
+ if (event) {
312
+ entityList.push({
313
+ source_path: event.source_path, score: 0.8,
314
+ data: {
315
+ id: String(event.id), title: event.title || '', content: event.summary || '',
316
+ source_path: event.source_path, timestamp: event.timestamp, type: event.type,
317
+ },
318
+ });
319
+ }
320
+ }
321
+ }
322
+ }
323
+ catch (err) {
324
+ console.warn('[brain-core/hybrid-search] entity augmentation failed', { err: String(err) });
325
+ }
326
+ }
327
+ // RRF fusion
328
+ const rankedLists = [semanticList, metaList];
329
+ if (temporalList.length > 0)
330
+ rankedLists.push(temporalList);
331
+ if (entityList.length > 0)
332
+ rankedLists.push(entityList);
333
+ const fused = reciprocalRankFusion(rankedLists);
334
+ const semanticPaths = new Set(semanticList.map(r => r.source_path));
335
+ const metaPaths = new Set(metaList.map(r => r.source_path));
336
+ const merged = new Map();
337
+ for (const [sourcePath, { rrfScore, data }] of fused) {
338
+ const inS = semanticPaths.has(sourcePath);
339
+ const inM = metaPaths.has(sourcePath);
340
+ const matchType = inS && inM ? 'both' : inS ? 'semantic' : 'keyword';
341
+ merged.set(sourcePath, {
342
+ id: String(data['id'] ?? sourcePath), title: String(data['title'] ?? 'Untitled'),
343
+ content: String(data['content'] ?? ''), source_path: sourcePath,
344
+ timestamp: String(data['timestamp'] ?? ''), type: String(data['type'] ?? 'note'),
345
+ tier: data['tier'],
346
+ priority: data['priority'],
347
+ tags: data['tags'],
348
+ semanticScore: inS ? rrfScore : 0, metadataScore: inM ? rrfScore : 0,
349
+ hybridScore: rrfScore, matchType,
350
+ });
351
+ }
352
+ // Segment dedup (MAX_SEGMENTS_PER_PARENT = 3)
353
+ const parentCounts = new Map();
354
+ const toRemove = [];
355
+ const sorted = Array.from(merged.entries()).sort((a, b) => b[1].hybridScore - a[1].hybridScore);
356
+ for (const [sp] of sorted) {
357
+ const parent = sp.replace(/\/seg_\d+$/, '');
358
+ const count = parentCounts.get(parent) || 0;
359
+ if (count >= 3) {
360
+ toRemove.push(sp);
361
+ }
362
+ else {
363
+ parentCounts.set(parent, count + 1);
364
+ }
365
+ }
366
+ for (const sp of toRemove)
367
+ merged.delete(sp);
368
+ // Enrich
369
+ enrichResults(t, merged);
370
+ // Filter + sort
371
+ let results = Array.from(merged.values()).filter(r => {
372
+ if (tier !== 'all' && r.tier && r.tier !== tier)
373
+ return false;
374
+ if (r.priority !== undefined && r.priority < minPriority)
375
+ return false;
376
+ if (type && r.type !== type)
377
+ return false;
378
+ if (entity) {
379
+ const targets = entity.split(',').map(e => e.trim().toLowerCase()).filter(Boolean);
380
+ const rTags = (r.tags || []).map(t => t.toLowerCase());
381
+ const titleL = r.title.toLowerCase();
382
+ const contentL = r.content.toLowerCase();
383
+ const matches = targets.map(tgt => rTags.some(t => t.includes(tgt)) || titleL.includes(tgt) || contentL.includes(tgt));
384
+ if (entityMatch === 'all' && !matches.every(Boolean))
385
+ return false;
386
+ if (entityMatch === 'any' && !matches.some(Boolean))
387
+ return false;
388
+ }
389
+ if (after || before) {
390
+ const ts = new Date(r.timestamp);
391
+ if (after && ts < after)
392
+ return false;
393
+ if (before && ts > before)
394
+ return false;
395
+ }
396
+ return true;
397
+ }).sort((a, b) => b.hybridScore - a.hybridScore);
398
+ if (rerank && results.length > 3) {
399
+ results = await haikuRerank(query, results, limit);
400
+ }
401
+ else {
402
+ results = results.slice(0, limit);
403
+ }
404
+ // Sleep-edge related memories (Bug Fix #3 — real DB, not null stub)
405
+ if (includeRelated && results.length > 0) {
406
+ results = addRelatedMemories(t, results);
407
+ }
408
+ return results;
409
+ }
410
+ //# sourceMappingURL=hybrid-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-search.js","sourceRoot":"","sources":["../src/hybrid-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export type { TenantContext } from '@kybernesis/brain-contracts';
2
+ export { enqueueWrite, queueDepth } from './queue.js';
3
+ export { addToTimeline, removeFromTimeline, updateTimelineEvent, deleteTimelineEventById, getEventById, getEventByPath, queryTimeline, getRecentActivity, getActivityOnDate, getActivityInRange, searchTimeline, findRecentDuplicate, incrementTimelineEventCount, getTimelineStats, addConversationToTimeline, addIdeaToTimeline, resetTimelineDb, } from './timeline.js';
4
+ export type { TimelineQuery, TimelineStats } from './timeline.js';
5
+ export { findOrCreateEntity, addEntityAlias, addEntityMention, linkEntities, linkEntitiesWithType, getTypedRelationships, linkEntitiesFromConversation, getEntityContext, searchEntities, getRecentEntities, getMostMentionedEntities, getEntityGraphStats, detectEntitiesInQuery, mergeEntities, deleteEntity, getEntityProfile, saveEntityProfile, createContradiction, getOpenContradictions, resolveContradiction, applyContradictions, saveEntityInsight, getEntityInsights, markInsightsStale, getEntitiesForReasoning, markEntityReasoned, pinEntity, listPinned, } from './entity-graph.js';
6
+ export type { ConversationEntity } from './entity-graph.js';
7
+ export { ensureFactsTable, storeFact, retractFact, reinforceFact, getFactById, getFactsForEntity, markFactSuperseded, factsCount, listFacts, listTemporalFacts, searchFactsFts, VALID_CATEGORIES, } from './fact-store.js';
8
+ export { sanitizeFtsQuery } from './fts-sanitizer.js';
9
+ export { setLLMProvider, resetLLMProvider, llmAvailable, callClaude, callClaudeJSON, } from './claude-call.js';
10
+ export type { LLMProvider } from './claude-call.js';
11
+ export { indexChunk, semanticSearch, vectorStats, setEmbeddingProvider, resetEmbeddingProvider, embeddingAvailable, EMBEDDING_DIM, } from './vectors.js';
12
+ export type { SearchResult, IndexChunkMeta, EmbeddingProvider, IndexChunkResult, } from './vectors.js';
13
+ export { runSleepCycleNow, ensureSleepSchema, recoverStaleSleepRuns, DEFAULT_CONFIG as SLEEP_DEFAULT_CONFIG, } from './sleep/index.js';
14
+ export type { SleepConfig, RunMetrics as SleepRunMetrics } from './sleep/index.js';
15
+ export { jaccardSimilarity, jaccardSimilarityArrays } from './sleep/utils/jaccard.js';
16
+ export { detectTemporalExpiry } from './fact-temporal.js';
17
+ export type { TemporalResult } from './fact-temporal.js';
18
+ export { extractRelationships, formatRelationship } from './relationship-extractor.js';
19
+ export type { ExtractedRelationship, RelationshipExtractionResult } from './relationship-extractor.js';
20
+ export { extractFactsRealtime } from './fact-extractor.js';
21
+ export { detectContradictions } from './fact-contradiction.js';
22
+ export type { ContradictionResult } from './fact-contradiction.js';
23
+ export { generateUserProfile, getCachedProfile, cacheProfile, getProfileAge, formatProfileForPrompt, } from './user-profile.js';
24
+ export type { UserProfile } from './user-profile.js';
25
+ export { factFirstSearch } from './fact-retrieval.js';
26
+ export type { FactSearchOptions, FactSearchResult } from './fact-retrieval.js';
27
+ export { hybridSearch } from './hybrid-search.js';
28
+ export type { HybridSearchResult, HybridSearchOptions } from './hybrid-search.js';
29
+ export { storeConversation, filterNoiseEntities, isStoreActive, } from './store-conversation.js';
30
+ export type { ConversationInput } from './store-conversation.js';
31
+ export { formatRecall, formatTimelineRich, formatSearchRich, } from './ops.js';
32
+ export type { TimelineFormatOpts, SearchFormatOpts } from './ops.js';
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ export { enqueueWrite, queueDepth } from './queue.js';
2
+ export { addToTimeline, removeFromTimeline, updateTimelineEvent, deleteTimelineEventById, getEventById, getEventByPath, queryTimeline, getRecentActivity, getActivityOnDate, getActivityInRange, searchTimeline, findRecentDuplicate, incrementTimelineEventCount, getTimelineStats, addConversationToTimeline, addIdeaToTimeline, resetTimelineDb, } from './timeline.js';
3
+ export { findOrCreateEntity, addEntityAlias, addEntityMention, linkEntities, linkEntitiesWithType, getTypedRelationships, linkEntitiesFromConversation, getEntityContext, searchEntities, getRecentEntities, getMostMentionedEntities, getEntityGraphStats, detectEntitiesInQuery, mergeEntities, deleteEntity, getEntityProfile, saveEntityProfile, createContradiction, getOpenContradictions, resolveContradiction, applyContradictions, saveEntityInsight, getEntityInsights, markInsightsStale, getEntitiesForReasoning, markEntityReasoned, pinEntity, listPinned, } from './entity-graph.js';
4
+ export { ensureFactsTable, storeFact, retractFact, reinforceFact, getFactById, getFactsForEntity, markFactSuperseded, factsCount, listFacts, listTemporalFacts, searchFactsFts, VALID_CATEGORIES, } from './fact-store.js';
5
+ export { sanitizeFtsQuery } from './fts-sanitizer.js';
6
+ export { setLLMProvider, resetLLMProvider, llmAvailable, callClaude, callClaudeJSON, } from './claude-call.js';
7
+ export { indexChunk, semanticSearch, vectorStats, setEmbeddingProvider, resetEmbeddingProvider, embeddingAvailable, EMBEDDING_DIM, } from './vectors.js';
8
+ export { runSleepCycleNow, ensureSleepSchema, recoverStaleSleepRuns, DEFAULT_CONFIG as SLEEP_DEFAULT_CONFIG, } from './sleep/index.js';
9
+ export { jaccardSimilarity, jaccardSimilarityArrays } from './sleep/utils/jaccard.js';
10
+ export { detectTemporalExpiry } from './fact-temporal.js';
11
+ export { extractRelationships, formatRelationship } from './relationship-extractor.js';
12
+ export { extractFactsRealtime } from './fact-extractor.js';
13
+ export { detectContradictions } from './fact-contradiction.js';
14
+ export { generateUserProfile, getCachedProfile, cacheProfile, getProfileAge, formatProfileForPrompt, } from './user-profile.js';
15
+ export { factFirstSearch } from './fact-retrieval.js';
16
+ export { hybridSearch } from './hybrid-search.js';
17
+ export { storeConversation, filterNoiseEntities, isStoreActive, } from './store-conversation.js';
18
+ export { formatRecall, formatTimelineRich, formatSearchRich, } from './ops.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,SAAS,EACT,UAAU,GACX,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,UAAU,EAAE,cAAc,EAAE,WAAW,EACvC,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAChE,aAAa,GACd,MAAM,cAAc,CAAC;AAKtB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,IAAI,oBAAoB,GACvC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,UAAU,CAAC"}
package/dist/ops.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * CLI output formatters — port of KAD's cli-formatters.ts (renamed ops.ts
3
+ * per CANONICAL.md §4). Output is byte-identical to what KAD renders.
4
+ * Wire contract for MCP skills — do NOT change output format.
5
+ */
6
+ import type { TenantContext } from '@kybernesis/brain-contracts';
7
+ export declare function formatRecall(t: TenantContext, query: string | undefined): Promise<string>;
8
+ export interface TimelineFormatOpts {
9
+ today?: boolean;
10
+ yesterday?: boolean;
11
+ week?: boolean;
12
+ search?: string;
13
+ type?: string;
14
+ limit?: number;
15
+ stats?: boolean;
16
+ }
17
+ export declare function formatTimelineRich(t: TenantContext, opts: TimelineFormatOpts): Promise<string>;
18
+ export interface SearchFormatOpts {
19
+ q: string;
20
+ limit?: number;
21
+ entity?: string;
22
+ entityMatch?: 'all' | 'any';
23
+ type?: string;
24
+ after?: string;
25
+ before?: string;
26
+ }
27
+ export declare function formatSearchRich(t: TenantContext, opts: SearchFormatOpts): Promise<string>;
28
+ //# sourceMappingURL=ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAA4B,MAAM,6BAA6B,CAAC;AAwK3F,wBAAsB,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B/F;AAmED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBpG;AAID,MAAM,WAAW,gBAAgB;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAchG"}