sensemaking 0.27.1 → 0.28.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 (126) hide show
  1. package/bin/cli.js +16 -7
  2. package/dist/cjs/cli/constants.d.cts +2 -0
  3. package/dist/cjs/cli/constants.d.ts +2 -0
  4. package/dist/cjs/cli/constants.js +21 -0
  5. package/dist/cjs/cli/constants.js.map +1 -0
  6. package/dist/cjs/cli/named.js +2 -1
  7. package/dist/cjs/cli/named.js.map +1 -1
  8. package/dist/cjs/cli/shared.js +5 -4
  9. package/dist/cjs/cli/shared.js.map +1 -1
  10. package/dist/cjs/cli.js +10 -9
  11. package/dist/cjs/cli.js.map +1 -1
  12. package/dist/cjs/embed/query.js.map +1 -1
  13. package/dist/cjs/store/duckdb/engine.d.cts +11 -0
  14. package/dist/cjs/store/duckdb/engine.d.ts +11 -0
  15. package/dist/cjs/store/duckdb/engine.js +193 -0
  16. package/dist/cjs/store/duckdb/engine.js.map +1 -0
  17. package/dist/cjs/store/duckdb/lexical.js +34 -20
  18. package/dist/cjs/store/duckdb/lexical.js.map +1 -1
  19. package/dist/cjs/store/duckdb/native.d.cts +5 -2
  20. package/dist/cjs/store/duckdb/native.d.ts +5 -2
  21. package/dist/cjs/store/duckdb/native.js +157 -13
  22. package/dist/cjs/store/duckdb/native.js.map +1 -1
  23. package/dist/cjs/store/duckdb/open.js +151 -3
  24. package/dist/cjs/store/duckdb/open.js.map +1 -1
  25. package/dist/cjs/store/duckdb/ordered-bm25.d.cts +3 -3
  26. package/dist/cjs/store/duckdb/ordered-bm25.d.ts +3 -3
  27. package/dist/cjs/store/duckdb/ordered-bm25.js +4 -8
  28. package/dist/cjs/store/duckdb/ordered-bm25.js.map +1 -1
  29. package/dist/cjs/store/engine.d.cts +28 -0
  30. package/dist/cjs/store/engine.d.ts +28 -0
  31. package/dist/cjs/store/engine.js +362 -0
  32. package/dist/cjs/store/engine.js.map +1 -0
  33. package/dist/cjs/store/native.d.cts +8 -5
  34. package/dist/cjs/store/native.d.ts +8 -5
  35. package/dist/cjs/store/native.js +78 -73
  36. package/dist/cjs/store/native.js.map +1 -1
  37. package/dist/cjs/store/open.js +100 -40
  38. package/dist/cjs/store/open.js.map +1 -1
  39. package/dist/cjs/store/sqlite/engine.d.cts +12 -0
  40. package/dist/cjs/store/sqlite/engine.d.ts +12 -0
  41. package/dist/cjs/store/sqlite/engine.js +53 -0
  42. package/dist/cjs/store/sqlite/engine.js.map +1 -0
  43. package/dist/cjs/store/sqlite/lexical.js +3 -4
  44. package/dist/cjs/store/sqlite/lexical.js.map +1 -1
  45. package/dist/cjs/store/sqlite/open.js +119 -6
  46. package/dist/cjs/store/sqlite/open.js.map +1 -1
  47. package/dist/cjs/store/turso/engine.d.cts +9 -0
  48. package/dist/cjs/store/turso/engine.d.ts +9 -0
  49. package/dist/cjs/store/turso/engine.js +189 -0
  50. package/dist/cjs/store/turso/engine.js.map +1 -0
  51. package/dist/cjs/store/turso/lexical.js +16 -11
  52. package/dist/cjs/store/turso/lexical.js.map +1 -1
  53. package/dist/cjs/store/turso/native.d.cts +5 -1
  54. package/dist/cjs/store/turso/native.d.ts +5 -1
  55. package/dist/cjs/store/turso/native.js +157 -8
  56. package/dist/cjs/store/turso/native.js.map +1 -1
  57. package/dist/cjs/store/turso/open.js +172 -27
  58. package/dist/cjs/store/turso/open.js.map +1 -1
  59. package/dist/cjs/store/turso/reconcile.d.cts +0 -1
  60. package/dist/cjs/store/turso/reconcile.d.ts +0 -1
  61. package/dist/cjs/store/turso/reconcile.js +22 -23
  62. package/dist/cjs/store/turso/reconcile.js.map +1 -1
  63. package/dist/cjs/store/types.d.cts +2 -0
  64. package/dist/cjs/store/types.d.ts +2 -0
  65. package/dist/cjs/store/types.js.map +1 -1
  66. package/dist/esm/cli/constants.d.ts +2 -0
  67. package/dist/esm/cli/constants.js +2 -0
  68. package/dist/esm/cli/constants.js.map +1 -0
  69. package/dist/esm/cli/named.js +2 -1
  70. package/dist/esm/cli/named.js.map +1 -1
  71. package/dist/esm/cli/shared.js +6 -5
  72. package/dist/esm/cli/shared.js.map +1 -1
  73. package/dist/esm/cli.js +10 -9
  74. package/dist/esm/cli.js.map +1 -1
  75. package/dist/esm/embed/query.js +1 -1
  76. package/dist/esm/embed/query.js.map +1 -1
  77. package/dist/esm/store/duckdb/engine.d.ts +11 -0
  78. package/dist/esm/store/duckdb/engine.js +18 -0
  79. package/dist/esm/store/duckdb/engine.js.map +1 -0
  80. package/dist/esm/store/duckdb/lexical.js +11 -11
  81. package/dist/esm/store/duckdb/lexical.js.map +1 -1
  82. package/dist/esm/store/duckdb/native.d.ts +5 -2
  83. package/dist/esm/store/duckdb/native.js +16 -12
  84. package/dist/esm/store/duckdb/native.js.map +1 -1
  85. package/dist/esm/store/duckdb/open.js +40 -2
  86. package/dist/esm/store/duckdb/open.js.map +1 -1
  87. package/dist/esm/store/duckdb/ordered-bm25.d.ts +3 -3
  88. package/dist/esm/store/duckdb/ordered-bm25.js +4 -9
  89. package/dist/esm/store/duckdb/ordered-bm25.js.map +1 -1
  90. package/dist/esm/store/engine.d.ts +28 -0
  91. package/dist/esm/store/engine.js +85 -0
  92. package/dist/esm/store/engine.js.map +1 -0
  93. package/dist/esm/store/native.d.ts +8 -5
  94. package/dist/esm/store/native.js +59 -57
  95. package/dist/esm/store/native.js.map +1 -1
  96. package/dist/esm/store/open.js +24 -7
  97. package/dist/esm/store/open.js.map +1 -1
  98. package/dist/esm/store/sqlite/engine.d.ts +12 -0
  99. package/dist/esm/store/sqlite/engine.js +16 -0
  100. package/dist/esm/store/sqlite/engine.js.map +1 -0
  101. package/dist/esm/store/sqlite/lexical.js +2 -3
  102. package/dist/esm/store/sqlite/lexical.js.map +1 -1
  103. package/dist/esm/store/sqlite/open.js +38 -7
  104. package/dist/esm/store/sqlite/open.js.map +1 -1
  105. package/dist/esm/store/turso/engine.d.ts +9 -0
  106. package/dist/esm/store/turso/engine.js +14 -0
  107. package/dist/esm/store/turso/engine.js.map +1 -0
  108. package/dist/esm/store/turso/lexical.js +9 -9
  109. package/dist/esm/store/turso/lexical.js.map +1 -1
  110. package/dist/esm/store/turso/native.d.ts +5 -1
  111. package/dist/esm/store/turso/native.js +16 -10
  112. package/dist/esm/store/turso/native.js.map +1 -1
  113. package/dist/esm/store/turso/open.js +44 -3
  114. package/dist/esm/store/turso/open.js.map +1 -1
  115. package/dist/esm/store/turso/reconcile.d.ts +0 -1
  116. package/dist/esm/store/turso/reconcile.js +3 -8
  117. package/dist/esm/store/turso/reconcile.js.map +1 -1
  118. package/dist/esm/store/types.d.ts +2 -0
  119. package/dist/esm/store/types.js.map +1 -1
  120. package/package.json +21 -6
  121. package/skills/sense/SKILL.md +1 -1
  122. package/skills/sense/references/stores/duckdb.md +1 -1
  123. package/skills/sense/references/stores/sqlite.md +1 -1
  124. package/skills/sense/references/stores/turso.md +1 -1
  125. package/skills/sense-setup/references/stores/duckdb.md +1 -1
  126. package/skills/sense-setup/references/stores/sqlite.md +1 -1
