sensemaking 0.19.1 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/cjs/chunk/extract.d.cts +1 -0
  2. package/dist/cjs/chunk/extract.d.ts +1 -0
  3. package/dist/cjs/chunk/extract.js +23 -5
  4. package/dist/cjs/chunk/extract.js.map +1 -1
  5. package/dist/cjs/chunk/index.d.cts +1 -1
  6. package/dist/cjs/chunk/index.d.ts +1 -1
  7. package/dist/cjs/chunk/index.js +3 -0
  8. package/dist/cjs/chunk/index.js.map +1 -1
  9. package/dist/cjs/index.d.cts +1 -1
  10. package/dist/cjs/index.d.ts +1 -1
  11. package/dist/cjs/index.js +3 -0
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/scan/pool.d.cts +15 -0
  14. package/dist/cjs/scan/pool.d.ts +15 -0
  15. package/dist/cjs/scan/pool.js +263 -0
  16. package/dist/cjs/scan/pool.js.map +1 -0
  17. package/dist/cjs/scan/reparse.d.cts +2 -0
  18. package/dist/cjs/scan/reparse.d.ts +2 -0
  19. package/dist/cjs/scan/reparse.js +15 -76
  20. package/dist/cjs/scan/reparse.js.map +1 -1
  21. package/dist/cjs/store/builder.d.cts +11 -0
  22. package/dist/cjs/store/builder.d.ts +11 -0
  23. package/dist/cjs/store/builder.js +27 -0
  24. package/dist/cjs/store/builder.js.map +1 -0
  25. package/dist/cjs/store/duckdb/fieldStats.js +87 -10
  26. package/dist/cjs/store/duckdb/fieldStats.js.map +1 -1
  27. package/dist/cjs/store/duckdb/lexical.d.cts +1 -0
  28. package/dist/cjs/store/duckdb/lexical.d.ts +1 -0
  29. package/dist/cjs/store/duckdb/lexical.js +21 -5
  30. package/dist/cjs/store/duckdb/lexical.js.map +1 -1
  31. package/dist/cjs/store/duckdb/open.d.cts +9 -8
  32. package/dist/cjs/store/duckdb/open.d.ts +9 -8
  33. package/dist/cjs/store/duckdb/open.js +69 -120
  34. package/dist/cjs/store/duckdb/open.js.map +1 -1
  35. package/dist/cjs/store/duckdb/reconcile.d.cts +2 -6
  36. package/dist/cjs/store/duckdb/reconcile.d.ts +2 -6
  37. package/dist/cjs/store/duckdb/reconcile.js +45 -581
  38. package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
  39. package/dist/cjs/store/duckdb/store.d.cts +1 -2
  40. package/dist/cjs/store/duckdb/store.d.ts +1 -2
  41. package/dist/cjs/store/duckdb/store.js +3 -26
  42. package/dist/cjs/store/duckdb/store.js.map +1 -1
  43. package/dist/cjs/store/index.d.cts +9 -3
  44. package/dist/cjs/store/index.d.ts +9 -3
  45. package/dist/cjs/store/index.js +40 -7
  46. package/dist/cjs/store/index.js.map +1 -1
  47. package/dist/cjs/store/open.d.cts +15 -0
  48. package/dist/cjs/store/open.d.ts +15 -0
  49. package/dist/cjs/store/open.js +516 -0
  50. package/dist/cjs/store/open.js.map +1 -0
  51. package/dist/cjs/store/reconcile.d.cts +7 -0
  52. package/dist/cjs/store/reconcile.d.ts +7 -0
  53. package/dist/cjs/store/reconcile.js +752 -0
  54. package/dist/cjs/store/reconcile.js.map +1 -0
  55. package/dist/cjs/store/shared.d.cts +1 -0
  56. package/dist/cjs/store/shared.d.ts +1 -0
  57. package/dist/cjs/store/shared.js +37 -0
  58. package/dist/cjs/store/shared.js.map +1 -1
  59. package/dist/cjs/store/signature.d.cts +3 -0
  60. package/dist/cjs/store/signature.d.ts +3 -0
  61. package/dist/cjs/store/signature.js +162 -0
  62. package/dist/cjs/store/signature.js.map +1 -0
  63. package/dist/cjs/store/sqlite/open.d.cts +9 -9
  64. package/dist/cjs/store/sqlite/open.d.ts +9 -9
  65. package/dist/cjs/store/sqlite/open.js +188 -198
  66. package/dist/cjs/store/sqlite/open.js.map +1 -1
  67. package/dist/cjs/store/sqlite/reconcile.d.cts +5 -10
  68. package/dist/cjs/store/sqlite/reconcile.d.ts +5 -10
  69. package/dist/cjs/store/sqlite/reconcile.js +48 -850
  70. package/dist/cjs/store/sqlite/reconcile.js.map +1 -1
  71. package/dist/cjs/store/sqlite/store.d.cts +1 -1
  72. package/dist/cjs/store/sqlite/store.d.ts +1 -1
  73. package/dist/cjs/store/sqlite/store.js +3 -13
  74. package/dist/cjs/store/sqlite/store.js.map +1 -1
  75. package/dist/cjs/store/turso/open.d.cts +6 -11
  76. package/dist/cjs/store/turso/open.d.ts +6 -11
  77. package/dist/cjs/store/turso/open.js +78 -169
  78. package/dist/cjs/store/turso/open.js.map +1 -1
  79. package/dist/cjs/store/turso/reconcile.d.cts +5 -6
  80. package/dist/cjs/store/turso/reconcile.d.ts +5 -6
  81. package/dist/cjs/store/turso/reconcile.js +169 -729
  82. package/dist/cjs/store/turso/reconcile.js.map +1 -1
  83. package/dist/cjs/store/turso/store.d.cts +1 -2
  84. package/dist/cjs/store/turso/store.d.ts +1 -2
  85. package/dist/cjs/store/turso/store.js +1 -12
  86. package/dist/cjs/store/turso/store.js.map +1 -1
  87. package/dist/cjs/store/types.d.cts +28 -6
  88. package/dist/cjs/store/types.d.ts +28 -6
  89. package/dist/cjs/store/types.js +14 -0
  90. package/dist/cjs/store/types.js.map +1 -1
  91. package/dist/cjs/text/strip.js +3 -6
  92. package/dist/cjs/text/strip.js.map +1 -1
  93. package/dist/cjs/watch.js +28 -16
  94. package/dist/cjs/watch.js.map +1 -1
  95. package/dist/esm/chunk/extract.d.ts +1 -0
  96. package/dist/esm/chunk/extract.js +10 -2
  97. package/dist/esm/chunk/extract.js.map +1 -1
  98. package/dist/esm/chunk/index.d.ts +1 -1
  99. package/dist/esm/chunk/index.js +1 -1
  100. package/dist/esm/chunk/index.js.map +1 -1
  101. package/dist/esm/index.d.ts +1 -1
  102. package/dist/esm/index.js +1 -1
  103. package/dist/esm/index.js.map +1 -1
  104. package/dist/esm/scan/pool.d.ts +15 -0
  105. package/dist/esm/scan/pool.js +77 -0
  106. package/dist/esm/scan/pool.js.map +1 -0
  107. package/dist/esm/scan/reparse.d.ts +2 -0
  108. package/dist/esm/scan/reparse.js +11 -58
  109. package/dist/esm/scan/reparse.js.map +1 -1
  110. package/dist/esm/store/builder.d.ts +11 -0
  111. package/dist/esm/store/builder.js +14 -0
  112. package/dist/esm/store/builder.js.map +1 -0
  113. package/dist/esm/store/duckdb/fieldStats.js +32 -19
  114. package/dist/esm/store/duckdb/fieldStats.js.map +1 -1
  115. package/dist/esm/store/duckdb/lexical.d.ts +1 -0
  116. package/dist/esm/store/duckdb/lexical.js +22 -9
  117. package/dist/esm/store/duckdb/lexical.js.map +1 -1
  118. package/dist/esm/store/duckdb/open.d.ts +9 -8
  119. package/dist/esm/store/duckdb/open.js +32 -57
  120. package/dist/esm/store/duckdb/open.js.map +1 -1
  121. package/dist/esm/store/duckdb/reconcile.d.ts +2 -6
  122. package/dist/esm/store/duckdb/reconcile.js +24 -117
  123. package/dist/esm/store/duckdb/reconcile.js.map +1 -1
  124. package/dist/esm/store/duckdb/store.d.ts +1 -2
  125. package/dist/esm/store/duckdb/store.js +4 -11
  126. package/dist/esm/store/duckdb/store.js.map +1 -1
  127. package/dist/esm/store/index.d.ts +9 -3
  128. package/dist/esm/store/index.js +23 -7
  129. package/dist/esm/store/index.js.map +1 -1
  130. package/dist/esm/store/open.d.ts +15 -0
  131. package/dist/esm/store/open.js +137 -0
  132. package/dist/esm/store/open.js.map +1 -0
  133. package/dist/esm/store/reconcile.d.ts +7 -0
  134. package/dist/esm/store/reconcile.js +132 -0
  135. package/dist/esm/store/reconcile.js.map +1 -0
  136. package/dist/esm/store/shared.d.ts +1 -0
  137. package/dist/esm/store/shared.js +9 -0
  138. package/dist/esm/store/shared.js.map +1 -1
  139. package/dist/esm/store/signature.d.ts +3 -0
  140. package/dist/esm/store/signature.js +35 -0
  141. package/dist/esm/store/signature.js.map +1 -0
  142. package/dist/esm/store/sqlite/open.d.ts +9 -9
  143. package/dist/esm/store/sqlite/open.js +81 -111
  144. package/dist/esm/store/sqlite/open.js.map +1 -1
  145. package/dist/esm/store/sqlite/reconcile.d.ts +5 -10
  146. package/dist/esm/store/sqlite/reconcile.js +31 -201
  147. package/dist/esm/store/sqlite/reconcile.js.map +1 -1
  148. package/dist/esm/store/sqlite/store.d.ts +1 -1
  149. package/dist/esm/store/sqlite/store.js +4 -7
  150. package/dist/esm/store/sqlite/store.js.map +1 -1
  151. package/dist/esm/store/turso/open.d.ts +6 -11
  152. package/dist/esm/store/turso/open.js +30 -77
  153. package/dist/esm/store/turso/open.js.map +1 -1
  154. package/dist/esm/store/turso/reconcile.d.ts +5 -6
  155. package/dist/esm/store/turso/reconcile.js +42 -146
  156. package/dist/esm/store/turso/reconcile.js.map +1 -1
  157. package/dist/esm/store/turso/store.d.ts +1 -2
  158. package/dist/esm/store/turso/store.js +2 -6
  159. package/dist/esm/store/turso/store.js.map +1 -1
  160. package/dist/esm/store/types.d.ts +28 -6
  161. package/dist/esm/store/types.js +12 -1
  162. package/dist/esm/store/types.js.map +1 -1
  163. package/dist/esm/text/strip.js +3 -4
  164. package/dist/esm/text/strip.js.map +1 -1
  165. package/dist/esm/watch.js +5 -3
  166. package/dist/esm/watch.js.map +1 -1
  167. package/package.json +2 -2
