sensemaking 0.19.2 → 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 (140) 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/scan/pool.d.cts +15 -0
  10. package/dist/cjs/scan/pool.d.ts +15 -0
  11. package/dist/cjs/scan/pool.js +263 -0
  12. package/dist/cjs/scan/pool.js.map +1 -0
  13. package/dist/cjs/scan/reparse.d.cts +2 -0
  14. package/dist/cjs/scan/reparse.d.ts +2 -0
  15. package/dist/cjs/scan/reparse.js +15 -76
  16. package/dist/cjs/scan/reparse.js.map +1 -1
  17. package/dist/cjs/store/builder.d.cts +11 -0
  18. package/dist/cjs/store/builder.d.ts +11 -0
  19. package/dist/cjs/store/builder.js +27 -0
  20. package/dist/cjs/store/builder.js.map +1 -0
  21. package/dist/cjs/store/duckdb/lexical.d.cts +1 -0
  22. package/dist/cjs/store/duckdb/lexical.d.ts +1 -0
  23. package/dist/cjs/store/duckdb/lexical.js +21 -5
  24. package/dist/cjs/store/duckdb/lexical.js.map +1 -1
  25. package/dist/cjs/store/duckdb/open.d.cts +9 -8
  26. package/dist/cjs/store/duckdb/open.d.ts +9 -8
  27. package/dist/cjs/store/duckdb/open.js +70 -122
  28. package/dist/cjs/store/duckdb/open.js.map +1 -1
  29. package/dist/cjs/store/duckdb/reconcile.js +4 -0
  30. package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
  31. package/dist/cjs/store/duckdb/store.d.cts +1 -2
  32. package/dist/cjs/store/duckdb/store.d.ts +1 -2
  33. package/dist/cjs/store/duckdb/store.js +1 -26
  34. package/dist/cjs/store/duckdb/store.js.map +1 -1
  35. package/dist/cjs/store/index.d.cts +8 -3
  36. package/dist/cjs/store/index.d.ts +8 -3
  37. package/dist/cjs/store/index.js +36 -7
  38. package/dist/cjs/store/index.js.map +1 -1
  39. package/dist/cjs/store/open.d.cts +15 -0
  40. package/dist/cjs/store/open.d.ts +15 -0
  41. package/dist/cjs/store/open.js +516 -0
  42. package/dist/cjs/store/open.js.map +1 -0
  43. package/dist/cjs/store/reconcile.d.cts +2 -1
  44. package/dist/cjs/store/reconcile.d.ts +2 -1
  45. package/dist/cjs/store/reconcile.js +4 -2
  46. package/dist/cjs/store/reconcile.js.map +1 -1
  47. package/dist/cjs/store/{sqlite/signature.d.cts → signature.d.cts} +0 -3
  48. package/dist/cjs/store/{sqlite/signature.d.ts → signature.d.ts} +0 -3
  49. package/dist/cjs/store/signature.js +162 -0
  50. package/dist/cjs/store/signature.js.map +1 -0
  51. package/dist/cjs/store/sqlite/open.d.cts +9 -9
  52. package/dist/cjs/store/sqlite/open.d.ts +9 -9
  53. package/dist/cjs/store/sqlite/open.js +189 -201
  54. package/dist/cjs/store/sqlite/open.js.map +1 -1
  55. package/dist/cjs/store/sqlite/store.d.cts +1 -1
  56. package/dist/cjs/store/sqlite/store.d.ts +1 -1
  57. package/dist/cjs/store/sqlite/store.js +1 -13
  58. package/dist/cjs/store/sqlite/store.js.map +1 -1
  59. package/dist/cjs/store/turso/open.d.cts +6 -11
  60. package/dist/cjs/store/turso/open.d.ts +6 -11
  61. package/dist/cjs/store/turso/open.js +79 -171
  62. package/dist/cjs/store/turso/open.js.map +1 -1
  63. package/dist/cjs/store/turso/reconcile.d.cts +2 -0
  64. package/dist/cjs/store/turso/reconcile.d.ts +2 -0
  65. package/dist/cjs/store/turso/reconcile.js +16 -5
  66. package/dist/cjs/store/turso/reconcile.js.map +1 -1
  67. package/dist/cjs/store/turso/store.d.cts +1 -2
  68. package/dist/cjs/store/turso/store.d.ts +1 -2
  69. package/dist/cjs/store/turso/store.js +1 -13
  70. package/dist/cjs/store/turso/store.js.map +1 -1
  71. package/dist/cjs/store/types.d.cts +17 -5
  72. package/dist/cjs/store/types.d.ts +17 -5
  73. package/dist/cjs/store/types.js.map +1 -1
  74. package/dist/cjs/text/strip.js +3 -6
  75. package/dist/cjs/text/strip.js.map +1 -1
  76. package/dist/cjs/watch.js +28 -16
  77. package/dist/cjs/watch.js.map +1 -1
  78. package/dist/esm/chunk/extract.d.ts +1 -0
  79. package/dist/esm/chunk/extract.js +10 -2
  80. package/dist/esm/chunk/extract.js.map +1 -1
  81. package/dist/esm/chunk/index.d.ts +1 -1
  82. package/dist/esm/chunk/index.js +1 -1
  83. package/dist/esm/chunk/index.js.map +1 -1
  84. package/dist/esm/scan/pool.d.ts +15 -0
  85. package/dist/esm/scan/pool.js +77 -0
  86. package/dist/esm/scan/pool.js.map +1 -0
  87. package/dist/esm/scan/reparse.d.ts +2 -0
  88. package/dist/esm/scan/reparse.js +11 -58
  89. package/dist/esm/scan/reparse.js.map +1 -1
  90. package/dist/esm/store/builder.d.ts +11 -0
  91. package/dist/esm/store/builder.js +14 -0
  92. package/dist/esm/store/builder.js.map +1 -0
  93. package/dist/esm/store/duckdb/lexical.d.ts +1 -0
  94. package/dist/esm/store/duckdb/lexical.js +22 -9
  95. package/dist/esm/store/duckdb/lexical.js.map +1 -1
  96. package/dist/esm/store/duckdb/open.d.ts +9 -8
  97. package/dist/esm/store/duckdb/open.js +31 -57
  98. package/dist/esm/store/duckdb/open.js.map +1 -1
  99. package/dist/esm/store/duckdb/reconcile.js +4 -0
  100. package/dist/esm/store/duckdb/reconcile.js.map +1 -1
  101. package/dist/esm/store/duckdb/store.d.ts +1 -2
  102. package/dist/esm/store/duckdb/store.js +2 -11
  103. package/dist/esm/store/duckdb/store.js.map +1 -1
  104. package/dist/esm/store/index.d.ts +8 -3
  105. package/dist/esm/store/index.js +22 -7
  106. package/dist/esm/store/index.js.map +1 -1
  107. package/dist/esm/store/open.d.ts +15 -0
  108. package/dist/esm/store/open.js +137 -0
  109. package/dist/esm/store/open.js.map +1 -0
  110. package/dist/esm/store/reconcile.d.ts +2 -1
  111. package/dist/esm/store/reconcile.js +4 -2
  112. package/dist/esm/store/reconcile.js.map +1 -1
  113. package/dist/esm/store/{sqlite/signature.d.ts → signature.d.ts} +0 -3
  114. package/dist/esm/store/{sqlite/signature.js → signature.js} +3 -26
  115. package/dist/esm/store/signature.js.map +1 -0
  116. package/dist/esm/store/sqlite/open.d.ts +9 -9
  117. package/dist/esm/store/sqlite/open.js +81 -113
  118. package/dist/esm/store/sqlite/open.js.map +1 -1
  119. package/dist/esm/store/sqlite/store.d.ts +1 -1
  120. package/dist/esm/store/sqlite/store.js +2 -7
  121. package/dist/esm/store/sqlite/store.js.map +1 -1
  122. package/dist/esm/store/turso/open.d.ts +6 -11
  123. package/dist/esm/store/turso/open.js +30 -78
  124. package/dist/esm/store/turso/open.js.map +1 -1
  125. package/dist/esm/store/turso/reconcile.d.ts +2 -0
  126. package/dist/esm/store/turso/reconcile.js +12 -1
  127. package/dist/esm/store/turso/reconcile.js.map +1 -1
  128. package/dist/esm/store/turso/store.d.ts +1 -2
  129. package/dist/esm/store/turso/store.js +2 -7
  130. package/dist/esm/store/turso/store.js.map +1 -1
  131. package/dist/esm/store/types.d.ts +17 -5
  132. package/dist/esm/store/types.js.map +1 -1
  133. package/dist/esm/text/strip.js +3 -4
  134. package/dist/esm/text/strip.js.map +1 -1
  135. package/dist/esm/watch.js +5 -3
  136. package/dist/esm/watch.js.map +1 -1
  137. package/package.json +2 -2
  138. package/dist/cjs/store/sqlite/signature.js +0 -380
  139. package/dist/cjs/store/sqlite/signature.js.map +0 -1
  140. package/dist/esm/store/sqlite/signature.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/sqlite/store.ts"],"sourcesContent":["import type { DatabaseSync } from 'node:sqlite';\nimport type { Config } from '../../config/index.ts';\nimport { contentTokenize } from '../../config/index.ts';\nimport { reconcile } from '../reconcile.ts';\nimport { getColumns } from '../shared.ts';\nimport { withTransaction } from '../transaction.ts';\nimport type { Capability, Connection, Statement, Store, VectorWriteRow } from '../types.ts';\nimport { hasVectorRow, pendingRows } from '../vectors.ts';\nimport { fieldStats } from './fieldStats.ts';\nimport { queryLexical } from './lexical.ts';\nimport { sqliteDialect } from './reconcile.ts';\nimport { scanCandidates, scanSimilar, writeVectorBatch } from './vectors.ts';\n\nexport const CAPABILITIES: ReadonlySet<Capability> = new Set(['phrases', 'snippets', 'watch-concurrency', 'lexical', 'vectors', 'sql-functions']);\n\n// Wraps the synchronous DatabaseSync connection in the async Store interface, sharing one\n// Connection instance (conn) with open()'s own reconcile call so transaction depth is tracked against the same object everywhere.\nexport function createStore(db: DatabaseSync, conn: Connection, cfg: Config, baseDir: string): Store {\n return {\n name: 'sqlite',\n capabilities: CAPABILITIES,\n async exec(sql: string): Promise<void> {\n await conn.exec(sql);\n },\n async prepare(sql: string): Promise<Statement> {\n return conn.prepare(sql);\n },\n async runBatch(sql: string, paramRows: unknown[][]): Promise<void> {\n await conn.runBatch(sql, paramRows);\n },\n async transaction<T>(fn: () => Promise<T>): Promise<T> {\n return withTransaction(conn, fn);\n },\n async reconcile() {\n return reconcile(conn, cfg, baseDir, sqliteDialect);\n },\n docs: {\n async columns() {\n return [...(await getColumns(conn))];\n },\n async fieldStats(columns, scopeWhere) {\n return fieldStats(conn, columns, scopeWhere);\n },\n },\n lexical: {\n async query(terms, opts) {\n return queryLexical(conn, terms, opts, contentTokenize(cfg) === undefined);\n },\n },\n vectors: {\n async pending() {\n return pendingRows(conn);\n },\n async writeVectors(rows: VectorWriteRow[]) {\n await writeVectorBatch(conn, rows);\n },\n async candidates(qv, storeDims, fetch, allowed) {\n return scanCandidates(conn, qv, storeDims, fetch, allowed);\n },\n async similar(path, opts) {\n return scanSimilar(conn, path, opts);\n },\n async hasVector(path) {\n return hasVectorRow(conn, path);\n },\n },\n async engineStatus() {\n // Read back rather than recomputed: this is what open() actually set (3x the largest\n // recorded reconcile, floored at 30s, capped at 10min), not a value re-derived here.\n const row = db.prepare('PRAGMA busy_timeout').get() as { timeout: number };\n return { busy_timeout: `${row.timeout}ms (derived: 3x the largest reconcile this cache has recorded, floored at 30000ms)` };\n },\n raw: {\n async prepare(sql: string) {\n const stmt = db.prepare(sql);\n stmt.setReadBigInts(true); // int64 past 2^53 arrives as BigInt instead of throwing at step time\n return {\n columns: () => stmt.columns(),\n // sense sql streams through an async iterator wrapping the sync iterate().\n iterate: async function* (...params: unknown[]) {\n yield* stmt.iterate(...(params as Parameters<typeof stmt.iterate>));\n },\n };\n },\n },\n async close() {\n db.close();\n },\n };\n}\n"],"names":["CAPABILITIES","createStore","Set","db","conn","cfg","baseDir","name","capabilities","exec","sql","prepare","runBatch","paramRows","transaction","fn","withTransaction","reconcile","sqliteDialect","docs","columns","getColumns","fieldStats","scopeWhere","lexical","query","terms","opts","queryLexical","contentTokenize","undefined","vectors","pending","pendingRows","writeVectors","rows","writeVectorBatch","candidates","qv","storeDims","fetch","allowed","scanCandidates","similar","path","scanSimilar","hasVector","hasVectorRow","engineStatus","row","get","busy_timeout","timeout","raw","stmt","setReadBigInts","iterate","params","close"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/sqlite/store.ts"],"sourcesContent":["import type { DatabaseSync } from 'node:sqlite';\nimport type { Config } from '../../config/index.ts';\nimport { contentTokenize } from '../../config/index.ts';\nimport { getColumns } from '../shared.ts';\nimport { withTransaction } from '../transaction.ts';\nimport type { Capability, Connection, Statement, Store, VectorWriteRow } from '../types.ts';\nimport { hasVectorRow, pendingRows } from '../vectors.ts';\nimport { fieldStats } from './fieldStats.ts';\nimport { queryLexical } from './lexical.ts';\nimport { scanCandidates, scanSimilar, writeVectorBatch } from './vectors.ts';\n\nexport const CAPABILITIES: ReadonlySet<Capability> = new Set(['phrases', 'snippets', 'watch-concurrency', 'lexical', 'vectors', 'sql-functions']);\n\n// Wraps the synchronous DatabaseSync connection in the async Store interface, sharing one\n// Connection instance (conn) with the builder's own reconcile call so transaction depth is tracked against the same object everywhere.\nexport function createStore(db: DatabaseSync, conn: Connection, cfg: Config): Store {\n return {\n name: 'sqlite',\n capabilities: CAPABILITIES,\n async exec(sql: string): Promise<void> {\n await conn.exec(sql);\n },\n async prepare(sql: string): Promise<Statement> {\n return conn.prepare(sql);\n },\n async runBatch(sql: string, paramRows: unknown[][]): Promise<void> {\n await conn.runBatch(sql, paramRows);\n },\n async transaction<T>(fn: () => Promise<T>): Promise<T> {\n return withTransaction(conn, fn);\n },\n docs: {\n async columns() {\n return [...(await getColumns(conn))];\n },\n async fieldStats(columns, scopeWhere) {\n return fieldStats(conn, columns, scopeWhere);\n },\n },\n lexical: {\n async query(terms, opts) {\n return queryLexical(conn, terms, opts, contentTokenize(cfg) === undefined);\n },\n },\n vectors: {\n async pending() {\n return pendingRows(conn);\n },\n async writeVectors(rows: VectorWriteRow[]) {\n await writeVectorBatch(conn, rows);\n },\n async candidates(qv, storeDims, fetch, allowed) {\n return scanCandidates(conn, qv, storeDims, fetch, allowed);\n },\n async similar(path, opts) {\n return scanSimilar(conn, path, opts);\n },\n async hasVector(path) {\n return hasVectorRow(conn, path);\n },\n },\n async engineStatus() {\n // Read back rather than recomputed: this is what open() actually set (3x the largest\n // recorded reconcile, floored at 30s, capped at 10min), not a value re-derived here.\n const row = db.prepare('PRAGMA busy_timeout').get() as { timeout: number };\n return { busy_timeout: `${row.timeout}ms (derived: 3x the largest reconcile this cache has recorded, floored at 30000ms)` };\n },\n raw: {\n async prepare(sql: string) {\n const stmt = db.prepare(sql);\n stmt.setReadBigInts(true); // int64 past 2^53 arrives as BigInt instead of throwing at step time\n return {\n columns: () => stmt.columns(),\n // sense sql streams through an async iterator wrapping the sync iterate().\n iterate: async function* (...params: unknown[]) {\n yield* stmt.iterate(...(params as Parameters<typeof stmt.iterate>));\n },\n };\n },\n },\n async close() {\n db.close();\n },\n };\n}\n"],"names":["CAPABILITIES","createStore","Set","db","conn","cfg","name","capabilities","exec","sql","prepare","runBatch","paramRows","transaction","fn","withTransaction","docs","columns","getColumns","fieldStats","scopeWhere","lexical","query","terms","opts","queryLexical","contentTokenize","undefined","vectors","pending","pendingRows","writeVectors","rows","writeVectorBatch","candidates","qv","storeDims","fetch","allowed","scanCandidates","similar","path","scanSimilar","hasVector","hasVectorRow","engineStatus","row","get","busy_timeout","timeout","raw","stmt","setReadBigInts","iterate","params","close"],"mappings":";;;;;;;;;;;QAWaA;eAAAA;;QAIGC;eAAAA;;;uBAbgB;wBACL;6BACK;yBAEU;4BACf;yBACE;0BACiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvD,IAAMD,eAAwC,IAAIE,IAAI;IAAC;IAAW;IAAY;IAAqB;IAAW;IAAW;CAAgB;AAIzI,SAASD,YAAYE,EAAgB,EAAEC,IAAgB,EAAEC,GAAW;IACzE,OAAO;QACLC,MAAM;QACNC,cAAcP;QACRQ,MAAN,SAAMA,KAAKC,GAAW;;;;;4BACpB;;gCAAML,KAAKI,IAAI,CAACC;;;4BAAhB;;;;;;YACF;;QACMC,SAAN,SAAMA,QAAQD,GAAW;;;oBACvB;;wBAAOL,KAAKM,OAAO,CAACD;;;YACtB;;QACME,UAAN,SAAMA,SAASF,GAAW,EAAEG,SAAsB;;;;;4BAChD;;gCAAMR,KAAKO,QAAQ,CAACF,KAAKG;;;4BAAzB;;;;;;YACF;;QACMC,aAAN,SAAMA,YAAeC,EAAoB;;;oBACvC;;wBAAOC,IAAAA,8BAAe,EAACX,MAAMU;;;YAC/B;;QACAE,MAAM;YACEC,SAAN,SAAMA;;;;;gCACQ;;oCAAMC,IAAAA,oBAAU,EAACd;;;gCAA7B;;oCAAQ;wCAAI;;;;;gBACd;;YACMe,YAAN,SAAMA,WAAWF,OAAO,EAAEG,UAAU;;;wBAClC;;4BAAOD,IAAAA,wBAAU,EAACf,MAAMa,SAASG;;;gBACnC;;QACF;QACAC,SAAS;YACDC,OAAN,SAAMA,MAAMC,KAAK,EAAEC,IAAI;;;wBACrB;;4BAAOC,IAAAA,uBAAY,EAACrB,MAAMmB,OAAOC,MAAME,IAAAA,wBAAe,EAACrB,SAASsB;;;gBAClE;;QACF;QACAC,SAAS;YACDC,SAAN,SAAMA;;;wBACJ;;4BAAOC,IAAAA,sBAAW,EAAC1B;;;gBACrB;;YACM2B,cAAN,SAAMA,aAAaC,IAAsB;;;;;gCACvC;;oCAAMC,IAAAA,4BAAgB,EAAC7B,MAAM4B;;;gCAA7B;;;;;;gBACF;;YACME,YAAN,SAAMA,WAAWC,EAAE,EAAEC,SAAS,EAAEC,KAAK,EAAEC,OAAO;;;wBAC5C;;4BAAOC,IAAAA,0BAAc,EAACnC,MAAM+B,IAAIC,WAAWC,OAAOC;;;gBACpD;;YACME,SAAN,SAAMA,QAAQC,IAAI,EAAEjB,IAAI;;;wBACtB;;4BAAOkB,IAAAA,uBAAW,EAACtC,MAAMqC,MAAMjB;;;gBACjC;;YACMmB,WAAN,SAAMA,UAAUF,IAAI;;;wBAClB;;4BAAOG,IAAAA,uBAAY,EAACxC,MAAMqC;;;gBAC5B;;QACF;QACMI,cAAN,SAAMA;;oBAGEC;;oBAFN,qFAAqF;oBACrF,qFAAqF;oBAC/EA,MAAM3C,GAAGO,OAAO,CAAC,uBAAuBqC,GAAG;oBACjD;;wBAAO;4BAAEC,cAAc,AAAC,GAAc,OAAZF,IAAIG,OAAO,EAAC;wBAAoF;;;YAC5H;;QACAC,KAAK;YACGxC,SAAN,SAAMA,QAAQD,GAAW;;wBACjB0C;;wBAAAA,OAAOhD,GAAGO,OAAO,CAACD;wBACxB0C,KAAKC,cAAc,CAAC,OAAO,qEAAqE;wBAChG;;4BAAO;gCACLnC,SAAS,SAATA;2CAAekC,KAAKlC,OAAO;;gCAC3B,2EAA2E;gCAC3EoC,SAAS,SAATA;oCAA0B,IAAA,IAAA,OAAA,UAAA,QAAA,AAAGC,SAAH,UAAA,OAAA,OAAA,GAAA,OAAA,MAAA;wCAAGA,OAAH,QAAA,SAAA,CAAA,KAAoB;;;4CACrCH;;;;oDAAP;;mEAAA,0CAAOA,CAAAA,QAAAA,MAAKE,OAAO,OAAZF,OAAa,qBAAIG;;;oDAAxB;;;;;;oCACF;;4BACF;;;gBACF;;QACF;QACMC,OAAN,SAAMA;;;oBACJpD,GAAGoD,KAAK;;;;;YACV;;IACF;AACF"}