@@ -17,24 +17,173 @@ _export(exports, {
17
17
  },
18
18
  get tursoApi () {
19
19
  return tursoApi;
20
+ },
21
+ get tursoNative () {
22
+ return tursoNative;
20
23
  }
21
24
  });
22
25
  var _nativets = require("../native.js");
26
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
27
+ try {
28
+ var info = gen[key](arg);
29
+ var value = info.value;
30
+ } catch (error) {
31
+ reject(error);
32
+ return;
33
+ }
34
+ if (info.done) resolve(value);
35
+ else Promise.resolve(value).then(_next, _throw);
36
+ }
37
+ function _async_to_generator(fn) {
38
+ return function() {
39
+ var self = this, args = arguments;
40
+ return new Promise(function(resolve, reject) {
41
+ var gen = fn.apply(self, args);
42
+ function _next(value) {
43
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
44
+ }
45
+ function _throw(err) {
46
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
47
+ }
48
+ _next(undefined);
49
+ });
50
+ };
51
+ }
52
+ function _ts_generator(thisArg, body) {
53
+ var f, y, t, _ = {
54
+ label: 0,
55
+ sent: function() {
56
+ if (t[0] & 1) throw t[1];
57
+ return t[1];
58
+ },
59
+ trys: [],
60
+ ops: []
61
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
62
+ return d(g, "next", {
63
+ value: verb(0)
64
+ }), d(g, "throw", {
65
+ value: verb(1)
66
+ }), d(g, "return", {
67
+ value: verb(2)
68
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
69
+ value: function() {
70
+ return this;
71
+ }
72
+ }), g;
73
+ function verb(n) {
74
+ return function(v) {
75
+ return step([
76
+ n,
77
+ v
78
+ ]);
79
+ };
80
+ }
81
+ function step(op) {
82
+ if (f) throw new TypeError("Generator is already executing.");
83
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
84
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
85
+ if (y = 0, t) op = [
86
+ op[0] & 2,
87
+ t.value
88
+ ];
89
+ switch(op[0]){
90
+ case 0:
91
+ case 1:
92
+ t = op;
93
+ break;
94
+ case 4:
95
+ _.label++;
96
+ return {
97
+ value: op[1],
98
+ done: false
99
+ };
100
+ case 5:
101
+ _.label++;
102
+ y = op[1];
103
+ op = [
104
+ 0
105
+ ];
106
+ continue;
107
+ case 7:
108
+ op = _.ops.pop();
109
+ _.trys.pop();
110
+ continue;
111
+ default:
112
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
113
+ _ = 0;
114
+ continue;
115
+ }
116
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
117
+ _.label = op[1];
118
+ break;
119
+ }
120
+ if (op[0] === 6 && _.label < t[1]) {
121
+ _.label = t[1];
122
+ t = op;
123
+ break;
124
+ }
125
+ if (t && _.label < t[2]) {
126
+ _.label = t[2];
127
+ _.ops.push(op);
128
+ break;
129
+ }
130
+ if (t[2]) _.ops.pop();
131
+ _.trys.pop();
132
+ continue;
133
+ }
134
+ op = body.call(thisArg, _);
135
+ } catch (e) {
136
+ op = [
137
+ 6,
138
+ e
139
+ ];
140
+ y = 0;
141
+ } finally{
142
+ f = t = 0;
143
+ }
144
+ if (op[0] & 5) throw op[1];
145
+ return {
146
+ value: op[0] ? op[1] : void 0,
147
+ done: true
148
+ };
149
+ }
150
+ }
23
151
  var TURSO_PACKAGE = '@tursodatabase/database';