@@ -15,18 +15,18 @@ _export(exports, {
15
15
  get SCHEMA_VERSION () {
16
16
  return SCHEMA_VERSION;
17
17
  },
18
+ get duckdbOpenDialect () {
19
+ return duckdbOpenDialect;
20
+ },
18
21
  get openDuckdb () {
19
22
  return openDuckdb;
20
23
  }
21
24
  });
22
- var _nodefs = require("node:fs");
23
- var _nodepath = require("node:path");
24
25
  var _indexts = require("../../config/index.js");
25
- var _handoffts = require("../../embed/handoff.js");
26
26
  var _typests = require("../../embed/types.js");
27
27
  var _errorsts = require("../../errors.js");
28
28
  var _indexts1 = require("../../features/index.js");
29
- var _cachets = require("../cache.js");
29
+ var _opents = require("../open.js");
30
30
  var _sharedts = require("../shared.js");
31
31
  var _connectionts = require("./connection.js");
32
32
  var _nativets = require("./native.js");
@@ -165,10 +165,10 @@ function _ts_generator(thisArg, body) {
165
165
  }
166
166
  }
167
167
  var DB_FILENAME = 'cache.duckdb';
168
- var SCHEMA_VERSION = '2';
168
+ var SCHEMA_VERSION = '3';
169
169
  // `content` is a plain table (not FTS-virtual): the fts index is built over it lazily, only when a lexical query runs (lexical.ts), and read directly for contains() verification either way.