@@ -1,14 +1,9 @@
1
+ import type { Database } from '@tursodatabase/database';
1
2
  import type { ResolvedConfig } from '../../config/index.js';
2
- import type { Store } from '../types.js';
3
+ import type { OpenResult } from '../open.js';
4
+ import type { OpenDialect } from '../types.js';
3
5
  export declare const DB_FILENAME = "cache.turso.db";
4
- export declare const SCHEMA_VERSION = "3";
5
- export interface OpenResult {
6
- store: Store;
7
- cfg: ResolvedConfig;
8
- dbPath: string;
9
- parsed: number;
10
- warnings: string[];
11
- }
12
- export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=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')"];
13
- export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
6
+ export declare const SCHEMA_VERSION = "4";
7
+ export type { OpenResult };
8
+ export declare const tursoOpenDialect: OpenDialect<Database>;
14
9
  export declare function openTurso(cfg: ResolvedConfig): Promise<OpenResult>;
@@ -1,14 +1,9 @@
1
+ import type { Database } from '@tursodatabase/database';
1
2
  import type { ResolvedConfig } from '../../config/index.js';
2
- import type { Store } from '../types.js';
3
+ import type { OpenResult } from '../open.js';
4
+ import type { OpenDialect } from '../types.js';
3
5
  export declare const DB_FILENAME = "cache.turso.db";
