@kybernesis/brain-storage-sqlite 0.9.0 → 0.11.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/hash.d.ts +11 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +14 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations/registry.d.ts.map +1 -1
- package/dist/migrations/registry.js +2 -1
- package/dist/migrations/registry.js.map +1 -1
- package/dist/migrations/timeline/002-file-provenance.d.ts +24 -0
- package/dist/migrations/timeline/002-file-provenance.d.ts.map +1 -0
- package/dist/migrations/timeline/002-file-provenance.js +43 -0
- package/dist/migrations/timeline/002-file-provenance.js.map +1 -0
- package/dist/provider.d.ts +1 -2
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +5 -57
- package/dist/provider.js.map +1 -1
- package/dist/reconcile.d.ts +76 -0
- package/dist/reconcile.d.ts.map +1 -0
- package/dist/reconcile.js +120 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +80 -10
- package/dist/timeline.js.map +1 -1
- package/dist/vec-lazy.d.ts +19 -0
- package/dist/vec-lazy.d.ts.map +1 -0
- package/dist/vec-lazy.js +76 -0
- package/dist/vec-lazy.js.map +1 -0
- package/package.json +4 -4
package/dist/hash.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated (Spec C) — `contentHash` moved to `@kybernesis/brain-core` so
|
|
3
|
+
* HOSTS (the side that reads files) can hash without the sqlite dep. This
|
|
4
|
+
* copy survives only for 0.10.0 back-compat of the package surface; it cannot
|
|
5
|
+
* re-export from brain-core because brain-core depends on this package
|
|
6
|
+
* (re-exporting would create a package cycle). Same algorithm: sha256 hex over
|
|
7
|
+
* RAW FILE BYTES. New code imports from brain-core.
|
|
8
|
+
*/
|
|
9
|
+
/** @deprecated import `contentHash` from `@kybernesis/brain-core` instead. */
|
|
10
|
+
export declare function contentHash(rawBytes: Uint8Array | string): string;
|
|
11
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAEjE"}
|
package/dist/hash.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated (Spec C) — `contentHash` moved to `@kybernesis/brain-core` so
|
|
3
|
+
* HOSTS (the side that reads files) can hash without the sqlite dep. This
|
|
4
|
+
* copy survives only for 0.10.0 back-compat of the package surface; it cannot
|
|
5
|
+
* re-export from brain-core because brain-core depends on this package
|
|
6
|
+
* (re-exporting would create a package cycle). Same algorithm: sha256 hex over
|
|
7
|
+
* RAW FILE BYTES. New code imports from brain-core.
|
|
8
|
+
*/
|
|
9
|
+
import { createHash } from 'node:crypto';
|
|
10
|
+
/** @deprecated import `contentHash` from `@kybernesis/brain-core` instead. */
|
|
11
|
+
export function contentHash(rawBytes) {
|
|
12
|
+
return createHash('sha256').update(rawBytes).digest('hex');
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=hash.js.map
|
package/dist/hash.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CAAC,QAA6B;IACvD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export { setAutoMigrate } from './migrations/config.js';
|
|
|
10
10
|
export { registry as migrationRegistry, sentinelTables } from './migrations/registry.js';
|
|
11
11
|
export { SchemaAheadError, SchemaBehindError, ChecksumDriftError } from './migrations/errors.js';
|
|
12
12
|
export type { Migration, MigrationKind, MigrationOptions } from './migrations/types.js';
|
|
13
|
+
export { contentHash } from './hash.js';
|
|
13
14
|
import type { TenantContext } from '@kybernesis/brain-contracts';
|
|
14
15
|
export type DbKind = 'timeline' | 'entityGraph' | 'vectors' | 'sleep' | 'idempotency';
|
|
15
16
|
/**
|
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;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;AAWhE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAKnG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjG,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,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;AAWhE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAKnG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjG,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKxF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAIxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;AAkBtF;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CA2BvE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOjD;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAK/B"}
|
package/dist/index.js
CHANGED
|
@@ -25,6 +25,11 @@ export { copyFileBackup } from './migrations/backup.js';
|
|
|
25
25
|
export { setAutoMigrate } from './migrations/config.js';
|
|
26
26
|
export { registry as migrationRegistry, sentinelTables } from './migrations/registry.js';
|
|
27
27
|
export { SchemaAheadError, SchemaBehindError, ChecksumDriftError } from './migrations/errors.js';
|
|
28
|
+
// Reconcile moved to brain-core (Spec C): the kernel owns policy; this backend
|
|
29
|
+
// exposes only the SQL primitives (TimelineRepository.listAllFilePaths /
|
|
30
|
+
// relabelFilePath / stampContentHash / removeFileCluster). contentHash export
|
|
31
|
+
// kept @deprecated for the 0.10.0 surface — new code imports it from brain-core.
|
|
32
|
+
export { contentHash } from './hash.js';
|
|
28
33
|
import { runMigrations } from './migrations/runner.js';
|
|
29
34
|
import { getAutoMigrate } from './migrations/config.js';
|
|
30
35
|
const pool = new Map();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/migrations/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/migrations/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3D;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAKlE,CAAC;AAYF,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,SAAS,EAAE,CAAC,CAK1E,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* `_migrations` table and version line). Append-only: new migrations go at the
|
|
4
4
|
* END of a kind's list; shipped entries are immutable (checksum-guarded).
|
|
5
5
|
*/
|
|
6
|
+
import { migration as fileProvenance } from './timeline/002-file-provenance.js';
|
|
6
7
|
/**
|
|
7
8
|
* Legacy-detection signal per DB (baseline decision, Spec A T6): if this table
|
|
8
9
|
* exists but `_migrations` doesn't, the DB predates the migration system —
|
|
@@ -25,7 +26,7 @@ function baseline(db) {
|
|
|
25
26
|
return { id: '001-baseline', db, statements: [], baseline: true };
|
|
26
27
|
}
|
|
27
28
|
export const registry = {
|
|
28
|
-
timeline: [baseline('timeline')],
|
|
29
|
+
timeline: [baseline('timeline'), fileProvenance],
|
|
29
30
|
entityGraph: [baseline('entityGraph')],
|
|
30
31
|
sleep: [baseline('sleep')],
|
|
31
32
|
vectors: [baseline('vectors')],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migrations/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migrations/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4C;IACrE,QAAQ,EAAE,iBAAiB;IAC3B,WAAW,EAAE,UAAU;IACvB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,YAAY;CACtB,CAAC;AAEF;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,EAAiB;IACjC,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAA0D;IAC7E,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IAChD,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;CAC/B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec B (docs/specs/file-provenance-and-reconcile.md): file provenance.
|
|
3
|
+
*
|
|
4
|
+
* Adds the mutable LOCATOR (`file_path`, relative path, type='file' rows only)
|
|
5
|
+
* and the VERSION fingerprint (`content_hash` = sha256 of raw file bytes) to
|
|
6
|
+
* timeline_events. Stable identity (random source_path / chunk origin_id) is
|
|
7
|
+
* deliberately untouched — separating identity from locator is what makes a
|
|
8
|
+
* rename a one-row UPDATE.
|
|
9
|
+
*
|
|
10
|
+
* The unique index is PARTIAL: conversation rows keep file_path NULL in any
|
|
11
|
+
* number; non-NULL paths are unique (the dual-key upsert rides on it — proven
|
|
12
|
+
* in partial-upsert.spike.test.ts on better-sqlite3 + libsql).
|
|
13
|
+
*
|
|
14
|
+
* Backfill stamps file_path from the legacy `title` ("… File: <relpath>") —
|
|
15
|
+
* in-DB only, no file reads; content_hash stays NULL on legacy rows (the first
|
|
16
|
+
* reconcile run stamps it lazily). DEDUPE-AWARE: legacy brains can hold
|
|
17
|
+
* duplicate rows for the same file (the pile-up bug Spec B fixes) — stamping
|
|
18
|
+
* all of them would violate the new unique index and roll back the whole
|
|
19
|
+
* migration, so only the NEWEST row (MAX(id)) per title gets the locator;
|
|
20
|
+
* older duplicates stay NULL and remain reachable by source_path.
|
|
21
|
+
*/
|
|
22
|
+
import type { Migration } from '../types.js';
|
|
23
|
+
export declare const migration: Migration;
|
|
24
|
+
//# sourceMappingURL=002-file-provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"002-file-provenance.d.ts","sourceRoot":"","sources":["../../../src/migrations/timeline/002-file-provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,SAoBvB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec B (docs/specs/file-provenance-and-reconcile.md): file provenance.
|
|
3
|
+
*
|
|
4
|
+
* Adds the mutable LOCATOR (`file_path`, relative path, type='file' rows only)
|
|
5
|
+
* and the VERSION fingerprint (`content_hash` = sha256 of raw file bytes) to
|
|
6
|
+
* timeline_events. Stable identity (random source_path / chunk origin_id) is
|
|
7
|
+
* deliberately untouched — separating identity from locator is what makes a
|
|
8
|
+
* rename a one-row UPDATE.
|
|
9
|
+
*
|
|
10
|
+
* The unique index is PARTIAL: conversation rows keep file_path NULL in any
|
|
11
|
+
* number; non-NULL paths are unique (the dual-key upsert rides on it — proven
|
|
12
|
+
* in partial-upsert.spike.test.ts on better-sqlite3 + libsql).
|
|
13
|
+
*
|
|
14
|
+
* Backfill stamps file_path from the legacy `title` ("… File: <relpath>") —
|
|
15
|
+
* in-DB only, no file reads; content_hash stays NULL on legacy rows (the first
|
|
16
|
+
* reconcile run stamps it lazily). DEDUPE-AWARE: legacy brains can hold
|
|
17
|
+
* duplicate rows for the same file (the pile-up bug Spec B fixes) — stamping
|
|
18
|
+
* all of them would violate the new unique index and roll back the whole
|
|
19
|
+
* migration, so only the NEWEST row (MAX(id)) per title gets the locator;
|
|
20
|
+
* older duplicates stay NULL and remain reachable by source_path.
|
|
21
|
+
*/
|
|
22
|
+
export const migration = {
|
|
23
|
+
id: '002-file-provenance',
|
|
24
|
+
db: 'timeline',
|
|
25
|
+
statements: [
|
|
26
|
+
`ALTER TABLE timeline_events ADD COLUMN file_path TEXT`,
|
|
27
|
+
`ALTER TABLE timeline_events ADD COLUMN content_hash TEXT`,
|
|
28
|
+
`CREATE UNIQUE INDEX IF NOT EXISTS idx_timeline_file_path
|
|
29
|
+
ON timeline_events(file_path) WHERE file_path IS NOT NULL`,
|
|
30
|
+
],
|
|
31
|
+
backfill(db) {
|
|
32
|
+
db.exec(`
|
|
33
|
+
UPDATE timeline_events
|
|
34
|
+
SET file_path = substr(title, instr(title, 'File: ') + 6)
|
|
35
|
+
WHERE id IN (
|
|
36
|
+
SELECT MAX(id) FROM timeline_events
|
|
37
|
+
WHERE type = 'file' AND file_path IS NULL AND title LIKE '%File: %'
|
|
38
|
+
GROUP BY title
|
|
39
|
+
)
|
|
40
|
+
`);
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=002-file-provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"002-file-provenance.js","sourceRoot":"","sources":["../../../src/migrations/timeline/002-file-provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,UAAU;IACd,UAAU,EAAE;QACV,uDAAuD;QACvD,0DAA0D;QAC1D;iEAC6D;KAC9D;IACD,QAAQ,CAAC,EAAE;QACT,EAAE,CAAC,IAAI,CAAC;;;;;;;;KAQP,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -11,8 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type { StorageProvider } from '@kybernesis/brain-contracts';
|
|
13
13
|
import type { MigrationOptions } from './migrations/types.js';
|
|
14
|
-
|
|
15
|
-
export declare function resetLazyVectorStore(): void;
|
|
14
|
+
export { resetLazyVectorStore } from './vec-lazy.js';
|
|
16
15
|
export interface SqliteStorageProviderOptions {
|
|
17
16
|
/**
|
|
18
17
|
* Migration trigger (Spec A) — consumer-chosen, off when omitted.
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAa9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,4BAA4B;IAC3C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC1C;AAED,wBAAgB,2BAA2B,CACzC,OAAO,GAAE,4BAAiC,GACzC,eAAe,CAoBjB"}
|
package/dist/provider.js
CHANGED
|
@@ -17,63 +17,11 @@ import { sqliteSleepStore } from './sleep-store.js';
|
|
|
17
17
|
import { sqliteSleepMaintenance } from './sleep-maintenance.js';
|
|
18
18
|
import { sqliteSearchQueries } from './search-queries.js';
|
|
19
19
|
import { sqliteFactRetrievalQueries } from './fact-retrieval-queries.js';
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// package can't be loaded (not installed / wrong platform), the store degrades
|
|
26
|
-
// to safe no-ops — brain-core's vectors layer maps these to its graceful results.
|
|
27
|
-
let _vecStore = null;
|
|
28
|
-
let _vecAttempted = false;
|
|
29
|
-
async function loadVecStore() {
|
|
30
|
-
if (_vecAttempted)
|
|
31
|
-
return _vecStore;
|
|
32
|
-
_vecAttempted = true;
|
|
33
|
-
try {
|
|
34
|
-
const mod = await import('@kybernesis/brain-storage-vec');
|
|
35
|
-
_vecStore = mod.sqliteVecStore;
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
_vecStore = null;
|
|
39
|
-
}
|
|
40
|
-
return _vecStore;
|
|
41
|
-
}
|
|
42
|
-
/** Reset the lazy vec-store cache (test/utility). */
|
|
43
|
-
export function resetLazyVectorStore() {
|
|
44
|
-
_vecStore = null;
|
|
45
|
-
_vecAttempted = false;
|
|
46
|
-
}
|
|
47
|
-
const lazyVectorStore = {
|
|
48
|
-
async available(t) {
|
|
49
|
-
const s = await loadVecStore();
|
|
50
|
-
return s ? s.available(t) : false;
|
|
51
|
-
},
|
|
52
|
-
async hasOrigin(t, originId) {
|
|
53
|
-
const s = await loadVecStore();
|
|
54
|
-
if (!s)
|
|
55
|
-
return false;
|
|
56
|
-
return s.hasOrigin(t, originId);
|
|
57
|
-
},
|
|
58
|
-
async insertChunk(t, chunk) {
|
|
59
|
-
const s = await loadVecStore();
|
|
60
|
-
if (!s)
|
|
61
|
-
throw new Error('[brain-storage-sqlite] vector backend unavailable');
|
|
62
|
-
return s.insertChunk(t, chunk);
|
|
63
|
-
},
|
|
64
|
-
async search(t, embedding, limit) {
|
|
65
|
-
const s = await loadVecStore();
|
|
66
|
-
if (!s)
|
|
67
|
-
return [];
|
|
68
|
-
return s.search(t, embedding, limit);
|
|
69
|
-
},
|
|
70
|
-
async stats(t) {
|
|
71
|
-
const s = await loadVecStore();
|
|
72
|
-
if (!s)
|
|
73
|
-
return { count: 0, available: false };
|
|
74
|
-
return s.stats(t);
|
|
75
|
-
},
|
|
76
|
-
};
|
|
20
|
+
// Lazy vector store lives in vec-lazy.ts (Spec B: timeline.ts also needs it
|
|
21
|
+
// for cluster cleanup, and importing provider.ts from timeline.ts would close
|
|
22
|
+
// the documented eval-order cycle). Re-exported here for API compatibility.
|
|
23
|
+
import { lazyVectorStore } from './vec-lazy.js';
|
|
24
|
+
export { resetLazyVectorStore } from './vec-lazy.js';
|
|
77
25
|
export function createSqliteStorageProvider(options = {}) {
|
|
78
26
|
if (options.autoMigrate !== undefined) {
|
|
79
27
|
setAutoMigrate(options.autoMigrate);
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,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;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAarD,MAAM,UAAU,2BAA2B,CACzC,UAAwC,EAAE;IAE1C,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACtC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IACD,OAAO;QACL,YAAY,EAAE;YACZ,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,sBAAsB;YAChC,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,eAAe;SACzB;QACD,gFAAgF;QAChF,MAAM,EAAE;YACN,MAAM,EAAE,mBAAmB,EAAE,KAAK;YAClC,aAAa,EAAE,0BAA0B,EAAE,KAAK;YAChD,KAAK,EAAE,sBAAsB,EAAE,OAAO;SAEvC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reconcile (Spec B) — diff the brain against the filesystem and converge.
|
|
3
|
+
* This is the capability that catches the 42-files class: files marked
|
|
4
|
+
* "synced" but silently absent from the brain.
|
|
5
|
+
*
|
|
6
|
+
* REPORT-ONLY by default: a plain run returns structured findings and makes no
|
|
7
|
+
* destructive change. The one write a report run performs is the documented
|
|
8
|
+
* lazy baseline (resolved decision #2): a legacy row with NULL content_hash
|
|
9
|
+
* whose file exists on disk gets the CURRENT file's hash stamped and is
|
|
10
|
+
* classified up-to-date — trusting the present file as baseline avoids a full
|
|
11
|
+
* re-embed of every legacy row.
|
|
12
|
+
*
|
|
13
|
+
* Classification:
|
|
14
|
+
* missing — on disk, no brain row (→ repair: re-ingest via callback)
|
|
15
|
+
* stale — both, hashes differ (→ repair: re-ingest via callback)
|
|
16
|
+
* orphaned — brain row, no file on disk (→ removeOrphaned: delete cluster)
|
|
17
|
+
* renamed — a missing path whose hash equals an orphaned row's hash
|
|
18
|
+
* (→ repair: ONE file_path UPDATE — cluster, enrichment, and
|
|
19
|
+
* embeddings all survive; no re-ingest, no re-embed)
|
|
20
|
+
*
|
|
21
|
+
* Rename-and-edit is NOT detected (hashes differ) — it degrades to the
|
|
22
|
+
* missing + orphaned pair, i.e. add + remove. Documented limitation.
|
|
23
|
+
*
|
|
24
|
+
* Re-ingest is delegated to `opts.reingest` because ingestion is brain-core's
|
|
25
|
+
* pipeline (LLM extraction + embedding) and the dependency points the other
|
|
26
|
+
* way. The consumer (KBDE/KyberBot sweep, Arcana job) wires storeConversation
|
|
27
|
+
* into it — see the spec's consumer-integration section.
|
|
28
|
+
*
|
|
29
|
+
* Filesystem truth = the walked roots; the watched-folders manifest is never
|
|
30
|
+
* consulted. Dotfiles and dot-directories are skipped.
|
|
31
|
+
*/
|
|
32
|
+
import type { TenantContext } from '@kybernesis/brain-contracts';
|
|
33
|
+
export interface ReconcileDiskFile {
|
|
34
|
+
file_path: string;
|
|
35
|
+
absolute_path: string;
|
|
36
|
+
content_hash: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ReconcileReport {
|
|
39
|
+
missing: ReconcileDiskFile[];
|
|
40
|
+
stale: Array<ReconcileDiskFile & {
|
|
41
|
+
id: number;
|
|
42
|
+
brain_hash: string;
|
|
43
|
+
}>;
|
|
44
|
+
orphaned: Array<{
|
|
45
|
+
id: number;
|
|
46
|
+
file_path: string;
|
|
47
|
+
content_hash: string | null;
|
|
48
|
+
}>;
|
|
49
|
+
renamed: Array<{
|
|
50
|
+
id: number;
|
|
51
|
+
from: string;
|
|
52
|
+
to: string;
|
|
53
|
+
}>;
|
|
54
|
+
/** Legacy NULL-hash rows stamped with the current file's hash this run. */
|
|
55
|
+
baselined: number;
|
|
56
|
+
/** Files seen on disk across all roots. */
|
|
57
|
+
scanned: number;
|
|
58
|
+
/** Actions actually performed (empty unless repair/removeOrphaned). */
|
|
59
|
+
repaired: {
|
|
60
|
+
relabelled: number;
|
|
61
|
+
reingested: number;
|
|
62
|
+
removed: number;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export interface ReconcileOptions {
|
|
66
|
+
/** Filesystem roots to walk; brain file_paths are relative to one of these. */
|
|
67
|
+
roots: string[];
|
|
68
|
+
/** Apply renames (relabel) and re-ingest missing/stale via `reingest`. */
|
|
69
|
+
repair?: boolean;
|
|
70
|
+
/** Delete orphaned rows + their clusters. Destructive — explicitly opt-in. */
|
|
71
|
+
removeOrphaned?: boolean;
|
|
72
|
+
/** Consumer-provided ingest (brain-core storeConversation wired by the consumer). */
|
|
73
|
+
reingest?: (file: ReconcileDiskFile) => Promise<void>;
|
|
74
|
+
}
|
|
75
|
+
export declare function reconcile(t: TenantContext, opts: ReconcileOptions): Promise<ReconcileReport>;
|
|
76
|
+
//# sourceMappingURL=reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAKjE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC,iBAAiB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAChF,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAkBD,wBAAsB,SAAS,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqElG"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reconcile (Spec B) — diff the brain against the filesystem and converge.
|
|
3
|
+
* This is the capability that catches the 42-files class: files marked
|
|
4
|
+
* "synced" but silently absent from the brain.
|
|
5
|
+
*
|
|
6
|
+
* REPORT-ONLY by default: a plain run returns structured findings and makes no
|
|
7
|
+
* destructive change. The one write a report run performs is the documented
|
|
8
|
+
* lazy baseline (resolved decision #2): a legacy row with NULL content_hash
|
|
9
|
+
* whose file exists on disk gets the CURRENT file's hash stamped and is
|
|
10
|
+
* classified up-to-date — trusting the present file as baseline avoids a full
|
|
11
|
+
* re-embed of every legacy row.
|
|
12
|
+
*
|
|
13
|
+
* Classification:
|
|
14
|
+
* missing — on disk, no brain row (→ repair: re-ingest via callback)
|
|
15
|
+
* stale — both, hashes differ (→ repair: re-ingest via callback)
|
|
16
|
+
* orphaned — brain row, no file on disk (→ removeOrphaned: delete cluster)
|
|
17
|
+
* renamed — a missing path whose hash equals an orphaned row's hash
|
|
18
|
+
* (→ repair: ONE file_path UPDATE — cluster, enrichment, and
|
|
19
|
+
* embeddings all survive; no re-ingest, no re-embed)
|
|
20
|
+
*
|
|
21
|
+
* Rename-and-edit is NOT detected (hashes differ) — it degrades to the
|
|
22
|
+
* missing + orphaned pair, i.e. add + remove. Documented limitation.
|
|
23
|
+
*
|
|
24
|
+
* Re-ingest is delegated to `opts.reingest` because ingestion is brain-core's
|
|
25
|
+
* pipeline (LLM extraction + embedding) and the dependency points the other
|
|
26
|
+
* way. The consumer (KBDE/KyberBot sweep, Arcana job) wires storeConversation
|
|
27
|
+
* into it — see the spec's consumer-integration section.
|
|
28
|
+
*
|
|
29
|
+
* Filesystem truth = the walked roots; the watched-folders manifest is never
|
|
30
|
+
* consulted. Dotfiles and dot-directories are skipped.
|
|
31
|
+
*/
|
|
32
|
+
import { readdirSync, readFileSync } from 'node:fs';
|
|
33
|
+
import { join } from 'node:path';
|
|
34
|
+
import { getDb } from './index.js';
|
|
35
|
+
import { contentHash } from './hash.js';
|
|
36
|
+
import { sqliteTimelineStore } from './timeline.js';
|
|
37
|
+
function walk(dir, relBase, acc) {
|
|
38
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
39
|
+
if (entry.name.startsWith('.'))
|
|
40
|
+
continue;
|
|
41
|
+
const abs = join(dir, entry.name);
|
|
42
|
+
const rel = relBase ? `${relBase}/${entry.name}` : entry.name;
|
|
43
|
+
if (entry.isDirectory()) {
|
|
44
|
+
walk(abs, rel, acc);
|
|
45
|
+
}
|
|
46
|
+
else if (entry.isFile()) {
|
|
47
|
+
// first root wins on cross-root relpath collision
|
|
48
|
+
if (!acc.has(rel)) {
|
|
49
|
+
acc.set(rel, { file_path: rel, absolute_path: abs, content_hash: contentHash(readFileSync(abs)) });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export async function reconcile(t, opts) {
|
|
55
|
+
const onDisk = new Map();
|
|
56
|
+
for (const root of opts.roots)
|
|
57
|
+
walk(root, '', onDisk);
|
|
58
|
+
const brainRows = await sqliteTimelineStore.listAllFilePaths(t);
|
|
59
|
+
const db = getDb(t, 'timeline');
|
|
60
|
+
const stampHash = db.prepare(`UPDATE timeline_events SET content_hash = ? WHERE id = ?`);
|
|
61
|
+
let baselined = 0;
|
|
62
|
+
const stale = [];
|
|
63
|
+
const orphaned = [];
|
|
64
|
+
const brainPaths = new Set();
|
|
65
|
+
for (const row of brainRows) {
|
|
66
|
+
brainPaths.add(row.file_path);
|
|
67
|
+
const disk = onDisk.get(row.file_path);
|
|
68
|
+
if (!disk) {
|
|
69
|
+
orphaned.push(row);
|
|
70
|
+
}
|
|
71
|
+
else if (row.content_hash === null) {
|
|
72
|
+
stampHash.run(disk.content_hash, row.id); // lazy baseline: trust the current file
|
|
73
|
+
baselined++;
|
|
74
|
+
}
|
|
75
|
+
else if (row.content_hash !== disk.content_hash) {
|
|
76
|
+
stale.push({ ...disk, id: row.id, brain_hash: row.content_hash });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let missing = [...onDisk.values()].filter((f) => !brainPaths.has(f.file_path));
|
|
80
|
+
// Rename detection: a missing path whose content matches an orphaned row's
|
|
81
|
+
// hash is the same file under a new name — relocate the LOCATOR, keep the
|
|
82
|
+
// cluster. (Requires the orphaned row to carry a hash; legacy NULL-hash
|
|
83
|
+
// orphans can't match and stay orphaned.)
|
|
84
|
+
const renamed = [];
|
|
85
|
+
const orphanByHash = new Map();
|
|
86
|
+
for (const o of orphaned)
|
|
87
|
+
if (o.content_hash)
|
|
88
|
+
orphanByHash.set(o.content_hash, o);
|
|
89
|
+
missing = missing.filter((m) => {
|
|
90
|
+
const o = orphanByHash.get(m.content_hash);
|
|
91
|
+
if (!o)
|
|
92
|
+
return true;
|
|
93
|
+
renamed.push({ id: o.id, from: o.file_path, to: m.file_path });
|
|
94
|
+
orphanByHash.delete(m.content_hash);
|
|
95
|
+
orphaned.splice(orphaned.indexOf(o), 1);
|
|
96
|
+
return false;
|
|
97
|
+
});
|
|
98
|
+
const repaired = { relabelled: 0, reingested: 0, removed: 0 };
|
|
99
|
+
if (opts.repair) {
|
|
100
|
+
const relabel = db.prepare(`UPDATE timeline_events SET file_path = ? WHERE id = ?`);
|
|
101
|
+
for (const r of renamed) {
|
|
102
|
+
relabel.run(r.to, r.id);
|
|
103
|
+
repaired.relabelled++;
|
|
104
|
+
}
|
|
105
|
+
if (opts.reingest) {
|
|
106
|
+
for (const f of [...missing, ...stale]) {
|
|
107
|
+
await opts.reingest(f);
|
|
108
|
+
repaired.reingested++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (opts.removeOrphaned) {
|
|
113
|
+
for (const o of orphaned) {
|
|
114
|
+
await sqliteTimelineStore.removeFileCluster(t, o.file_path, { removeEvent: true });
|
|
115
|
+
repaired.removed++;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { missing, stale, orphaned, renamed, baselined, scanned: onDisk.size, repaired };
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"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"}
|
package/dist/timeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAOV,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAOV,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AA6DrC,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAG5D;AA2GD,eAAO,MAAM,mBAAmB,EAAE,kBAmSjC,CAAC"}
|
package/dist/timeline.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { getDb } from './index.js';
|
|
8
8
|
import { sanitizeFtsQuery } from './fts-sanitizer.js';
|
|
9
|
+
import { lazyVectorStore } from './vec-lazy.js';
|
|
9
10
|
function rowToEvent(row) {
|
|
10
11
|
return {
|
|
11
12
|
id: row.id,
|
|
@@ -29,6 +30,8 @@ function rowToEvent(row) {
|
|
|
29
30
|
classification: row.classification ?? undefined,
|
|
30
31
|
connection_id: row.connection_id ?? undefined,
|
|
31
32
|
source_did: row.source_did ?? undefined,
|
|
33
|
+
file_path: row.file_path ?? undefined,
|
|
34
|
+
content_hash: row.content_hash ?? undefined,
|
|
32
35
|
};
|
|
33
36
|
}
|
|
34
37
|
const initialized = new Set();
|
|
@@ -65,7 +68,9 @@ function ensureSchema(t) {
|
|
|
65
68
|
project_id TEXT,
|
|
66
69
|
classification TEXT,
|
|
67
70
|
connection_id TEXT,
|
|
68
|
-
source_did TEXT
|
|
71
|
+
source_did TEXT,
|
|
72
|
+
file_path TEXT,
|
|
73
|
+
content_hash TEXT
|
|
69
74
|
);
|
|
70
75
|
|
|
71
76
|
CREATE INDEX IF NOT EXISTS idx_timeline_timestamp ON timeline_events(timestamp);
|
|
@@ -77,6 +82,8 @@ function ensureSchema(t) {
|
|
|
77
82
|
CREATE INDEX IF NOT EXISTS idx_timeline_project ON timeline_events(project_id);
|
|
78
83
|
CREATE INDEX IF NOT EXISTS idx_timeline_classification ON timeline_events(classification);
|
|
79
84
|
CREATE INDEX IF NOT EXISTS idx_timeline_connection ON timeline_events(connection_id);
|
|
85
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_timeline_file_path
|
|
86
|
+
ON timeline_events(file_path) WHERE file_path IS NOT NULL;
|
|
80
87
|
|
|
81
88
|
CREATE VIRTUAL TABLE IF NOT EXISTS timeline_fts USING fts5(
|
|
82
89
|
title, summary, entities, topics, content='',
|
|
@@ -145,13 +152,13 @@ export const sqliteTimelineStore = {
|
|
|
145
152
|
async addEvent(t, event) {
|
|
146
153
|
ensureSchema(t);
|
|
147
154
|
const db = getDb(t, 'timeline');
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
+
// Dual-key upsert (Spec B): file rows converge on file_path (the mutable
|
|
156
|
+
// locator), conversation rows on source_path — exactly as before. In the
|
|
157
|
+
// file branch the row ADOPTS the new ingest's source_path (the fresh
|
|
158
|
+
// facts/chunks cluster lives under it; exact-match cleanup removes the old
|
|
159
|
+
// one), while the row id and enrichment columns (priority, tier, decay,
|
|
160
|
+
// pin, access, last_enriched) persist by omission from the SET list.
|
|
161
|
+
const sharedSet = `
|
|
155
162
|
type = excluded.type,
|
|
156
163
|
timestamp = excluded.timestamp,
|
|
157
164
|
end_timestamp = excluded.end_timestamp,
|
|
@@ -163,10 +170,73 @@ export const sqliteTimelineStore = {
|
|
|
163
170
|
tags_json = COALESCE(excluded.tags_json, timeline_events.tags_json),
|
|
164
171
|
classification = COALESCE(excluded.classification, timeline_events.classification),
|
|
165
172
|
connection_id = COALESCE(excluded.connection_id, timeline_events.connection_id),
|
|
166
|
-
source_did = COALESCE(excluded.source_did, timeline_events.source_did)
|
|
167
|
-
|
|
173
|
+
source_did = COALESCE(excluded.source_did, timeline_events.source_did)`;
|
|
174
|
+
const conflictClause = event.file_path
|
|
175
|
+
? `ON CONFLICT(file_path) WHERE file_path IS NOT NULL DO UPDATE SET
|
|
176
|
+
source_path = excluded.source_path,
|
|
177
|
+
content_hash = excluded.content_hash,${sharedSet}`
|
|
178
|
+
: `ON CONFLICT(source_path) DO UPDATE SET
|
|
179
|
+
file_path = COALESCE(excluded.file_path, timeline_events.file_path),
|
|
180
|
+
content_hash = COALESCE(excluded.content_hash, timeline_events.content_hash),${sharedSet}`;
|
|
181
|
+
const result = db.prepare(`
|
|
182
|
+
INSERT INTO timeline_events
|
|
183
|
+
(type, timestamp, end_timestamp, title, summary, source_path,
|
|
184
|
+
entities_json, topics_json,
|
|
185
|
+
project_id, tags_json, classification, connection_id, source_did,
|
|
186
|
+
file_path, content_hash)
|
|
187
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
188
|
+
${conflictClause}
|
|
189
|
+
`).run(event.type, event.timestamp, event.end_timestamp ?? null, event.title, event.summary ?? '', event.source_path, JSON.stringify(event.entities), JSON.stringify(event.topics), event.project_id ?? null, event.tags ? JSON.stringify(event.tags) : null, event.classification ?? null, event.connection_id ?? null, event.source_did ?? null, event.file_path ?? null, event.content_hash ?? null);
|
|
168
190
|
return result.lastInsertRowid;
|
|
169
191
|
},
|
|
192
|
+
async removeFileCluster(t, filePath, opts = {}) {
|
|
193
|
+
ensureSchema(t);
|
|
194
|
+
const db = getDb(t, 'timeline');
|
|
195
|
+
// EXACT match only — the substring approach this replaces cross-deleted
|
|
196
|
+
// notes.md when re-ingesting meeting-notes.md (baseline bug #14).
|
|
197
|
+
const row = db
|
|
198
|
+
.prepare(`SELECT id, source_path FROM timeline_events WHERE file_path = ?`)
|
|
199
|
+
.get(filePath);
|
|
200
|
+
if (!row)
|
|
201
|
+
return { removed: false, facts: 0, chunks: 0 };
|
|
202
|
+
// source_path = channel://<channel>/<conversationId> — the cluster key.
|
|
203
|
+
const conversationId = row.source_path.split('/').pop() ?? '';
|
|
204
|
+
const facts = conversationId
|
|
205
|
+
? db.prepare(`DELETE FROM facts WHERE source_conversation_id = ?`).run(conversationId).changes
|
|
206
|
+
: 0;
|
|
207
|
+
const chunks = conversationId
|
|
208
|
+
? await lazyVectorStore.deleteByOriginPrefix(t, `${conversationId}_seg_`)
|
|
209
|
+
: 0;
|
|
210
|
+
if (opts.removeEvent) {
|
|
211
|
+
db.prepare(`DELETE FROM timeline_events WHERE id = ?`).run(row.id);
|
|
212
|
+
}
|
|
213
|
+
return { removed: true, facts, chunks };
|
|
214
|
+
},
|
|
215
|
+
async listAllFilePaths(t, opts = {}) {
|
|
216
|
+
ensureSchema(t);
|
|
217
|
+
const db = getDb(t, 'timeline');
|
|
218
|
+
return db
|
|
219
|
+
.prepare(`
|
|
220
|
+
SELECT id, file_path, content_hash FROM timeline_events
|
|
221
|
+
WHERE type = 'file' AND file_path IS NOT NULL AND id > ?
|
|
222
|
+
ORDER BY id ASC
|
|
223
|
+
LIMIT ?
|
|
224
|
+
`)
|
|
225
|
+
.all(opts.afterId ?? 0, opts.limit ?? -1);
|
|
226
|
+
},
|
|
227
|
+
// Reconcile SQL primitives (Spec C). Policy — when to relabel, when to stamp,
|
|
228
|
+
// report-only semantics — lives in brain-core's reconcile(); these are only
|
|
229
|
+
// the UPDATEs it drives through the provider seam.
|
|
230
|
+
async relabelFilePath(t, id, newFilePath) {
|
|
231
|
+
ensureSchema(t);
|
|
232
|
+
const db = getDb(t, 'timeline');
|
|
233
|
+
db.prepare(`UPDATE timeline_events SET file_path = ? WHERE id = ?`).run(newFilePath, id);
|
|
234
|
+
},
|
|
235
|
+
async stampContentHash(t, id, contentHash) {
|
|
236
|
+
ensureSchema(t);
|
|
237
|
+
const db = getDb(t, 'timeline');
|
|
238
|
+
db.prepare(`UPDATE timeline_events SET content_hash = ? WHERE id = ?`).run(contentHash, id);
|
|
239
|
+
},
|
|
170
240
|
async removeEventByPath(t, sourcePath) {
|
|
171
241
|
ensureSchema(t);
|
|
172
242
|
const db = getDb(t, 'timeline');
|
package/dist/timeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy vector store — moved out of provider.ts (Spec B) so timeline.ts can
|
|
3
|
+
* reach it for cluster cleanup WITHOUT importing provider.ts (provider imports
|
|
4
|
+
* timeline; that import would close the eval-order cycle index.ts warns
|
|
5
|
+
* about).
|
|
6
|
+
*
|
|
7
|
+
* VectorRepository is a first-class member of the bundle (decision #3 Option
|
|
8
|
+
* A), but brain-storage-vec carries the sqlite-vec NATIVE binary. We load it
|
|
9
|
+
* lazily on first vector use so it never costs apps anything at
|
|
10
|
+
* provider-creation time, and brain-storage-sqlite keeps NO static dependency
|
|
11
|
+
* on sqlite-vec. If the package can't be loaded (not installed / wrong
|
|
12
|
+
* platform), the store degrades to safe no-ops — brain-core's vectors layer
|
|
13
|
+
* maps these to its graceful results.
|
|
14
|
+
*/
|
|
15
|
+
import type { VectorRepository } from '@kybernesis/brain-contracts';
|
|
16
|
+
/** Reset the lazy vec-store cache (test/utility). */
|
|
17
|
+
export declare function resetLazyVectorStore(): void;
|
|
18
|
+
export declare const lazyVectorStore: VectorRepository;
|
|
19
|
+
//# sourceMappingURL=vec-lazy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vec-lazy.d.ts","sourceRoot":"","sources":["../src/vec-lazy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAiB,gBAAgB,EAAoB,MAAM,6BAA6B,CAAC;AAiBrG,qDAAqD;AACrD,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAED,eAAO,MAAM,eAAe,EAAE,gBAkC7B,CAAC"}
|
package/dist/vec-lazy.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy vector store — moved out of provider.ts (Spec B) so timeline.ts can
|
|
3
|
+
* reach it for cluster cleanup WITHOUT importing provider.ts (provider imports
|
|
4
|
+
* timeline; that import would close the eval-order cycle index.ts warns
|
|
5
|
+
* about).
|
|
6
|
+
*
|
|
7
|
+
* VectorRepository is a first-class member of the bundle (decision #3 Option
|
|
8
|
+
* A), but brain-storage-vec carries the sqlite-vec NATIVE binary. We load it
|
|
9
|
+
* lazily on first vector use so it never costs apps anything at
|
|
10
|
+
* provider-creation time, and brain-storage-sqlite keeps NO static dependency
|
|
11
|
+
* on sqlite-vec. If the package can't be loaded (not installed / wrong
|
|
12
|
+
* platform), the store degrades to safe no-ops — brain-core's vectors layer
|
|
13
|
+
* maps these to its graceful results.
|
|
14
|
+
*/
|
|
15
|
+
let _vecStore = null;
|
|
16
|
+
let _vecAttempted = false;
|
|
17
|
+
async function loadVecStore() {
|
|
18
|
+
if (_vecAttempted)
|
|
19
|
+
return _vecStore;
|
|
20
|
+
_vecAttempted = true;
|
|
21
|
+
try {
|
|
22
|
+
const mod = await import('@kybernesis/brain-storage-vec');
|
|
23
|
+
_vecStore = mod.sqliteVecStore;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
_vecStore = null;
|
|
27
|
+
}
|
|
28
|
+
return _vecStore;
|
|
29
|
+
}
|
|
30
|
+
/** Reset the lazy vec-store cache (test/utility). */
|
|
31
|
+
export function resetLazyVectorStore() {
|
|
32
|
+
_vecStore = null;
|
|
33
|
+
_vecAttempted = false;
|
|
34
|
+
}
|
|
35
|
+
export const lazyVectorStore = {
|
|
36
|
+
async available(t) {
|
|
37
|
+
const s = await loadVecStore();
|
|
38
|
+
return s ? s.available(t) : false;
|
|
39
|
+
},
|
|
40
|
+
async hasOrigin(t, originId) {
|
|
41
|
+
const s = await loadVecStore();
|
|
42
|
+
if (!s)
|
|
43
|
+
return false;
|
|
44
|
+
return s.hasOrigin(t, originId);
|
|
45
|
+
},
|
|
46
|
+
async insertChunk(t, chunk) {
|
|
47
|
+
const s = await loadVecStore();
|
|
48
|
+
if (!s)
|
|
49
|
+
throw new Error('[brain-storage-sqlite] vector backend unavailable');
|
|
50
|
+
return s.insertChunk(t, chunk);
|
|
51
|
+
},
|
|
52
|
+
async search(t, embedding, limit) {
|
|
53
|
+
const s = await loadVecStore();
|
|
54
|
+
if (!s)
|
|
55
|
+
return [];
|
|
56
|
+
return s.search(t, embedding, limit);
|
|
57
|
+
},
|
|
58
|
+
async stats(t) {
|
|
59
|
+
const s = await loadVecStore();
|
|
60
|
+
if (!s)
|
|
61
|
+
return { count: 0, available: false };
|
|
62
|
+
return s.stats(t);
|
|
63
|
+
},
|
|
64
|
+
async deleteByOriginPrefix(t, originIdPrefix) {
|
|
65
|
+
const s = await loadVecStore();
|
|
66
|
+
if (!s)
|
|
67
|
+
return 0; // graceful: nothing indexed if the backend never loaded
|
|
68
|
+
try {
|
|
69
|
+
return await s.deleteByOriginPrefix(t, originIdPrefix);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return 0; // vec DB absent/unopenable → no chunks to delete
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=vec-lazy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vec-lazy.js","sourceRoot":"","sources":["../src/vec-lazy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,IAAI,SAAS,GAA4B,IAAI,CAAC;AAC9C,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,CAAC,MAAM,eAAe,GAAqB;IAC/C,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;IACD,KAAK,CAAC,oBAAoB,CAAC,CAAgB,EAAE,cAAsB;QACjE,MAAM,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,wDAAwD;QAC1E,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,CAAC,iDAAiD;QAC7D,CAAC;IACH,CAAC;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kybernesis/brain-storage-sqlite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "better-sqlite3 StructuredStore implementation for brain-core",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "David Cruwys (AppyDave)",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"README.md"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@kybernesis/brain-contracts": "0.
|
|
30
|
+
"@kybernesis/brain-contracts": "0.11.0"
|
|
31
31
|
},
|
|
32
32
|
"optionalDependencies": {
|
|
33
|
-
"@kybernesis/brain-storage-vec": "0.
|
|
33
|
+
"@kybernesis/brain-storage-vec": "0.11.0"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"better-sqlite3": ">=9.0.0"
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@libsql/client": "^0.17.3",
|
|
40
40
|
"@types/better-sqlite3": "^7.6.0",
|
|
41
41
|
"better-sqlite3": "^12.0.0",
|
|
42
|
-
"@kybernesis/brain-testkit": "0.
|
|
42
|
+
"@kybernesis/brain-testkit": "0.11.0"
|
|
43
43
|
},
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|