24
- var TURSO = {
25
- store: 'turso',
26
- pkg: TURSO_PACKAGE,
27
- sizeHint: '~16MB'
28
- };
29
152
  var CONNECT_OPTS = {
30
153
  timeout: 30000,
31
154
  experimental: [
32
155
  'index_method'
33
156
  ]
34
157
  };
35
- var tursoApiPromise;
158
+ var tursoNativePromise;
159
+ function tursoNative() {
160
+ if (!tursoNativePromise) {
161
+ var descriptor = {
162
+ store: 'turso',
163
+ pkg: TURSO_PACKAGE,
164
+ sizeHint: '~16MB',
165
+ range: (0, _nativets.peerRange)(TURSO_PACKAGE)
166
+ };
167
+ tursoNativePromise = (0, _nativets.loadOrInstall)(descriptor, (0, _nativets.packageNodeModules)());
168
+ }
169
+ return tursoNativePromise;
170
+ }
36
171
  function tursoApi() {
37
- if (!tursoApiPromise) tursoApiPromise = (0, _nativets.loadOrInstall)(TURSO, (0, _nativets.packageNodeModules)());
38
- return tursoApiPromise;
172
+ return _async_to_generator(function() {
173
+ return _ts_generator(this, function(_state) {
174
+ switch(_state.label){
175
+ case 0:
176
+ return [
177
+ 4,
178
+ tursoNative()
179
+ ];
180
+ case 1:
181
+ return [
182
+ 2,
183
+ _state.sent().api
184
+ ];
185
+ }
186
+ });
187
+ })();
39
188
  }