4
- export declare const SCHEMA_VERSION = "3";
5
- export interface OpenResult {
6
- store: Store;
7
- cfg: ResolvedConfig;
8
- dbPath: string;
9
- parsed: number;
10
- warnings: string[];
11
- }
12
- export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=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')"];
13
- export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
6
+ export declare const SCHEMA_VERSION = "4";
7
+ export type { OpenResult };
8
+ export declare const tursoOpenDialect: OpenDialect<Database>;
14
9
  export declare function openTurso(cfg: ResolvedConfig): Promise<OpenResult>;
@@ -9,12 +9,6 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- get CONTENT_FTS_DDL () {
13
- return CONTENT_FTS_DDL;
14
- },
15
- get CONTENT_FTS_NAMES () {
16
- return CONTENT_FTS_NAMES;
17
- },
18
12
  get DB_FILENAME () {
19
13
  return DB_FILENAME;
20
14
  },
@@ -23,21 +17,20 @@ _export(exports, {
23
17
  },
24
18
  get openTurso () {
25
19
  return openTurso;
20
+ },
21
+ get tursoOpenDialect () {
22
+ return tursoOpenDialect;
26
23
  }
27
24
  });
28
- var _nodefs = require("node:fs");
29
- var _nodepath = require("node:path");
30
25
  var _indexts = require("../../config/index.js");
