sensemaking 0.24.6 → 0.25.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 +20 -11
- package/dist/cjs/cli/build.d.cts +3 -0
- package/dist/cjs/cli/build.d.ts +3 -0
- package/dist/cjs/cli/build.js +195 -0
- package/dist/cjs/cli/build.js.map +1 -0
- package/dist/cjs/cli/index.d.cts +7 -6
- package/dist/cjs/cli/index.d.ts +7 -6
- package/dist/cjs/cli/index.js +12 -6
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/init.js +2 -2
- package/dist/cjs/cli/init.js.map +1 -1
- package/dist/cjs/cli/map.js +7 -2
- package/dist/cjs/cli/map.js.map +1 -1
- package/dist/cjs/cli/named.js +63 -21
- package/dist/cjs/cli/named.js.map +1 -1
- package/dist/cjs/cli/path.js +7 -2
- package/dist/cjs/cli/path.js.map +1 -1
- package/dist/cjs/cli/peek.js +7 -2
- package/dist/cjs/cli/peek.js.map +1 -1
- package/dist/cjs/cli/related.js +55 -6
- package/dist/cjs/cli/related.js.map +1 -1
- package/dist/cjs/cli/search.js +54 -15
- package/dist/cjs/cli/search.js.map +1 -1
- package/dist/cjs/cli/shared.d.cts +9 -3
- package/dist/cjs/cli/shared.d.ts +9 -3
- package/dist/cjs/cli/shared.js +109 -74
- package/dist/cjs/cli/shared.js.map +1 -1
- package/dist/cjs/cli/sql.js +8 -3
- package/dist/cjs/cli/sql.js.map +1 -1
- package/dist/cjs/cli/status.js +142 -50
- package/dist/cjs/cli/status.js.map +1 -1
- package/dist/cjs/cli/types.d.cts +4 -2
- package/dist/cjs/cli/types.d.ts +4 -2
- package/dist/cjs/cli.js +10 -4
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/map.js +10 -6
- package/dist/cjs/commands/map.js.map +1 -1
- package/dist/cjs/commands/peek.js +10 -6
- package/dist/cjs/commands/peek.js.map +1 -1
- package/dist/cjs/commands/related.d.cts +1 -0
- package/dist/cjs/commands/related.d.ts +1 -0
- package/dist/cjs/commands/related.js +56 -21
- package/dist/cjs/commands/related.js.map +1 -1
- package/dist/cjs/commands/scope.js +1 -1
- package/dist/cjs/commands/scope.js.map +1 -1
- package/dist/cjs/commands/search.js +102 -84
- package/dist/cjs/commands/search.js.map +1 -1
- package/dist/cjs/config/index.d.cts +1 -1
- package/dist/cjs/config/index.d.ts +1 -1
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/config/load.d.cts +6 -1
- package/dist/cjs/config/load.d.ts +6 -1
- package/dist/cjs/config/load.js +38 -1
- package/dist/cjs/config/load.js.map +1 -1
- package/dist/cjs/config/types.d.cts +2 -1
- package/dist/cjs/config/types.d.ts +2 -1
- package/dist/cjs/config/types.js +1 -1
- package/dist/cjs/config/types.js.map +1 -1
- package/dist/cjs/config/validate.js +20 -0
- package/dist/cjs/config/validate.js.map +1 -1
- package/dist/cjs/embed/query.d.cts +2 -1
- package/dist/cjs/embed/query.d.ts +2 -1
- package/dist/cjs/embed/query.js +186 -109
- package/dist/cjs/embed/query.js.map +1 -1
- package/dist/cjs/errors.d.cts +1 -1
- package/dist/cjs/errors.d.ts +1 -1
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/features/embed.js.map +1 -1
- package/dist/cjs/graph/traverse.js +11 -6
- package/dist/cjs/graph/traverse.js.map +1 -1
- package/dist/cjs/index.d.cts +3 -3
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/atomic-write.js +20 -6
- package/dist/cjs/lib/atomic-write.js.map +1 -1
- package/dist/cjs/lib/serial-query.d.cts +1 -0
- package/dist/cjs/lib/serial-query.d.ts +1 -0
- package/dist/cjs/lib/serial-query.js +22 -0
- package/dist/cjs/lib/serial-query.js.map +1 -0
- package/dist/cjs/scan/index.d.cts +5 -0
- package/dist/cjs/scan/index.d.ts +5 -0
- package/dist/cjs/scan/index.js +12 -4
- package/dist/cjs/scan/index.js.map +1 -1
- package/dist/cjs/scan/pool.d.cts +5 -0
- package/dist/cjs/scan/pool.d.ts +5 -0
- package/dist/cjs/scan/pool.js +167 -55
- package/dist/cjs/scan/pool.js.map +1 -1
- package/dist/cjs/store/builder.d.cts +6 -1
- package/dist/cjs/store/builder.d.ts +6 -1
- package/dist/cjs/store/builder.js +135 -5
- package/dist/cjs/store/builder.js.map +1 -1
- package/dist/cjs/store/duckdb/lexical.d.cts +2 -0
- package/dist/cjs/store/duckdb/lexical.d.ts +2 -0
- package/dist/cjs/store/duckdb/lexical.js +139 -7
- package/dist/cjs/store/duckdb/lexical.js.map +1 -1
- package/dist/cjs/store/duckdb/open.d.cts +3 -3
- package/dist/cjs/store/duckdb/open.d.ts +3 -3
- package/dist/cjs/store/duckdb/open.js +61 -42
- package/dist/cjs/store/duckdb/open.js.map +1 -1
- package/dist/cjs/store/duckdb/reconcile.js +2 -2
- package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
- package/dist/cjs/store/duckdb/vectors.d.cts +1 -0
- package/dist/cjs/store/duckdb/vectors.d.ts +1 -0
- package/dist/cjs/store/duckdb/vectors.js +55 -43
- package/dist/cjs/store/duckdb/vectors.js.map +1 -1
- package/dist/cjs/store/index.d.cts +23 -4
- package/dist/cjs/store/index.d.ts +23 -4
- package/dist/cjs/store/index.js +224 -15
- package/dist/cjs/store/index.js.map +1 -1
- package/dist/cjs/store/open.d.cts +9 -1
- package/dist/cjs/store/open.d.ts +9 -1
- package/dist/cjs/store/open.js +479 -128
- package/dist/cjs/store/open.js.map +1 -1
- package/dist/cjs/store/reconcile.js +93 -63
- package/dist/cjs/store/reconcile.js.map +1 -1
- package/dist/cjs/store/sqlite/open.d.cts +3 -3
- package/dist/cjs/store/sqlite/open.d.ts +3 -3
- package/dist/cjs/store/sqlite/open.js +44 -36
- package/dist/cjs/store/sqlite/open.js.map +1 -1
- package/dist/cjs/store/turso/open.d.cts +3 -3
- package/dist/cjs/store/turso/open.d.ts +3 -3
- package/dist/cjs/store/turso/open.js +83 -66
- package/dist/cjs/store/turso/open.js.map +1 -1
- package/dist/cjs/store/turso/store.d.cts +3 -1
- package/dist/cjs/store/turso/store.d.ts +3 -1
- package/dist/cjs/store/turso/store.js +46 -31
- package/dist/cjs/store/turso/store.js.map +1 -1
- package/dist/cjs/store/types.d.cts +12 -3
- package/dist/cjs/store/types.d.ts +12 -3
- package/dist/cjs/store/types.js.map +1 -1
- package/dist/cjs/watch.js +155 -35
- package/dist/cjs/watch.js.map +1 -1
- package/dist/esm/cli/build.d.ts +3 -0
- package/dist/esm/cli/build.js +18 -0
- package/dist/esm/cli/build.js.map +1 -0
- package/dist/esm/cli/index.d.ts +7 -6
- package/dist/esm/cli/index.js +8 -6
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/init.js +2 -2
- package/dist/esm/cli/init.js.map +1 -1
- package/dist/esm/cli/map.js +8 -2
- package/dist/esm/cli/map.js.map +1 -1
- package/dist/esm/cli/named.js +38 -14
- package/dist/esm/cli/named.js.map +1 -1
- package/dist/esm/cli/path.js +8 -2
- package/dist/esm/cli/path.js.map +1 -1
- package/dist/esm/cli/peek.js +8 -2
- package/dist/esm/cli/peek.js.map +1 -1
- package/dist/esm/cli/related.js +21 -3
- package/dist/esm/cli/related.js.map +1 -1
- package/dist/esm/cli/search.js +28 -7
- package/dist/esm/cli/search.js.map +1 -1
- package/dist/esm/cli/shared.d.ts +9 -3
- package/dist/esm/cli/shared.js +44 -24
- package/dist/esm/cli/shared.js.map +1 -1
- package/dist/esm/cli/sql.js +8 -2
- package/dist/esm/cli/sql.js.map +1 -1
- package/dist/esm/cli/status.js +166 -111
- package/dist/esm/cli/status.js.map +1 -1
- package/dist/esm/cli/types.d.ts +4 -2
- package/dist/esm/cli/types.js.map +1 -1
- package/dist/esm/cli.js +9 -4
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/map.js +5 -1
- package/dist/esm/commands/map.js.map +1 -1
- package/dist/esm/commands/peek.js +5 -1
- package/dist/esm/commands/peek.js.map +1 -1
- package/dist/esm/commands/related.d.ts +1 -0
- package/dist/esm/commands/related.js +19 -10
- package/dist/esm/commands/related.js.map +1 -1
- package/dist/esm/commands/scope.js +1 -1
- package/dist/esm/commands/scope.js.map +1 -1
- package/dist/esm/commands/search.js +11 -10
- package/dist/esm/commands/search.js.map +1 -1
- package/dist/esm/config/index.d.ts +1 -1
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/load.d.ts +6 -1
- package/dist/esm/config/load.js +32 -3
- package/dist/esm/config/load.js.map +1 -1
- package/dist/esm/config/types.d.ts +2 -1
- package/dist/esm/config/types.js +1 -1
- package/dist/esm/config/types.js.map +1 -1
- package/dist/esm/config/validate.js +20 -0
- package/dist/esm/config/validate.js.map +1 -1
- package/dist/esm/embed/query.d.ts +2 -1
- package/dist/esm/embed/query.js +40 -34
- package/dist/esm/embed/query.js.map +1 -1
- package/dist/esm/errors.d.ts +1 -1
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/features/embed.js.map +1 -1
- package/dist/esm/graph/traverse.js +5 -1
- package/dist/esm/graph/traverse.js.map +1 -1
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/atomic-write.js +14 -6
- package/dist/esm/lib/atomic-write.js.map +1 -1
- package/dist/esm/lib/serial-query.d.ts +1 -0
- package/dist/esm/lib/serial-query.js +13 -0
- package/dist/esm/lib/serial-query.js.map +1 -0
- package/dist/esm/scan/index.d.ts +5 -0
- package/dist/esm/scan/index.js +7 -3
- package/dist/esm/scan/index.js.map +1 -1
- package/dist/esm/scan/pool.d.ts +5 -0
- package/dist/esm/scan/pool.js +41 -16
- package/dist/esm/scan/pool.js.map +1 -1
- package/dist/esm/store/builder.d.ts +6 -1
- package/dist/esm/store/builder.js +19 -0
- package/dist/esm/store/builder.js.map +1 -1
- package/dist/esm/store/duckdb/lexical.d.ts +2 -0
- package/dist/esm/store/duckdb/lexical.js +32 -4
- package/dist/esm/store/duckdb/lexical.js.map +1 -1
- package/dist/esm/store/duckdb/open.d.ts +3 -3
- package/dist/esm/store/duckdb/open.js +16 -7
- package/dist/esm/store/duckdb/open.js.map +1 -1
- package/dist/esm/store/duckdb/reconcile.js +2 -2
- package/dist/esm/store/duckdb/reconcile.js.map +1 -1
- package/dist/esm/store/duckdb/vectors.d.ts +1 -0
- package/dist/esm/store/duckdb/vectors.js +18 -14
- package/dist/esm/store/duckdb/vectors.js.map +1 -1
- package/dist/esm/store/index.d.ts +23 -4
- package/dist/esm/store/index.js +80 -15
- package/dist/esm/store/index.js.map +1 -1
- package/dist/esm/store/open.d.ts +9 -1
- package/dist/esm/store/open.js +175 -84
- package/dist/esm/store/open.js.map +1 -1
- package/dist/esm/store/reconcile.js +12 -0
- package/dist/esm/store/reconcile.js.map +1 -1
- package/dist/esm/store/sqlite/open.d.ts +3 -3
- package/dist/esm/store/sqlite/open.js +9 -6
- package/dist/esm/store/sqlite/open.js.map +1 -1
- package/dist/esm/store/turso/open.d.ts +3 -3
- package/dist/esm/store/turso/open.js +14 -10
- package/dist/esm/store/turso/open.js.map +1 -1
- package/dist/esm/store/turso/store.d.ts +3 -1
- package/dist/esm/store/turso/store.js +5 -1
- package/dist/esm/store/turso/store.js.map +1 -1
- package/dist/esm/store/types.d.ts +12 -3
- package/dist/esm/store/types.js.map +1 -1
- package/dist/esm/watch.js +57 -19
- package/dist/esm/watch.js.map +1 -1
- package/package.json +1 -1
- package/schema.json +7 -2
- package/skills/sense/SKILL.md +3 -3
- package/skills/sense-bases/SKILL.md +1 -2
- package/skills/sense-setup/SKILL.md +1 -1
- package/skills/sense-setup/references/embeddings.md +1 -1
- package/skills/sense-setup/references/store-benchmarks.md +6 -6
|
@@ -160,7 +160,7 @@ function _ts_generator(thisArg, body) {
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
var DB_FILENAME = 'cache.db';
|
|
163
|
-
var SCHEMA_VERSION = '
|
|
163
|
+
var SCHEMA_VERSION = '21';
|
|
164
164
|
// unicode61 splits on spaces, so a language written without them indexes a whole run as one
|
|
165
165
|
// token and word search finds nothing; the `_seg` sidecars (always populated) cover that case.
|
|
166
166
|
var TOKENIZE = 'porter unicode61';
|
|
@@ -203,6 +203,12 @@ function ensureSchemaTables(conn, cfg) {
|
|
|
203
203
|
createContentTable(conn)
|
|
204
204
|
];
|
|
205
205
|
case 2:
|
|
206
|
+
_state.sent();
|
|
207
|
+
return [
|
|
208
|
+
4,
|
|
209
|
+
conn.exec('CREATE TABLE IF NOT EXISTS indexed_sources ("path" TEXT PRIMARY KEY, text TEXT NOT NULL)')
|
|
210
|
+
];
|
|
211
|
+
case 3:
|
|
206
212
|
_state.sent();
|
|
207
213
|
// Coverage, not ownership: a path can appear under several presets. path leads the PK so the
|
|
208
214
|
// per-doc delete is an index hit -- keyed the other way, cold builds went quadratic.
|
|
@@ -210,58 +216,58 @@ function ensureSchemaTables(conn, cfg) {
|
|
|
210
216
|
4,
|
|
211
217
|
conn.exec('CREATE TABLE IF NOT EXISTS preset_files ("path" TEXT, preset TEXT, PRIMARY KEY ("path", preset))')
|
|
212
218
|
];
|
|
213
|
-
case
|
|
219
|
+
case 4:
|
|
214
220
|
_state.sent();
|
|
215
221
|
return [
|
|
216
222
|
4,
|
|
217
223
|
conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)')
|
|
218
224
|
];
|
|
219
|
-
case
|
|
225
|
+
case 5:
|
|
220
226
|
_state.sent();
|
|
221
227
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
222
|
-
_state.label =
|
|
223
|
-
case
|
|
228
|
+
_state.label = 6;
|
|
229
|
+
case 6:
|
|
224
230
|
_state.trys.push([
|
|
225
|
-
|
|
226
|
-
10,
|
|
231
|
+
6,
|
|
227
232
|
11,
|
|
228
|
-
12
|
|
233
|
+
12,
|
|
234
|
+
13
|
|
229
235
|
]);
|
|
230
236
|
_iterator = (0, _indexts1.activeFeatures)(cfg)[Symbol.iterator]();
|
|
231
|
-
_state.label =
|
|
232
|
-
case
|
|
237
|
+
_state.label = 7;
|
|
238
|
+
case 7:
|
|
233
239
|
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
234
240
|
3,
|
|
235
|
-
|
|
241
|
+
10
|
|
236
242
|
];
|
|
237
243
|
feature = _step.value;
|
|
238
244
|
return [
|
|
239
245
|
4,
|
|
240
246
|
feature.schema(conn)
|
|
241
247
|
];
|
|
242
|
-
case 7:
|
|
243
|
-
_state.sent();
|
|
244
|
-
_state.label = 8;
|
|
245
248
|
case 8:
|
|
249
|
+
_state.sent();
|
|
250
|
+
_state.label = 9;
|
|
251
|
+
case 9:
|
|
246
252
|
_iteratorNormalCompletion = true;
|
|
247
253
|
return [
|
|
248
254
|
3,
|
|
249
|
-
|
|
255
|
+
7
|
|
250
256
|
];
|
|
251
|
-
case
|
|
257
|
+
case 10:
|
|
252
258
|
return [
|
|
253
259
|
3,
|
|
254
|
-
|
|
260
|
+
13
|
|
255
261
|
];
|
|
256
|
-
case
|
|
262
|
+
case 11:
|
|
257
263
|
err = _state.sent();
|
|
258
264
|
_didIteratorError = true;
|
|
259
265
|
_iteratorError = err;
|
|
260
266
|
return [
|
|
261
267
|
3,
|
|
262
|
-
|
|
268
|
+
13
|
|
263
269
|
];
|
|
264
|
-
case
|
|
270
|
+
case 12:
|
|
265
271
|
try {
|
|
266
272
|
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
267
273
|
_iterator.return();
|
|
@@ -274,41 +280,41 @@ function ensureSchemaTables(conn, cfg) {
|
|
|
274
280
|
return [
|
|
275
281
|
7
|
|
276
282
|
];
|
|
277
|
-
case
|
|
283
|
+
case 13:
|
|
278
284
|
return [
|
|
279
285
|
4,
|
|
280
286
|
(0, _sharedts.getMeta)(conn, 'schema_version')
|
|
281
287
|
];
|
|
282
|
-
case
|
|
288
|
+
case 14:
|
|
283
289
|
if (!(_state.sent() === null)) return [
|
|
284
290
|
3,
|
|
285
|
-
|
|
291
|
+
16
|
|
286
292
|
];
|
|
287
293
|
return [
|
|
288
294
|
4,
|
|
289
295
|
(0, _sharedts.setMeta)(conn, 'schema_version', SCHEMA_VERSION)
|
|
290
296
|
];
|
|
291
|
-
case 14:
|
|
292
|
-
_state.sent();
|
|
293
|
-
_state.label = 15;
|
|
294
297
|
case 15:
|
|
298
|
+
_state.sent();
|
|
299
|
+
_state.label = 16;
|
|
300
|
+
case 16:
|
|
295
301
|
return [
|
|
296
302
|
4,
|
|
297
303
|
(0, _sharedts.getMeta)(conn, 'features')
|
|
298
304
|
];
|
|
299
|
-
case
|
|
305
|
+
case 17:
|
|
300
306
|
if (!(_state.sent() === null)) return [
|
|
301
307
|
3,
|
|
302
|
-
|
|
308
|
+
19
|
|
303
309
|
];
|
|
304
310
|
return [
|
|
305
311
|
4,
|
|
306
312
|
(0, _sharedts.setMeta)(conn, 'features', (0, _indexts.featureSignature)(cfg, _indexts1.FEATURES))
|
|
307
313
|
];
|
|
308
|
-
case 17:
|
|
309
|
-
_state.sent();
|
|
310
|
-
_state.label = 18;
|
|
311
314
|
case 18:
|
|
315
|
+
_state.sent();
|
|
316
|
+
_state.label = 19;
|
|
317
|
+
case 19:
|
|
312
318
|
return [
|
|
313
319
|
2
|
|
314
320
|
];
|
|
@@ -330,18 +336,20 @@ function setJournalWal(db) {
|
|
|
330
336
|
}
|
|
331
337
|
}
|
|
332
338
|
}
|
|
333
|
-
function connect(dbPath, _cfg) {
|
|
339
|
+
function connect(dbPath, _cfg, options) {
|
|
334
340
|
return _async_to_generator(function() {
|
|
335
341
|
var db, conn;
|
|
336
342
|
return _ts_generator(this, function(_state) {
|
|
337
|
-
db = new _nodesqlite.DatabaseSync(dbPath
|
|
343
|
+
db = new _nodesqlite.DatabaseSync(dbPath, options.existingOnly ? {
|
|
344
|
+
readOnly: true
|
|
345
|
+
} : {});
|
|
338
346
|
try {
|
|
339
347
|
// Before journal_mode, not after: converting a fresh database to WAL takes a brief exclusive
|
|
340
348
|
// lock, and with no timeout set yet a second process opening the same tree fails in 1ms.
|
|
341
349
|
db.exec('PRAGMA busy_timeout = 30000');
|
|
342
350
|
// busy_timeout does not cover the WAL conversion itself: SQLite does not invoke the busy
|
|
343
351
|
// handler for it, so a concurrent cold open needs its own bounded wait.
|
|
344
|
-
setJournalWal(db);
|
|
352
|
+
if (!options.observational) setJournalWal(db);
|
|
345
353
|
(0, _sqlfunctionsts.registerFunctions)(db);
|
|
346
354
|
conn = (0, _connectionts.createConnection)(db);
|
|
347
355
|
return [
|
|
@@ -419,12 +427,12 @@ var sqliteOpenDialect = {
|
|
|
419
427
|
return (0, _storets.createStore)(handle.db, conn);
|
|
420
428
|
}
|
|
421
429
|
};
|
|
422
|
-
function openSqlite(cfg) {
|
|
430
|
+
function openSqlite(cfg, options) {
|
|
423
431
|
return _async_to_generator(function() {
|
|
424
432
|
return _ts_generator(this, function(_state) {
|
|
425
433
|
return [
|
|
426
434
|
2,
|
|
427
|
-
(0, _opents.openWithDialect)(cfg, sqliteOpenDialect)
|
|
435
|
+
(0, _opents.openWithDialect)(cfg, sqliteOpenDialect, options)
|
|
428
436
|
];
|
|
429
437
|
});
|
|
430
438
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/sqlite/open.ts"],"sourcesContent":["// The Node floor (>=22.20) is explained here and nowhere else: 22.20 is the first release with\n// both FTS5 and row-returning INSERT ... RETURNING. Raise it only for a load-bearing capability.\nimport { DatabaseSync } from 'node:sqlite';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { featureSignature } from '../../config/index.ts';\nimport { activeFeatures, FEATURES } from '../../features/index.ts';\nimport type { OpenResult } from '../open.ts';\nimport { openWithDialect } from '../open.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport { BEGIN_WRITE, withTransaction } from '../transaction.ts';\nimport type { Connection, OpenDialect } from '../types.ts';\nimport { createConnection } from './connection.ts';\nimport { sqliteDialect } from './reconcile.ts';\nimport { registerFunctions } from './sql-functions.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.db';\n// Cache shape version, independent of the config's own `version`. Bumping it rebuilds\n// existing trees on first query.\nexport const SCHEMA_VERSION = '
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/sqlite/open.ts"],"sourcesContent":["// The Node floor (>=22.20) is explained here and nowhere else: 22.20 is the first release with\n// both FTS5 and row-returning INSERT ... RETURNING. Raise it only for a load-bearing capability.\nimport { DatabaseSync } from 'node:sqlite';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { featureSignature } from '../../config/index.ts';\nimport { activeFeatures, FEATURES } from '../../features/index.ts';\nimport type { InternalOpenOptions, OpenResult } from '../open.ts';\nimport { openWithDialect } from '../open.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport { BEGIN_WRITE, withTransaction } from '../transaction.ts';\nimport type { Connection, OpenDialect } from '../types.ts';\nimport { createConnection } from './connection.ts';\nimport { sqliteDialect } from './reconcile.ts';\nimport { registerFunctions } from './sql-functions.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.db';\n// Cache shape version, independent of the config's own `version`. Bumping it rebuilds\n// existing trees on first query.\nexport const SCHEMA_VERSION = '21';\n\nexport type { OpenResult };\n\n// unicode61 splits on spaces, so a language written without them indexes a whole run as one\n// token and word search finds nothing; the `_seg` sidecars (always populated) cover that case.\nconst TOKENIZE = 'porter unicode61';\n\ninterface SqliteHandle {\n db: DatabaseSync;\n}\n\n// The `_seg` sidecars are appended after path, never inserted: bm25() and snippet(content, 2)\n// are documented against the first three columns. Each holds its field's exploded unspaced runs.\nasync function createContentTable(conn: Connection): Promise<void> {\n await conn.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS content USING fts5(title, summary, text, path UNINDEXED, title_seg, summary_seg, text_seg, tokenize = '${TOKENIZE}')`);\n}\n\n// Content is a separate table (not a column on frontmatter) so `SELECT * FROM frontmatter`\n// can't dump file text into context. Features add their own tables after the core ones.\nasync function ensureSchemaTables(conn: Connection, cfg: Config): Promise<void> {\n await conn.exec(`CREATE TABLE IF NOT EXISTS frontmatter (\"path\" TEXT PRIMARY KEY, \"_mtime\" REAL, \"_ctime\" REAL, \"_size\" INTEGER, \"_parse_error\" TEXT)`);\n await createContentTable(conn);\n await conn.exec(`CREATE TABLE IF NOT EXISTS indexed_sources (\"path\" TEXT PRIMARY KEY, text TEXT NOT NULL)`);\n // Coverage, not ownership: a path can appear under several presets. path leads the PK so the\n // per-doc delete is an index hit -- keyed the other way, cold builds went quadratic.\n await conn.exec(`CREATE TABLE IF NOT EXISTS preset_files (\"path\" TEXT, preset TEXT, PRIMARY KEY (\"path\", preset))`);\n await conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)');\n for (const feature of activeFeatures(cfg)) await feature.schema(conn);\n if ((await getMeta(conn, 'schema_version')) === null) await setMeta(conn, 'schema_version', SCHEMA_VERSION);\n if ((await getMeta(conn, 'features')) === null) await setMeta(conn, 'features', featureSignature(cfg, FEATURES));\n}\n\n// Two processes opening the same fresh tree both try to convert it, and the loser gets SQLITE_BUSY\n// with no busy handler behind it. Bounded because a lock held past this is a real problem, not a race.\nfunction setJournalWal(db: DatabaseSync): void {\n const deadline = Date.now() + 5000;\n for (;;) {\n try {\n db.exec('PRAGMA journal_mode = WAL');\n return;\n } catch (err) {\n if (Date.now() >= deadline || !/database is locked|busy/i.test((err as Error).message)) throw err;\n Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 20);\n }\n }\n}\n\nasync function connect(dbPath: string, _cfg: ResolvedConfig, options: { existingOnly: boolean; observational: boolean }): Promise<{ handle: SqliteHandle; conn: Connection }> {\n const db = new DatabaseSync(dbPath, options.existingOnly ? { readOnly: true } : {});\n try {\n // Before journal_mode, not after: converting a fresh database to WAL takes a brief exclusive\n // lock, and with no timeout set yet a second process opening the same tree fails in 1ms.\n db.exec('PRAGMA busy_timeout = 30000');\n // busy_timeout does not cover the WAL conversion itself: SQLite does not invoke the busy\n // handler for it, so a concurrent cold open needs its own bounded wait.\n if (!options.observational) setJournalWal(db);\n registerFunctions(db);\n const conn = createConnection(db);\n return { handle: { db }, conn };\n } catch (err) {\n // A throw here must release this handle, or on Windows the leaked WAL db is undeletable and\n // scratch cleanup fails with EPERM/EBUSY.\n db.close();\n throw err;\n }\n}\n\nasync function close(handle: SqliteHandle): Promise<void> {\n handle.db.close();\n}\n\nasync function ensureSchema(_handle: SqliteHandle, conn: Connection, cfg: Config): Promise<void> {\n // One writer at a time: the feature hooks check a column then add it, so two cold opens racing\n // here both see it missing and the second ALTER fails with a duplicate column.\n await withTransaction(conn, () => ensureSchemaTables(conn, cfg), BEGIN_WRITE);\n}\n\nasync function setDerivedBusyTimeout(handle: SqliteHandle, _conn: Connection, ms: number): Promise<void> {\n handle.db.exec(`PRAGMA busy_timeout = ${ms}`);\n}\n\n// This store's dialect (types.ts's OpenDialect) for the shared orchestration in store/open.ts.\nexport const sqliteOpenDialect: OpenDialect<SqliteHandle> = {\n filename: DB_FILENAME,\n schemaVersion: SCHEMA_VERSION,\n reconcileDialect: sqliteDialect,\n connect,\n close,\n ensureSchema,\n setDerivedBusyTimeout,\n createStore: (handle, conn) => createStore(handle.db, conn),\n};\n\nexport async function openSqlite(cfg: ResolvedConfig, options?: InternalOpenOptions): Promise<OpenResult> {\n return openWithDialect(cfg, sqliteOpenDialect, options);\n}\n"],"names":["DB_FILENAME","SCHEMA_VERSION","openSqlite","sqliteOpenDialect","TOKENIZE","createContentTable","conn","exec","ensureSchemaTables","cfg","feature","activeFeatures","schema","getMeta","setMeta","featureSignature","FEATURES","setJournalWal","db","deadline","Date","now","err","test","message","Atomics","wait","Int32Array","SharedArrayBuffer","connect","dbPath","_cfg","options","DatabaseSync","existingOnly","readOnly","observational","registerFunctions","createConnection","handle","close","ensureSchema","_handle","withTransaction","BEGIN_WRITE","setDerivedBusyTimeout","_conn","ms","filename","schemaVersion","reconcileDialect","sqliteDialect","createStore","openWithDialect"],"mappings":"AAAA,+FAA+F;AAC/F,iGAAiG;;;;;;;;;;;;QAepFA;eAAAA;;QAGAC;eAAAA;;QA8FSC;eAAAA;;QAXTC;eAAAA;;;0BApGgB;uBAEI;wBACQ;sBAET;wBACC;6BACY;4BAEZ;2BACH;8BACI;uBACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB,IAAMH,cAAc;AAGpB,IAAMC,iBAAiB;AAI9B,4FAA4F;AAC5F,+FAA+F;AAC/F,IAAMG,WAAW;AAMjB,8FAA8F;AAC9F,iGAAiG;AACjG,SAAeC,mBAAmBC,IAAgB;;;;;oBAChD;;wBAAMA,KAAKC,IAAI,CAAC,AAAC,6IAAqJ,OAATH,UAAS;;;oBAAtK;;;;;;IACF;;AAEA,2FAA2F;AAC3F,wFAAwF;AACxF,SAAeI,mBAAmBF,IAAgB,EAAEG,GAAW;;YAQxD,2BAAA,mBAAA,gBAAA,WAAA,OAAMC;;;;oBAPX;;wBAAMJ,KAAKC,IAAI,CAAC;;;oBAAhB;oBACA;;wBAAMF,mBAAmBC;;;oBAAzB;oBACA;;wBAAMA,KAAKC,IAAI,CAAC;;;oBAAhB;oBACA,6FAA6F;oBAC7F,qFAAqF;oBACrF;;wBAAMD,KAAKC,IAAI,CAAC;;;oBAAhB;oBACA;;wBAAMD,KAAKC,IAAI,CAAC;;;oBAAhB;oBACK,kCAAA,2BAAA;;;;;;;;;oBAAA,YAAiBI,IAAAA,wBAAc,EAACF;;;2BAAhC,6BAAA,QAAA;;;;oBAAMC,UAAN;oBAAsC;;wBAAMA,QAAQE,MAAM,CAACN;;;oBAArB;;;oBAAtC;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;oBACA;;wBAAMO,IAAAA,iBAAO,EAACP,MAAM;;;yBAArB,CAAA,AAAC,kBAA2C,IAAG,GAA/C;;;;oBAAkD;;wBAAMQ,IAAAA,iBAAO,EAACR,MAAM,kBAAkBL;;;oBAAtC;;;oBACjD;;wBAAMY,IAAAA,iBAAO,EAACP,MAAM;;;yBAArB,CAAA,AAAC,kBAAqC,IAAG,GAAzC;;;;oBAA4C;;wBAAMQ,IAAAA,iBAAO,EAACR,MAAM,YAAYS,IAAAA,yBAAgB,EAACN,KAAKO,kBAAQ;;;oBAA9D;;;;;;;;IAClD;;AAEA,mGAAmG;AACnG,uGAAuG;AACvG,SAASC,cAAcC,EAAgB;IACrC,IAAMC,WAAWC,KAAKC,GAAG,KAAK;IAC9B,OAAS;QACP,IAAI;YACFH,GAAGX,IAAI,CAAC;YACR;QACF,EAAE,OAAOe,KAAK;YACZ,IAAIF,KAAKC,GAAG,MAAMF,YAAY,CAAC,2BAA2BI,IAAI,CAAC,AAACD,IAAcE,OAAO,GAAG,MAAMF;YAC9FG,QAAQC,IAAI,CAAC,IAAIC,WAAW,IAAIC,kBAAkB,KAAK,GAAG,GAAG;QAC/D;IACF;AACF;AAEA,SAAeC,QAAQC,MAAc,EAAEC,IAAoB,EAAEC,OAA0D;;YAC/Gd,IASEZ;;YATFY,KAAK,IAAIe,wBAAY,CAACH,QAAQE,QAAQE,YAAY,GAAG;gBAAEC,UAAU;YAAK,IAAI,CAAC;YACjF,IAAI;gBACF,6FAA6F;gBAC7F,yFAAyF;gBACzFjB,GAAGX,IAAI,CAAC;gBACR,yFAAyF;gBACzF,wEAAwE;gBACxE,IAAI,CAACyB,QAAQI,aAAa,EAAEnB,cAAcC;gBAC1CmB,IAAAA,iCAAiB,EAACnB;gBACZZ,OAAOgC,IAAAA,8BAAgB,EAACpB;gBAC9B;;oBAAO;wBAAEqB,QAAQ;4BAAErB,IAAAA;wBAAG;wBAAGZ,MAAAA;oBAAK;;YAChC,EAAE,OAAOgB,KAAK;gBACZ,4FAA4F;gBAC5F,0CAA0C;gBAC1CJ,GAAGsB,KAAK;gBACR,MAAMlB;YACR;;;;;IACF;;AAEA,SAAekB,MAAMD,MAAoB;;;YACvCA,OAAOrB,EAAE,CAACsB,KAAK;;;;;IACjB;;AAEA,SAAeC,aAAaC,OAAqB,EAAEpC,IAAgB,EAAEG,GAAW;;;;;oBAC9E,+FAA+F;oBAC/F,+EAA+E;oBAC/E;;wBAAMkC,IAAAA,8BAAe,EAACrC,MAAM;mCAAME,mBAAmBF,MAAMG;2BAAMmC,0BAAW;;;oBAA5E;;;;;;IACF;;AAEA,SAAeC,sBAAsBN,MAAoB,EAAEO,KAAiB,EAAEC,EAAU;;;YACtFR,OAAOrB,EAAE,CAACX,IAAI,CAAC,AAAC,yBAA2B,OAAHwC;;;;;IAC1C;;AAGO,IAAM5C,oBAA+C;IAC1D6C,UAAUhD;IACViD,eAAehD;IACfiD,kBAAkBC,0BAAa;IAC/BtB,SAAAA;IACAW,OAAAA;IACAC,cAAAA;IACAI,uBAAAA;IACAO,aAAa,SAAbA,YAAcb,QAAQjC;eAAS8C,IAAAA,oBAAW,EAACb,OAAOrB,EAAE,EAAEZ;;AACxD;AAEO,SAAeJ,WAAWO,GAAmB,EAAEuB,OAA6B;;;YACjF;;gBAAOqB,IAAAA,uBAAe,EAAC5C,KAAKN,mBAAmB6B;;;IACjD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Database } from '@tursodatabase/database';
|
|
2
2
|
import type { ResolvedConfig } from '../../config/index.js';
|
|
3
|
-
import type { OpenResult } from '../open.js';
|
|
3
|
+
import type { InternalOpenOptions, OpenResult } from '../open.js';
|
|
4
4
|
import type { OpenDialect } from '../types.js';
|
|
5
5
|
export declare const DB_FILENAME = "cache.turso.db";
|
|
6
|
-
export declare const SCHEMA_VERSION = "
|
|
6
|
+
export declare const SCHEMA_VERSION = "9";
|
|
7
7
|
export type { OpenResult };
|
|
8
8
|
export declare const tursoOpenDialect: OpenDialect<Database>;
|
|
9
|
-
export declare function openTurso(cfg: ResolvedConfig): Promise<OpenResult>;
|
|
9
|
+
export declare function openTurso(cfg: ResolvedConfig, options?: InternalOpenOptions): Promise<OpenResult>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Database } from '@tursodatabase/database';
|
|
2
2
|
import type { ResolvedConfig } from '../../config/index.js';
|
|
3
|
-
import type { OpenResult } from '../open.js';
|
|
3
|
+
import type { InternalOpenOptions, OpenResult } from '../open.js';
|
|
4
4
|
import type { OpenDialect } from '../types.js';
|
|
5
5
|
export declare const DB_FILENAME = "cache.turso.db";
|
|
6
|
-
export declare const SCHEMA_VERSION = "
|
|
6
|
+
export declare const SCHEMA_VERSION = "9";
|
|
7
7
|
export type { OpenResult };
|
|
8
8
|
export declare const tursoOpenDialect: OpenDialect<Database>;
|
|
9
|
-
export declare function openTurso(cfg: ResolvedConfig): Promise<OpenResult>;
|
|
9
|
+
export declare function openTurso(cfg: ResolvedConfig, options?: InternalOpenOptions): Promise<OpenResult>;
|
|
@@ -240,7 +240,7 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
240
240
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
241
241
|
}
|
|
242
242
|
var DB_FILENAME = 'cache.turso.db';
|
|
243
|
-
var SCHEMA_VERSION = '
|
|
243
|
+
var SCHEMA_VERSION = '9';
|
|
244
244
|
// This store's Handle (types.ts's OpenDialect<Handle>) is the connected Database itself: no
|
|
245
245
|
// extra native state to thread, unlike duckdb's separate instance/connection pair.
|
|
246
246
|
function ensureSchema(_handle, conn, cfg) {
|
|
@@ -261,50 +261,56 @@ function ensureSchema(_handle, conn, cfg) {
|
|
|
261
261
|
];
|
|
262
262
|
case 2:
|
|
263
263
|
_state.sent();
|
|
264
|
-
|
|
265
|
-
|
|
264
|
+
return [
|
|
265
|
+
4,
|
|
266
|
+
conn.exec('CREATE TABLE IF NOT EXISTS indexed_sources ("path" TEXT PRIMARY KEY, text TEXT NOT NULL)')
|
|
267
|
+
];
|
|
266
268
|
case 3:
|
|
269
|
+
_state.sent();
|
|
270
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
271
|
+
_state.label = 4;
|
|
272
|
+
case 4:
|
|
267
273
|
_state.trys.push([
|
|
268
|
-
|
|
269
|
-
8,
|
|
274
|
+
4,
|
|
270
275
|
9,
|
|
271
|
-
10
|
|
276
|
+
10,
|
|
277
|
+
11
|
|
272
278
|
]);
|
|
273
279
|
_iterator = _reconcilets.CONTENT_FTS_DDL[Symbol.iterator]();
|
|
274
|
-
_state.label =
|
|
275
|
-
case
|
|
280
|
+
_state.label = 5;
|
|
281
|
+
case 5:
|
|
276
282
|
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
277
283
|
3,
|
|
278
|
-
|
|
284
|
+
8
|
|
279
285
|
];
|
|
280
286
|
ddl = _step.value;
|
|
281
287
|
return [
|
|
282
288
|
4,
|
|
283
289
|
conn.exec(ddl)
|
|
284
290
|
];
|
|
285
|
-
case 5:
|
|
286
|
-
_state.sent();
|
|
287
|
-
_state.label = 6;
|
|
288
291
|
case 6:
|
|
292
|
+
_state.sent();
|
|
293
|
+
_state.label = 7;
|
|
294
|
+
case 7:
|
|
289
295
|
_iteratorNormalCompletion = true;
|
|
290
296
|
return [
|
|
291
297
|
3,
|
|
292
|
-
|
|
298
|
+
5
|
|
293
299
|
];
|
|
294
|
-
case
|
|
300
|
+
case 8:
|
|
295
301
|
return [
|
|
296
302
|
3,
|
|
297
|
-
|
|
303
|
+
11
|
|
298
304
|
];
|
|
299
|
-
case
|
|
305
|
+
case 9:
|
|
300
306
|
err = _state.sent();
|
|
301
307
|
_didIteratorError = true;
|
|
302
308
|
_iteratorError = err;
|
|
303
309
|
return [
|
|
304
310
|
3,
|
|
305
|
-
|
|
311
|
+
11
|
|
306
312
|
];
|
|
307
|
-
case
|
|
313
|
+
case 10:
|
|
308
314
|
try {
|
|
309
315
|
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
310
316
|
_iterator.return();
|
|
@@ -317,78 +323,78 @@ function ensureSchema(_handle, conn, cfg) {
|
|
|
317
323
|
return [
|
|
318
324
|
7
|
|
319
325
|
];
|
|
320
|
-
case
|
|
326
|
+
case 11:
|
|
321
327
|
return [
|
|
322
328
|
4,
|
|
323
329
|
conn.exec('CREATE TABLE IF NOT EXISTS preset_files ("path" TEXT, preset TEXT, PRIMARY KEY ("path", preset))')
|
|
324
330
|
];
|
|
325
|
-
case
|
|
331
|
+
case 12:
|
|
326
332
|
_state.sent();
|
|
327
333
|
return [
|
|
328
334
|
4,
|
|
329
335
|
conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)')
|
|
330
336
|
];
|
|
331
|
-
case
|
|
337
|
+
case 13:
|
|
332
338
|
_state.sent();
|
|
333
339
|
_iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
334
|
-
_state.label =
|
|
335
|
-
case
|
|
340
|
+
_state.label = 14;
|
|
341
|
+
case 14:
|
|
336
342
|
_state.trys.push([
|
|
337
|
-
|
|
338
|
-
20,
|
|
343
|
+
14,
|
|
339
344
|
21,
|
|
340
|
-
22
|
|
345
|
+
22,
|
|
346
|
+
23
|
|
341
347
|
]);
|
|
342
348
|
_iterator1 = (0, _indexts1.activeFeatures)(cfg)[Symbol.iterator]();
|
|
343
|
-
_state.label =
|
|
344
|
-
case
|
|
349
|
+
_state.label = 15;
|
|
350
|
+
case 15:
|
|
345
351
|
if (!!(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done)) return [
|
|
346
352
|
3,
|
|
347
|
-
|
|
353
|
+
20
|
|
348
354
|
];
|
|
349
355
|
feature = _step1.value;
|
|
350
356
|
if (!(feature.name === 'embed')) return [
|
|
351
357
|
3,
|
|
352
|
-
|
|
358
|
+
17
|
|
353
359
|
];
|
|
354
360
|
return [
|
|
355
361
|
4,
|
|
356
362
|
conn.exec('CREATE TABLE IF NOT EXISTS embeddings ("path" TEXT, chunk INTEGER, start_line INTEGER, end_line INTEGER, scale REAL, vector F32_BLOB('.concat(_typests.STORE_DIMS, '), PRIMARY KEY ("path", chunk))'))
|
|
357
363
|
];
|
|
358
|
-
case
|
|
364
|
+
case 16:
|
|
359
365
|
_state.sent();
|
|
360
366
|
return [
|
|
361
367
|
3,
|
|
362
|
-
|
|
368
|
+
19
|
|
363
369
|
];
|
|
364
|
-
case
|
|
370
|
+
case 17:
|
|
365
371
|
return [
|
|
366
372
|
4,
|
|
367
373
|
feature.schema(conn)
|
|
368
374
|
];
|
|
369
|
-
case 17:
|
|
370
|
-
_state.sent();
|
|
371
|
-
_state.label = 18;
|
|
372
375
|
case 18:
|
|
376
|
+
_state.sent();
|
|
377
|
+
_state.label = 19;
|
|
378
|
+
case 19:
|
|
373
379
|
_iteratorNormalCompletion1 = true;
|
|
374
380
|
return [
|
|
375
381
|
3,
|
|
376
|
-
|
|
382
|
+
15
|
|
377
383
|
];
|
|
378
|
-
case
|
|
384
|
+
case 20:
|
|
379
385
|
return [
|
|
380
386
|
3,
|
|
381
|
-
|
|
387
|
+
23
|
|
382
388
|
];
|
|
383
|
-
case
|
|
389
|
+
case 21:
|
|
384
390
|
err = _state.sent();
|
|
385
391
|
_didIteratorError1 = true;
|
|
386
392
|
_iteratorError1 = err;
|
|
387
393
|
return [
|
|
388
394
|
3,
|
|
389
|
-
|
|
395
|
+
23
|
|
390
396
|
];
|
|
391
|
-
case
|
|
397
|
+
case 22:
|
|
392
398
|
try {
|
|
393
399
|
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
394
400
|
_iterator1.return();
|
|
@@ -401,41 +407,41 @@ function ensureSchema(_handle, conn, cfg) {
|
|
|
401
407
|
return [
|
|
402
408
|
7
|
|
403
409
|
];
|
|
404
|
-
case
|
|
410
|
+
case 23:
|
|
405
411
|
return [
|
|
406
412
|
4,
|
|
407
413
|
(0, _sharedts.getMeta)(conn, 'schema_version')
|
|
408
414
|
];
|
|
409
|
-
case
|
|
415
|
+
case 24:
|
|
410
416
|
if (!(_state.sent() === null)) return [
|
|
411
417
|
3,
|
|
412
|
-
|
|
418
|
+
26
|
|
413
419
|
];
|
|
414
420
|
return [
|
|
415
421
|
4,
|
|
416
422
|
(0, _sharedts.setMeta)(conn, 'schema_version', SCHEMA_VERSION)
|
|
417
423
|
];
|
|
418
|
-
case 24:
|
|
419
|
-
_state.sent();
|
|
420
|
-
_state.label = 25;
|
|
421
424
|
case 25:
|
|
425
|
+
_state.sent();
|
|
426
|
+
_state.label = 26;
|
|
427
|
+
case 26:
|
|
422
428
|
return [
|
|
423
429
|
4,
|
|
424
430
|
(0, _sharedts.getMeta)(conn, 'features')
|
|
425
431
|
];
|
|
426
|
-
case
|
|
432
|
+
case 27:
|
|
427
433
|
if (!(_state.sent() === null)) return [
|
|
428
434
|
3,
|
|
429
|
-
|
|
435
|
+
29
|
|
430
436
|
];
|
|
431
437
|
return [
|
|
432
438
|
4,
|
|
433
439
|
(0, _sharedts.setMeta)(conn, 'features', (0, _indexts.featureSignature)(cfg, _indexts1.FEATURES))
|
|
434
440
|
];
|
|
435
|
-
case 27:
|
|
436
|
-
_state.sent();
|
|
437
|
-
_state.label = 28;
|
|
438
441
|
case 28:
|
|
442
|
+
_state.sent();
|
|
443
|
+
_state.label = 29;
|
|
444
|
+
case 29:
|
|
439
445
|
return [
|
|
440
446
|
2
|
|
441
447
|
];
|
|
@@ -443,29 +449,38 @@ function ensureSchema(_handle, conn, cfg) {
|
|
|
443
449
|
});
|
|
444
450
|
})();
|
|
445
451
|
}
|
|
446
|
-
function close(
|
|
447
|
-
return _async_to_generator(function() {
|
|
452
|
+
function close(_0) {
|
|
453
|
+
return _async_to_generator(function(handle) {
|
|
454
|
+
var options;
|
|
455
|
+
var _arguments = arguments;
|
|
448
456
|
return _ts_generator(this, function(_state) {
|
|
449
457
|
switch(_state.label){
|
|
450
458
|
case 0:
|
|
459
|
+
options = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
460
|
+
if (!!options.observational) return [
|
|
461
|
+
3,
|
|
462
|
+
2
|
|
463
|
+
];
|
|
451
464
|
return [
|
|
452
465
|
4,
|
|
453
466
|
(0, _connectionts.checkpointWal)(handle)
|
|
454
467
|
];
|
|
455
468
|
case 1:
|
|
456
469
|
_state.sent();
|
|
470
|
+
_state.label = 2;
|
|
471
|
+
case 2:
|
|
457
472
|
return [
|
|
458
473
|
4,
|
|
459
474
|
handle.close()
|
|
460
475
|
];
|
|
461
|
-
case
|
|
476
|
+
case 3:
|
|
462
477
|
_state.sent();
|
|
463
478
|
return [
|
|
464
479
|
2
|
|
465
480
|
];
|
|
466
481
|
}
|
|
467
482
|
});
|
|
468
|
-
})();
|
|
483
|
+
}).apply(this, arguments);
|
|
469
484
|
}
|
|
470
485
|
function setDerivedBusyTimeout(_handle, conn, ms) {
|
|
471
486
|
return _async_to_generator(function() {
|
|
@@ -485,7 +500,7 @@ function setDerivedBusyTimeout(_handle, conn, ms) {
|
|
|
485
500
|
});
|
|
486
501
|
})();
|
|
487
502
|
}
|
|
488
|
-
function connect(dbPath, _cfg) {
|
|
503
|
+
function connect(dbPath, _cfg, options) {
|
|
489
504
|
return _async_to_generator(function() {
|
|
490
505
|
var turso, err, db, err1;
|
|
491
506
|
return _ts_generator(this, function(_state) {
|
|
@@ -520,13 +535,15 @@ function connect(dbPath, _cfg) {
|
|
|
520
535
|
]);
|
|
521
536
|
return [
|
|
522
537
|
4,
|
|
523
|
-
turso.connect(dbPath, _object_spread_props(_object_spread({}, _nativets.CONNECT_OPTS), {
|
|
538
|
+
turso.connect(dbPath, _object_spread(_object_spread_props(_object_spread({}, _nativets.CONNECT_OPTS), {
|
|
524
539
|
experimental: _to_consumable_array(_nativets.CONNECT_OPTS.experimental)
|
|
525
|
-
})
|
|
540
|
+
}), options.existingOnly ? {
|
|
541
|
+
fileMustExist: true
|
|
542
|
+
} : {}))
|
|
526
543
|
];
|
|
527
544
|
case 4:
|
|
528
|
-
//
|
|
529
|
-
//
|
|
545
|
+
// Turso's readonly mode rejects native FTS SELECTs and TEMP query tables. Existing-only opens
|
|
546
|
+
// stay query-capable; shared no-build orchestration and observational close prevent upkeep writes.
|
|
530
547
|
db = _state.sent();
|
|
531
548
|
return [
|
|
532
549
|
3,
|
|
@@ -561,16 +578,16 @@ var tursoOpenDialect = {
|
|
|
561
578
|
},
|
|
562
579
|
ensureSchema: ensureSchema,
|
|
563
580
|
setDerivedBusyTimeout: setDerivedBusyTimeout,
|
|
564
|
-
createStore: function createStore(handle, conn) {
|
|
565
|
-
return (0, _storets.createStore)(handle, conn);
|
|
581
|
+
createStore: function createStore(handle, conn, _cfg, options) {
|
|
582
|
+
return (0, _storets.createStore)(handle, conn, options);
|
|
566
583
|
}
|
|
567
584
|
};
|
|
568
|
-
function openTurso(cfg) {
|
|
585
|
+
function openTurso(cfg, options) {
|
|
569
586
|
return _async_to_generator(function() {
|
|
570
587
|
return _ts_generator(this, function(_state) {
|
|
571
588
|
return [
|
|
572
589
|
2,
|
|
573
|
-
(0, _opents.openWithDialect)(cfg, tursoOpenDialect)
|
|
590
|
+
(0, _opents.openWithDialect)(cfg, tursoOpenDialect, options)
|
|
574
591
|
];
|
|
575
592
|
});
|
|
576
593
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/turso/open.ts"],"sourcesContent":["import type { Database } from '@tursodatabase/database';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { featureSignature } from '../../config/index.ts';\nimport { STORE_DIMS } from '../../embed/types.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures, FEATURES } from '../../features/index.ts';\nimport type { OpenResult } from '../open.ts';\nimport { openWithDialect } from '../open.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport type { Connection, OpenDialect } from '../types.ts';\nimport { checkpointWal, createConnection } from './connection.ts';\nimport { CONNECT_OPTS, TURSO_PACKAGE, tursoApi } from './native.ts';\nimport { CONTENT_FTS_DDL, tursoDialect } from './reconcile.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.turso.db';\n// Independent of sqlite's and duckdb's SCHEMA_VERSION: each store's cache shape evolves\n// separately. Covers the FTS indexes, the \"_ngram\" sidecar columns, and embeddings.vector's width.\nexport const SCHEMA_VERSION = '
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/turso/open.ts"],"sourcesContent":["import type { Database } from '@tursodatabase/database';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { featureSignature } from '../../config/index.ts';\nimport { STORE_DIMS } from '../../embed/types.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures, FEATURES } from '../../features/index.ts';\nimport type { InternalOpenOptions, OpenResult } from '../open.ts';\nimport { openWithDialect } from '../open.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport type { Connection, OpenDialect } from '../types.ts';\nimport { checkpointWal, createConnection } from './connection.ts';\nimport { CONNECT_OPTS, TURSO_PACKAGE, tursoApi } from './native.ts';\nimport { CONTENT_FTS_DDL, tursoDialect } from './reconcile.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.turso.db';\n// Independent of sqlite's and duckdb's SCHEMA_VERSION: each store's cache shape evolves\n// separately. Covers the FTS indexes, the \"_ngram\" sidecar columns, and embeddings.vector's width.\nexport const SCHEMA_VERSION = '9';\n\nexport type { OpenResult };\n\n// This store's Handle (types.ts's OpenDialect<Handle>) is the connected Database itself: no\n// extra native state to thread, unlike duckdb's separate instance/connection pair.\nasync function ensureSchema(_handle: Database, conn: Connection, cfg: Config): Promise<void> {\n await conn.exec(`CREATE TABLE IF NOT EXISTS frontmatter (\"path\" TEXT PRIMARY KEY, \"_mtime\" REAL, \"_ctime\" REAL, \"_size\" INTEGER, \"_parse_error\" TEXT)`);\n await conn.exec(`CREATE TABLE IF NOT EXISTS content (\"path\" TEXT PRIMARY KEY, title TEXT, summary TEXT, text TEXT, title_stem TEXT, summary_stem TEXT, text_stem TEXT, title_ngram TEXT, summary_ngram TEXT, text_ngram TEXT)`);\n await conn.exec(`CREATE TABLE IF NOT EXISTS indexed_sources (\"path\" TEXT PRIMARY KEY, text TEXT NOT NULL)`);\n for (const ddl of CONTENT_FTS_DDL) await conn.exec(ddl);\n await conn.exec(`CREATE TABLE IF NOT EXISTS preset_files (\"path\" TEXT, preset TEXT, PRIMARY KEY (\"path\", preset))`);\n await conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)');\n for (const feature of activeFeatures(cfg)) {\n // Native F32_BLOB(STORE_DIMS) instead of the embed feature's engine-neutral BLOB DDL. `scale`\n // is kept unused, so the shared reconcile-time INSERT/DELETE names a column both stores have.\n if (feature.name === 'embed') {\n await conn.exec(`CREATE TABLE IF NOT EXISTS embeddings (\"path\" TEXT, chunk INTEGER, start_line INTEGER, end_line INTEGER, scale REAL, vector F32_BLOB(${STORE_DIMS}), PRIMARY KEY (\"path\", chunk))`);\n continue;\n }\n await feature.schema(conn);\n }\n if ((await getMeta(conn, 'schema_version')) === null) await setMeta(conn, 'schema_version', SCHEMA_VERSION);\n if ((await getMeta(conn, 'features')) === null) await setMeta(conn, 'features', featureSignature(cfg, FEATURES));\n}\n\nasync function close(handle: Database, options: { observational?: boolean } = {}): Promise<void> {\n if (!options.observational) await checkpointWal(handle);\n await handle.close();\n}\n\nasync function setDerivedBusyTimeout(_handle: Database, conn: Connection, ms: number): Promise<void> {\n await conn.exec(`PRAGMA busy_timeout = ${ms}`);\n}\n\nasync function connect(dbPath: string, _cfg: ResolvedConfig, options: { existingOnly: boolean; observational: boolean }): Promise<{ handle: Database; conn: Connection }> {\n // Dynamic, not a top-level import: a sqlite or duckdb tree must never attempt to resolve this\n // optional dependency until a turso tree is actually opened. Installed on first use if missing.\n let turso: Awaited<ReturnType<typeof tursoApi>>;\n try {\n turso = await tursoApi();\n } catch (err) {\n if (err instanceof SenseError) throw err;\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"turso\" needs the ${TURSO_PACKAGE} package (${(err as Error).message})`);\n }\n\n let db: Database;\n try {\n // Turso's readonly mode rejects native FTS SELECTs and TEMP query tables. Existing-only opens\n // stay query-capable; shared no-build orchestration and observational close prevent upkeep writes.\n db = await turso.connect(dbPath, { ...CONNECT_OPTS, experimental: [...CONNECT_OPTS.experimental], ...(options.existingOnly ? { fileMustExist: true } : {}) });\n } catch (err) {\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"turso\" failed to open ${dbPath}: ${(err as Error).message}`);\n }\n return { handle: db, conn: createConnection(db) };\n}\n\n// This store's dialect (types.ts's OpenDialect) for the shared orchestration in store/open.ts.\nexport const tursoOpenDialect: OpenDialect<Database> = {\n filename: DB_FILENAME,\n schemaVersion: SCHEMA_VERSION,\n reconcileDialect: tursoDialect,\n connect,\n close,\n // \"Locking error: Failed locking file ...\", worded per platform: posix \"File is locked by another\n // process\", Windows \"another process has locked a portion of the file (os error 33)\". Distinct from\n // the write-time \"database is locked\" its connect-time `timeout` covers; that one never reaches here.\n isLocked: (err) => /File is locked by another process|locked a portion of the file/.test(err.message),\n ensureSchema,\n setDerivedBusyTimeout,\n createStore: (handle, conn, _cfg, options) => createStore(handle, conn, options),\n};\n\nexport async function openTurso(cfg: ResolvedConfig, options?: InternalOpenOptions): Promise<OpenResult> {\n return openWithDialect(cfg, tursoOpenDialect, options);\n}\n"],"names":["DB_FILENAME","SCHEMA_VERSION","openTurso","tursoOpenDialect","ensureSchema","_handle","conn","cfg","ddl","feature","exec","CONTENT_FTS_DDL","activeFeatures","name","STORE_DIMS","schema","getMeta","setMeta","featureSignature","FEATURES","close","handle","options","observational","checkpointWal","setDerivedBusyTimeout","ms","connect","dbPath","_cfg","turso","err","db","tursoApi","SenseError","TURSO_PACKAGE","message","CONNECT_OPTS","experimental","existingOnly","fileMustExist","createConnection","filename","schemaVersion","reconcileDialect","tursoDialect","isLocked","test","createStore","openWithDialect"],"mappings":"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"}
|