40
189
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/native.ts"],"sourcesContent":["import { loadOrInstall, type NativeDescriptor, packageNodeModules } from '../native.ts';\n\nexport const TURSO_PACKAGE = '@tursodatabase/database';\n\nconst TURSO: NativeDescriptor = { store: 'turso', pkg: TURSO_PACKAGE, sizeHint: '~16MB' };\n\n// Every connect() in this store goes through these: the same 30s floor sqlite opens with, and the\n// FTS index method ensureSchema() needs. reclaimSpace adds 'vacuum'; nothing else may (PLAN 3.54).\nexport const CONNECT_OPTS = { timeout: 30_000, experimental: ['index_method'] } as const;\n\nlet tursoApiPromise: Promise<typeof import('@tursodatabase/database')> | undefined;\n\n// One accessor every consumer must go through, not each its own bare-specifier import: Node\n// keeps returning a pre-install \"not found\" miss to any new lookup of the same path afterward.\nexport function tursoApi(): Promise<typeof import('@tursodatabase/database')> {\n if (!tursoApiPromise) tursoApiPromise = loadOrInstall<typeof import('@tursodatabase/database')>(TURSO, packageNodeModules());\n return tursoApiPromise;\n}\n"],"names":["CONNECT_OPTS","TURSO_PACKAGE","tursoApi","TURSO","store","pkg","sizeHint","timeout","experimental","tursoApiPromise","loadOrInstall","packageNodeModules"],"mappings":";;;;;;;;;;;QAQaA;eAAAA;;QANAC;eAAAA;;QAYGC;eAAAA;;;wBAdyD;AAElE,IAAMD,gBAAgB;AAE7B,IAAME,QAA0B;IAAEC,OAAO;IAASC,KAAKJ;IAAeK,UAAU;AAAQ;AAIjF,IAAMN,eAAe;IAAEO,SAAS;IAAQC,cAAc;QAAC;KAAe;AAAC;AAE9E,IAAIC;AAIG,SAASP;IACd,IAAI,CAACO,iBAAiBA,kBAAkBC,IAAAA,uBAAa,EAA2CP,OAAOQ,IAAAA,4BAAkB;IACzH,OAAOF;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/native.ts"],"sourcesContent":["import { loadOrInstall, type NativeDescriptor, type NativeModule, packageNodeModules, peerRange } from '../native.ts';\n\nexport const TURSO_PACKAGE = '@tursodatabase/database';\n\n// Every connect() in this store goes through these: the same 30s floor sqlite opens with, and the\n// FTS index method ensureSchema() needs. reclaimSpace adds 'vacuum'; nothing else may (PLAN 3.54).\nexport const CONNECT_OPTS = { timeout: 30_000, experimental: ['index_method'] } as const;\n\ntype TursoApi = typeof import('@tursodatabase/database');\n\nlet tursoNativePromise: Promise<NativeModule<TursoApi>> | undefined;\n\n// One accessor every consumer must go through, not each its own bare-specifier import: Node\n// keeps returning a pre-install \"not found\" miss to any new lookup of the same path afterward.\nexport function tursoNative(): Promise<NativeModule<TursoApi>> {\n if (!tursoNativePromise) {\n const descriptor: NativeDescriptor = { store: 'turso', pkg: TURSO_PACKAGE, sizeHint: '~16MB', range: peerRange(TURSO_PACKAGE) };\n tursoNativePromise = loadOrInstall<TursoApi>(descriptor, packageNodeModules());\n }\n return tursoNativePromise;\n}\n\nexport async function tursoApi(): Promise<TursoApi> {\n return (await tursoNative()).api;\n}\n"],"names":["CONNECT_OPTS","TURSO_PACKAGE","tursoApi","tursoNative","timeout","experimental","tursoNativePromise","descriptor","store","pkg","sizeHint","range","peerRange","loadOrInstall","packageNodeModules","api"],"mappings":";;;;;;;;;;;QAMaA;eAAAA;;QAJAC;eAAAA;;QAoBSC;eAAAA;;QARNC;eAAAA;;;wBAduF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhG,IAAMF,gBAAgB;AAItB,IAAMD,eAAe;IAAEI,SAAS;IAAQC,cAAc;QAAC;KAAe;AAAC;AAI9E,IAAIC;AAIG,SAASH;IACd,IAAI,CAACG,oBAAoB;QACvB,IAAMC,aAA+B;YAAEC,OAAO;YAASC,KAAKR;YAAeS,UAAU;YAASC,OAAOC,IAAAA,mBAAS,EAACX;QAAe;QAC9HK,qBAAqBO,IAAAA,uBAAa,EAAWN,YAAYO,IAAAA,4BAAkB;IAC7E;IACA,OAAOR;AACT;AAEO,SAAeJ;;;;;oBACZ;;wBAAMC;;;oBAAd;;wBAAQ,cAAqBY,GAAG;;;;IAClC"}
@@ -25,10 +25,14 @@ _export(exports, {
25
25
  var _typests = require("../../embed/types.js");
26
26
  var _errorsts = require("../../errors.js");
27
27
  var _indexts = require("../../features/index.js");
28
+ var _enginets = require("../engine.js");
29
+ var _nativets = require("../native.js");
28
30
  var _opents = require("../open.js");
29
31
  var _sharedts = require("../shared.js");
30
32
  var _connectionts = require("./connection.js");
31
- var _nativets = require("./native.js");
33
+ var _enginets1 = require("./engine.js");
34
+ var _lexicalts = require("./lexical.js");
35
+ var _nativets1 = require("./native.js");
32
36
  var _reconcilets = require("./reconcile.js");
33
37
  var _storets = require("./store.js");
34
38
  function _array_like_to_array(arr, len) {
@@ -271,45 +275,50 @@ function ensureCoreSchema(_handle, conn) {
271
275
  case 4:
272
276
  _state.trys.push([
273
277
  4,
274
- 9,
275
278
  10,
276
- 11
279
+ 11,
280
+ 12
277
281
  ]);
278
- _iterator = _reconcilets.CONTENT_FTS_DDL[Symbol.iterator]();
279
- _state.label = 5;
282
+ return [
283
+ 4,
284
+ (0, _enginets1.tursoFts)()
285
+ ];
280
286
  case 5:
287
+ _iterator = _state.sent().indexDdl()[Symbol.iterator]();
288
+ _state.label = 6;
289
+ case 6:
281
290
  if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
282
291
  3,
283
- 8
292
+ 9
284
293
  ];
285
294
  ddl = _step.value;
286
295
  return [
287
296
  4,
288
297
  conn.exec(ddl)
289
298
  ];
290
- case 6:
291
- _state.sent();
292
- _state.label = 7;
293
299
  case 7:
300
+ _state.sent();
301
+ _state.label = 8;
302
+ case 8:
294
303
  _iteratorNormalCompletion = true;
295
304
  return [
296
305
  3,
297
- 5
306
+ 6
298
307
  ];
299
- case 8:
308
+ case 9:
300
309
  return [
301
310
  3,
302
- 11
311
+ 12
303
312
  ];
304
- case 9:
313
+ case 10:
305
314
  err = _state.sent();
306
315
  _didIteratorError = true;
307
316
  _iteratorError = err;
308
317
  return [
309
318
  3,
310
- 11
319
+ 12
311
320
  ];
312
- case 10:
321
+ case 11:
313
322
  try {
314
323
  if (!_iteratorNormalCompletion && _iterator.return != null) {
315
324
  _iterator.return();
@@ -322,36 +331,36 @@ function ensureCoreSchema(_handle, conn) {
322
331
  return [
323
332
  7
324
333
  ];
325
- case 11:
334
+ case 12:
326
335
  return [
327
336
  4,
328
337
  conn.exec('CREATE TABLE IF NOT EXISTS preset_files ("path" TEXT, preset TEXT, PRIMARY KEY ("path", preset))')
329
338
  ];
330
- case 12:
339
+ case 13:
331
340
  _state.sent();
332
341
  return [
333
342
  4,
334
343
  conn.exec('CREATE INDEX IF NOT EXISTS preset_files_preset ON preset_files(preset)')
335
344
  ];
336
- case 13:
345
+ case 14:
337
346
  _state.sent();
338
347
  return [
339
348
  4,
340
349
  (0, _sharedts.getMeta)(conn, 'schema_version')
341
350
  ];
342
- case 14:
351
+ case 15:
343
352
  if (!(_state.sent() === null)) return [
344
353
  3,
345
- 16
354
+ 17
346
355
  ];
347
356
  return [
348
357
  4,
349
358
  (0, _sharedts.setMeta)(conn, 'schema_version', SCHEMA_VERSION)
350
359
  ];
351
- case 15:
352
- _state.sent();
353
- _state.label = 16;
354
360
  case 16:
361
+ _state.sent();
362
+ _state.label = 17;
363
+ case 17:
355
364
  return [
356
365
  2
357
366
  ];
@@ -509,7 +518,7 @@ function connect(dbPath, _cfg, options) {
509
518
  ]);
510
519
  return [
511
520
  4,
512
- (0, _nativets.tursoApi)()
521
+ (0, _nativets1.tursoApi)()
513
522
  ];
514
523
  case 1:
515
524
  turso = _state.sent();
@@ -520,7 +529,7 @@ function connect(dbPath, _cfg, options) {
520
529
  case 2:
521
530
  err = _state.sent();
522
531
  if (_instanceof(err, _errorsts.SenseError)) throw err;
523
- throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "turso" needs the '.concat(_nativets.TURSO_PACKAGE, " package (").concat(err.message, ")"));
532
+ throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "turso" needs the '.concat(_nativets1.TURSO_PACKAGE, " package (").concat(err.message, ")"));
524
533
  case 3:
525
534
  _state.trys.push([
526
535
  3,
@@ -530,8 +539,8 @@ function connect(dbPath, _cfg, options) {
530
539
  ]);
531
540
  return [
532
541
  4,
533
- turso.connect(dbPath, _object_spread(_object_spread_props(_object_spread({}, _nativets.CONNECT_OPTS), {
534
- experimental: _to_consumable_array(_nativets.CONNECT_OPTS.experimental)
542
+ turso.connect(dbPath, _object_spread(_object_spread_props(_object_spread({}, _nativets1.CONNECT_OPTS), {
543
+ experimental: _to_consumable_array(_nativets1.CONNECT_OPTS.experimental)
535
544
  }), options.existingOnly ? {
536
545
  fileMustExist: true
537
546
  } : {}))
@@ -559,6 +568,140 @@ function connect(dbPath, _cfg, options) {
559
568
  });
560
569
  })();
561
570
  }
571
+ function tursoEngineIdentity() {
572
+ return _async_to_generator(function() {
573
+ var _tmp;
574
+ return _ts_generator(this, function(_state) {
575
+ switch(_state.label){
576
+ case 0:
577
+ _tmp = [
578
+ _nativets1.TURSO_PACKAGE
579
+ ];
580
+ return [
581
+ 4,
582
+ (0, _nativets1.tursoNative)()
583
+ ];
584
+ case 1:
585
+ return [
586
+ 2,
587
+ _enginets.engineIdentity.apply(void 0, _tmp.concat([
588
+ _state.sent().version
589
+ ]))
590
+ ];
591
+ }
592
+ });
593
+ })();
594
+ }
595
+ // The real schema, content write and lexical query over store/engine.ts's fixture, in memory.
596
+ function checkTursoEngine() {
597
+ return _async_to_generator(function() {
598
+ var _ref, api, version, db, conn, docs;
599
+ return _ts_generator(this, function(_state) {
600
+ switch(_state.label){
601
+ case 0:
602
+ return [
603
+ 4,
604
+ (0, _nativets1.tursoNative)()
605
+ ];
606
+ case 1:
607
+ _ref = _state.sent(), api = _ref.api, version = _ref.version;
608
+ return [
609
+ 4,
610
+ api.connect(':memory:', _object_spread_props(_object_spread({}, _nativets1.CONNECT_OPTS), {
611
+ experimental: _to_consumable_array(_nativets1.CONNECT_OPTS.experimental)
612
+ }))
613
+ ];
614
+ case 2:
615
+ db = _state.sent();
616
+ _state.label = 3;
617
+ case 3:
618
+ _state.trys.push([
619
+ 3,
620
+ ,
621
+ 8,
622
+ 10
623
+ ]);
624
+ conn = (0, _connectionts.createConnection)(db);
625
+ return [
626
+ 4,
627
+ conn.exec('CREATE TABLE meta (key TEXT PRIMARY KEY, value TEXT)')
628
+ ];
629
+ case 4:
630
+ _state.sent();
631
+ return [
632
+ 4,
633
+ ensureCoreSchema(db, conn)
634
+ ];
635
+ case 5:
636
+ _state.sent();
637
+ docs = _enginets.ENGINE_CHECK_DOCS.map(function(doc) {
638
+ return {
639
+ relPath: doc.path,
640
+ search: {
641
+ title: doc.title,
642
+ summary: doc.summary,
643
+ text: doc.text
644
+ }
645
+ };
646
+ });
647
+ return [
648
+ 4,
649
+ (0, _reconcilets.reconcileTursoContentWithStrategy)(conn, [], docs, 'incremental')
650
+ ];
651
+ case 6:
652
+ _state.sent();
653
+ return [
654
+ 4,
655
+ (0, _enginets.checkEngine)('turso', (0, _enginets.engineIdentity)(_nativets1.TURSO_PACKAGE, version), (0, _enginets.npmRemedy)(_nativets1.TURSO_PACKAGE, (0, _nativets.peerRange)(_nativets1.TURSO_PACKAGE)), function(terms) {
656
+ return _async_to_generator(function() {
657
+ return _ts_generator(this, function(_state) {
658
+ switch(_state.label){
659
+ case 0:
660
+ return [
661
+ 4,
662
+ (0, _lexicalts.queryLexical)(conn, terms, {
663
+ whereJoin: '',
664
+ whereCond: '',
665
+ scopeCond: '',
666
+ limit: 10
667
+ })
668
+ ];
669
+ case 1:
670
+ return [
671
+ 2,
672
+ _state.sent().map(function(hit) {
673
+ return hit.path;
674
+ })
675
+ ];
676
+ }
677
+ });
678
+ })();
679
+ })
680
+ ];
681
+ case 7:
682
+ _state.sent();
683
+ return [
684
+ 3,
685
+ 10
686
+ ];
687
+ case 8:
688
+ return [
689
+ 4,
690
+ db.close()
691
+ ];
692
+ case 9:
693
+ _state.sent();
694
+ return [
695
+ 7
696
+ ];
697
+ case 10:
698
+ return [
699
+ 2
700
+ ];
701
+ }
702
+ });
703
+ })();
704
+ }
562
705
  var tursoOpenDialect = {
563
706
  filename: DB_FILENAME,
564
707
  schemaVersion: SCHEMA_VERSION,
@@ -571,6 +714,8 @@ var tursoOpenDialect = {
571
714
  isLocked: function isLocked(err) {
572
715
  return /File is locked by another process|locked a portion of the file/.test(err.message);
573
716
  },
717
+ engineIdentity: tursoEngineIdentity,
718
+ checkEngine: checkTursoEngine,
574
719
  ensureCoreSchema: ensureCoreSchema,
575
720
  ensureFeatureSchema: ensureFeatureSchema,
576
721
  setDerivedBusyTimeout: setDerivedBusyTimeout,
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/open.ts"],"sourcesContent":["import type { Database } from '@tursodatabase/database';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { STORE_DIMS } from '../../embed/types.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures } 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 = '10';\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 ensureCoreSchema(_handle: Database, conn: Connection): 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 if ((await getMeta(conn, 'schema_version')) === null) await setMeta(conn, 'schema_version', SCHEMA_VERSION);\n}\n\nasync function ensureFeatureSchema(_handle: Database, conn: Connection, cfg: Config): Promise<void> {\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, content_identity TEXT NOT NULL, scale REAL, vector F32_BLOB(${STORE_DIMS}), PRIMARY KEY (\"path\", chunk))`);\n continue;\n }\n await feature.schema(conn);\n }\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 ensureCoreSchema,\n ensureFeatureSchema,\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","ensureCoreSchema","_handle","conn","ddl","exec","CONTENT_FTS_DDL","getMeta","setMeta","ensureFeatureSchema","cfg","feature","activeFeatures","name","STORE_DIMS","schema","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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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/ai/sensemaking/src/store/turso/open.ts"],"sourcesContent":["import type { Database } from '@tursodatabase/database';\nimport type { Config, ResolvedConfig } from '../../config/index.ts';\nimport { STORE_DIMS } from '../../embed/types.ts';\nimport { SenseError } from '../../errors.ts';\nimport { activeFeatures } from '../../features/index.ts';\nimport type { ParsedDoc } from '../../scan/index.ts';\nimport { ENGINE_CHECK_DOCS, engineIdentity, npmRemedy, checkEngine as runEngineCheck } from '../engine.ts';\nimport { peerRange } from '../native.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 { tursoFts } from './engine.ts';\nimport { queryLexical } from './lexical.ts';\nimport { CONNECT_OPTS, TURSO_PACKAGE, tursoApi, tursoNative } from './native.ts';\nimport { reconcileTursoContentWithStrategy, 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 = '10';\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 ensureCoreSchema(_handle: Database, conn: Connection): 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 (await tursoFts()).indexDdl()) 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 if ((await getMeta(conn, 'schema_version')) === null) await setMeta(conn, 'schema_version', SCHEMA_VERSION);\n}\n\nasync function ensureFeatureSchema(_handle: Database, conn: Connection, cfg: Config): Promise<void> {\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, content_identity TEXT NOT NULL, scale REAL, vector F32_BLOB(${STORE_DIMS}), PRIMARY KEY (\"path\", chunk))`);\n continue;\n }\n await feature.schema(conn);\n }\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\nasync function tursoEngineIdentity(): Promise<string> {\n return engineIdentity(TURSO_PACKAGE, (await tursoNative()).version);\n}\n\n// The real schema, content write and lexical query over store/engine.ts's fixture, in memory.\nasync function checkTursoEngine(): Promise<void> {\n const { api, version } = await tursoNative();\n const db = await api.connect(':memory:', { ...CONNECT_OPTS, experimental: [...CONNECT_OPTS.experimental] });\n try {\n const conn = createConnection(db);\n await conn.exec('CREATE TABLE meta (key TEXT PRIMARY KEY, value TEXT)');\n await ensureCoreSchema(db, conn);\n const docs = ENGINE_CHECK_DOCS.map((doc) => ({ relPath: doc.path, search: { title: doc.title, summary: doc.summary, text: doc.text } }) as ParsedDoc);\n await reconcileTursoContentWithStrategy(conn, [], docs, 'incremental');\n await runEngineCheck('turso', engineIdentity(TURSO_PACKAGE, version), npmRemedy(TURSO_PACKAGE, peerRange(TURSO_PACKAGE)), async (terms) => (await queryLexical(conn, terms, { whereJoin: '', whereCond: '', scopeCond: '', limit: 10 })).map((hit) => hit.path));\n } finally {\n await db.close();\n }\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 engineIdentity: tursoEngineIdentity,\n checkEngine: checkTursoEngine,\n ensureCoreSchema,\n ensureFeatureSchema,\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","ensureCoreSchema","_handle","conn","ddl","exec","tursoFts","indexDdl","getMeta","setMeta","ensureFeatureSchema","cfg","feature","activeFeatures","name","STORE_DIMS","schema","close","handle","options","observational","checkpointWal","setDerivedBusyTimeout","ms","connect","dbPath","_cfg","turso","err","db","tursoApi","SenseError","TURSO_PACKAGE","message","CONNECT_OPTS","experimental","existingOnly","fileMustExist","createConnection","tursoEngineIdentity","tursoNative","engineIdentity","version","checkTursoEngine","api","docs","ENGINE_CHECK_DOCS","map","doc","relPath","path","search","title","summary","text","reconcileTursoContentWithStrategy","runEngineCheck","npmRemedy","peerRange","terms","queryLexical","whereJoin","whereCond","scopeCond","limit","hit","filename","schemaVersion","reconcileDialect","tursoDialect","isLocked","test","checkEngine","createStore","openWithDialect"],"mappings":";;;;;;;;;;;QAmBaA;eAAAA;;QAGAC;eAAAA;;QAkGSC;eAAAA;;QAlBTC;eAAAA;;;uBApGc;wBACA;uBACI;wBAE6D;wBAClE;sBAEM;wBACC;4BAEe;yBACvB;yBACI;yBACsC;2BACH;uBACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB,IAAMH,cAAc;AAGpB,IAAMC,iBAAiB;AAI9B,4FAA4F;AAC5F,mFAAmF;AACnF,SAAeG,iBAAiBC,OAAiB,EAAEC,IAAgB;;YAI5D,2BAAA,mBAAA,gBAAA,WAAA,OAAMC;;;;oBAHX;;wBAAMD,KAAKE,IAAI,CAAC;;;oBAAhB;oBACA;;wBAAMF,KAAKE,IAAI,CAAC;;;oBAAhB;oBACA;;wBAAMF,KAAKE,IAAI,CAAC;;;oBAAhB;oBACK,kCAAA,2BAAA;;;;;;;;;oBAAc;;wBAAMC,IAAAA,mBAAQ;;;oBAA5B,YAAa,AAAC,cAAkBC,QAAQ;;;2BAAxC,6BAAA,QAAA;;;;oBAAMH,MAAN;oBAA4C;;wBAAMD,KAAKE,IAAI,CAACD;;;oBAAhB;;;oBAA5C;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;oBACL;;wBAAMD,KAAKE,IAAI,CAAC;;;oBAAhB;oBACA;;wBAAMF,KAAKE,IAAI,CAAC;;;oBAAhB;oBACK;;wBAAMG,IAAAA,iBAAO,EAACL,MAAM;;;yBAArB,CAAA,AAAC,kBAA2C,IAAG,GAA/C;;;;oBAAkD;;wBAAMM,IAAAA,iBAAO,EAACN,MAAM,kBAAkBL;;;oBAAtC;;;;;;;;IACxD;;AAEA,SAAeY,oBAAoBR,OAAiB,EAAEC,IAAgB,EAAEQ,GAAW;;YAC5E,2BAAA,mBAAA,gBAAA,WAAA,OAAMC;;;;oBAAN,kCAAA,2BAAA;;;;;;;;;oBAAA,YAAiBC,IAAAA,uBAAc,EAACF;;;2BAAhC,6BAAA,QAAA;;;;oBAAMC,UAAN;yBAGCA,CAAAA,QAAQE,IAAI,KAAK,OAAM,GAAvBF;;;;oBACF;;wBAAMT,KAAKE,IAAI,CAAC,AAAC,wKAAkL,OAAXU,mBAAU,EAAC;;;oBAAnM;oBACA;;;;;oBAEF;;wBAAMH,QAAQI,MAAM,CAACb;;;oBAArB;;;oBAPG;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;;;;;;IASP;;AAEA,SAAec;wCAAMC,MAAgB;YAAEC;;;;;oBAAAA,UAAAA,oEAAuC,CAAC;yBACzE,CAACA,QAAQC,aAAa,EAAtB;;;;oBAAwB;;wBAAMC,IAAAA,2BAAa,EAACH;;;oBAApB;;;oBAC5B;;wBAAMA,OAAOD,KAAK;;;oBAAlB;;;;;;IACF;;AAEA,SAAeK,sBAAsBpB,OAAiB,EAAEC,IAAgB,EAAEoB,EAAU;;;;;oBAClF;;wBAAMpB,KAAKE,IAAI,CAAC,AAAC,yBAA2B,OAAHkB;;;oBAAzC;;;;;;IACF;;AAEA,SAAeC,QAAQC,MAAc,EAAEC,IAAoB,EAAEP,OAA0D;;YAGjHQ,OAGKC,KAKLC,IAKKD;;;;;;;;;;oBAXC;;wBAAME,IAAAA,mBAAQ;;;oBAAtBH,QAAQ;;;;;;oBACDC;oBACP,IAAIA,AAAG,YAAHA,KAAeG,oBAAU,GAAE,MAAMH;oBACrC,MAAM,IAAIG,oBAAU,CAAC,4BAA4B,AAAC,2BAAoD,OAA1BC,wBAAa,EAAC,cAAmC,OAAvB,AAACJ,IAAcK,OAAO,EAAC;;;;;;;;oBAOxH;;wBAAMN,MAAMH,OAAO,CAACC,QAAQ,uDAAKS,uBAAY;4BAAEC,cAAe,qBAAGD,uBAAY,CAACC,YAAY;4BAAOhB,QAAQiB,YAAY,GAAG;4BAAEC,eAAe;wBAAK,IAAI,CAAC;;;oBAFxJ,8FAA8F;oBAC9F,mGAAmG;oBACnGR,KAAK;;;;;;oBACED;oBACP,MAAM,IAAIG,oBAAU,CAAC,4BAA4B,AAAC,gCAA0C,OAAXN,QAAO,MAA2B,OAAvB,AAACG,KAAcK,OAAO;;oBAEpH;;wBAAO;4BAAEf,QAAQW;4BAAI1B,MAAMmC,IAAAA,8BAAgB,EAACT;wBAAI;;;;IAClD;;AAEA,SAAeU;;;;;;;wBACSP,wBAAa;;oBAAG;;wBAAMQ,IAAAA,sBAAW;;;oBAAvD;;wBAAOC,wBAAc;4BAAiB,cAAqBC,OAAO;;;;;IACpE;;AAEA,8FAA8F;AAC9F,SAAeC;;YACY,MAAjBC,KAAKF,SACPb,IAEE1B,MAGA0C;;;;oBANiB;;wBAAML,IAAAA,sBAAW;;;oBAAjB,OAAA,eAAjBI,MAAiB,KAAjBA,KAAKF,UAAY,KAAZA;oBACF;;wBAAME,IAAIpB,OAAO,CAAC,YAAY,wCAAKU,uBAAY;4BAAEC,cAAe,qBAAGD,uBAAY,CAACC,YAAY;;;;oBAAjGN,KAAK;;;;;;;;;oBAEH1B,OAAOmC,IAAAA,8BAAgB,EAACT;oBAC9B;;wBAAM1B,KAAKE,IAAI,CAAC;;;oBAAhB;oBACA;;wBAAMJ,iBAAiB4B,IAAI1B;;;oBAA3B;oBACM0C,OAAOC,2BAAiB,CAACC,GAAG,CAAC,SAACC;+BAAS;4BAAEC,SAASD,IAAIE,IAAI;4BAAEC,QAAQ;gCAAEC,OAAOJ,IAAII,KAAK;gCAAEC,SAASL,IAAIK,OAAO;gCAAEC,MAAMN,IAAIM,IAAI;4BAAC;wBAAE;;oBACrI;;wBAAMC,IAAAA,8CAAiC,EAACpD,UAAU0C,MAAM;;;oBAAxD;oBACA;;wBAAMW,IAAAA,qBAAc,EAAC,SAASf,IAAAA,wBAAc,EAACT,wBAAa,EAAEU,UAAUe,IAAAA,mBAAS,EAACzB,wBAAa,EAAE0B,IAAAA,mBAAS,EAAC1B,wBAAa,IAAI,SAAO2B;;;;;4CAAW;;gDAAMC,IAAAA,uBAAY,EAACzD,MAAMwD,OAAO;oDAAEE,WAAW;oDAAIC,WAAW;oDAAIC,WAAW;oDAAIC,OAAO;gDAAG;;;;;gDAAzF,cAA6FjB,GAAG,CAAC,SAACkB;2DAAQA,IAAIf,IAAI;;;;;;;;;oBAA9P;;;;;;oBAEA;;wBAAMrB,GAAGZ,KAAK;;;oBAAd;;;;;;;;;;IAEJ;;AAGO,IAAMjB,mBAA0C;IACrDkE,UAAUrE;IACVsE,eAAerE;IACfsE,kBAAkBC,yBAAY;IAC9B7C,SAAAA;IACAP,OAAAA;IACA,kGAAkG;IAClG,oGAAoG;IACpG,sGAAsG;IACtGqD,UAAU,SAAVA,SAAW1C;eAAQ,iEAAiE2C,IAAI,CAAC3C,IAAIK,OAAO;;IACpGQ,gBAAgBF;IAChBiC,aAAa7B;IACb1C,kBAAAA;IACAS,qBAAAA;IACAY,uBAAAA;IACAmD,aAAa,SAAbA,YAAcvD,QAAQf,MAAMuB,MAAMP;eAAYsD,IAAAA,oBAAW,EAACvD,QAAQf,MAAMgB;;AAC1E;AAEO,SAAepB,UAAUY,GAAmB,EAAEQ,OAA6B;;;YAChF;;gBAAOuD,IAAAA,uBAAe,EAAC/D,KAAKX,kBAAkBmB;;;IAChD"}
@@ -1,7 +1,6 @@
1
1
  import type { ReconcileDelta } from '../../features/types.js';
2
2
  import type { ParsedDoc } from '../../scan/index.js';
3
3
  import type { Connection, ReconcileDialect } from '../types.js';
4
- export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title_stem, summary_stem, text_stem) WITH (weights = 'title_stem=10.0,summary_stem=5.0,text_stem=1.0')", "CREATE INDEX IF NOT EXISTS content_fts_ngram ON content USING fts (title_ngram, summary_ngram, text_ngram) WITH (tokenizer='ngram', weights='title_ngram=10.0,summary_ngram=5.0,text_ngram=1.0')"];
5
4
  export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
6
5
  export declare const FTS_REBUILD_THRESHOLD = 250;
7
6
  export type TursoFtsStrategy = 'incremental' | 'rebuild';
@@ -1,7 +1,6 @@
1
1
  import type { ReconcileDelta } from '../../features/types.js';
2
2
  import type { ParsedDoc } from '../../scan/index.js';
3
3
  import type { Connection, ReconcileDialect } from '../types.js';
4
- export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title_stem, summary_stem, text_stem) WITH (weights = 'title_stem=10.0,summary_stem=5.0,text_stem=1.0')", "CREATE INDEX IF NOT EXISTS content_fts_ngram ON content USING fts (title_ngram, summary_ngram, text_ngram) WITH (tokenizer='ngram', weights='title_ngram=10.0,summary_ngram=5.0,text_ngram=1.0')"];
5
4
  export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
6
5
  export declare const FTS_REBUILD_THRESHOLD = 250;
7
6
  export type TursoFtsStrategy = 'incremental' | 'rebuild';