31
- var _handoffts = require("../../embed/handoff.js");
32
26
  var _typests = require("../../embed/types.js");
33
27
  var _errorsts = require("../../errors.js");
34
28
  var _indexts1 = require("../../features/index.js");
35
- var _cachets = require("../cache.js");
36
- var _reconcilets = require("../reconcile.js");
29
+ var _opents = require("../open.js");
37
30
  var _sharedts = require("../shared.js");
38
31
  var _connectionts = require("./connection.js");
39
32
  var _nativets = require("./native.js");
40
- var _reconcilets1 = require("./reconcile.js");
33
+ var _reconcilets = require("./reconcile.js");
41
34
  var _storets = require("./store.js");
42
35
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
43
36
  try {
@@ -171,16 +164,10 @@ function _ts_generator(thisArg, body) {
171
164
  }
172
165
  }
173
166
  var DB_FILENAME = 'cache.turso.db';
174
- var SCHEMA_VERSION = '3';
175
- var CONTENT_FTS_DDL = [
176
- "CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=1.0')",
177
- "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')"
178
- ];
179
- var CONTENT_FTS_NAMES = [
180
- 'content_fts',
181
- 'content_fts_ngram'
182
- ];
183
- function ensureSchema(conn, cfg) {
167
+ var SCHEMA_VERSION = '4';
168
+ // This store's Handle (types.ts's OpenDialect<Handle>) is the connected Database itself: no
169
+ // extra native state to thread, unlike duckdb's separate instance/connection pair.
170
+ function ensureSchema(_handle, conn, cfg) {
184
171
  return _async_to_generator(function() {
185
172
  var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, ddl, err, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, feature, err;
186
173
  return _ts_generator(this, function(_state) {
@@ -207,7 +194,7 @@ function ensureSchema(conn, cfg) {
207
194
  9,
208
195
  10
209
196
  ]);
210
- _iterator = CONTENT_FTS_DDL[Symbol.iterator]();
197
+ _iterator = _reconcilets.CONTENT_FTS_DDL[Symbol.iterator]();
211
198
  _state.label = 4;
212
199
  case 4:
213
200
  if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
@@ -380,45 +367,74 @@ function ensureSchema(conn, cfg) {
380
367
  });
381
368
  })();
382
369
  }
383
- function connect(cfg) {
370
+ function close(handle) {
384
371
  return _async_to_generator(function() {
385
- var stateDir, dbPath, turso, err, db, err1, closed, _ref, conn, version, features, wantFeatures, reason, recordedMaxMs, _ref1, parsed, warnings, err2;
386
372
  return _ts_generator(this, function(_state) {
387
373
  switch(_state.label){
388
374
  case 0:
389
- stateDir = (0, _nodepath.join)(cfg.baseDir, _indexts.STATE_DIR);
390
- (0, _nodefs.mkdirSync)(stateDir, {
391
- recursive: true
392
- });
393
- dbPath = (0, _nodepath.join)(stateDir, DB_FILENAME);
394
- _state.label = 1;
375
+ return [
376
+ 4,
377
+ handle.close()
378
+ ];
395
379
  case 1:
380
+ _state.sent();
381
+ return [
382
+ 2
383
+ ];
384
+ }
385
+ });
386
+ })();
387
+ }
388
+ function setDerivedBusyTimeout(_handle, conn, ms) {
389
+ return _async_to_generator(function() {
390
+ return _ts_generator(this, function(_state) {
391
+ switch(_state.label){
392
+ case 0:
393
+ return [
394
+ 4,
395
+ conn.exec("PRAGMA busy_timeout = ".concat(ms))
396
+ ];
397
+ case 1:
398
+ _state.sent();
399
+ return [
400
+ 2
401
+ ];
402
+ }
403
+ });
404
+ })();
405
+ }
406
+ function connect(dbPath, _cfg) {
407
+ return _async_to_generator(function() {
408
+ var turso, err, db, err1;
409
+ return _ts_generator(this, function(_state) {
410
+ switch(_state.label){
411
+ case 0:
396
412
  _state.trys.push([
397
- 1,
398
- 3,
413
+ 0,
414
+ 2,
399
415
  ,
400
- 4
416
+ 3
401
417
  ]);
402
418
  return [
403
419
  4,
404
420
  (0, _nativets.tursoApi)()
405
421
  ];
406
- case 2:
422
+ case 1:
407
423
  turso = _state.sent();
408
424
  return [
409
425
  3,
410
- 4
426
+ 3
411
427
  ];
412
- case 3:
428
+ case 2:
413
429
  err = _state.sent();
414
430
  if (_instanceof(err, _errorsts.SenseError)) throw err;
415
431
  throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "turso" needs the '.concat(_nativets.TURSO_PACKAGE, " package (").concat(err.message, ")"));
416
- case 4:
432
+ case 3:
417
433
  _state.trys.push([
418
- 4,
419
- 6,
434
+ 3,
435
+ 5,
420
436
  ,
421
- 7
437
+ 6
422
438
  ]);
423
439
  return [
424
440
  4,
@@ -429,156 +445,48 @@ function connect(cfg) {
429
445
  ]
430
446
  })
431
447
  ];
432
- case 5:
448
+ case 4:
433
449
  // Floored at the same 30s sqlite opens with. `timeout` is connect-time only in this client;
434
450
  // the derived value is set via runtime PRAGMA below. `index_method` is required for ensureSchema()'s FTS indexes (T1).
435
451
  db = _state.sent();
436
452
  return [
437
453
  3,
438
- 7
454
+ 6
439
455
  ];
440
- case 6:
456
+ case 5:
441
457
  err1 = _state.sent();
442
458
  throw new _errorsts.SenseError('STORE_DEPENDENCY_MISSING', 'store "turso" failed to open '.concat(dbPath, ": ").concat(err1.message));
443
- case 7:
444
- // A throw below must release this handle, or the leaked WAL makes the db file undeletable on
445
- // Windows. closed guards the catch against double-closing.
446
- closed = false;
447
- _state.label = 8;
448
- case 8:
449
- _state.trys.push([
450
- 8,
451
- 18,
452
- ,
453
- 21
454
- ]);
455
- conn = (0, _connectionts.createConnection)(db);
456
- return [
457
- 4,
458
- conn.exec('CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT)')
459
- ];
460
- case 9:
461
- _state.sent();
462
- return [
463
- 4,
464
- (0, _sharedts.getMeta)(conn, 'schema_version')
465
- ];
466
- case 10:
467
- version = _state.sent();
468
- return [
469
- 4,
470
- (0, _sharedts.getMeta)(conn, 'features')
471
- ];
472
- case 11:
473
- features = _state.sent();
474
- wantFeatures = (0, _indexts.featureSignature)(cfg, _indexts1.FEATURES);
475
- if (!(version !== null && version !== SCHEMA_VERSION || features !== null && features !== wantFeatures)) return [
476
- 3,
477
- 13
478
- ];
479
- // Reconcile only reparses changed files, so a stale cache is rebuilt rather than patched
480
- // incrementally. No tokenize-only or embed-identity-adopted partial path: any mismatch rebuilds.
481
- reason = version !== null && version !== SCHEMA_VERSION ? 'cache format changed (new sensemaking version)' : 'config change (features, tokenizer, or presets)';
482
- console.error("sense: ".concat(reason, "; rebuilding the index"));
483
- closed = true;
484
- return [
485
- 4,
486
- db.close()
487
- ];
488
- case 12:
489
- _state.sent();
490
- (0, _cachets.clearCache)(cfg);
491
- return [
492
- 2,
493
- connect(cfg)
494
- ];
495
- case 13:
496
- return [
497
- 4,
498
- ensureSchema(conn, cfg)
499
- ];
500
- case 14:
501
- _state.sent();
502
- return [
503
- 4,
504
- (0, _sharedts.getMeta)(conn, 'reconcile_max_ms')
505
- ];
506
- case 15:
507
- recordedMaxMs = Number.apply(void 0, [
508
- (_ref = _state.sent()) !== null && _ref !== void 0 ? _ref : '0'
509
- ]);
510
- return [
511
- 4,
512
- conn.exec("PRAGMA busy_timeout = ".concat(Math.min(Math.max(30000, 3 * recordedMaxMs), 600000)))
513
- ];
514
- case 16:
515
- _state.sent();
516
- return [
517
- 4,
518
- (0, _reconcilets.reconcile)(conn, cfg, cfg.baseDir, _reconcilets1.tursoDialect)
519
- ];
520
- case 17:
521
- _ref1 = _state.sent(), parsed = _ref1.parsed, warnings = _ref1.warnings;
459
+ case 6:
522
460
  return [
523
461
  2,
524
462
  {
525
- db: db,
526
- conn: conn,
527
- cfg: cfg,
528
- dbPath: dbPath,
529
- parsed: parsed,
530
- warnings: warnings
463
+ handle: db,
464
+ conn: (0, _connectionts.createConnection)(db)
531
465
  }
532
466
  ];
533
- case 18:
534
- err2 = _state.sent();
535
- if (!!closed) return [
536
- 3,
537
- 20
538
- ];
539
- return [
540
- 4,
541
- db.close()
542
- ];
543
- case 19:
544
- _state.sent();
545
- _state.label = 20;
546
- case 20:
547
- throw err2;
548
- case 21:
549
- return [
550
- 2
551
- ];
552
467
  }
553
468
  });
554
469
  })();
555
470
  }
