mindlore 0.4.2 → 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/README.md +4 -2
- package/dist/scripts/lib/constants.d.ts +4 -0
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +5 -1
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/db-helpers.d.ts +15 -0
- package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
- package/dist/scripts/lib/db-helpers.js +51 -0
- package/dist/scripts/lib/db-helpers.js.map +1 -1
- package/dist/scripts/lib/embedding.d.ts +5 -0
- package/dist/scripts/lib/embedding.d.ts.map +1 -0
- package/dist/scripts/lib/embedding.js +44 -0
- package/dist/scripts/lib/embedding.js.map +1 -0
- package/dist/scripts/lib/hybrid-search.d.ts +62 -0
- package/dist/scripts/lib/hybrid-search.d.ts.map +1 -0
- package/dist/scripts/lib/hybrid-search.js +150 -0
- package/dist/scripts/lib/hybrid-search.js.map +1 -0
- package/dist/scripts/lib/migrations.d.ts +3 -0
- package/dist/scripts/lib/migrations.d.ts.map +1 -0
- package/dist/scripts/lib/migrations.js +38 -0
- package/dist/scripts/lib/migrations.js.map +1 -0
- package/dist/scripts/lib/schema-version.d.ts +13 -0
- package/dist/scripts/lib/schema-version.d.ts.map +1 -0
- package/dist/scripts/lib/schema-version.js +37 -0
- package/dist/scripts/lib/schema-version.js.map +1 -0
- package/dist/scripts/lib/synonym.d.ts +4 -0
- package/dist/scripts/lib/synonym.d.ts.map +1 -0
- package/dist/scripts/lib/synonym.js +37 -0
- package/dist/scripts/lib/synonym.js.map +1 -0
- package/dist/scripts/mindlore-fts5-index.d.ts +2 -1
- package/dist/scripts/mindlore-fts5-index.d.ts.map +1 -1
- package/dist/scripts/mindlore-fts5-index.js +57 -5
- package/dist/scripts/mindlore-fts5-index.js.map +1 -1
- package/dist/scripts/mindlore-fts5-search.d.ts +3 -2
- package/dist/scripts/mindlore-fts5-search.d.ts.map +1 -1
- package/dist/scripts/mindlore-fts5-search.js +89 -35
- package/dist/scripts/mindlore-fts5-search.js.map +1 -1
- package/dist/scripts/mindlore-health-check.js +52 -0
- package/dist/scripts/mindlore-health-check.js.map +1 -1
- package/dist/tests/embedding.test.d.ts +6 -0
- package/dist/tests/embedding.test.d.ts.map +1 -0
- package/dist/tests/embedding.test.js +71 -0
- package/dist/tests/embedding.test.js.map +1 -0
- package/dist/tests/fts5.test.js +82 -0
- package/dist/tests/fts5.test.js.map +1 -1
- package/dist/tests/helpers/db.d.ts +5 -0
- package/dist/tests/helpers/db.d.ts.map +1 -1
- package/dist/tests/helpers/db.js +19 -0
- package/dist/tests/helpers/db.js.map +1 -1
- package/dist/tests/hook-smoke.test.js +2 -2
- package/dist/tests/hook-smoke.test.js.map +1 -1
- package/dist/tests/hybrid-search.test.d.ts +2 -0
- package/dist/tests/hybrid-search.test.d.ts.map +1 -0
- package/dist/tests/hybrid-search.test.js +114 -0
- package/dist/tests/hybrid-search.test.js.map +1 -0
- package/dist/tests/research-guard.test.d.ts +2 -0
- package/dist/tests/research-guard.test.d.ts.map +1 -0
- package/dist/tests/research-guard.test.js +143 -0
- package/dist/tests/research-guard.test.js.map +1 -0
- package/dist/tests/schema-version.test.d.ts +2 -0
- package/dist/tests/schema-version.test.d.ts.map +1 -0
- package/dist/tests/schema-version.test.js +99 -0
- package/dist/tests/schema-version.test.js.map +1 -0
- package/dist/tests/search-hook.test.js +11 -0
- package/dist/tests/search-hook.test.js.map +1 -1
- package/dist/tests/synonym.test.d.ts +2 -0
- package/dist/tests/synonym.test.d.ts.map +1 -0
- package/dist/tests/synonym.test.js +47 -0
- package/dist/tests/synonym.test.js.map +1 -0
- package/hooks/lib/mindlore-common.cjs +94 -0
- package/hooks/mindlore-research-guard.cjs +144 -0
- package/hooks/mindlore-search.cjs +56 -42
- package/hooks/mindlore-session-end.cjs +41 -13
- package/package.json +3 -1
- package/plugin.json +6 -1
- package/templates/config.json +15 -1
package/dist/tests/fts5.test.js
CHANGED
|
@@ -99,4 +99,86 @@ describe('FTS5 Database', () => {
|
|
|
99
99
|
db.close();
|
|
100
100
|
});
|
|
101
101
|
});
|
|
102
|
+
describe('Index with Embedding', () => {
|
|
103
|
+
test('should populate vec table when sqlite-vec is loaded', () => {
|
|
104
|
+
const { loadSqliteVec, ensureVecTable, hasVecTable: hasVec } = require('../scripts/lib/db-helpers.js');
|
|
105
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
106
|
+
const vecLoaded = loadSqliteVec(db);
|
|
107
|
+
if (!vecLoaded) {
|
|
108
|
+
console.log('sqlite-vec not available — skipping embed test');
|
|
109
|
+
db.close();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
ensureVecTable(db);
|
|
113
|
+
expect(hasVec(db)).toBe(true);
|
|
114
|
+
// Insert a document to FTS
|
|
115
|
+
(0, db_js_1.insertFts)(db, {
|
|
116
|
+
path: path_1.default.join(TEST_DIR, 'sources', 'embed-test.md'),
|
|
117
|
+
slug: 'embed-test',
|
|
118
|
+
description: 'Document for embedding test',
|
|
119
|
+
type: 'source',
|
|
120
|
+
category: 'sources',
|
|
121
|
+
title: 'Embed Test',
|
|
122
|
+
content: 'This document tests the embedding pipeline integration',
|
|
123
|
+
tags: 'test,embedding',
|
|
124
|
+
});
|
|
125
|
+
// Manually test vec insert with fake embedding
|
|
126
|
+
const fakeEmbedding = new Float32Array(384);
|
|
127
|
+
fakeEmbedding[0] = 1.0;
|
|
128
|
+
const buf = Buffer.from(fakeEmbedding.buffer);
|
|
129
|
+
db.prepare('INSERT INTO documents_vec (embedding, slug, created_at, model_name) VALUES (?, ?, ?, ?)').run(buf, 'embed-test', new Date().toISOString(), 'Xenova/multilingual-e5-small');
|
|
130
|
+
// Verify vec entry
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test: better-sqlite3 .get() returns unknown
|
|
132
|
+
const row = db.prepare('SELECT slug FROM documents_vec WHERE slug = ?').get('embed-test');
|
|
133
|
+
expect(row?.slug).toBe('embed-test');
|
|
134
|
+
db.close();
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('Vec Table', () => {
|
|
138
|
+
test('should load sqlite-vec extension and create vec table', () => {
|
|
139
|
+
const { loadSqliteVec, ensureVecTable } = require('../scripts/lib/db-helpers.js');
|
|
140
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
141
|
+
const loaded = loadSqliteVec(db);
|
|
142
|
+
expect(loaded).toBe(true);
|
|
143
|
+
ensureVecTable(db);
|
|
144
|
+
// Verify table exists by inserting and querying
|
|
145
|
+
const testEmbedding = new Float32Array(384);
|
|
146
|
+
testEmbedding[0] = 1.0; // unit vector along first dimension
|
|
147
|
+
db.prepare('INSERT INTO documents_vec (embedding, slug, created_at, model_name) VALUES (?, ?, ?, ?)').run(Buffer.from(testEmbedding.buffer), 'test-slug', new Date().toISOString(), 'test-model');
|
|
148
|
+
// vec0 metadata columns are filterable in WHERE
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test: better-sqlite3 .get() returns unknown
|
|
150
|
+
const row = db.prepare('SELECT slug FROM documents_vec WHERE slug = ?').get('test-slug');
|
|
151
|
+
expect(row?.slug).toBe('test-slug');
|
|
152
|
+
db.close();
|
|
153
|
+
});
|
|
154
|
+
test('should return false when sqlite-vec is not available', () => {
|
|
155
|
+
const { ensureVecTable } = require('../scripts/lib/db-helpers.js');
|
|
156
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
157
|
+
// Without loadSqliteVec, ensureVecTable should handle gracefully
|
|
158
|
+
expect(() => ensureVecTable(db)).not.toThrow();
|
|
159
|
+
db.close();
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('Search Script Hybrid Mode', () => {
|
|
163
|
+
test('should return results with score field in hybrid mode', () => {
|
|
164
|
+
const { hybridSearch } = require('../scripts/lib/hybrid-search.js');
|
|
165
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
166
|
+
(0, db_js_1.insertFts)(db, {
|
|
167
|
+
path: path_1.default.join(TEST_DIR, 'sources', 'search-test.md'),
|
|
168
|
+
slug: 'search-test',
|
|
169
|
+
description: 'Hybrid search integration test',
|
|
170
|
+
type: 'source',
|
|
171
|
+
category: 'sources',
|
|
172
|
+
title: 'Search Test',
|
|
173
|
+
content: 'Testing the hybrid search pipeline with FTS5 and vector search',
|
|
174
|
+
tags: 'search,hybrid',
|
|
175
|
+
});
|
|
176
|
+
// Without vec — should still return FTS5 results
|
|
177
|
+
const results = hybridSearch(db, 'hybrid search', { maxResults: 3 });
|
|
178
|
+
expect(results.length).toBe(1);
|
|
179
|
+
expect(results[0].slug).toBe('search-test');
|
|
180
|
+
expect(results[0].score).toBeGreaterThan(0);
|
|
181
|
+
db.close();
|
|
182
|
+
});
|
|
183
|
+
});
|
|
102
184
|
//# sourceMappingURL=fts5.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts5.test.js","sourceRoot":"","sources":["../../tests/fts5.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fts5.test.js","sourceRoot":"","sources":["../../tests/fts5.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,4 +25,9 @@ export interface EpisodesTestEnv {
|
|
|
25
25
|
}
|
|
26
26
|
export declare function createEpisodesTestEnv(prefix: string): EpisodesTestEnv;
|
|
27
27
|
export declare function destroyEpisodesTestEnv(env: EpisodesTestEnv): void;
|
|
28
|
+
export declare function createTestDbWithVec(dbPath: string): {
|
|
29
|
+
db: Database.Database;
|
|
30
|
+
vecLoaded: boolean;
|
|
31
|
+
};
|
|
32
|
+
export declare function insertVec(db: Database.Database, slug: string, embedding: Float32Array, model?: string): void;
|
|
28
33
|
//# sourceMappingURL=db.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAStC,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAY9D;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEtE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAI1E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAMtE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAKrE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAGjE"}
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAStC,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAY9D;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEtE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAI1E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAMtE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAKrE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAGjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAcjG;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,GAAE,MAAqB,GAAG,IAAI,CAO1H"}
|
package/dist/tests/helpers/db.js
CHANGED
|
@@ -11,6 +11,8 @@ exports.setupTestDir = setupTestDir;
|
|
|
11
11
|
exports.teardownTestDir = teardownTestDir;
|
|
12
12
|
exports.createEpisodesTestEnv = createEpisodesTestEnv;
|
|
13
13
|
exports.destroyEpisodesTestEnv = destroyEpisodesTestEnv;
|
|
14
|
+
exports.createTestDbWithVec = createTestDbWithVec;
|
|
15
|
+
exports.insertVec = insertVec;
|
|
14
16
|
const fs_1 = __importDefault(require("fs"));
|
|
15
17
|
const path_1 = __importDefault(require("path"));
|
|
16
18
|
const os_1 = __importDefault(require("os"));
|
|
@@ -62,4 +64,21 @@ function destroyEpisodesTestEnv(env) {
|
|
|
62
64
|
env.db.close();
|
|
63
65
|
fs_1.default.rmSync(env.tmpDir, { recursive: true, force: true });
|
|
64
66
|
}
|
|
67
|
+
function createTestDbWithVec(dbPath) {
|
|
68
|
+
const db = createTestDb(dbPath);
|
|
69
|
+
let vecLoaded = false;
|
|
70
|
+
try {
|
|
71
|
+
const { loadSqliteVec, ensureVecTable } = require('../../scripts/lib/db-helpers.js');
|
|
72
|
+
vecLoaded = loadSqliteVec(db);
|
|
73
|
+
if (vecLoaded)
|
|
74
|
+
ensureVecTable(db);
|
|
75
|
+
}
|
|
76
|
+
catch (_err) {
|
|
77
|
+
// sqlite-vec not available
|
|
78
|
+
}
|
|
79
|
+
return { db, vecLoaded };
|
|
80
|
+
}
|
|
81
|
+
function insertVec(db, slug, embedding, model = 'test-model') {
|
|
82
|
+
db.prepare('INSERT INTO documents_vec (slug, embedding, created_at, model_name) VALUES (?, ?, ?, ?)').run(slug, Buffer.from(embedding.buffer), new Date().toISOString(), model);
|
|
83
|
+
}
|
|
65
84
|
//# sourceMappingURL=db.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":";;;;;AAaA,wBAEC;AAED,oCAYC;AAiBD,8BAEC;AAED,4DAIC;AAED,oCAMC;AAED,0CAEC;AAOD,sDAKC;AAED,wDAGC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,11 +48,11 @@ describe('Hook Smoke Tests', () => {
|
|
|
48
48
|
expect(file).toMatch(/\.cjs$/);
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
|
-
test('hook count should match plan (
|
|
51
|
+
test('hook count should match plan (14 hooks)', () => {
|
|
52
52
|
const hookFiles = fs_1.default
|
|
53
53
|
.readdirSync(HOOKS_DIR)
|
|
54
54
|
.filter((f) => f.startsWith('mindlore-') && f.endsWith('.cjs'));
|
|
55
|
-
expect(hookFiles).toHaveLength(
|
|
55
|
+
expect(hookFiles).toHaveLength(14);
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
58
|
//# sourceMappingURL=hook-smoke.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-smoke.test.js","sourceRoot":"","sources":["../../tests/hook-smoke.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAEtD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,aAAa,GAAG;QACpB,4BAA4B;QAC5B,qBAAqB;QACrB,oBAAoB;QACpB,wBAAwB;QACxB,0BAA0B;QAC1B,0BAA0B;QAC1B,2BAA2B;KAC5B,CAAC;IAEF,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAElD,2EAA2E;YAC3E,MAAM,CAAC,GAAG,EAAE;gBACV,IAAI,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,SAAS,GAAG,YAAE;aACjB,WAAW,CAAC,SAAS,CAAC;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"hook-smoke.test.js","sourceRoot":"","sources":["../../tests/hook-smoke.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAEtD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,aAAa,GAAG;QACpB,4BAA4B;QAC5B,qBAAqB;QACrB,oBAAoB;QACpB,wBAAwB;QACxB,0BAA0B;QAC1B,0BAA0B;QAC1B,2BAA2B;KAC5B,CAAC;IAEF,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAElD,2EAA2E;YAC3E,MAAM,CAAC,GAAG,EAAE;gBACV,IAAI,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,SAAS,GAAG,YAAE;aACjB,WAAW,CAAC,SAAS,CAAC;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,SAAS,GAAG,YAAE;aACjB,WAAW,CAAC,SAAS,CAAC;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid-search.test.d.ts","sourceRoot":"","sources":["../../tests/hybrid-search.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
8
|
+
const db_js_1 = require("./helpers/db.js");
|
|
9
|
+
const TEST_DIR = path_1.default.join(__dirname, '..', '.test-hybrid-search');
|
|
10
|
+
const DB_PATH = path_1.default.join(TEST_DIR, 'mindlore.db');
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
(0, db_js_1.setupTestDir)(TEST_DIR, ['sources']);
|
|
13
|
+
const db = (0, db_js_1.createTestDb)(DB_PATH);
|
|
14
|
+
db.close();
|
|
15
|
+
});
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
(0, db_js_1.teardownTestDir)(TEST_DIR);
|
|
18
|
+
});
|
|
19
|
+
describe('RRF Fusion', () => {
|
|
20
|
+
test('should compute RRF scores correctly', () => {
|
|
21
|
+
const { computeRRF } = require('../scripts/lib/hybrid-search.js');
|
|
22
|
+
const ftsResults = [
|
|
23
|
+
{ slug: 'a', rank: -10 },
|
|
24
|
+
{ slug: 'b', rank: -5 },
|
|
25
|
+
];
|
|
26
|
+
const vecResults = [
|
|
27
|
+
{ slug: 'b', distance: 0.5 },
|
|
28
|
+
{ slug: 'c', distance: 0.8 },
|
|
29
|
+
];
|
|
30
|
+
const fused = computeRRF(ftsResults, vecResults, { k: 60, ftsWeight: 0.4, vecWeight: 0.6 });
|
|
31
|
+
// 'b' appears in both — should have highest score
|
|
32
|
+
expect(fused[0].slug).toBe('b');
|
|
33
|
+
expect(fused.length).toBe(3); // a, b, c
|
|
34
|
+
// All scores should be positive
|
|
35
|
+
fused.forEach((r) => expect(r.score).toBeGreaterThan(0));
|
|
36
|
+
});
|
|
37
|
+
test('should handle FTS-only results (vec empty)', () => {
|
|
38
|
+
const { computeRRF } = require('../scripts/lib/hybrid-search.js');
|
|
39
|
+
const ftsResults = [
|
|
40
|
+
{ slug: 'a', rank: -10 },
|
|
41
|
+
{ slug: 'b', rank: -5 },
|
|
42
|
+
];
|
|
43
|
+
const fused = computeRRF(ftsResults, [], { k: 60, ftsWeight: 0.4, vecWeight: 0.6 });
|
|
44
|
+
expect(fused.length).toBe(2);
|
|
45
|
+
expect(fused[0].slug).toBe('a');
|
|
46
|
+
});
|
|
47
|
+
test('should handle vec-only results (FTS empty)', () => {
|
|
48
|
+
const { computeRRF } = require('../scripts/lib/hybrid-search.js');
|
|
49
|
+
const vecResults = [
|
|
50
|
+
{ slug: 'a', distance: 0.3 },
|
|
51
|
+
{ slug: 'b', distance: 0.9 },
|
|
52
|
+
];
|
|
53
|
+
const fused = computeRRF([], vecResults, { k: 60, ftsWeight: 0.4, vecWeight: 0.6 });
|
|
54
|
+
expect(fused.length).toBe(2);
|
|
55
|
+
expect(fused[0].slug).toBe('a'); // lower distance = more similar
|
|
56
|
+
});
|
|
57
|
+
test('should convert L2 distance to cosine similarity', () => {
|
|
58
|
+
const { l2ToCosine } = require('../scripts/lib/hybrid-search.js');
|
|
59
|
+
// L2 distance 0 = identical = cosine 1.0
|
|
60
|
+
expect(l2ToCosine(0)).toBeCloseTo(1.0, 5);
|
|
61
|
+
// L2 distance 2 = opposite = cosine 0.0 (for normalized vectors)
|
|
62
|
+
expect(l2ToCosine(2)).toBeCloseTo(0.0, 5);
|
|
63
|
+
// L2 distance 1 (90 degrees for normalized) = cosine 0.5
|
|
64
|
+
expect(l2ToCosine(1)).toBeCloseTo(0.5, 5);
|
|
65
|
+
});
|
|
66
|
+
test('should normalize BM25 scores', () => {
|
|
67
|
+
const { normalizeBM25 } = require('../scripts/lib/hybrid-search.js');
|
|
68
|
+
// FTS5 returns negative ranks — more negative = better match
|
|
69
|
+
expect(normalizeBM25(-25)).toBeCloseTo(1.0, 5);
|
|
70
|
+
expect(normalizeBM25(-12.5)).toBeCloseTo(0.5, 5);
|
|
71
|
+
expect(normalizeBM25(0)).toBeCloseTo(0.0, 5);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('Hybrid Search Integration', () => {
|
|
75
|
+
test('should search FTS5 and return results with path and score', () => {
|
|
76
|
+
const { searchFts5 } = require('../scripts/lib/hybrid-search.js');
|
|
77
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
78
|
+
(0, db_js_1.insertFts)(db, {
|
|
79
|
+
path: path_1.default.join(TEST_DIR, 'sources', 'test.md'),
|
|
80
|
+
slug: 'test-doc',
|
|
81
|
+
description: 'TypeScript guide for beginners',
|
|
82
|
+
type: 'source',
|
|
83
|
+
category: 'sources',
|
|
84
|
+
title: 'Test Doc',
|
|
85
|
+
content: 'TypeScript is a typed superset of JavaScript',
|
|
86
|
+
tags: 'typescript,javascript',
|
|
87
|
+
});
|
|
88
|
+
const results = searchFts5(db, 'TypeScript', 10);
|
|
89
|
+
expect(results.length).toBe(1);
|
|
90
|
+
expect(results[0].slug).toBe('test-doc');
|
|
91
|
+
expect(results[0].rank).toBeDefined();
|
|
92
|
+
db.close();
|
|
93
|
+
});
|
|
94
|
+
test('should fall back to pure FTS5 when vec table is missing', () => {
|
|
95
|
+
const { hybridSearch } = require('../scripts/lib/hybrid-search.js');
|
|
96
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
97
|
+
(0, db_js_1.insertFts)(db, {
|
|
98
|
+
path: path_1.default.join(TEST_DIR, 'sources', 'fallback.md'),
|
|
99
|
+
slug: 'fallback-doc',
|
|
100
|
+
description: 'Fallback test document',
|
|
101
|
+
type: 'source',
|
|
102
|
+
category: 'sources',
|
|
103
|
+
title: 'Fallback Doc',
|
|
104
|
+
content: 'This tests the graceful fallback to pure FTS5',
|
|
105
|
+
tags: 'test',
|
|
106
|
+
});
|
|
107
|
+
// No vec table loaded — should still work via FTS5 fallback
|
|
108
|
+
const results = hybridSearch(db, 'fallback', { maxResults: 5 });
|
|
109
|
+
expect(results.length).toBe(1);
|
|
110
|
+
expect(results[0].slug).toBe('fallback-doc');
|
|
111
|
+
db.close();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=hybrid-search.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid-search.test.js","sourceRoot":"","sources":["../../tests/hybrid-search.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-guard.test.d.ts","sourceRoot":"","sources":["../../tests/research-guard.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const db_1 = require("./helpers/db");
|
|
11
|
+
const HOOK_PATH = path_1.default.join(__dirname, '..', 'hooks', 'mindlore-research-guard.cjs');
|
|
12
|
+
let tmpDir;
|
|
13
|
+
let dbPath;
|
|
14
|
+
beforeAll(() => {
|
|
15
|
+
// Create isolated .mindlore/ with test DB
|
|
16
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-rg-'));
|
|
17
|
+
dbPath = path_1.default.join(tmpDir, 'mindlore.db');
|
|
18
|
+
const db = (0, db_1.createTestDb)(dbPath);
|
|
19
|
+
// Insert a high-quality recent source
|
|
20
|
+
(0, db_1.insertFts)(db, {
|
|
21
|
+
path: 'sources/cc-hooks-reference.md',
|
|
22
|
+
slug: 'cc-hooks-reference',
|
|
23
|
+
description: 'Claude Code Hooks Reference',
|
|
24
|
+
type: 'source',
|
|
25
|
+
category: 'sources',
|
|
26
|
+
title: 'Claude Code Hooks — Comprehensive Reference',
|
|
27
|
+
content: 'Claude Code hooks SessionEnd timeout behavior exit code PreToolUse PostToolUse lifecycle',
|
|
28
|
+
tags: 'claude-code, hooks, timeout, SessionEnd',
|
|
29
|
+
quality: 'high',
|
|
30
|
+
dateCaptured: new Date().toISOString().slice(0, 10),
|
|
31
|
+
project: 'mindlore',
|
|
32
|
+
});
|
|
33
|
+
// Insert a medium-quality source
|
|
34
|
+
(0, db_1.insertFts)(db, {
|
|
35
|
+
path: 'sources/obsidian-integration.md',
|
|
36
|
+
slug: 'obsidian-integration',
|
|
37
|
+
description: 'Obsidian integration notes',
|
|
38
|
+
type: 'source',
|
|
39
|
+
category: 'sources',
|
|
40
|
+
title: 'Obsidian Vault Integration',
|
|
41
|
+
content: 'obsidian vault wikilinks export integration markdown',
|
|
42
|
+
tags: 'obsidian, vault, export',
|
|
43
|
+
quality: 'medium',
|
|
44
|
+
dateCaptured: new Date().toISOString().slice(0, 10),
|
|
45
|
+
project: 'mindlore',
|
|
46
|
+
});
|
|
47
|
+
db.close();
|
|
48
|
+
});
|
|
49
|
+
afterAll(() => {
|
|
50
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
51
|
+
});
|
|
52
|
+
function runHook(input) {
|
|
53
|
+
const result = (0, child_process_1.spawnSync)('node', [HOOK_PATH], {
|
|
54
|
+
input: JSON.stringify(input),
|
|
55
|
+
encoding: 'utf8',
|
|
56
|
+
timeout: 10000,
|
|
57
|
+
env: { ...process.env, MINDLORE_HOME: tmpDir },
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
stdout: result.stdout || '',
|
|
61
|
+
stderr: result.stderr || '',
|
|
62
|
+
exitCode: result.status ?? 1,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
describe('mindlore-research-guard', () => {
|
|
66
|
+
test('should pass silently for non-Agent tools', () => {
|
|
67
|
+
const result = runHook({ tool_name: 'Read', tool_input: { file_path: '/tmp/test.md' } });
|
|
68
|
+
expect(result.exitCode).toBe(0);
|
|
69
|
+
expect(result.stdout).toBe('');
|
|
70
|
+
});
|
|
71
|
+
test('should pass silently for non-research Agent prompts', () => {
|
|
72
|
+
const result = runHook({
|
|
73
|
+
tool_name: 'Agent',
|
|
74
|
+
tool_input: { prompt: 'Fix the bug in auth module', description: 'coder fix' },
|
|
75
|
+
});
|
|
76
|
+
expect(result.exitCode).toBe(0);
|
|
77
|
+
expect(result.stdout).toBe('');
|
|
78
|
+
});
|
|
79
|
+
test('should pass silently for mindlore ingest operations', () => {
|
|
80
|
+
const result = runHook({
|
|
81
|
+
tool_name: 'Agent',
|
|
82
|
+
tool_input: { prompt: '[mindlore:ingest] Fetch URL and save to raw/', description: 'ingest' },
|
|
83
|
+
});
|
|
84
|
+
expect(result.exitCode).toBe(0);
|
|
85
|
+
expect(result.stdout).toBe('');
|
|
86
|
+
});
|
|
87
|
+
test('should pass silently for [research-override] bypass', () => {
|
|
88
|
+
const result = runHook({
|
|
89
|
+
tool_name: 'Agent',
|
|
90
|
+
tool_input: {
|
|
91
|
+
prompt: '[research-override] Research the Claude Code hooks timeout',
|
|
92
|
+
description: 'research',
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
expect(result.exitCode).toBe(0);
|
|
96
|
+
expect(result.stdout).toBe('');
|
|
97
|
+
});
|
|
98
|
+
test('should block (exit 2) when high-quality recent match exists', () => {
|
|
99
|
+
const result = runHook({
|
|
100
|
+
tool_name: 'Agent',
|
|
101
|
+
tool_input: {
|
|
102
|
+
prompt: 'Research the Claude Code SessionEnd hook timeout behavior',
|
|
103
|
+
description: 'SessionEnd hook research',
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
expect(result.exitCode).toBe(2);
|
|
107
|
+
expect(result.stderr).toContain('BLOK');
|
|
108
|
+
expect(result.stderr).toContain('cc-hooks-reference');
|
|
109
|
+
});
|
|
110
|
+
test('should pass silently when keywords are too few', () => {
|
|
111
|
+
const result = runHook({
|
|
112
|
+
tool_name: 'Agent',
|
|
113
|
+
tool_input: { prompt: 'Research it', description: 'research' },
|
|
114
|
+
});
|
|
115
|
+
expect(result.exitCode).toBe(0);
|
|
116
|
+
expect(result.stdout).toBe('');
|
|
117
|
+
});
|
|
118
|
+
test('should return additionalContext for medium-quality matches', () => {
|
|
119
|
+
const result = runHook({
|
|
120
|
+
tool_name: 'Agent',
|
|
121
|
+
tool_input: {
|
|
122
|
+
prompt: 'Research obsidian vault integration wikilinks export',
|
|
123
|
+
description: 'obsidian research',
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
expect(result.exitCode).toBe(0);
|
|
127
|
+
if (result.stdout) {
|
|
128
|
+
const parsed = JSON.parse(result.stdout);
|
|
129
|
+
expect(parsed.hookSpecificOutput).toBeDefined();
|
|
130
|
+
expect(parsed.hookSpecificOutput.additionalContext).toContain('mindlore-research-guard');
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
test('should handle empty stdin gracefully', () => {
|
|
134
|
+
const result = (0, child_process_1.spawnSync)('node', [HOOK_PATH], {
|
|
135
|
+
input: '',
|
|
136
|
+
encoding: 'utf8',
|
|
137
|
+
timeout: 5000,
|
|
138
|
+
env: { ...process.env, MINDLORE_HOME: tmpDir },
|
|
139
|
+
});
|
|
140
|
+
expect(result.status).toBe(0);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=research-guard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-guard.test.js","sourceRoot":"","sources":["../../tests/research-guard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-version.test.d.ts","sourceRoot":"","sources":["../../tests/schema-version.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
8
|
+
const db_js_1 = require("./helpers/db.js");
|
|
9
|
+
const TEST_DIR = path_1.default.join(__dirname, '..', '.test-schema-version');
|
|
10
|
+
const DB_PATH = path_1.default.join(TEST_DIR, 'mindlore.db');
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
(0, db_js_1.setupTestDir)(TEST_DIR, ['sources']);
|
|
13
|
+
const db = (0, db_js_1.createTestDb)(DB_PATH);
|
|
14
|
+
db.close();
|
|
15
|
+
});
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
(0, db_js_1.teardownTestDir)(TEST_DIR);
|
|
18
|
+
});
|
|
19
|
+
describe('Schema Version', () => {
|
|
20
|
+
test('should create schema_versions table if missing', () => {
|
|
21
|
+
const { ensureSchemaTable, getSchemaVersion } = require('../scripts/lib/schema-version.js');
|
|
22
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
23
|
+
ensureSchemaTable(db);
|
|
24
|
+
const version = getSchemaVersion(db);
|
|
25
|
+
expect(version).toBe(0);
|
|
26
|
+
db.close();
|
|
27
|
+
});
|
|
28
|
+
test('should set and get schema version', () => {
|
|
29
|
+
const { ensureSchemaTable, setSchemaVersion, getSchemaVersion } = require('../scripts/lib/schema-version.js');
|
|
30
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
31
|
+
ensureSchemaTable(db);
|
|
32
|
+
setSchemaVersion(db, 1);
|
|
33
|
+
expect(getSchemaVersion(db)).toBe(1);
|
|
34
|
+
db.close();
|
|
35
|
+
});
|
|
36
|
+
test('should run migrations in order', () => {
|
|
37
|
+
const { ensureSchemaTable, runMigrations, getSchemaVersion } = require('../scripts/lib/schema-version.js');
|
|
38
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
39
|
+
ensureSchemaTable(db);
|
|
40
|
+
const log = [];
|
|
41
|
+
const migrations = [
|
|
42
|
+
{ version: 1, name: 'add_timestamps', up: (d) => { log.push(1); d.exec("SELECT 1"); } },
|
|
43
|
+
{ version: 2, name: 'add_vec_table', up: (d) => { log.push(2); d.exec("SELECT 1"); } },
|
|
44
|
+
];
|
|
45
|
+
runMigrations(db, migrations);
|
|
46
|
+
expect(getSchemaVersion(db)).toBe(2);
|
|
47
|
+
expect(log).toEqual([1, 2]);
|
|
48
|
+
db.close();
|
|
49
|
+
});
|
|
50
|
+
test('should skip already-applied migrations', () => {
|
|
51
|
+
const { ensureSchemaTable, setSchemaVersion, runMigrations, getSchemaVersion } = require('../scripts/lib/schema-version.js');
|
|
52
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
53
|
+
ensureSchemaTable(db);
|
|
54
|
+
setSchemaVersion(db, 1);
|
|
55
|
+
const log = [];
|
|
56
|
+
const migrations = [
|
|
57
|
+
{ version: 1, name: 'add_timestamps', up: () => { log.push(1); } },
|
|
58
|
+
{ version: 2, name: 'add_vec_table', up: () => { log.push(2); } },
|
|
59
|
+
];
|
|
60
|
+
runMigrations(db, migrations);
|
|
61
|
+
expect(getSchemaVersion(db)).toBe(2);
|
|
62
|
+
expect(log).toEqual([2]); // only migration 2 ran
|
|
63
|
+
db.close();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('v0.5.0 Migrations', () => {
|
|
67
|
+
test('should create documents_vec table via migration', () => {
|
|
68
|
+
const { ensureSchemaTable, runMigrations, getSchemaVersion } = require('../scripts/lib/schema-version.js');
|
|
69
|
+
const { V050_MIGRATIONS } = require('../scripts/lib/migrations.js');
|
|
70
|
+
const { loadSqliteVec } = require('../scripts/lib/db-helpers.js');
|
|
71
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
72
|
+
loadSqliteVec(db);
|
|
73
|
+
ensureSchemaTable(db);
|
|
74
|
+
runMigrations(db, V050_MIGRATIONS);
|
|
75
|
+
expect(getSchemaVersion(db)).toBe(1);
|
|
76
|
+
// Verify vec table exists
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test: better-sqlite3 .get() returns unknown
|
|
78
|
+
const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='documents_vec'").get();
|
|
79
|
+
expect(row?.name).toBe('documents_vec');
|
|
80
|
+
db.close();
|
|
81
|
+
});
|
|
82
|
+
test('should add created_at and updated_at to FTS metadata tracking', () => {
|
|
83
|
+
const { ensureSchemaTable, runMigrations } = require('../scripts/lib/schema-version.js');
|
|
84
|
+
const { V050_MIGRATIONS } = require('../scripts/lib/migrations.js');
|
|
85
|
+
const { loadSqliteVec } = require('../scripts/lib/db-helpers.js');
|
|
86
|
+
const db = new better_sqlite3_1.default(DB_PATH);
|
|
87
|
+
loadSqliteVec(db);
|
|
88
|
+
ensureSchemaTable(db);
|
|
89
|
+
runMigrations(db, V050_MIGRATIONS);
|
|
90
|
+
// file_hashes should now have created_at column
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test: pragma returns array of objects
|
|
92
|
+
const info = db.pragma('table_info(file_hashes)');
|
|
93
|
+
const colNames = info.map(c => c.name);
|
|
94
|
+
expect(colNames).toContain('created_at');
|
|
95
|
+
expect(colNames).toContain('updated_at');
|
|
96
|
+
db.close();
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=schema-version.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-version.test.js","sourceRoot":"","sources":["../../tests/schema-version.test.ts"],"names":[],"mappings":"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"}
|