170
170
  // No tokenizer resolution: this store always uses the fts extension's default (porter) stemmer; sqlite's configurable `content.tokenize` is not read here.
171
- function ensureSchema(conn, cfg) {
171
+ function ensureSchema(_handle, conn, cfg) {
172
172
  return _async_to_generator(function() {
173
173
  var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, feature, err;
174
174
  return _ts_generator(this, function(_state) {
@@ -311,45 +311,50 @@ function ensureSchema(conn, cfg) {
311
311
  });
312
312
  })();
313
313
  }
314
- function connect(cfg) {
314
+ // Order matters: the connection must be gone before the instance closes the WAL.
315
+ function close(handle) {
316
+ return _async_to_generator(function() {
317
+ return _ts_generator(this, function(_state) {
318
+ handle.duckdb.disconnectSync();
319
+ handle.instance.closeSync();
320
+ return [
321
+ 2
322
+ ];
323
+ });
324
+ })();
325
+ }
326
+ function connect(dbPath, _cfg) {
315
327
  return _async_to_generator(function() {
316
- var stateDir, dbPath, DuckDBInstance, err, duckdb, instance, err1, closed, conn, version, features, wantFeatures, reason, _ref, parsed, warnings, err2;
328
+ var DuckDBInstance, err, duckdb, instance, err1, conn, err2;
317
329
  return _ts_generator(this, function(_state) {
318
330
  switch(_state.label){
319
331
  case 0:
320
- stateDir = (0, _nodepath.join)(cfg.baseDir, _indexts.STATE_DIR);
321
- (0, _nodefs.mkdirSync)(stateDir, {
322
- recursive: true
323
- });
324
- dbPath = (0, _nodepath.join)(stateDir, DB_FILENAME);
325
- _state.label = 1;
326
- case 1:
327
332
  _state.trys.push([
328
- 1,
329
- 3,
333
+ 0,
334
+ 2,
330
335
  ,
331
- 4
336
+ 3
332
337
  ]);
333
338
  return [
334
339
  4,
335
340
  (0, _nativets.duckdbApi)()
336
341
  ];
337
- case 2:
342
+ case 1:
338
343
  DuckDBInstance = _state.sent().DuckDBInstance;
339
344
  return [
340
345
  3,
341
- 4
346
+ 3
342
347
  ];
343
- case 3:
348
+ case 2:
344
349
  err = _state.sent();
345
350
  if (_instanceof(err, _errorsts.SenseError)) throw err;
346
351
  throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "duckdb" needs the '.concat(_nativets.DUCKDB_PACKAGE, " package (").concat(err.message, ")"));
347
- case 4:
352
+ case 3:
348
353
  _state.trys.push([
349
- 4,
350
- 7,
354
+ 3,
355
+ 6,
351
356
  ,
352
- 8
357
+ 7
353
358
  ]);
354
359
  return [
355
360
  4,
@@ -357,7 +362,7 @@ function connect(cfg) {
357
362
  storage_compatibility_version: 'v1.5.0'
358
363
  })
359
364
  ];
360
- case 5:
365
+ case 4:
361
366
  // On-disk files default to an older storage format for cross-version compatibility, which rejects VARIANT columns ("VARIANT
362
367
  // columns are not supported in storage versions prior to v1.5.0"); this store's dynamic frontmatter columns need VARIANT (reconcile.ts), so the floor is pinned explicitly.
363
368
  instance = _state.sent();
@@ -365,102 +370,54 @@ function connect(cfg) {
365
370
  4,
366
371
  instance.connect()
367
372
  ];
368
- case 6:
373
+ case 5:
369
374
  duckdb = _state.sent();
370
375
  return [
371
376
  3,
372
- 8
377
+ 7
373
378
  ];
374
- case 7:
379
+ case 6:
375
380
  err1 = _state.sent();
376
381
  // create() may have succeeded before connect() failed: close it, or its WAL stays open.
377
382
  instance === null || instance === void 0 ? void 0 : instance.closeSync();
378
383
  throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "duckdb" failed to open '.concat(dbPath, ": ").concat(err1.message));
379
- case 8:
380
- // A throw below (schema, reconcile's COLUMN_LIMIT) would leak the open instance, whose WAL
381
- // then locks the .duckdb file undeletable on Windows. closed marks the rebuild branch.
382
- closed = false;
383
- _state.label = 9;
384
- case 9:
384
+ case 7:
385
385
  _state.trys.push([
386
+ 7,
386
387
  9,
387
- 16,
388
388
  ,
389
- 17
389
+ 11
390
390
  ]);
391
391
  return [
392
392
  4,
393
393
  (0, _sqlfunctionsts.registerFunctions)(duckdb)
394
394
  ];
395
- case 10:
395
+ case 8:
396
396
  _state.sent();
397
397
  conn = (0, _connectionts.createConnection)(duckdb);
398
- return [
399
- 4,
400
- conn.exec('CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT)')
401
- ];
402
- case 11:
403
- _state.sent();
404
- return [
405
- 4,
406
- (0, _sharedts.getMeta)(conn, 'schema_version')
407
- ];
408
- case 12:
409
- version = _state.sent();
410
- return [
411
- 4,
412
- (0, _sharedts.getMeta)(conn, 'features')
413
- ];
414
- case 13:
415
- features = _state.sent();
416
- wantFeatures = (0, _indexts.featureSignature)(cfg, _indexts1.FEATURES);
417
- if (version !== null && version !== SCHEMA_VERSION || features !== null && features !== wantFeatures) {
418
- // Reconcile only reparses changed files, so a stale cache can't be patched incrementally --
419
- // rebuild instead, same as sqlite's open() (see its comment for why this is announced).
420
- reason = version !== null && version !== SCHEMA_VERSION ? 'cache format changed (new sensemaking version)' : 'config change (features, tokenizer, or presets)';
421
- console.error("sense: ".concat(reason, "; rebuilding the index"));
422
- // Close before clearCache deletes the files underneath the still-open instance.
423
- closed = true;
424
- duckdb.disconnectSync();
425
- instance.closeSync();
426
- (0, _cachets.clearCache)(cfg);
427
- return [
428
- 2,
429
- connect(cfg)
430
- ];
431
- }
432
- return [
433
- 4,
434
- ensureSchema(conn, cfg)
435
- ];
436
- case 14:
437
- _state.sent();
438
- return [
439
- 4,
440
- (0, _reconcilets.reconcile)(conn, cfg, cfg.baseDir)
441
- ];
442
- case 15:
443
- _ref = _state.sent(), parsed = _ref.parsed, warnings = _ref.warnings;
444
398
  return [
445
399
  2,
446
400
  {
447
- instance: instance,
448
- duckdb: duckdb,
449
- conn: conn,
450
- cfg: cfg,
451
- dbPath: dbPath,
452
- parsed: parsed,
453
- warnings: warnings
401
+ handle: {
402
+ instance: instance,
403
+ duckdb: duckdb
404
+ },
405
+ conn: conn
454
406
  }
455
407
  ];
456
- case 16:
408
+ case 9:
457
409
  err2 = _state.sent();
458
- if (!closed) {
459
- duckdb.disconnectSync();
460
- instance === null || instance === void 0 ? void 0 : instance.closeSync();
461
- }
410
+ return [
411
+ 4,
412
+ close({
413
+ instance: instance,
414
+ duckdb: duckdb
415
+ })
416
+ ];
417
+ case 10:
418
+ _state.sent();
462
419
  throw err2;
463
- case 17:
420
+ case 11:
464
421
  return [
465
422
  2
466
423
  ];
@@ -468,32 +425,24 @@ function connect(cfg) {
468
425
  });
469
426
  })();
470
427
  }
428
+ var duckdbOpenDialect = {
429
+ filename: DB_FILENAME,
430
+ schemaVersion: SCHEMA_VERSION,
431
+ reconcileDialect: _reconcilets.duckdbDialect,
432
+ connect: connect,
433
+ close: close,
434
+ ensureSchema: ensureSchema,
435
+ createStore: function createStore(handle, conn) {
436
+ return (0, _storets.createStore)(handle.instance, handle.duckdb, conn);
437
+ }
438
+ };
471
439
  function openDuckdb(cfg) {
472
440
  return _async_to_generator(function() {
473
- var _ref, instance, duckdb, conn, resolvedCfg, dbPath, parsed, warnings, store;
474
441
  return _ts_generator(this, function(_state) {
475
- switch(_state.label){
476
- case 0:
477
- return [
478
- 4,
479
- connect(cfg)
480
- ];
481
- case 1:
482
- _ref = _state.sent(), instance = _ref.instance, duckdb = _ref.duckdb, conn = _ref.conn, resolvedCfg = _ref.cfg, dbPath = _ref.dbPath, parsed = _ref.parsed, warnings = _ref.warnings;
483
- store = (0, _storets.createStore)(instance, duckdb, conn, resolvedCfg, resolvedCfg.baseDir);
484
- // reconcile ran before this object existed, so its chunk text is keyed by the connection.
485
- (0, _handoffts.rekeyChunkText)(conn, store);
486
- return [
487
- 2,
488
- {
489
- store: store,
490
- cfg: resolvedCfg,
491
- dbPath: dbPath,
492
- parsed: parsed,
493
- warnings: warnings
494
- }
495
- ];
496
- }
442
+ return [
443
+ 2,
444
+ (0, _opents.openWithDialect)(cfg, duckdbOpenDialect)
445
+ ];
497
446
  });
498
447
  })();
499
448
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/duckdb/open.ts"],"sourcesContent":["import { mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { DuckDBConnection, DuckDBInstance } from '@duckdb/node-api';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { featureSignature, STATE_DIR } from '../../config/index.ts';\nimport { rekeyChunkText } from '../../embed/handoff.ts';\nimport { STORE_DIMS } from '../../embed/types.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures, FEATURES } from '../../features/index.ts';\nimport { clearCache } from '../cache.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport type { Connection, Store } from '../types.ts';\nimport { createConnection } from './connection.ts';\nimport { DUCKDB_PACKAGE, duckdbApi } from './native.ts';\nimport { reconcile } from './reconcile.ts';\nimport { registerFunctions } from './sql-functions.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.duckdb';\n// Independent of sqlite's SCHEMA_VERSION -- the two stores' cache shapes evolve separately (VARIANT frontmatter columns vs untyped).\n// The store name already joins the feature signature, so switching a config's `store` key rebuilds rather than reusing the other engine's cache.\nexport const SCHEMA_VERSION = '2';\n\nexport interface OpenResult {\n store: Store;\n cfg: ResolvedConfig;\n dbPath: string;\n parsed: number;\n warnings: string[];\n}\n\n// `content` is a plain table (not FTS-virtual): the fts index is built over it lazily, only when a lexical query runs (lexical.ts), and read directly for contains() verification either way.\n// No tokenizer resolution: this store always uses the fts extension's default (porter) stemmer; sqlite's configurable `content.tokenize` is not read here.\nasync function ensureSchema(conn: Connection, cfg: Config): Promise<void> {\n await conn.exec(`CREATE TABLE IF NOT EXISTS frontmatter (\"path\" TEXT PRIMARY KEY, \"_mtime\" DOUBLE, \"_ctime\" DOUBLE, \"_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)`);\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 FLOAT[STORE_DIMS] instead of the embed feature's engine-neutral BLOB+scale DDL (vectors.ts). `scale` is kept, unused,\n // so the feature's shared reconcile-time INSERT/DELETE (features/embed.ts) names a column that exists on both stores.\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 FLOAT[${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 connect(cfg: ResolvedConfig): Promise<{ instance: DuckDBInstance; duckdb: DuckDBConnection; conn: Connection; cfg: ResolvedConfig; dbPath: string; parsed: number; warnings: string[] }> {\n const stateDir = join(cfg.baseDir, STATE_DIR);\n mkdirSync(stateDir, { recursive: true });\n const dbPath = join(stateDir, DB_FILENAME);\n\n // Dynamic, not a top-level import: sqlite trees must never attempt to resolve this optional peer dependency, so nothing imports\n // it as a value until a duckdb tree opens (types-only imports are erased). Installed on first use if missing, shared with sql-functions.ts and vectors.ts via native.ts's duckdbApi.\n let DuckDBInstance: typeof import('@duckdb/node-api').DuckDBInstance;\n try {\n ({ DuckDBInstance } = await duckdbApi());\n } catch (err) {\n if (err instanceof SenseError) throw err;\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"duckdb\" needs the ${DUCKDB_PACKAGE} package (${(err as Error).message})`);\n }\n\n let duckdb: DuckDBConnection;\n let instance: DuckDBInstance | undefined;\n try {\n // On-disk files default to an older storage format for cross-version compatibility, which rejects VARIANT columns (\"VARIANT\n // columns are not supported in storage versions prior to v1.5.0\"); this store's dynamic frontmatter columns need VARIANT (reconcile.ts), so the floor is pinned explicitly.\n instance = await DuckDBInstance.create(dbPath, { storage_compatibility_version: 'v1.5.0' });\n duckdb = await instance.connect();\n } catch (err) {\n // create() may have succeeded before connect() failed: close it, or its WAL stays open.\n instance?.closeSync();\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"duckdb\" failed to open ${dbPath}: ${(err as Error).message}`);\n }\n // A throw below (schema, reconcile's COLUMN_LIMIT) would leak the open instance, whose WAL\n // then locks the .duckdb file undeletable on Windows. closed marks the rebuild branch.\n let closed = false;\n try {\n await registerFunctions(duckdb);\n const conn = createConnection(duckdb);\n\n await conn.exec('CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT)');\n\n const version = await getMeta(conn, 'schema_version');\n const features = await getMeta(conn, 'features');\n const wantFeatures = featureSignature(cfg, FEATURES);\n if ((version !== null && version !== SCHEMA_VERSION) || (features !== null && features !== wantFeatures)) {\n // Reconcile only reparses changed files, so a stale cache can't be patched incrementally --\n // rebuild instead, same as sqlite's open() (see its comment for why this is announced).\n const reason = version !== null && version !== SCHEMA_VERSION ? 'cache format changed (new sensemaking version)' : 'config change (features, tokenizer, or presets)';\n console.error(`sense: ${reason}; rebuilding the index`);\n // Close before clearCache deletes the files underneath the still-open instance.\n closed = true;\n duckdb.disconnectSync();\n instance.closeSync();\n clearCache(cfg);\n return connect(cfg);\n }\n\n await ensureSchema(conn, cfg);\n\n const { parsed, warnings } = await reconcile(conn, cfg, cfg.baseDir);\n return { instance, duckdb, conn, cfg, dbPath, parsed, warnings };\n } catch (err) {\n if (!closed) {\n duckdb.disconnectSync();\n instance?.closeSync();\n }\n throw err;\n }\n}\n\nexport async function openDuckdb(cfg: ResolvedConfig): Promise<OpenResult> {\n const { instance, duckdb, conn, cfg: resolvedCfg, dbPath, parsed, warnings } = await connect(cfg);\n const store = createStore(instance, duckdb, conn, resolvedCfg, resolvedCfg.baseDir);\n // reconcile ran before this object existed, so its chunk text is keyed by the connection.\n rekeyChunkText(conn, store);\n return { store: store, cfg: resolvedCfg, dbPath, parsed, warnings };\n}\n"],"names":["DB_FILENAME","SCHEMA_VERSION","openDuckdb","ensureSchema","conn","cfg","feature","exec","activeFeatures","name","STORE_DIMS","schema","getMeta","setMeta","featureSignature","FEATURES","connect","stateDir","dbPath","DuckDBInstance","err","duckdb","instance","closed","version","features","wantFeatures","reason","parsed","warnings","join","baseDir","STATE_DIR","mkdirSync","recursive","duckdbApi","SenseError","DUCKDB_PACKAGE","message","create","storage_compatibility_version","closeSync","registerFunctions","createConnection","console","error","disconnectSync","clearCache","reconcile","resolvedCfg","store","createStore","rekeyChunkText"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/duckdb/open.ts"],"sourcesContent":["import type { DuckDBConnection, DuckDBInstance } from '@duckdb/node-api';\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 { createConnection } from './connection.ts';\nimport { DUCKDB_PACKAGE, duckdbApi } from './native.ts';\nimport { duckdbDialect } from './reconcile.ts';\nimport { registerFunctions } from './sql-functions.ts';\nimport { createStore } from './store.ts';\n\nexport const DB_FILENAME = 'cache.duckdb';\n// Independent of sqlite's SCHEMA_VERSION -- the two stores' cache shapes evolve separately (VARIANT frontmatter columns vs untyped).\n// The store name already joins the feature signature, so switching a config's `store` key rebuilds rather than reusing the other engine's cache.\nexport const SCHEMA_VERSION = '3';\n\nexport type { OpenResult };\n\n// The connection plus this store's own native handles (types.ts's OpenDialect<Handle>): the\n// instance owns the WAL and must outlive the connection borrowed from it.\ninterface DuckdbHandle {\n instance: DuckDBInstance;\n duckdb: DuckDBConnection;\n}\n\n// `content` is a plain table (not FTS-virtual): the fts index is built over it lazily, only when a lexical query runs (lexical.ts), and read directly for contains() verification either way.\n// No tokenizer resolution: this store always uses the fts extension's default (porter) stemmer; sqlite's configurable `content.tokenize` is not read here.\nasync function ensureSchema(_handle: DuckdbHandle, conn: Connection, cfg: Config): Promise<void> {\n await conn.exec(`CREATE TABLE IF NOT EXISTS frontmatter (\"path\" TEXT PRIMARY KEY, \"_mtime\" DOUBLE, \"_ctime\" DOUBLE, \"_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)`);\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 FLOAT[STORE_DIMS] instead of the embed feature's engine-neutral BLOB+scale DDL (vectors.ts). `scale` is kept, unused,\n // so the feature's shared reconcile-time INSERT/DELETE (features/embed.ts) names a column that exists on both stores.\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 FLOAT[${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\n// Order matters: the connection must be gone before the instance closes the WAL.\nasync function close(handle: DuckdbHandle): Promise<void> {\n handle.duckdb.disconnectSync();\n handle.instance.closeSync();\n}\n\nasync function connect(dbPath: string, _cfg: ResolvedConfig): Promise<{ handle: DuckdbHandle; conn: Connection }> {\n // Dynamic, not a top-level import: sqlite trees must never attempt to resolve this optional peer dependency, so nothing imports\n // it as a value until a duckdb tree opens (types-only imports are erased). Installed on first use if missing, shared with sql-functions.ts and vectors.ts via native.ts's duckdbApi.\n let DuckDBInstance: typeof import('@duckdb/node-api').DuckDBInstance;\n try {\n ({ DuckDBInstance } = await duckdbApi());\n } catch (err) {\n if (err instanceof SenseError) throw err;\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"duckdb\" needs the ${DUCKDB_PACKAGE} package (${(err as Error).message})`);\n }\n\n let duckdb: DuckDBConnection;\n let instance: DuckDBInstance | undefined;\n try {\n // On-disk files default to an older storage format for cross-version compatibility, which rejects VARIANT columns (\"VARIANT\n // columns are not supported in storage versions prior to v1.5.0\"); this store's dynamic frontmatter columns need VARIANT (reconcile.ts), so the floor is pinned explicitly.\n instance = await DuckDBInstance.create(dbPath, { storage_compatibility_version: 'v1.5.0' });\n duckdb = await instance.connect();\n } catch (err) {\n // create() may have succeeded before connect() failed: close it, or its WAL stays open.\n instance?.closeSync();\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"duckdb\" failed to open ${dbPath}: ${(err as Error).message}`);\n }\n // A throw below would leak the open instance, whose WAL then locks the .duckdb file undeletable on Windows.\n try {\n await registerFunctions(duckdb);\n const conn = createConnection(duckdb);\n return { handle: { instance, duckdb }, conn };\n } catch (err) {\n await close({ instance, duckdb });\n throw err;\n }\n}\n\n// This store's dialect (types.ts's OpenDialect) for the shared orchestration in store/open.ts.\nexport const duckdbOpenDialect: OpenDialect<DuckdbHandle> = {\n filename: DB_FILENAME,\n schemaVersion: SCHEMA_VERSION,\n reconcileDialect: duckdbDialect,\n connect,\n close,\n ensureSchema,\n createStore: (handle, conn) => createStore(handle.instance, handle.duckdb, conn),\n};\n\nexport async function openDuckdb(cfg: ResolvedConfig): Promise<OpenResult> {\n return openWithDialect(cfg, duckdbOpenDialect);\n}\n"],"names":["DB_FILENAME","SCHEMA_VERSION","duckdbOpenDialect","openDuckdb","ensureSchema","_handle","conn","cfg","feature","exec","activeFeatures","name","STORE_DIMS","schema","getMeta","setMeta","featureSignature","FEATURES","close","handle","duckdb","disconnectSync","instance","closeSync","connect","dbPath","_cfg","DuckDBInstance","err","duckdbApi","SenseError","DUCKDB_PACKAGE","message","create","storage_compatibility_version","registerFunctions","createConnection","filename","schemaVersion","reconcileDialect","duckdbDialect","createStore","openWithDialect"],"mappings":"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"}
@@ -1,6 +1,2 @@
1
- import type { Config } from '../../config/index.js';
2
- import type { Connection } from '../types.js';
3
- export declare function reconcile(conn: Connection, cfg: Config, baseDir: string): Promise<{
4
- parsed: number;
5
- warnings: string[];
6
- }>;
1
+ import type { ReconcileDialect } from '../types.js';
2
+ export declare const duckdbDialect: ReconcileDialect;
@@ -1,6 +1,2 @@
1
- import type { Config } from '../../config/index.js';
2
- import type { Connection } from '../types.js';
3
- export declare function reconcile(conn: Connection, cfg: Config, baseDir: string): Promise<{
4
- parsed: number;
5
- warnings: string[];
6
- }>;
1
+ import type { ReconcileDialect } from '../types.js';
2
+ export declare const duckdbDialect: ReconcileDialect;