471
+ var tursoOpenDialect = {
472
+ filename: DB_FILENAME,
473
+ schemaVersion: SCHEMA_VERSION,
474
+ reconcileDialect: _reconcilets.tursoDialect,
475
+ connect: connect,
476
+ close: close,
477
+ ensureSchema: ensureSchema,
478
+ setDerivedBusyTimeout: setDerivedBusyTimeout,
479
+ createStore: function createStore(handle, conn) {
480
+ return (0, _storets.createStore)(handle, conn);
481
+ }
482
+ };
556
483
  function openTurso(cfg) {
557
484
  return _async_to_generator(function() {
558
- var _ref, db, conn, resolvedCfg, dbPath, parsed, warnings, store;
559
485
  return _ts_generator(this, function(_state) {
560
- switch(_state.label){
561
- case 0:
562
- return [
563
- 4,
564
- connect(cfg)
565
- ];
566
- case 1:
567
- _ref = _state.sent(), db = _ref.db, conn = _ref.conn, resolvedCfg = _ref.cfg, dbPath = _ref.dbPath, parsed = _ref.parsed, warnings = _ref.warnings;
568
- store = (0, _storets.createStore)(db, conn, resolvedCfg, resolvedCfg.baseDir);
569
- // reconcile ran before this object existed, so its chunk text is keyed by the connection.
570
- (0, _handoffts.rekeyChunkText)(conn, store);
571
- return [
572
- 2,
573
- {
574
- store: store,
575
- cfg: resolvedCfg,
576
- dbPath: dbPath,
577
- parsed: parsed,
578
- warnings: warnings
579
- }
580
- ];
581
- }
486
+ return [
487
+ 2,
488
+ (0, _opents.openWithDialect)(cfg, tursoOpenDialect)
489
+ ];
582
490
  });
583
491
  })();
584
492
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/turso/open.ts"],"sourcesContent":["import { mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Database } from '@tursodatabase/database';\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 { reconcile } from '../reconcile.ts';\nimport { getMeta, setMeta } from '../shared.ts';\nimport type { Connection, Store } from '../types.ts';\nimport { createConnection } from './connection.ts';\nimport { TURSO_PACKAGE, tursoApi } from './native.ts';\nimport { 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 = '3';\n\nexport interface OpenResult {\n store: Store;\n cfg: ResolvedConfig;\n dbPath: string;\n parsed: number;\n warnings: string[];\n}\n\n// The ngram index is scoped to disjoint \"_ngram\" sidecar columns: a second index over the same\n// columns makes a bare substring match a whole word, defeating the prefix-query rejection.\n// The two FTS indexes, named here because reconcile drops and rebuilds them around a bulk load:\n// Tantivy maintains them per inserted row, which is quadratic in what is already indexed.\nexport const CONTENT_FTS_DDL = [\n `CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=1.0')`,\n `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')`,\n] as const;\nexport const CONTENT_FTS_NAMES = ['content_fts', 'content_fts_ngram'] as const;\n\nasync function ensureSchema(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_ngram TEXT, summary_ngram TEXT, text_ngram TEXT)`);\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\ninterface ConnectResult {\n db: Database;\n conn: Connection;\n cfg: ResolvedConfig;\n dbPath: string;\n parsed: number;\n warnings: string[];\n}\n\nasync function connect(cfg: ResolvedConfig): Promise<ConnectResult> {\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: 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 // Floored at the same 30s sqlite opens with. `timeout` is connect-time only in this client;\n // the derived value is set via runtime PRAGMA below. `index_method` is required for ensureSchema()'s FTS indexes (T1).\n db = await turso.connect(dbPath, { timeout: 30_000, experimental: ['index_method'] });\n } catch (err) {\n throw new SenseError('STORE_DEPENDENCY_MISSING', `store \"turso\" failed to open ${dbPath}: ${(err as Error).message}`);\n }\n // A throw below must release this handle, or the leaked WAL makes the db file undeletable on\n // Windows. closed guards the catch against double-closing.\n let closed = false;\n try {\n const conn = createConnection(db);\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 is rebuilt rather than patched\n // incrementally. No tokenize-only or embed-identity-adopted partial path: any mismatch rebuilds.\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 closed = true;\n await db.close();\n clearCache(cfg);\n return connect(cfg);\n }\n\n await ensureSchema(conn, cfg);\n\n // 3x the largest reconcile this cache has recorded, floored at 30s and capped at 10min.\n // Installed before reconcile() -- that call is the one that races a watcher's transaction.\n const recordedMaxMs = Number((await getMeta(conn, 'reconcile_max_ms')) ?? '0');\n await conn.exec(`PRAGMA busy_timeout = ${Math.min(Math.max(30000, 3 * recordedMaxMs), 600_000)}`);\n\n const { parsed, warnings } = await reconcile(conn, cfg, cfg.baseDir, tursoDialect);\n\n return { db, conn, cfg, dbPath, parsed, warnings };\n } catch (err) {\n if (!closed) await db.close();\n throw err;\n }\n}\n\n// The turso store's open: connects (fully async, see connect() above), then wraps the resulting\n// connection in the Store interface.\nexport async function openTurso(cfg: ResolvedConfig): Promise<OpenResult> {\n const { db, conn, cfg: resolvedCfg, dbPath, parsed, warnings } = await connect(cfg);\n const store = createStore(db, 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":["CONTENT_FTS_DDL","CONTENT_FTS_NAMES","DB_FILENAME","SCHEMA_VERSION","openTurso","ensureSchema","conn","cfg","ddl","feature","exec","activeFeatures","name","STORE_DIMS","schema","getMeta","setMeta","featureSignature","FEATURES","connect","stateDir","dbPath","turso","err","db","closed","version","features","wantFeatures","reason","recordedMaxMs","parsed","warnings","join","baseDir","STATE_DIR","mkdirSync","recursive","tursoApi","SenseError","TURSO_PACKAGE","message","timeout","experimental","createConnection","console","error","close","clearCache","Number","Math","min","max","reconcile","tursoDialect","resolvedCfg","store","createStore","rekeyChunkText"],"mappings":"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"}
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 { createConnection } from './connection.ts';\nimport { 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 = '4';\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_ngram TEXT, summary_ngram TEXT, text_ngram TEXT)`);\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): Promise<void> {\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): 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 // Floored at the same 30s sqlite opens with. `timeout` is connect-time only in this client;\n // the derived value is set via runtime PRAGMA below. `index_method` is required for ensureSchema()'s FTS indexes (T1).\n db = await turso.connect(dbPath, { timeout: 30_000, experimental: ['index_method'] });\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 ensureSchema,\n setDerivedBusyTimeout,\n createStore: (handle, conn) => createStore(handle, conn),\n};\n\nexport async function openTurso(cfg: ResolvedConfig): Promise<OpenResult> {\n return openWithDialect(cfg, tursoOpenDialect);\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","setDerivedBusyTimeout","ms","connect","dbPath","_cfg","turso","err","db","tursoApi","SenseError","TURSO_PACKAGE","message","timeout","experimental","createConnection","filename","schemaVersion","reconcileDialect","tursoDialect","createStore","openWithDialect"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  import type { ReconcileDialect } from '../types.js';
2
+ export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=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')"];
3
+ export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
2
4
  export declare const FTS_REBUILD_THRESHOLD = 250;
3
5
  export declare const tursoDialect: ReconcileDialect;
@@ -1,3 +1,5 @@
1
1
  import type { ReconcileDialect } from '../types.js';
2
+ export declare const CONTENT_FTS_DDL: readonly ["CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=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')"];
3
+ export declare const CONTENT_FTS_NAMES: readonly ["content_fts", "content_fts_ngram"];
2
4
  export declare const FTS_REBUILD_THRESHOLD = 250;
3
5
  export declare const tursoDialect: ReconcileDialect;
@@ -9,6 +9,12 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get CONTENT_FTS_DDL () {
13
+ return CONTENT_FTS_DDL;
14
+ },
15
+ get CONTENT_FTS_NAMES () {
16
+ return CONTENT_FTS_NAMES;
17
+ },
12
18
  get FTS_REBUILD_THRESHOLD () {
13
19
  return FTS_REBUILD_THRESHOLD;
14
20
  },
@@ -20,7 +26,6 @@ var _errorsts = require("../../errors.js");
20
26
  var _segmentts = require("../../text/segment.js");
21
27
  var _sharedts = require("../shared.js");
22
28
  var _transactionts = require("../transaction.js");
23
- var _opents = require("./open.js");
24
29
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
25
30
  try {
26
31
  var info = gen[key](arg);
@@ -146,8 +151,14 @@ function _ts_generator(thisArg, body) {
146
151
  };
147
152
  }
148
153
  }
149
- // This store's dialect (types.ts's ReconcileDialect) for the shared orchestration in
150
- // store/reconcile.ts. content is a plain table with "_ngram" sidecars for lexical.ts.
154
+ var CONTENT_FTS_DDL = [
155
+ "CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=1.0')",
156
+ "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')"
157
+ ];
158
+ var CONTENT_FTS_NAMES = [
159
+ 'content_fts',
160
+ 'content_fts_ngram'
161
+ ];
151
162
  // '' when the field has no unspaced-script run (the common case), so the ngram index carries
152
163
  // nothing for it -- same "pay for nothing when absent" shape as sqlite's segmentField sidecars.
153
164
  function ngramSidecar(text) {
@@ -194,7 +205,7 @@ function reconcileContent(conn, touched, docs, delta) {
194
205
  7,
195
206
  8
196
207
  ]);
197
- _iterator = _opents.CONTENT_FTS_NAMES[Symbol.iterator]();
208
+ _iterator = CONTENT_FTS_NAMES[Symbol.iterator]();
198
209
  _state.label = 2;
199
210
  case 2:
200
211
  if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
@@ -283,7 +294,7 @@ function reconcileContent(conn, touched, docs, delta) {
283
294
  19,
284
295
  20
285
296
  ]);
286
- _iterator1 = _opents.CONTENT_FTS_DDL[Symbol.iterator]();
297
+ _iterator1 = CONTENT_FTS_DDL[Symbol.iterator]();
287
298
  _state.label = 14;
288
299
  case 14:
289
300
  if (!!(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done)) return [
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/turso/reconcile.ts"],"sourcesContent":["import { SenseError } from '../../errors.ts';\nimport type { ReconcileDelta } from '../../features/types.ts';\nimport type { ParsedDoc } from '../../scan/index.ts';\nimport { hasUnspacedRun } from '../../text/segment.ts';\nimport { recordReconcileDuration } from '../shared.ts';\nimport { BEGIN_WRITE } from '../transaction.ts';\nimport type { Connection, ReconcileDialect } from '../types.ts';\nimport { CONTENT_FTS_DDL, CONTENT_FTS_NAMES } from './open.ts';\n\n// This store's dialect (types.ts's ReconcileDialect) for the shared orchestration in\n// store/reconcile.ts. content is a plain table with \"_ngram\" sidecars for lexical.ts.\n\n// '' when the field has no unspaced-script run (the common case), so the ngram index carries\n// nothing for it -- same \"pay for nothing when absent\" shape as sqlite's segmentField sidecars.\nfunction ngramSidecar(text: string): string {\n return hasUnspacedRun(text) ? text : '';\n}\n\n// Not a compile-time cap on ALTER TABLE ADD COLUMN (spike-measured: turso accepts 10,000 with\n// no error); the real fence is a SELECT projecting more than this many result columns, which fails to prepare.\nconst MAX_FRONTMATTER_COLUMNS = 2000;\n\n// Changed files above which rebuilding the FTS index beats maintaining it per row. Measured\n// 2026-08-30; the derivation and its bounds are pinned in this file's spec.\nexport const FTS_REBUILD_THRESHOLD = 250;\n\n// No rowid coupling (unlike sqlite's FTS5 content): `path` is content's own primary key.\nconst INSERT_CONTENT_SQL = `INSERT INTO content (\"path\", title, summary, text, title_ngram, summary_ngram, text_ngram) VALUES (?, ?, ?, ?, ?, ?, ?)`;\n\nfunction contentRow(doc: ParsedDoc): unknown[] {\n const { title, summary, text } = doc.search;\n return [doc.relPath, title, summary, text, ngramSidecar(title), ngramSidecar(summary), ngramSidecar(text)];\n}\n\nasync function reconcileContent(conn: Connection, touched: string[], docs: ParsedDoc[], delta: ReconcileDelta): Promise<void> {\n const churn = delta.reparsed.length + delta.vanished.length;\n\n // Tantivy indexes per inserted row at a cost that grows with the batch, so a large insert is\n // superlinear and a rebuild wins past the threshold.\n const bulk = delta.files.length === 0 || churn > FTS_REBUILD_THRESHOLD;\n if (bulk) for (const name of CONTENT_FTS_NAMES) await conn.exec(`DROP INDEX IF EXISTS ${name}`);\n\n // content is a plain table keyed by its own path (no rowid subquery, unlike sqlite's FTS5\n // content), so vanished and reparsed docs delete in one pass.\n if (touched.length > 0)\n await conn.runBatch(\n 'DELETE FROM content WHERE \"path\" = ?',\n touched.map((p) => [p])\n );\n if (docs.length > 0) await conn.runBatch(INSERT_CONTENT_SQL, docs.map(contentRow));\n if (bulk) for (const ddl of CONTENT_FTS_DDL) await conn.exec(ddl);\n}\n\nexport const tursoDialect: ReconcileDialect = {\n beginMode: () => BEGIN_WRITE,\n checkColumnLimit(count) {\n if (count > MAX_FRONTMATTER_COLUMNS) {\n throw new SenseError(\n 'COLUMN_LIMIT',\n `frontmatter would need ${count} columns, crossing turso's SELECT result-set column limit (${MAX_FRONTMATTER_COLUMNS}; ALTER TABLE ADD COLUMN itself accepts far more, but a query projecting past this many columns fails to prepare). Narrow the presets' include globs so fewer/other files are indexed, or fix whatever is generating unbounded frontmatter keys.`\n );\n }\n },\n columnTypeSuffix: () => '',\n reconcileContent,\n recordDuration: recordReconcileDuration,\n};\n"],"names":["FTS_REBUILD_THRESHOLD","tursoDialect","ngramSidecar","text","hasUnspacedRun","MAX_FRONTMATTER_COLUMNS","INSERT_CONTENT_SQL","contentRow","doc","search","title","summary","relPath","reconcileContent","conn","touched","docs","delta","churn","bulk","name","ddl","reparsed","length","vanished","files","CONTENT_FTS_NAMES","exec","runBatch","map","p","CONTENT_FTS_DDL","beginMode","BEGIN_WRITE","checkColumnLimit","count","SenseError","columnTypeSuffix","recordDuration","recordReconcileDuration"],"mappings":";;;;;;;;;;;QAwBaA;eAAAA;;QA6BAC;eAAAA;;;wBArDc;yBAGI;wBACS;6BACZ;sBAEuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnD,qFAAqF;AACrF,sFAAsF;AAEtF,6FAA6F;AAC7F,gGAAgG;AAChG,SAASC,aAAaC,IAAY;IAChC,OAAOC,IAAAA,yBAAc,EAACD,QAAQA,OAAO;AACvC;AAEA,8FAA8F;AAC9F,+GAA+G;AAC/G,IAAME,0BAA0B;AAIzB,IAAML,wBAAwB;AAErC,yFAAyF;AACzF,IAAMM,qBAAqB;AAE3B,SAASC,WAAWC,GAAc;IAChC,IAAiCA,cAAAA,IAAIC,MAAM,EAAnCC,QAAyBF,YAAzBE,OAAOC,UAAkBH,YAAlBG,SAASR,OAASK,YAATL;IACxB,OAAO;QAACK,IAAII,OAAO;QAAEF;QAAOC;QAASR;QAAMD,aAAaQ;QAAQR,aAAaS;QAAUT,aAAaC;KAAM;AAC5G;AAEA,SAAeU,iBAAiBC,IAAgB,EAAEC,OAAiB,EAAEC,IAAiB,EAAEC,KAAqB;;YACrGC,OAIAC,MACS,2BAAA,mBAAA,gBAAA,WAAA,OAAMC,WAUN,4BAAA,oBAAA,iBAAA,YAAA,QAAMC;;;;oBAffH,QAAQD,MAAMK,QAAQ,CAACC,MAAM,GAAGN,MAAMO,QAAQ,CAACD,MAAM;oBAE3D,6FAA6F;oBAC7F,qDAAqD;oBAC/CJ,OAAOF,MAAMQ,KAAK,CAACF,MAAM,KAAK,KAAKL,QAAQlB;oBAClC,kCAAA,2BAAA;yBAAXmB,MAAAA;;;;;;;;;;;;oBAAW,YAAcO,yBAAiB;;;2BAA/B,6BAAA,QAAA;;;;oBAAMN,OAAN;oBAAiC;;wBAAMN,KAAKa,IAAI,CAAC,AAAC,wBAA4B,OAALP;;;oBAAxC;;;oBAAjC;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;yBAIXL,CAAAA,QAAQQ,MAAM,GAAG,CAAA,GAAjBR;;;;oBACF;;wBAAMD,KAAKc,QAAQ,CACjB,wCACAb,QAAQc,GAAG,CAAC,SAACC;mCAAM;gCAACA;6BAAE;;;;oBAFxB;;;yBAIEd,CAAAA,KAAKO,MAAM,GAAG,CAAA,GAAdP;;;;oBAAiB;;wBAAMF,KAAKc,QAAQ,CAACtB,oBAAoBU,KAAKa,GAAG,CAACtB;;;oBAAjD;;;oBACN,mCAAA,4BAAA;yBAAXY,MAAAA;;;;;;;;;;;;oBAAW,aAAaY,uBAAe;;;2BAA5B,8BAAA,SAAA;;;;oBAAMV,MAAN;oBAA8B;;wBAAMP,KAAKa,IAAI,CAACN;;;oBAAhB;;;oBAA9B;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,8BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;;;;;;IACjB;;AAEO,IAAMpB,eAAiC;IAC5C+B,WAAW,SAAXA;eAAiBC,0BAAW;;IAC5BC,kBAAAA,SAAAA,iBAAiBC,KAAK;QACpB,IAAIA,QAAQ9B,yBAAyB;YACnC,MAAM,IAAI+B,oBAAU,CAClB,gBACA,AAAC,0BAA4F/B,OAAnE8B,OAAM,+DAAqF,OAAxB9B,yBAAwB;QAEzH;IACF;IACAgC,kBAAkB,SAAlBA;eAAwB;;IACxBxB,kBAAAA;IACAyB,gBAAgBC,iCAAuB;AACzC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/store/turso/reconcile.ts"],"sourcesContent":["import { SenseError } from '../../errors.ts';\nimport type { ReconcileDelta } from '../../features/types.ts';\nimport type { ParsedDoc } from '../../scan/index.ts';\nimport { hasUnspacedRun } from '../../text/segment.ts';\nimport { recordReconcileDuration } from '../shared.ts';\nimport { BEGIN_WRITE } from '../transaction.ts';\nimport type { Connection, ReconcileDialect } from '../types.ts';\n\n// This store's dialect (types.ts's ReconcileDialect) for the shared orchestration in\n// store/reconcile.ts. content is a plain table with \"_ngram\" sidecars for lexical.ts.\n\n// The ngram index is scoped to disjoint \"_ngram\" sidecar columns: a second index over the same\n// columns makes a bare substring match a whole word, defeating the prefix-query rejection.\n// The two FTS indexes, named here (not open.ts) because reconcile drops and rebuilds them around\n// a bulk load: Tantivy maintains them per inserted row, which is quadratic in what is already indexed.\nexport const CONTENT_FTS_DDL = [\n `CREATE INDEX IF NOT EXISTS content_fts ON content USING fts (title, summary, text) WITH (weights = 'title=10.0,summary=5.0,text=1.0')`,\n `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')`,\n] as const;\nexport const CONTENT_FTS_NAMES = ['content_fts', 'content_fts_ngram'] as const;\n\n// '' when the field has no unspaced-script run (the common case), so the ngram index carries\n// nothing for it -- same \"pay for nothing when absent\" shape as sqlite's segmentField sidecars.\nfunction ngramSidecar(text: string): string {\n return hasUnspacedRun(text) ? text : '';\n}\n\n// Not a compile-time cap on ALTER TABLE ADD COLUMN (spike-measured: turso accepts 10,000 with\n// no error); the real fence is a SELECT projecting more than this many result columns, which fails to prepare.\nconst MAX_FRONTMATTER_COLUMNS = 2000;\n\n// Changed files above which rebuilding the FTS index beats maintaining it per row. Measured\n// 2026-08-30; the derivation and its bounds are pinned in this file's spec.\nexport const FTS_REBUILD_THRESHOLD = 250;\n\n// No rowid coupling (unlike sqlite's FTS5 content): `path` is content's own primary key.\nconst INSERT_CONTENT_SQL = `INSERT INTO content (\"path\", title, summary, text, title_ngram, summary_ngram, text_ngram) VALUES (?, ?, ?, ?, ?, ?, ?)`;\n\nfunction contentRow(doc: ParsedDoc): unknown[] {\n const { title, summary, text } = doc.search;\n return [doc.relPath, title, summary, text, ngramSidecar(title), ngramSidecar(summary), ngramSidecar(text)];\n}\n\nasync function reconcileContent(conn: Connection, touched: string[], docs: ParsedDoc[], delta: ReconcileDelta): Promise<void> {\n const churn = delta.reparsed.length + delta.vanished.length;\n\n // Tantivy indexes per inserted row at a cost that grows with the batch, so a large insert is\n // superlinear and a rebuild wins past the threshold.\n const bulk = delta.files.length === 0 || churn > FTS_REBUILD_THRESHOLD;\n if (bulk) for (const name of CONTENT_FTS_NAMES) await conn.exec(`DROP INDEX IF EXISTS ${name}`);\n\n // content is a plain table keyed by its own path (no rowid subquery, unlike sqlite's FTS5\n // content), so vanished and reparsed docs delete in one pass.\n if (touched.length > 0)\n await conn.runBatch(\n 'DELETE FROM content WHERE \"path\" = ?',\n touched.map((p) => [p])\n );\n if (docs.length > 0) await conn.runBatch(INSERT_CONTENT_SQL, docs.map(contentRow));\n if (bulk) for (const ddl of CONTENT_FTS_DDL) await conn.exec(ddl);\n}\n\nexport const tursoDialect: ReconcileDialect = {\n beginMode: () => BEGIN_WRITE,\n checkColumnLimit(count) {\n if (count > MAX_FRONTMATTER_COLUMNS) {\n throw new SenseError(\n 'COLUMN_LIMIT',\n `frontmatter would need ${count} columns, crossing turso's SELECT result-set column limit (${MAX_FRONTMATTER_COLUMNS}; ALTER TABLE ADD COLUMN itself accepts far more, but a query projecting past this many columns fails to prepare). Narrow the presets' include globs so fewer/other files are indexed, or fix whatever is generating unbounded frontmatter keys.`\n );\n }\n },\n columnTypeSuffix: () => '',\n reconcileContent,\n recordDuration: recordReconcileDuration,\n};\n"],"names":["CONTENT_FTS_DDL","CONTENT_FTS_NAMES","FTS_REBUILD_THRESHOLD","tursoDialect","ngramSidecar","text","hasUnspacedRun","MAX_FRONTMATTER_COLUMNS","INSERT_CONTENT_SQL","contentRow","doc","search","title","summary","relPath","reconcileContent","conn","touched","docs","delta","churn","bulk","name","ddl","reparsed","length","vanished","files","exec","runBatch","map","p","beginMode","BEGIN_WRITE","checkColumnLimit","count","SenseError","columnTypeSuffix","recordDuration","recordReconcileDuration"],"mappings":";;;;;;;;;;;QAeaA;eAAAA;;QAIAC;eAAAA;;QAcAC;eAAAA;;QA6BAC;eAAAA;;;wBA9Dc;yBAGI;wBACS;6BACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUrB,IAAMH,kBAAkB;IAC7B;IACA;CACD;AACM,IAAMC,oBAAoB;IAAC;IAAe;CAAoB;AAErE,6FAA6F;AAC7F,gGAAgG;AAChG,SAASG,aAAaC,IAAY;IAChC,OAAOC,IAAAA,yBAAc,EAACD,QAAQA,OAAO;AACvC;AAEA,8FAA8F;AAC9F,+GAA+G;AAC/G,IAAME,0BAA0B;AAIzB,IAAML,wBAAwB;AAErC,yFAAyF;AACzF,IAAMM,qBAAqB;AAE3B,SAASC,WAAWC,GAAc;IAChC,IAAiCA,cAAAA,IAAIC,MAAM,EAAnCC,QAAyBF,YAAzBE,OAAOC,UAAkBH,YAAlBG,SAASR,OAASK,YAATL;IACxB,OAAO;QAACK,IAAII,OAAO;QAAEF;QAAOC;QAASR;QAAMD,aAAaQ;QAAQR,aAAaS;QAAUT,aAAaC;KAAM;AAC5G;AAEA,SAAeU,iBAAiBC,IAAgB,EAAEC,OAAiB,EAAEC,IAAiB,EAAEC,KAAqB;;YACrGC,OAIAC,MACS,2BAAA,mBAAA,gBAAA,WAAA,OAAMC,WAUN,4BAAA,oBAAA,iBAAA,YAAA,QAAMC;;;;oBAffH,QAAQD,MAAMK,QAAQ,CAACC,MAAM,GAAGN,MAAMO,QAAQ,CAACD,MAAM;oBAE3D,6FAA6F;oBAC7F,qDAAqD;oBAC/CJ,OAAOF,MAAMQ,KAAK,CAACF,MAAM,KAAK,KAAKL,QAAQlB;oBAClC,kCAAA,2BAAA;yBAAXmB,MAAAA;;;;;;;;;;;;oBAAW,YAAcpB;;;2BAAd,6BAAA,QAAA;;;;oBAAMqB,OAAN;oBAAiC;;wBAAMN,KAAKY,IAAI,CAAC,AAAC,wBAA4B,OAALN;;;oBAAxC;;;oBAAjC;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;yBAIXL,CAAAA,QAAQQ,MAAM,GAAG,CAAA,GAAjBR;;;;oBACF;;wBAAMD,KAAKa,QAAQ,CACjB,wCACAZ,QAAQa,GAAG,CAAC,SAACC;mCAAM;gCAACA;6BAAE;;;;oBAFxB;;;yBAIEb,CAAAA,KAAKO,MAAM,GAAG,CAAA,GAAdP;;;;oBAAiB;;wBAAMF,KAAKa,QAAQ,CAACrB,oBAAoBU,KAAKY,GAAG,CAACrB;;;oBAAjD;;;oBACN,mCAAA,4BAAA;yBAAXY,MAAAA;;;;;;;;;;;;oBAAW,aAAarB;;;2BAAb,8BAAA,SAAA;;;;oBAAMuB,MAAN;oBAA8B;;wBAAMP,KAAKY,IAAI,CAACL;;;oBAAhB;;;oBAA9B;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,8BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;;;;;;IACjB;;AAEO,IAAMpB,eAAiC;IAC5C6B,WAAW,SAAXA;eAAiBC,0BAAW;;IAC5BC,kBAAAA,SAAAA,iBAAiBC,KAAK;QACpB,IAAIA,QAAQ5B,yBAAyB;YACnC,MAAM,IAAI6B,oBAAU,CAClB,gBACA,AAAC,0BAA4F7B,OAAnE4B,OAAM,+DAAqF,OAAxB5B,yBAAwB;QAEzH;IACF;IACA8B,kBAAkB,SAAlBA;eAAwB;;IACxBtB,kBAAAA;IACAuB,gBAAgBC,iCAAuB;AACzC"}
@@ -1,5 +1,4 @@
1
1
  import type { Database } from '@tursodatabase/database';
