@kybernesis/brain-core 0.1.6 → 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 +15 -17
- package/dist/entity-graph.d.ts.map +1 -1
- package/dist/entity-graph.js +36 -548
- package/dist/entity-graph.js.map +1 -1
- package/dist/fact-extractor.js +7 -7
- package/dist/fact-extractor.js.map +1 -1
- package/dist/fact-retrieval.js +1 -1
- package/dist/fact-retrieval.js.map +1 -1
- package/dist/fact-store.d.ts +7 -2
- package/dist/fact-store.d.ts.map +1 -1
- package/dist/fact-store.js +17 -157
- package/dist/fact-store.js.map +1 -1
- package/dist/fts-sanitizer.d.ts +7 -28
- package/dist/fts-sanitizer.d.ts.map +1 -1
- package/dist/fts-sanitizer.js +7 -57
- package/dist/fts-sanitizer.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +17 -41
- package/dist/ops.js.map +1 -1
- package/dist/sleep/steps/entity-hygiene.js +1 -1
- package/dist/sleep/steps/entity-hygiene.js.map +1 -1
- package/dist/sleep/steps/observe.js +4 -4
- package/dist/sleep/steps/observe.js.map +1 -1
- package/dist/storage.d.ts +28 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +40 -0
- package/dist/storage.js.map +1 -0
- package/dist/timeline.d.ts +15 -26
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +36 -322
- package/dist/timeline.js.map +1 -1
- package/dist/user-profile.d.ts.map +1 -1
- package/dist/user-profile.js +11 -57
- package/dist/user-profile.js.map +1 -1
- package/dist/vectors.d.ts +8 -10
- package/dist/vectors.d.ts.map +1 -1
- package/dist/vectors.js +22 -72
- package/dist/vectors.js.map +1 -1
- package/package.json +6 -6
package/dist/vectors.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Vector indexing + semantic search —
|
|
2
|
+
* Vector indexing + semantic search — public API.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* indexChunk is a no-op and semanticSearch returns [].
|
|
4
|
+
* Embeddings are injected via setEmbeddingProvider (same pattern as
|
|
5
|
+
* setLLMProvider — see ADR-0009): the library has no default backend, the app
|
|
6
|
+
* wires one at startup. When no provider is set, indexChunk is a no-op and
|
|
7
|
+
* semanticSearch returns [].
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Persistence now lives behind the storage seam (getStorage().vectors); this
|
|
10
|
+
* module owns the embedding orchestration and maps store rows to SearchResult.
|
|
11
|
+
* The vector backend (sqlite-vec today, libsql native in Stage 3) is swappable.
|
|
12
12
|
*/
|
|
13
13
|
import { EMBEDDING_DIM, EMBEDDING_INPUT_CAP as CONTENT_CHAR_CAP } from '@kybernesis/brain-contracts';
|
|
14
|
+
import { getStorage } from './storage.js';
|
|
14
15
|
export { EMBEDDING_DIM };
|
|
15
16
|
let _embedder = null;
|
|
16
17
|
export function setEmbeddingProvider(p) { _embedder = p; }
|
|
@@ -19,21 +20,11 @@ export function embeddingAvailable() { return _embedder !== null; }
|
|
|
19
20
|
export async function indexChunk(t, content, meta) {
|
|
20
21
|
if (!_embedder)
|
|
21
22
|
return { indexed: false, reason: 'no embedding provider' };
|
|
22
|
-
const
|
|
23
|
-
if (!
|
|
24
|
-
return { indexed: false, reason: 'brain-storage-vec unavailable' };
|
|
25
|
-
}
|
|
26
|
-
let db;
|
|
27
|
-
try {
|
|
28
|
-
db = vec.getVectorDb(t);
|
|
29
|
-
}
|
|
30
|
-
catch (err) {
|
|
31
|
-
console.warn('[brain-core/vectors] failed to open vector db', { err: String(err) });
|
|
23
|
+
const vectors = getStorage().vectors;
|
|
24
|
+
if (!(await vectors.available(t)))
|
|
32
25
|
return { indexed: false, reason: 'vector db unavailable' };
|
|
33
|
-
}
|
|
34
26
|
if (meta.origin_id) {
|
|
35
|
-
|
|
36
|
-
if (existing)
|
|
27
|
+
if (await vectors.hasOrigin(t, meta.origin_id))
|
|
37
28
|
return { indexed: false, reason: 'already indexed' };
|
|
38
29
|
}
|
|
39
30
|
const capped = content.slice(0, CONTENT_CHAR_CAP);
|
|
@@ -43,43 +34,28 @@ export async function indexChunk(t, content, meta) {
|
|
|
43
34
|
if (embedding.length !== EMBEDDING_DIM) {
|
|
44
35
|
return { indexed: false, reason: `expected ${EMBEDDING_DIM}-dim vector, got ${embedding.length}` };
|
|
45
36
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
37
|
+
await vectors.insertChunk(t, {
|
|
38
|
+
embedding,
|
|
39
|
+
ts: meta.ts,
|
|
40
|
+
source: meta.source,
|
|
41
|
+
content: capped,
|
|
42
|
+
origin_id: meta.origin_id,
|
|
51
43
|
});
|
|
52
|
-
tx();
|
|
53
44
|
return { indexed: true };
|
|
54
45
|
}
|
|
55
46
|
export async function semanticSearch(t, query, opts = {}) {
|
|
56
47
|
const limit = opts.limit ?? 10;
|
|
57
48
|
if (!_embedder)
|
|
58
49
|
return [];
|
|
59
|
-
const
|
|
60
|
-
if (!
|
|
61
|
-
return [];
|
|
62
|
-
let db;
|
|
63
|
-
try {
|
|
64
|
-
db = vec.getVectorDb(t);
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
console.warn('[brain-core/vectors] failed to open vector db', { err: String(err) });
|
|
50
|
+
const vectors = getStorage().vectors;
|
|
51
|
+
if (!(await vectors.available(t)))
|
|
68
52
|
return [];
|
|
69
|
-
}
|
|
70
53
|
const embedding = await _embedder.embed(query.slice(0, CONTENT_CHAR_CAP));
|
|
71
54
|
if (!embedding || embedding.length !== EMBEDDING_DIM)
|
|
72
55
|
return [];
|
|
73
56
|
let rows;
|
|
74
57
|
try {
|
|
75
|
-
rows =
|
|
76
|
-
SELECT m.ts, m.source, m.content, m.origin_id,
|
|
77
|
-
vec_distance_l2(c.embedding, ?) AS distance
|
|
78
|
-
FROM chunks c
|
|
79
|
-
JOIN chunk_meta m ON c.rowid = m.rowid
|
|
80
|
-
ORDER BY distance ASC
|
|
81
|
-
LIMIT ?
|
|
82
|
-
`).all(vec.toFloat32Buffer(embedding), limit);
|
|
58
|
+
rows = await vectors.search(t, embedding, limit);
|
|
83
59
|
}
|
|
84
60
|
catch (err) {
|
|
85
61
|
console.warn('[brain-core/vectors] query failed', { err: String(err) });
|
|
@@ -96,37 +72,11 @@ export async function semanticSearch(t, query, opts = {}) {
|
|
|
96
72
|
}));
|
|
97
73
|
}
|
|
98
74
|
export async function vectorStats(t) {
|
|
99
|
-
const vec = await loadVecStorage();
|
|
100
|
-
if (!vec.getVectorDb)
|
|
101
|
-
return { count: 0, available: false };
|
|
102
75
|
try {
|
|
103
|
-
|
|
104
|
-
const row = db.prepare('SELECT COUNT(*) AS c FROM chunk_meta').get();
|
|
105
|
-
return { count: row.c, available: true };
|
|
76
|
+
return await getStorage().vectors.stats(t);
|
|
106
77
|
}
|
|
107
78
|
catch {
|
|
108
79
|
return { count: 0, available: false };
|
|
109
80
|
}
|
|
110
81
|
}
|
|
111
|
-
let _vecStorage = null;
|
|
112
|
-
let _vecStorageAttempted = false;
|
|
113
|
-
async function loadVecStorage() {
|
|
114
|
-
if (_vecStorageAttempted)
|
|
115
|
-
return _vecStorage ?? {};
|
|
116
|
-
_vecStorageAttempted = true;
|
|
117
|
-
try {
|
|
118
|
-
const mod = await import('@kybernesis/brain-storage-vec');
|
|
119
|
-
_vecStorage = { getVectorDb: mod.getVectorDb, toFloat32Buffer: mod.toFloat32Buffer };
|
|
120
|
-
return _vecStorage;
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
_vecStorage = {};
|
|
124
|
-
return _vecStorage;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/** Reset the cached storage module — for tests where we need a clean state. */
|
|
128
|
-
export function _resetVecStorageCache() {
|
|
129
|
-
_vecStorage = null;
|
|
130
|
-
_vecStorageAttempted = false;
|
|
131
|
-
}
|
|
132
82
|
//# sourceMappingURL=vectors.js.map
|
package/dist/vectors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vectors.js","sourceRoot":"","sources":["../src/vectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,aAAa,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"vectors.js","sourceRoot":"","sources":["../src/vectors.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kybernesis/brain-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Kernel brain methods — timeline, entity-graph, facts, vectors, retrieval, sleep",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "David Cruwys (AppyDave)",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"README.md"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@kybernesis/brain-contracts": "0.
|
|
31
|
-
"@kybernesis/brain-storage-sqlite": "0.
|
|
30
|
+
"@kybernesis/brain-contracts": "0.5.0",
|
|
31
|
+
"@kybernesis/brain-storage-sqlite": "0.5.0"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@kybernesis/brain-storage-vec": "0.
|
|
34
|
+
"@kybernesis/brain-storage-vec": "0.5.0"
|
|
35
35
|
},
|
|
36
36
|
"peerDependenciesMeta": {
|
|
37
37
|
"@kybernesis/brain-storage-vec": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@kybernesis/brain-
|
|
43
|
-
"@kybernesis/brain-
|
|
42
|
+
"@kybernesis/brain-storage-vec": "0.5.0",
|
|
43
|
+
"@kybernesis/brain-testkit": "0.5.0"
|
|
44
44
|
},
|
|
45
45
|
"publishConfig": {
|
|
46
46
|
"access": "public"
|