2
- import type { Config } from '../../config/index.js';
3
2
  import type { Capability, Connection, Store } from '../types.js';
4
3
  export declare const CAPABILITIES: ReadonlySet<Capability>;
5
- export declare function createStore(db: Database, conn: Connection, cfg: Config, baseDir: string): Store;
4
+ export declare function createStore(db: Database, conn: Connection): Store;
@@ -1,5 +1,4 @@
1
1
  import type { Database } from '@tursodatabase/database';
2
- import type { Config } from '../../config/index.js';
3
2
  import type { Capability, Connection, Store } from '../types.js';
4
3
  export declare const CAPABILITIES: ReadonlySet<Capability>;
5
- export declare function createStore(db: Database, conn: Connection, cfg: Config, baseDir: string): Store;
4
+ export declare function createStore(db: Database, conn: Connection): Store;
@@ -17,13 +17,11 @@ _export(exports, {
17
17
  }
18
18
  });
19
19
  var _typests = require("../../embed/types.js");
20
- var _reconcilets = require("../reconcile.js");
21
20
  var _sharedts = require("../shared.js");
22
21
  var _transactionts = require("../transaction.js");
23
22
  var _vectorsts = require("../vectors.js");
24
23
  var _fieldStatsts = require("./fieldStats.js");
25
24
  var _lexicalts = require("./lexical.js");
26
- var _reconcilets1 = require("./reconcile.js");
27
25
  var _vectorsts1 = require("./vectors.js");
28
26
  function _array_like_to_array(arr, len) {
29
27
  if (len == null || len > arr.length) len = arr.length;
@@ -368,7 +366,7 @@ var CAPABILITIES = new Set([
368
366
  'phrases',
369
367
  'vectors'
370
368
  ]);
371
- function createStore(db, conn, cfg, baseDir) {
369
+ function createStore(db, conn) {
372
370
  return {
373
371
  name: 'turso',
374
372
  capabilities: CAPABILITIES,
@@ -428,16 +426,6 @@ function createStore(db, conn, cfg, baseDir) {
428
426
  });
429
427
  })();
430
428
  },
431
- reconcile: function reconcile() {
432
- return _async_to_generator(function() {
433
- return _ts_generator(this, function(_state) {
434
- return [
435
- 2,
436
- (0, _reconcilets.reconcile)(conn, cfg, baseDir, _reconcilets1.tursoDialect)
437
- ];
438
- });
439
- })();
440
- },
441
429
  docs: {
442
430
  columns: function columns() {
443
431
  return _async_to_generator(function() {