sensemaking 0.17.0 → 0.18.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 (429) hide show
  1. package/README.md +15 -13
  2. package/dist/cjs/cli/map.js +147 -6
  3. package/dist/cjs/cli/map.js.map +1 -1
  4. package/dist/cjs/cli/named.js +20 -12
  5. package/dist/cjs/cli/named.js.map +1 -1
  6. package/dist/cjs/cli/path.js +190 -29
  7. package/dist/cjs/cli/path.js.map +1 -1
  8. package/dist/cjs/cli/peek.js +148 -7
  9. package/dist/cjs/cli/peek.js.map +1 -1
  10. package/dist/cjs/cli/related.js +5 -5
  11. package/dist/cjs/cli/related.js.map +1 -1
  12. package/dist/cjs/cli/search.js +5 -5
  13. package/dist/cjs/cli/search.js.map +1 -1
  14. package/dist/cjs/cli/shared.d.cts +3 -3
  15. package/dist/cjs/cli/shared.d.ts +3 -3
  16. package/dist/cjs/cli/shared.js +156 -58
  17. package/dist/cjs/cli/shared.js.map +1 -1
  18. package/dist/cjs/cli/sql.js +151 -10
  19. package/dist/cjs/cli/sql.js.map +1 -1
  20. package/dist/cjs/cli/status.js +187 -62
  21. package/dist/cjs/cli/status.js.map +1 -1
  22. package/dist/cjs/commands/map.d.cts +2 -2
  23. package/dist/cjs/commands/map.d.ts +2 -2
  24. package/dist/cjs/commands/map.js +373 -67
  25. package/dist/cjs/commands/map.js.map +1 -1
  26. package/dist/cjs/commands/peek.d.cts +2 -2
  27. package/dist/cjs/commands/peek.d.ts +2 -2
  28. package/dist/cjs/commands/peek.js +321 -79
  29. package/dist/cjs/commands/peek.js.map +1 -1
  30. package/dist/cjs/commands/related.d.cts +2 -2
  31. package/dist/cjs/commands/related.d.ts +2 -2
  32. package/dist/cjs/commands/related.js +55 -10
  33. package/dist/cjs/commands/related.js.map +1 -1
  34. package/dist/cjs/commands/scope.d.cts +7 -7
  35. package/dist/cjs/commands/scope.d.ts +7 -7
  36. package/dist/cjs/commands/scope.js +382 -45
  37. package/dist/cjs/commands/scope.js.map +1 -1
  38. package/dist/cjs/commands/search.d.cts +2 -2
  39. package/dist/cjs/commands/search.d.ts +2 -2
  40. package/dist/cjs/commands/search.js +292 -99
  41. package/dist/cjs/commands/search.js.map +1 -1
  42. package/dist/cjs/commands/signals.d.cts +4 -10
  43. package/dist/cjs/commands/signals.d.ts +4 -10
  44. package/dist/cjs/commands/signals.js +91 -45
  45. package/dist/cjs/commands/signals.js.map +1 -1
  46. package/dist/cjs/commands/status.d.cts +2 -2
  47. package/dist/cjs/commands/status.d.ts +2 -2
  48. package/dist/cjs/commands/status.js +247 -10
  49. package/dist/cjs/commands/status.js.map +1 -1
  50. package/dist/cjs/config/access.d.cts +1 -0
  51. package/dist/cjs/config/access.d.ts +1 -0
  52. package/dist/cjs/config/access.js +7 -0
  53. package/dist/cjs/config/access.js.map +1 -1
  54. package/dist/cjs/config/index.d.cts +1 -1
  55. package/dist/cjs/config/index.d.ts +1 -1
  56. package/dist/cjs/config/index.js +3 -0
  57. package/dist/cjs/config/index.js.map +1 -1
  58. package/dist/cjs/config/types.d.cts +1 -0
  59. package/dist/cjs/config/types.d.ts +1 -0
  60. package/dist/cjs/config/types.js.map +1 -1
  61. package/dist/cjs/config/validate.js +10 -1
  62. package/dist/cjs/config/validate.js.map +1 -1
  63. package/dist/cjs/embed/distribution.d.cts +4 -0
  64. package/dist/cjs/embed/distribution.d.ts +4 -0
  65. package/dist/cjs/embed/distribution.js +186 -0
  66. package/dist/cjs/embed/distribution.js.map +1 -0
  67. package/dist/cjs/embed/langfit.d.cts +2 -5
  68. package/dist/cjs/embed/langfit.d.ts +2 -5
  69. package/dist/cjs/embed/langfit.js +73 -63
  70. package/dist/cjs/embed/langfit.js.map +1 -1
  71. package/dist/cjs/embed/query.d.cts +6 -13
  72. package/dist/cjs/embed/query.d.ts +6 -13
  73. package/dist/cjs/embed/query.js +56 -168
  74. package/dist/cjs/embed/query.js.map +1 -1
  75. package/dist/cjs/embed/static.js +13 -3
  76. package/dist/cjs/embed/static.js.map +1 -1
  77. package/dist/cjs/embed/types.d.cts +1 -0
  78. package/dist/cjs/embed/types.d.ts +1 -0
  79. package/dist/cjs/embed/types.js +11 -2
  80. package/dist/cjs/embed/types.js.map +1 -1
  81. package/dist/cjs/errors.d.cts +1 -1
  82. package/dist/cjs/errors.d.ts +1 -1
  83. package/dist/cjs/errors.js.map +1 -1
  84. package/dist/cjs/features/embed.js +218 -11
  85. package/dist/cjs/features/embed.js.map +1 -1
  86. package/dist/cjs/features/index.d.cts +1 -1
  87. package/dist/cjs/features/index.d.ts +1 -1
  88. package/dist/cjs/features/index.js +6 -0
  89. package/dist/cjs/features/index.js.map +1 -1
  90. package/dist/cjs/features/links.d.cts +7 -2
  91. package/dist/cjs/features/links.d.ts +7 -2
  92. package/dist/cjs/features/links.js +710 -198
  93. package/dist/cjs/features/links.js.map +1 -1
  94. package/dist/cjs/features/rank.js +231 -31
  95. package/dist/cjs/features/rank.js.map +1 -1
  96. package/dist/cjs/features/sections.js +218 -8
  97. package/dist/cjs/features/sections.js.map +1 -1
  98. package/dist/cjs/features/tags.js +236 -40
  99. package/dist/cjs/features/tags.js.map +1 -1
  100. package/dist/cjs/features/types.d.cts +9 -5
  101. package/dist/cjs/features/types.d.ts +9 -5
  102. package/dist/cjs/graph/traverse.d.cts +2 -2
  103. package/dist/cjs/graph/traverse.d.ts +2 -2
  104. package/dist/cjs/graph/traverse.js +321 -42
  105. package/dist/cjs/graph/traverse.js.map +1 -1
  106. package/dist/cjs/index.d.cts +3 -2
  107. package/dist/cjs/index.d.ts +3 -2
  108. package/dist/cjs/index.js +2 -2
  109. package/dist/cjs/index.js.map +1 -1
  110. package/dist/cjs/lib/guarded-tick.d.cts +1 -0
  111. package/dist/cjs/lib/guarded-tick.d.ts +1 -0
  112. package/dist/cjs/lib/guarded-tick.js +19 -0
  113. package/dist/cjs/lib/guarded-tick.js.map +1 -0
  114. package/dist/cjs/output/column-hint.d.cts +1 -2
  115. package/dist/cjs/output/column-hint.d.ts +1 -2
  116. package/dist/cjs/output/column-hint.js +1 -4
  117. package/dist/cjs/output/column-hint.js.map +1 -1
  118. package/dist/cjs/output/output.d.cts +2 -1
  119. package/dist/cjs/output/output.d.ts +2 -1
  120. package/dist/cjs/output/output.js +515 -97
  121. package/dist/cjs/output/output.js.map +1 -1
  122. package/dist/cjs/scan/frontmatter.js.map +1 -1
  123. package/dist/cjs/scan/index.js.map +1 -1
  124. package/dist/cjs/scan/reparse.d.cts +10 -0
  125. package/dist/cjs/scan/reparse.d.ts +10 -0
  126. package/dist/cjs/scan/reparse.js +104 -0
  127. package/dist/cjs/scan/reparse.js.map +1 -0
  128. package/dist/cjs/store/duckdb/batch.d.cts +16 -0
  129. package/dist/cjs/store/duckdb/batch.d.ts +16 -0
  130. package/dist/cjs/store/duckdb/batch.js +208 -0
  131. package/dist/cjs/store/duckdb/batch.js.map +1 -0
  132. package/dist/cjs/store/duckdb/connection.d.cts +5 -0
  133. package/dist/cjs/store/duckdb/connection.d.ts +5 -0
  134. package/dist/cjs/store/duckdb/connection.js +772 -0
  135. package/dist/cjs/store/duckdb/connection.js.map +1 -0
  136. package/dist/cjs/store/duckdb/lexical.d.cts +10 -0
  137. package/dist/cjs/store/duckdb/lexical.d.ts +10 -0
  138. package/dist/cjs/store/duckdb/lexical.js +502 -0
  139. package/dist/cjs/store/duckdb/lexical.js.map +1 -0
  140. package/dist/cjs/store/duckdb/native.d.cts +3 -0
  141. package/dist/cjs/store/duckdb/native.d.ts +3 -0
  142. package/dist/cjs/store/duckdb/native.js +360 -0
  143. package/dist/cjs/store/duckdb/native.js.map +1 -0
  144. package/dist/cjs/store/duckdb/open.d.cts +12 -0
  145. package/dist/cjs/store/duckdb/open.d.ts +12 -0
  146. package/dist/cjs/store/duckdb/open.js +501 -0
  147. package/dist/cjs/store/duckdb/open.js.map +1 -0
  148. package/dist/cjs/store/duckdb/reconcile.d.cts +6 -0
  149. package/dist/cjs/store/duckdb/reconcile.d.ts +6 -0
  150. package/dist/cjs/store/duckdb/reconcile.js +753 -0
  151. package/dist/cjs/store/duckdb/reconcile.js.map +1 -0
  152. package/dist/cjs/store/duckdb/sql-functions.d.cts +2 -0
  153. package/dist/cjs/store/duckdb/sql-functions.d.ts +2 -0
  154. package/dist/cjs/store/duckdb/sql-functions.js +203 -0
  155. package/dist/cjs/store/duckdb/sql-functions.js.map +1 -0
  156. package/dist/cjs/store/duckdb/store.d.cts +5 -0
  157. package/dist/cjs/store/duckdb/store.d.ts +5 -0
  158. package/dist/cjs/store/duckdb/store.js +504 -0
  159. package/dist/cjs/store/duckdb/store.js.map +1 -0
  160. package/dist/cjs/store/duckdb/vectors.d.cts +9 -0
  161. package/dist/cjs/store/duckdb/vectors.d.ts +9 -0
  162. package/dist/cjs/store/duckdb/vectors.js +502 -0
  163. package/dist/cjs/store/duckdb/vectors.js.map +1 -0
  164. package/dist/cjs/store/index.d.cts +7 -0
  165. package/dist/cjs/store/index.d.ts +7 -0
  166. package/dist/cjs/store/index.js +201 -0
  167. package/dist/cjs/store/index.js.map +1 -0
  168. package/dist/cjs/store/meta.d.cts +3 -0
  169. package/dist/cjs/store/meta.d.ts +3 -0
  170. package/dist/cjs/store/meta.js +215 -0
  171. package/dist/cjs/store/meta.js.map +1 -0
  172. package/dist/cjs/store/shared.d.cts +5 -0
  173. package/dist/cjs/store/shared.d.ts +5 -0
  174. package/dist/cjs/store/shared.js +252 -0
  175. package/dist/cjs/store/shared.js.map +1 -0
  176. package/dist/cjs/store/sql-functions.d.cts +2 -0
  177. package/dist/cjs/store/sql-functions.d.ts +2 -0
  178. package/dist/cjs/store/sql-functions.js +48 -0
  179. package/dist/cjs/store/sql-functions.js.map +1 -0
  180. package/dist/cjs/store/sqlite/connection.d.cts +3 -0
  181. package/dist/cjs/store/sqlite/connection.d.ts +3 -0
  182. package/dist/cjs/store/sqlite/connection.js +516 -0
  183. package/dist/cjs/store/sqlite/connection.js.map +1 -0
  184. package/dist/cjs/store/sqlite/lexical.d.cts +2 -0
  185. package/dist/cjs/store/sqlite/lexical.d.ts +2 -0
  186. package/dist/cjs/store/sqlite/lexical.js +177 -0
  187. package/dist/cjs/store/sqlite/lexical.js.map +1 -0
  188. package/dist/cjs/{db → store/sqlite}/open.d.cts +5 -5
  189. package/dist/cjs/{db → store/sqlite}/open.d.ts +5 -5
  190. package/dist/cjs/store/sqlite/open.js +604 -0
  191. package/dist/cjs/store/sqlite/open.js.map +1 -0
  192. package/dist/cjs/store/sqlite/reconcile.d.cts +10 -0
  193. package/dist/cjs/store/sqlite/reconcile.d.ts +10 -0
  194. package/dist/cjs/store/sqlite/reconcile.js +1020 -0
  195. package/dist/cjs/store/sqlite/reconcile.js.map +1 -0
  196. package/dist/cjs/store/sqlite/sql-functions.js +34 -0
  197. package/dist/cjs/store/sqlite/sql-functions.js.map +1 -0
  198. package/dist/cjs/store/sqlite/store.d.cts +5 -0
  199. package/dist/cjs/store/sqlite/store.d.ts +5 -0
  200. package/dist/cjs/store/sqlite/store.js +588 -0
  201. package/dist/cjs/store/sqlite/store.js.map +1 -0
  202. package/dist/cjs/store/sqlite/vectors.d.cts +13 -0
  203. package/dist/cjs/store/sqlite/vectors.d.ts +13 -0
  204. package/dist/cjs/store/sqlite/vectors.js +470 -0
  205. package/dist/cjs/store/sqlite/vectors.js.map +1 -0
  206. package/dist/cjs/store/transaction.d.cts +5 -0
  207. package/dist/cjs/store/transaction.d.ts +5 -0
  208. package/dist/cjs/store/transaction.js +297 -0
  209. package/dist/cjs/store/transaction.js.map +1 -0
  210. package/dist/cjs/store/types.d.cts +91 -0
  211. package/dist/cjs/store/types.d.ts +91 -0
  212. package/dist/cjs/store/types.js +15 -0
  213. package/dist/cjs/store/types.js.map +1 -0
  214. package/dist/cjs/watch.d.cts +3 -0
  215. package/dist/cjs/watch.d.ts +3 -0
  216. package/dist/cjs/watch.js +215 -73
  217. package/dist/cjs/watch.js.map +1 -1
  218. package/dist/esm/cli/map.js +5 -5
  219. package/dist/esm/cli/map.js.map +1 -1
  220. package/dist/esm/cli/named.js +3 -3
  221. package/dist/esm/cli/named.js.map +1 -1
  222. package/dist/esm/cli/path.js +6 -5
  223. package/dist/esm/cli/path.js.map +1 -1
  224. package/dist/esm/cli/peek.js +5 -5
  225. package/dist/esm/cli/peek.js.map +1 -1
  226. package/dist/esm/cli/related.js +3 -3
  227. package/dist/esm/cli/related.js.map +1 -1
  228. package/dist/esm/cli/search.js +2 -2
  229. package/dist/esm/cli/search.js.map +1 -1
  230. package/dist/esm/cli/shared.d.ts +3 -3
  231. package/dist/esm/cli/shared.js +17 -17
  232. package/dist/esm/cli/shared.js.map +1 -1
  233. package/dist/esm/cli/sql.js +2 -2
  234. package/dist/esm/cli/sql.js.map +1 -1
  235. package/dist/esm/cli/status.js +25 -24
  236. package/dist/esm/cli/status.js.map +1 -1
  237. package/dist/esm/commands/map.d.ts +2 -2
  238. package/dist/esm/commands/map.js +51 -41
  239. package/dist/esm/commands/map.js.map +1 -1
  240. package/dist/esm/commands/peek.d.ts +2 -2
  241. package/dist/esm/commands/peek.js +58 -50
  242. package/dist/esm/commands/peek.js.map +1 -1
  243. package/dist/esm/commands/related.d.ts +2 -2
  244. package/dist/esm/commands/related.js +9 -9
  245. package/dist/esm/commands/related.js.map +1 -1
  246. package/dist/esm/commands/scope.d.ts +7 -7
  247. package/dist/esm/commands/scope.js +28 -17
  248. package/dist/esm/commands/scope.js.map +1 -1
  249. package/dist/esm/commands/search.d.ts +2 -2
  250. package/dist/esm/commands/search.js +42 -35
  251. package/dist/esm/commands/search.js.map +1 -1
  252. package/dist/esm/commands/signals.d.ts +4 -10
  253. package/dist/esm/commands/signals.js +17 -13
  254. package/dist/esm/commands/signals.js.map +1 -1
  255. package/dist/esm/commands/status.d.ts +2 -2
  256. package/dist/esm/commands/status.js +13 -7
  257. package/dist/esm/commands/status.js.map +1 -1
  258. package/dist/esm/config/access.d.ts +1 -0
  259. package/dist/esm/config/access.js +5 -0
  260. package/dist/esm/config/access.js.map +1 -1
  261. package/dist/esm/config/index.d.ts +1 -1
  262. package/dist/esm/config/index.js +1 -1
  263. package/dist/esm/config/index.js.map +1 -1
  264. package/dist/esm/config/types.d.ts +1 -0
  265. package/dist/esm/config/types.js.map +1 -1
  266. package/dist/esm/config/validate.js +10 -1
  267. package/dist/esm/config/validate.js.map +1 -1
  268. package/dist/esm/embed/distribution.d.ts +4 -0
  269. package/dist/esm/embed/distribution.js +11 -0
  270. package/dist/esm/embed/distribution.js.map +1 -0
  271. package/dist/esm/embed/langfit.d.ts +2 -5
  272. package/dist/esm/embed/langfit.js +13 -13
  273. package/dist/esm/embed/langfit.js.map +1 -1
  274. package/dist/esm/embed/query.d.ts +6 -13
  275. package/dist/esm/embed/query.js +23 -84
  276. package/dist/esm/embed/query.js.map +1 -1
  277. package/dist/esm/embed/static.js +6 -1
  278. package/dist/esm/embed/static.js.map +1 -1
  279. package/dist/esm/embed/types.d.ts +1 -0
  280. package/dist/esm/embed/types.js +5 -3
  281. package/dist/esm/embed/types.js.map +1 -1
  282. package/dist/esm/errors.d.ts +1 -1
  283. package/dist/esm/errors.js.map +1 -1
  284. package/dist/esm/features/embed.js +22 -10
  285. package/dist/esm/features/embed.js.map +1 -1
  286. package/dist/esm/features/index.d.ts +1 -1
  287. package/dist/esm/features/index.js +1 -1
  288. package/dist/esm/features/index.js.map +1 -1
  289. package/dist/esm/features/links.d.ts +7 -2
  290. package/dist/esm/features/links.js +124 -97
  291. package/dist/esm/features/links.js.map +1 -1
  292. package/dist/esm/features/rank.js +15 -8
  293. package/dist/esm/features/rank.js.map +1 -1
  294. package/dist/esm/features/sections.js +20 -7
  295. package/dist/esm/features/sections.js.map +1 -1
  296. package/dist/esm/features/tags.js +19 -18
  297. package/dist/esm/features/tags.js.map +1 -1
  298. package/dist/esm/features/types.d.ts +9 -5
  299. package/dist/esm/features/types.js +1 -1
  300. package/dist/esm/features/types.js.map +1 -1
  301. package/dist/esm/graph/traverse.d.ts +2 -2
  302. package/dist/esm/graph/traverse.js +26 -23
  303. package/dist/esm/graph/traverse.js.map +1 -1
  304. package/dist/esm/index.d.ts +3 -2
  305. package/dist/esm/index.js +1 -1
  306. package/dist/esm/index.js.map +1 -1
  307. package/dist/esm/lib/guarded-tick.d.ts +1 -0
  308. package/dist/esm/lib/guarded-tick.js +8 -0
  309. package/dist/esm/lib/guarded-tick.js.map +1 -0
  310. package/dist/esm/output/column-hint.d.ts +1 -2
  311. package/dist/esm/output/column-hint.js +3 -2
  312. package/dist/esm/output/column-hint.js.map +1 -1
  313. package/dist/esm/output/output.d.ts +2 -1
  314. package/dist/esm/output/output.js +27 -23
  315. package/dist/esm/output/output.js.map +1 -1
  316. package/dist/esm/scan/frontmatter.js +1 -1
  317. package/dist/esm/scan/frontmatter.js.map +1 -1
  318. package/dist/esm/scan/index.js +1 -1
  319. package/dist/esm/scan/index.js.map +1 -1
  320. package/dist/esm/scan/reparse.d.ts +10 -0
  321. package/dist/esm/scan/reparse.js +30 -0
  322. package/dist/esm/scan/reparse.js.map +1 -0
  323. package/dist/esm/store/duckdb/batch.d.ts +16 -0
  324. package/dist/esm/store/duckdb/batch.js +96 -0
  325. package/dist/esm/store/duckdb/batch.js.map +1 -0
  326. package/dist/esm/store/duckdb/connection.d.ts +5 -0
  327. package/dist/esm/store/duckdb/connection.js +97 -0
  328. package/dist/esm/store/duckdb/connection.js.map +1 -0
  329. package/dist/esm/store/duckdb/lexical.d.ts +10 -0
  330. package/dist/esm/store/duckdb/lexical.js +163 -0
  331. package/dist/esm/store/duckdb/lexical.js.map +1 -0
  332. package/dist/esm/store/duckdb/native.d.ts +3 -0
  333. package/dist/esm/store/duckdb/native.js +96 -0
  334. package/dist/esm/store/duckdb/native.js.map +1 -0
  335. package/dist/esm/store/duckdb/open.d.ts +12 -0
  336. package/dist/esm/store/duckdb/open.js +127 -0
  337. package/dist/esm/store/duckdb/open.js.map +1 -0
  338. package/dist/esm/store/duckdb/reconcile.d.ts +6 -0
  339. package/dist/esm/store/duckdb/reconcile.js +141 -0
  340. package/dist/esm/store/duckdb/reconcile.js.map +1 -0
  341. package/dist/esm/store/duckdb/sql-functions.d.ts +2 -0
  342. package/dist/esm/store/duckdb/sql-functions.js +56 -0
  343. package/dist/esm/store/duckdb/sql-functions.js.map +1 -0
  344. package/dist/esm/store/duckdb/store.d.ts +5 -0
  345. package/dist/esm/store/duckdb/store.js +104 -0
  346. package/dist/esm/store/duckdb/store.js.map +1 -0
  347. package/dist/esm/store/duckdb/vectors.d.ts +9 -0
  348. package/dist/esm/store/duckdb/vectors.js +171 -0
  349. package/dist/esm/store/duckdb/vectors.js.map +1 -0
  350. package/dist/esm/store/index.d.ts +7 -0
  351. package/dist/esm/store/index.js +35 -0
  352. package/dist/esm/store/index.js.map +1 -0
  353. package/dist/esm/store/meta.d.ts +3 -0
  354. package/dist/esm/store/meta.js +17 -0
  355. package/dist/esm/store/meta.js.map +1 -0
  356. package/dist/esm/store/shared.d.ts +5 -0
  357. package/dist/esm/store/shared.js +24 -0
  358. package/dist/esm/store/shared.js.map +1 -0
  359. package/dist/esm/store/sql-functions.d.ts +2 -0
  360. package/dist/esm/store/sql-functions.js +29 -0
  361. package/dist/esm/store/sql-functions.js.map +1 -0
  362. package/dist/esm/store/sqlite/connection.d.ts +3 -0
  363. package/dist/esm/store/sqlite/connection.js +50 -0
  364. package/dist/esm/store/sqlite/connection.js.map +1 -0
  365. package/dist/esm/store/sqlite/lexical.d.ts +2 -0
  366. package/dist/esm/store/sqlite/lexical.js +21 -0
  367. package/dist/esm/store/sqlite/lexical.js.map +1 -0
  368. package/dist/esm/{db → store/sqlite}/open.d.ts +5 -5
  369. package/dist/esm/store/sqlite/open.js +193 -0
  370. package/dist/esm/store/sqlite/open.js.map +1 -0
  371. package/dist/esm/store/sqlite/reconcile.d.ts +10 -0
  372. package/dist/esm/{db → store/sqlite}/reconcile.js +101 -99
  373. package/dist/esm/store/sqlite/reconcile.js.map +1 -0
  374. package/dist/esm/store/sqlite/sql-functions.js +23 -0
  375. package/dist/esm/store/sqlite/sql-functions.js.map +1 -0
  376. package/dist/esm/store/sqlite/store.d.ts +5 -0
  377. package/dist/esm/store/sqlite/store.js +82 -0
  378. package/dist/esm/store/sqlite/store.js.map +1 -0
  379. package/dist/esm/store/sqlite/vectors.d.ts +13 -0
  380. package/dist/esm/store/sqlite/vectors.js +90 -0
  381. package/dist/esm/store/sqlite/vectors.js.map +1 -0
  382. package/dist/esm/store/transaction.d.ts +5 -0
  383. package/dist/esm/store/transaction.js +57 -0
  384. package/dist/esm/store/transaction.js.map +1 -0
  385. package/dist/esm/store/types.d.ts +91 -0
  386. package/dist/esm/store/types.js +11 -0
  387. package/dist/esm/store/types.js.map +1 -0
  388. package/dist/esm/watch.d.ts +3 -0
  389. package/dist/esm/watch.js +39 -22
  390. package/dist/esm/watch.js.map +1 -1
  391. package/package.json +3 -1
  392. package/schema.json +5 -0
  393. package/skills/sense/EXAMPLES.md +3 -3
  394. package/skills/sense/SKILL.md +16 -14
  395. package/skills/sense-bases/EXAMPLES.md +2 -2
  396. package/skills/sense-bases/SKILL.md +6 -6
  397. package/skills/sense-setup/EXAMPLES.md +1 -1
  398. package/skills/sense-setup/SKILL.md +5 -4
  399. package/dist/cjs/db/index.d.cts +0 -4
  400. package/dist/cjs/db/index.d.ts +0 -4
  401. package/dist/cjs/db/index.js +0 -42
  402. package/dist/cjs/db/index.js.map +0 -1
  403. package/dist/cjs/db/open.js +0 -230
  404. package/dist/cjs/db/open.js.map +0 -1
  405. package/dist/cjs/db/reconcile.d.cts +0 -10
  406. package/dist/cjs/db/reconcile.d.ts +0 -10
  407. package/dist/cjs/db/reconcile.js +0 -579
  408. package/dist/cjs/db/reconcile.js.map +0 -1
  409. package/dist/cjs/db/shared.d.cts +0 -5
  410. package/dist/cjs/db/shared.d.ts +0 -5
  411. package/dist/cjs/db/shared.js +0 -45
  412. package/dist/cjs/db/shared.js.map +0 -1
  413. package/dist/cjs/db/sql-functions.js +0 -64
  414. package/dist/cjs/db/sql-functions.js.map +0 -1
  415. package/dist/esm/db/index.d.ts +0 -4
  416. package/dist/esm/db/index.js +0 -5
  417. package/dist/esm/db/index.js.map +0 -1
  418. package/dist/esm/db/open.js +0 -165
  419. package/dist/esm/db/open.js.map +0 -1
  420. package/dist/esm/db/reconcile.d.ts +0 -10
  421. package/dist/esm/db/reconcile.js.map +0 -1
  422. package/dist/esm/db/shared.d.ts +0 -5
  423. package/dist/esm/db/shared.js +0 -20
  424. package/dist/esm/db/shared.js.map +0 -1
  425. package/dist/esm/db/sql-functions.js +0 -47
  426. package/dist/esm/db/sql-functions.js.map +0 -1
  427. /package/dist/cjs/{db → store/sqlite}/sql-functions.d.cts +0 -0
  428. /package/dist/cjs/{db → store/sqlite}/sql-functions.d.ts +0 -0
  429. /package/dist/esm/{db → store/sqlite}/sql-functions.d.ts +0 -0
@@ -9,11 +9,17 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get LINK_EDGES_SQL () {
13
+ return LINK_EDGES_SQL;
14
+ },
12
15
  get linkEdges () {
13
16
  return linkEdges;
14
17
  },
15
18
  get links () {
16
19
  return links;
20
+ },
21
+ get toEdges () {
22
+ return toEdges;
17
23
  }
18
24
  });
19
25
  var _posix = /*#__PURE__*/ _interop_require_default(require("node:path/posix"));
@@ -23,9 +29,49 @@ function _array_like_to_array(arr, len) {
23
29
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
24
30
  return arr2;
25
31
  }
32
+ function _array_with_holes(arr) {
33
+ if (Array.isArray(arr)) return arr;
34
+ }
26
35
  function _array_without_holes(arr) {
27
36
  if (Array.isArray(arr)) return _array_like_to_array(arr);
28
37
  }
38
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
39
+ try {
40
+ var info = gen[key](arg);
41
+ var value = info.value;
42
+ } catch (error) {
43
+ reject(error);
44
+ return;
45
+ }
46
+ if (info.done) resolve(value);
47
+ else Promise.resolve(value).then(_next, _throw);
48
+ }
49
+ function _async_to_generator(fn) {
50
+ return function() {
51
+ var self = this, args = arguments;
52
+ return new Promise(function(resolve, reject) {
53
+ var gen = fn.apply(self, args);
54
+ function _next(value) {
55
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
56
+ }
57
+ function _throw(err) {
58
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
59
+ }
60
+ _next(undefined);
61
+ });
62
+ };
63
+ }
64
+ function _define_property(obj, key, value) {
65
+ if (key in obj) {
66
+ Object.defineProperty(obj, key, {
67
+ value: value,
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true
71
+ });
72
+ } else obj[key] = value;
73
+ return obj;
74
+ }
29
75
  function _interop_require_default(obj) {
30
76
  return obj && obj.__esModule ? obj : {
31
77
  default: obj
@@ -36,12 +82,179 @@ function _iterable_to_array(iter) {
36
82
  return Array.from(iter);
37
83
  }
38
84
  }
85
+ function _iterable_to_array_limit(arr, i) {
86
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
87
+ if (_i == null) return;
88
+ var _arr = [];
89
+ var _n = true;
90
+ var _d = false;
91
+ var _s, _e;
92
+ try {
93
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
94
+ _arr.push(_s.value);
95
+ if (i && _arr.length === i) break;
96
+ }
97
+ } catch (err) {
98
+ _d = true;
99
+ _e = err;
100
+ } finally{
101
+ try {
102
+ if (!_n && _i["return"] != null) _i["return"]();
103
+ } finally{
104
+ if (_d) throw _e;
105
+ }
106
+ }
107
+ return _arr;
108
+ }
109
+ function _non_iterable_rest() {
110
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
111
+ }
39
112
  function _non_iterable_spread() {
40
113
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
41
114
  }
115
+ function _object_spread(target) {
116
+ for(var i = 1; i < arguments.length; i++){
117
+ var source = arguments[i] != null ? arguments[i] : {};
118
+ var ownKeys = Object.keys(source);
119
+ if (typeof Object.getOwnPropertySymbols === "function") {
120
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
121
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
122
+ }));
123
+ }
124
+ ownKeys.forEach(function(key) {
125
+ _define_property(target, key, source[key]);
126
+ });
127
+ }
128
+ return target;
129
+ }
130
+ function ownKeys(object, enumerableOnly) {
131
+ var keys = Object.keys(object);
132
+ if (Object.getOwnPropertySymbols) {
133
+ var symbols = Object.getOwnPropertySymbols(object);
134
+ if (enumerableOnly) {
135
+ symbols = symbols.filter(function(sym) {
136
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
137
+ });
138
+ }
139
+ keys.push.apply(keys, symbols);
140
+ }
141
+ return keys;
142
+ }
143
+ function _object_spread_props(target, source) {
144
+ source = source != null ? source : {};
145
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
146
+ else {
147
+ ownKeys(Object(source)).forEach(function(key) {
148
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
149
+ });
150
+ }
151
+ return target;
152
+ }
153
+ function _sliced_to_array(arr, i) {
154
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
155
+ }
42
156
  function _to_consumable_array(arr) {
43
157
  return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
44
158
  }
159
+ function _ts_generator(thisArg, body) {
160
+ var f, y, t, _ = {
161
+ label: 0,
162
+ sent: function() {
163
+ if (t[0] & 1) throw t[1];
164
+ return t[1];
165
+ },
166
+ trys: [],
167
+ ops: []
168
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
169
+ return d(g, "next", {
170
+ value: verb(0)
171
+ }), d(g, "throw", {
172
+ value: verb(1)
173
+ }), d(g, "return", {
174
+ value: verb(2)
175
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
176
+ value: function() {
177
+ return this;
178
+ }
179
+ }), g;
180
+ function verb(n) {
181
+ return function(v) {
182
+ return step([
183
+ n,
184
+ v
185
+ ]);
186
+ };
187
+ }
188
+ function step(op) {
189
+ if (f) throw new TypeError("Generator is already executing.");
190
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
191
+ 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;
192
+ if (y = 0, t) op = [
193
+ op[0] & 2,
194
+ t.value
195
+ ];
196
+ switch(op[0]){
197
+ case 0:
198
+ case 1:
199
+ t = op;
200
+ break;
201
+ case 4:
202
+ _.label++;
203
+ return {
204
+ value: op[1],
205
+ done: false
206
+ };
207
+ case 5:
208
+ _.label++;
209
+ y = op[1];
210
+ op = [
211
+ 0
212
+ ];
213
+ continue;
214
+ case 7:
215
+ op = _.ops.pop();
216
+ _.trys.pop();
217
+ continue;
218
+ default:
219
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
220
+ _ = 0;
221
+ continue;
222
+ }
223
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
224
+ _.label = op[1];
225
+ break;
226
+ }
227
+ if (op[0] === 6 && _.label < t[1]) {
228
+ _.label = t[1];
229
+ t = op;
230
+ break;
231
+ }
232
+ if (t && _.label < t[2]) {
233
+ _.label = t[2];
234
+ _.ops.push(op);
235
+ break;
236
+ }
237
+ if (t[2]) _.ops.pop();
238
+ _.trys.pop();
239
+ continue;
240
+ }
241
+ op = body.call(thisArg, _);
242
+ } catch (e) {
243
+ op = [
244
+ 6,
245
+ e
246
+ ];
247
+ y = 0;
248
+ } finally{
249
+ f = t = 0;
250
+ }
251
+ if (op[0] & 5) throw op[1];
252
+ return {
253
+ value: op[0] ? op[1] : void 0,
254
+ done: true
255
+ };
256
+ }
257
+ }
45
258
  function _unsupported_iterable_to_array(o, minLen) {
46
259
  if (!o) return;
47
260
  if (typeof o === "string") return _array_like_to_array(o, minLen);
@@ -247,21 +460,19 @@ function buildByBase(files) {
247
460
  }
248
461
  return byBase;
249
462
  }
250
- // Applies resolveTarget to `rows`, writing only rows whose dst actually changes. The UPDATE
251
- // keys on (src, target): a link/embed sibling pair shares one resolution, so either row's
252
- // mismatch rewrites both.
253
- function resolveRows(db, rows, pathSet, byBase) {
254
- var update = db.prepare('UPDATE links SET dst = ? WHERE src = ? AND target = ?');
255
- var changed = false;
463
+ // resolveTarget applied to `rows`, returning just the rows whose dst actually changed -- the
464
+ // caller writes those in one runBatch call, keyed on (src, target) so a link/embed sibling
465
+ // pair sharing one resolution rewrites both.
466
+ function resolveRows(rows, pathSet, byBase) {
467
+ var changed = [];
256
468
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
257
469
  try {
258
470
  for(var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
259
471
  var row = _step.value;
260
472
  var dst = resolveTarget(row.src, row.target, pathSet, byBase);
261
- if (dst !== row.dst) {
262
- update.run(dst, row.src, row.target);
263
- changed = true;
264
- }
473
+ if (dst !== row.dst) changed.push(_object_spread_props(_object_spread({}, row), {
474
+ dst: dst
475
+ }));
265
476
  }
266
477
  } catch (err) {
267
478
  _didIteratorError = true;
@@ -279,220 +490,521 @@ function resolveRows(db, rows, pathSet, byBase) {
279
490
  }
280
491
  return changed;
281
492
  }
493
+ function writeResolved(db, rows) {
494
+ return _async_to_generator(function() {
495
+ return _ts_generator(this, function(_state) {
496
+ switch(_state.label){
497
+ case 0:
498
+ if (rows.length === 0) return [
499
+ 2
500
+ ];
501
+ return [
502
+ 4,
503
+ db.runBatch('UPDATE links SET dst = ? WHERE src = ? AND target = ?', rows.map(function(r) {
504
+ return [
505
+ r.dst,
506
+ r.src,
507
+ r.target
508
+ ];
509
+ }))
510
+ ];
511
+ case 1:
512
+ _state.sent();
513
+ return [
514
+ 2
515
+ ];
516
+ }
517
+ });
518
+ })();
519
+ }
282
520
  // A new or deleted file can change any note's resolution, so re-resolve the whole table.
283
521
  // Fallback for cold builds and large deltas -- see afterReconcile's threshold.
284
522
  function resolveAll(db, files) {
285
- var pathSet = new Set(files.map(function(f) {
286
- return f.relPath;
287
- }));
288
- var byBase = buildByBase(files);
289
- var rows = db.prepare('SELECT src, target, dst, embed FROM links').all();
290
- return resolveRows(db, rows, pathSet, byBase);
523
+ return _async_to_generator(function() {
524
+ var pathSet, byBase, stmt, rows, changed;
525
+ return _ts_generator(this, function(_state) {
526
+ switch(_state.label){
527
+ case 0:
528
+ pathSet = new Set(files.map(function(f) {
529
+ return f.relPath;
530
+ }));
531
+ byBase = buildByBase(files);
532
+ return [
533
+ 4,
534
+ db.prepare('SELECT src, target, dst, embed FROM links')
535
+ ];
536
+ case 1:
537
+ stmt = _state.sent();
538
+ return [
539
+ 4,
540
+ stmt.all()
541
+ ];
542
+ case 2:
543
+ rows = _state.sent();
544
+ changed = resolveRows(rows, pathSet, byBase);
545
+ return [
546
+ 4,
547
+ writeResolved(db, changed)
548
+ ];
549
+ case 3:
550
+ _state.sent();
551
+ return [
552
+ 2,
553
+ changed.length > 0
554
+ ];
555
+ }
556
+ });
557
+ })();
558
+ }
559
+ // Chunked so a large-but-under-threshold delta never exceeds SQLite's bound-variable limit
560
+ // (SQLITE_MAX_VARIABLE_NUMBER, 32766); harmless headroom on DuckDB, which has no such cap.
561
+ function selectIn(db, column, keys) {
562
+ return _async_to_generator(function() {
563
+ var rows, i, _stmt, _rows, chunk, stmt, _, _1, _tmp;
564
+ return _ts_generator(this, function(_state) {
565
+ switch(_state.label){
566
+ case 0:
567
+ rows = [];
568
+ i = 0;
569
+ _state.label = 1;
570
+ case 1:
571
+ if (!(i < keys.length)) return [
572
+ 3,
573
+ 5
574
+ ];
575
+ chunk = keys.slice(i, i + 500);
576
+ return [
577
+ 4,
578
+ db.prepare("SELECT src, target, dst, embed FROM links WHERE ".concat(column, " IN (").concat(chunk.map(function() {
579
+ return '?';
580
+ }).join(', '), ")"))
581
+ ];
582
+ case 2:
583
+ stmt = _state.sent();
584
+ _1 = (_ = (_rows = rows).push).apply;
585
+ _tmp = [
586
+ _rows
587
+ ];
588
+ return [
589
+ 4,
590
+ (_stmt = stmt).all.apply(_stmt, _to_consumable_array(chunk))
591
+ ];
592
+ case 3:
593
+ _1.apply(_, _tmp.concat([
594
+ _to_consumable_array.apply(void 0, [
595
+ _state.sent()
596
+ ])
597
+ ]));
598
+ _state.label = 4;
599
+ case 4:
600
+ i += 500;
601
+ return [
602
+ 3,
603
+ 1
604
+ ];
605
+ case 5:
606
+ return [
607
+ 2,
608
+ rows
609
+ ];
610
+ }
611
+ });
612
+ })();
291
613
  }
292
614
  // Re-resolve only what this reconcile could have touched: re-stored sources, links whose
293
615
  // target basename matches an added/vanished file, and links whose dst just vanished. All
294
616
  // three are indexed lookups, so this never reads the whole table.
295
617
  function resolveIncremental(db, delta) {
296
- var pathSet = new Set(delta.files.map(function(f) {
297
- return f.relPath;
298
- }));
299
- var byBase = buildByBase(delta.files);
300
- var changedBasenames = new Set();
301
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
302
- try {
303
- for(var _iterator = delta.added[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
304
- var p = _step.value;
305
- changedBasenames.add(baseKey(p));
306
- }
307
- } catch (err) {
308
- _didIteratorError = true;
309
- _iteratorError = err;
310
- } finally{
311
- try {
312
- if (!_iteratorNormalCompletion && _iterator.return != null) {
313
- _iterator.return();
314
- }
315
- } finally{
316
- if (_didIteratorError) {
317
- throw _iteratorError;
318
- }
319
- }
320
- }
321
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
322
- try {
323
- for(var _iterator1 = delta.vanished[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
324
- var p1 = _step1.value;
325
- changedBasenames.add(baseKey(p1));
326
- }
327
- } catch (err) {
328
- _didIteratorError1 = true;
329
- _iteratorError1 = err;
330
- } finally{
331
- try {
332
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
333
- _iterator1.return();
334
- }
335
- } finally{
336
- if (_didIteratorError1) {
337
- throw _iteratorError1;
338
- }
339
- }
340
- }
341
- // \0 can't appear in a path or target, so the key never collides; a space can.
342
- var candidates = new Map();
343
- var collect = function collect(rows) {
344
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
345
- try {
346
- for(var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
347
- var row = _step.value;
348
- candidates.set("".concat(row.src, "\0").concat(row.target, "\0").concat(row.embed), row);
349
- }
350
- } catch (err) {
351
- _didIteratorError = true;
352
- _iteratorError = err;
353
- } finally{
354
- try {
355
- if (!_iteratorNormalCompletion && _iterator.return != null) {
356
- _iterator.return();
357
- }
358
- } finally{
359
- if (_didIteratorError) {
360
- throw _iteratorError;
361
- }
618
+ return _async_to_generator(function() {
619
+ var pathSet, byBase, changedBasenames, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, p, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, p1, candidates, collect, changed;
620
+ return _ts_generator(this, function(_state) {
621
+ switch(_state.label){
622
+ case 0:
623
+ pathSet = new Set(delta.files.map(function(f) {
624
+ return f.relPath;
625
+ }));
626
+ byBase = buildByBase(delta.files);
627
+ changedBasenames = new Set();
628
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
629
+ try {
630
+ for(_iterator = delta.added[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
631
+ p = _step.value;
632
+ changedBasenames.add(baseKey(p));
633
+ }
634
+ } catch (err) {
635
+ _didIteratorError = true;
636
+ _iteratorError = err;
637
+ } finally{
638
+ try {
639
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
640
+ _iterator.return();
641
+ }
642
+ } finally{
643
+ if (_didIteratorError) {
644
+ throw _iteratorError;
645
+ }
646
+ }
647
+ }
648
+ _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
649
+ try {
650
+ for(_iterator1 = delta.vanished[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
651
+ p1 = _step1.value;
652
+ changedBasenames.add(baseKey(p1));
653
+ }
654
+ } catch (err) {
655
+ _didIteratorError1 = true;
656
+ _iteratorError1 = err;
657
+ } finally{
658
+ try {
659
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
660
+ _iterator1.return();
661
+ }
662
+ } finally{
663
+ if (_didIteratorError1) {
664
+ throw _iteratorError1;
665
+ }
666
+ }
667
+ }
668
+ // \0 can't appear in a path or target, so the key never collides; a space can.
669
+ candidates = new Map();
670
+ collect = function collect(rows) {
671
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
672
+ try {
673
+ for(var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
674
+ var row = _step.value;
675
+ candidates.set("".concat(row.src, "\0").concat(row.target, "\0").concat(row.embed), row);
676
+ }
677
+ } catch (err) {
678
+ _didIteratorError = true;
679
+ _iteratorError = err;
680
+ } finally{
681
+ try {
682
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
683
+ _iterator.return();
684
+ }
685
+ } finally{
686
+ if (_didIteratorError) {
687
+ throw _iteratorError;
688
+ }
689
+ }
690
+ }
691
+ };
692
+ return [
693
+ 4,
694
+ selectIn(db, 'src', delta.reparsed)
695
+ ];
696
+ case 1:
697
+ collect.apply(void 0, [
698
+ _state.sent()
699
+ ]);
700
+ return [
701
+ 4,
702
+ selectIn(db, 'target_base', _to_consumable_array(changedBasenames))
703
+ ];
704
+ case 2:
705
+ collect.apply(void 0, [
706
+ _state.sent()
707
+ ]);
708
+ return [
709
+ 4,
710
+ selectIn(db, 'dst', delta.vanished)
711
+ ];
712
+ case 3:
713
+ collect.apply(void 0, [
714
+ _state.sent()
715
+ ]);
716
+ changed = resolveRows(_to_consumable_array(candidates.values()), pathSet, byBase);
717
+ return [
718
+ 4,
719
+ writeResolved(db, changed)
720
+ ];
721
+ case 4:
722
+ _state.sent();
723
+ return [
724
+ 2,
725
+ changed.length > 0
726
+ ];
362
727
  }
363
- }
364
- };
365
- // Chunked so a large-but-under-threshold delta never exceeds SQLite's bound-variable
366
- // limit (SQLITE_MAX_VARIABLE_NUMBER, 32766).
367
- var collectIn = function collectIn(column, keys) {
368
- for(var i = 0; i < keys.length; i += 500){
369
- var _db_prepare;
370
- var chunk = keys.slice(i, i + 500);
371
- var placeholders = chunk.map(function() {
372
- return '?';
373
- }).join(', ');
374
- collect((_db_prepare = db.prepare("SELECT src, target, dst, embed FROM links WHERE ".concat(column, " IN (").concat(placeholders, ")"))).all.apply(_db_prepare, _to_consumable_array(chunk)));
375
- }
376
- };
377
- collectIn('src', delta.reparsed);
378
- collectIn('target_base', _to_consumable_array(changedBasenames));
379
- collectIn('dst', delta.vanished);
380
- return resolveRows(db, _to_consumable_array(candidates.values()), pathSet, byBase);
728
+ });
729
+ })();
381
730
  }
382
- function linkEdges(db) {
383
- // One edge per row, as 0.12's grain always had it -- two written targets resolving to one
384
- // dst stay two edges (a weight the fusion evals were gated on). The only exclusion is an
385
- // embed whose exact (src, target) also exists as a link: that second row is new with the
386
- // embed grain and would double an edge that used to be one row. The NOT EXISTS probes the
387
- // primary key and fires only for embed rows; both branches still scan the table.
388
- // Self-edges (same-note anchors) are excluded here so PageRank mass is not self-recycled --
389
- // Obsidian's own graph view hides self-loops too. The rows themselves stay in the table for
390
- // backlinks/peek.
391
- var sql = "SELECT src, dst FROM links WHERE dst IS NOT NULL AND embed = 0 AND src != dst\n UNION ALL\n SELECT src, dst FROM links l WHERE dst IS NOT NULL AND embed = 1 AND src != dst\n AND NOT EXISTS (SELECT 1 FROM links l0 WHERE l0.src = l.src AND l0.target = l.target AND l0.embed = 0)";
392
- return db.prepare(sql).all().map(function(r) {
731
+ var LINK_EDGES_SQL = "SELECT src, dst FROM links WHERE dst IS NOT NULL AND embed = 0 AND src != dst\n UNION ALL\n SELECT src, dst FROM links l WHERE dst IS NOT NULL AND embed = 1 AND src != dst\n AND NOT EXISTS (SELECT 1 FROM links l0 WHERE l0.src = l.src AND l0.target = l.target AND l0.embed = 0)";
732
+ function toEdges(rows) {
733
+ return rows.map(function(r) {
393
734
  return [
394
735
  r.src,
395
736
  r.dst
396
737
  ];
397
738
  });
398
739
  }
399
- // remove() has already deleted the rows by the time afterReconcile runs, so it records here
400
- // whether they carried edges. Keyed on the delta object, so the state dies with the reconcile.
401
- var removedWithLinks = new WeakMap();
402
- function recordRemoved(delta, path) {
403
- var set = removedWithLinks.get(delta);
404
- if (!set) {
405
- set = new Set();
406
- removedWithLinks.set(delta, set);
407
- }
408
- set.add(path);
409
- }
410
- // remove() runs per path; the vanished list is an array, so cache the Set per delta.
411
- var vanishedSets = new WeakMap();
412
- function vanishedSet(delta) {
413
- var set = vanishedSets.get(delta);
414
- if (!set) {
415
- set = new Set(delta.vanished);
416
- vanishedSets.set(delta, set);
417
- }
418
- return set;
740
+ function linkEdges(db) {
741
+ return _async_to_generator(function() {
742
+ var stmt;
743
+ return _ts_generator(this, function(_state) {
744
+ switch(_state.label){
745
+ case 0:
746
+ return [
747
+ 4,
748
+ db.prepare(LINK_EDGES_SQL)
749
+ ];
750
+ case 1:
751
+ stmt = _state.sent();
752
+ return [
753
+ 4,
754
+ stmt.all()
755
+ ];
756
+ case 2:
757
+ return [
758
+ 2,
759
+ toEdges.apply(void 0, [
760
+ _state.sent()
761
+ ])
762
+ ];
763
+ }
764
+ });
765
+ })();
419
766
  }
767
+ // remove()/store() have already deleted rows by the time afterReconcile runs, so this records
768
+ // whether any reconcile pass deleted at least one link row -- whether a file vanished, or a
769
+ // reparse's stale rows shrank. dstChanged alone misses the reparsed-to-zero-links case (no
770
+ // surviving rows to re-resolve). Keyed on the delta object, so the state dies with the reconcile.
771
+ var removedWithLinks = new WeakMap();
420
772
  var links = {
421
773
  name: 'links',
422
774
  schema: function schema(db) {
423
- db.exec('CREATE TABLE IF NOT EXISTS links (src TEXT, target TEXT, target_base TEXT, dst TEXT, embed INTEGER, PRIMARY KEY (src, target, embed))');
424
- db.exec('CREATE INDEX IF NOT EXISTS links_dst ON links(dst)');
425
- db.exec('CREATE INDEX IF NOT EXISTS links_target_base ON links(target_base)');
775
+ return _async_to_generator(function() {
776
+ return _ts_generator(this, function(_state) {
777
+ switch(_state.label){
778
+ case 0:
779
+ return [
780
+ 4,
781
+ db.exec('CREATE TABLE IF NOT EXISTS links (src TEXT, target TEXT, target_base TEXT, dst TEXT, embed INTEGER, PRIMARY KEY (src, target, embed))')
782
+ ];
783
+ case 1:
784
+ _state.sent();
785
+ return [
786
+ 4,
787
+ db.exec('CREATE INDEX IF NOT EXISTS links_dst ON links(dst)')
788
+ ];
789
+ case 2:
790
+ _state.sent();
791
+ return [
792
+ 4,
793
+ db.exec('CREATE INDEX IF NOT EXISTS links_target_base ON links(target_base)')
794
+ ];
795
+ case 3:
796
+ _state.sent();
797
+ return [
798
+ 2
799
+ ];
800
+ }
801
+ });
802
+ })();
426
803
  },
427
804
  extract: extract,
428
- // Reparsed docs are diffed in store() below instead of wiped here: deleting and
429
- // re-inserting resets dst to NULL, which made every touch-only reparse read as an edge
430
- // change and recompute PageRank -- measured as most of the remaining update cost.
431
- remove: function remove(db, path, delta) {
432
- if (!vanishedSet(delta).has(path)) return;
433
- var result = db.prepare('DELETE FROM links WHERE src = ?').run(path);
434
- if (Number(result.changes) > 0) recordRemoved(delta, path);
435
- },
436
- store: function store(db, path, extracted, delta) {
437
- var targets = extracted;
438
- // Stale rows (target/embed pairs the new parse no longer contains) are real edge removals.
439
- // \0 can't appear in a target, so the composite key never collides.
440
- var stale;
441
- if (targets.length === 0) {
442
- stale = db.prepare('DELETE FROM links WHERE src = ?').run(path);
443
- } else {
444
- var _db_prepare;
445
- var placeholders = targets.map(function() {
446
- return '?';
447
- }).join(', ');
448
- var keys = targets.map(function(t) {
449
- return "".concat(t.target, "\0").concat(t.embed ? '1' : '0');
450
- });
451
- stale = (_db_prepare = db.prepare("DELETE FROM links WHERE src = ? AND (target || char(0) || embed) NOT IN (".concat(placeholders, ")"))).run.apply(_db_prepare, [
452
- path
453
- ].concat(_to_consumable_array(keys)));
454
- }
455
- if (Number(stale.changes) > 0) recordRemoved(delta, path);
456
- // Upsert preserves dst on surviving rows, so an unchanged link resolves to the same
457
- // value and reports no change; only genuinely new rows start at NULL.
458
- var insert = db.prepare('INSERT INTO links (src, target, target_base, dst, embed) VALUES (?, ?, ?, NULL, ?) ON CONFLICT(src, target, embed) DO UPDATE SET target_base = excluded.target_base');
459
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
460
- try {
461
- // A same-note anchor's dst is always its own src, never another file's basename, so it
462
- // gets no target_base -- SQL's `IN` never matches NULL, keeping it out of
463
- // resolveIncremental's cross-file collectIn('target_base', ...) entirely.
464
- for(var _iterator = targets[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
465
- var _step_value = _step.value, target = _step_value.target, embed = _step_value.embed;
466
- insert.run(path, target, target.startsWith('#') ? null : baseKey(cleanTarget(target)), embed ? 1 : 0);
467
- }
468
- } catch (err) {
469
- _didIteratorError = true;
470
- _iteratorError = err;
471
- } finally{
472
- try {
473
- if (!_iteratorNormalCompletion && _iterator.return != null) {
474
- _iterator.return();
805
+ remove: // Reparsed docs are diffed in store() below instead of wiped here: deleting and re-inserting
806
+ // resets dst to NULL, which made every touch-only reparse read as an edge change and
807
+ // recompute PageRank -- measured as most of the remaining update cost. Only genuinely
808
+ // vanished files clear here.
809
+ function remove(db, paths, delta) {
810
+ return _async_to_generator(function() {
811
+ var vanishedSet, vanished, existingRows;
812
+ return _ts_generator(this, function(_state) {
813
+ switch(_state.label){
814
+ case 0:
815
+ vanishedSet = new Set(delta.vanished);
816
+ vanished = paths.filter(function(p) {
817
+ return vanishedSet.has(p);
818
+ });
819
+ if (vanished.length === 0) return [
820
+ 2
821
+ ];
822
+ return [
823
+ 4,
824
+ selectIn(db, 'src', vanished)
825
+ ];
826
+ case 1:
827
+ existingRows = _state.sent();
828
+ return [
829
+ 4,
830
+ db.runBatch('DELETE FROM links WHERE src = ?', vanished.map(function(p) {
831
+ return [
832
+ p
833
+ ];
834
+ }))
835
+ ];
836
+ case 2:
837
+ _state.sent();
838
+ if (existingRows.length > 0) removedWithLinks.set(delta, true);
839
+ return [
840
+ 2
841
+ ];
475
842
  }
476
- } finally{
477
- if (_didIteratorError) {
478
- throw _iteratorError;
843
+ });
844
+ })();
845
+ },
846
+ store: function store(db, docs, delta) {
847
+ return _async_to_generator(function() {
848
+ var byPath, addedSet, reparsedExisting, existingRows, staleRows, upsertRows, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, path, targets, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value1, target, embed;
849
+ return _ts_generator(this, function(_state) {
850
+ switch(_state.label){
851
+ case 0:
852
+ byPath = new Map(docs.map(function(d) {
853
+ return [
854
+ d.path,
855
+ d.extracted
856
+ ];
857
+ }));
858
+ addedSet = new Set(delta.added);
859
+ reparsedExisting = docs.map(function(d) {
860
+ return d.path;
861
+ }).filter(function(p) {
862
+ return !addedSet.has(p);
863
+ });
864
+ return [
865
+ 4,
866
+ selectIn(db, 'src', reparsedExisting)
867
+ ];
868
+ case 1:
869
+ existingRows = _state.sent();
870
+ staleRows = existingRows.filter(function(row) {
871
+ var _byPath_get;
872
+ var targets = (_byPath_get = byPath.get(row.src)) !== null && _byPath_get !== void 0 ? _byPath_get : [];
873
+ return !targets.some(function(t) {
874
+ return t.target === row.target && (t.embed ? 1 : 0) === row.embed;
875
+ });
876
+ });
877
+ if (!(staleRows.length > 0)) return [
878
+ 3,
879
+ 3
880
+ ];
881
+ return [
882
+ 4,
883
+ db.runBatch('DELETE FROM links WHERE src = ? AND target = ? AND embed = ?', staleRows.map(function(r) {
884
+ return [
885
+ r.src,
886
+ r.target,
887
+ r.embed
888
+ ];
889
+ }))
890
+ ];
891
+ case 2:
892
+ _state.sent();
893
+ removedWithLinks.set(delta, true);
894
+ _state.label = 3;
895
+ case 3:
896
+ // Upsert preserves dst on surviving rows, so an unchanged link resolves to the same value
897
+ // and reports no change; only genuinely new rows start at NULL. A same-note anchor's dst is
898
+ // always its own src, never another file's basename, so it gets no target_base -- SQL's
899
+ // `IN` never matches NULL, keeping it out of resolveIncremental's target_base lookup.
900
+ upsertRows = [];
901
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
902
+ try {
903
+ for(_iterator = byPath[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
904
+ _step_value = _sliced_to_array(_step.value, 2), path = _step_value[0], targets = _step_value[1];
905
+ _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
906
+ try {
907
+ for(_iterator1 = targets[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
908
+ _step_value1 = _step1.value, target = _step_value1.target, embed = _step_value1.embed;
909
+ upsertRows.push([
910
+ path,
911
+ target,
912
+ target.startsWith('#') ? null : baseKey(cleanTarget(target)),
913
+ embed ? 1 : 0
914
+ ]);
915
+ }
916
+ } catch (err) {
917
+ _didIteratorError1 = true;
918
+ _iteratorError1 = err;
919
+ } finally{
920
+ try {
921
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
922
+ _iterator1.return();
923
+ }
924
+ } finally{
925
+ if (_didIteratorError1) {
926
+ throw _iteratorError1;
927
+ }
928
+ }
929
+ }
930
+ }
931
+ } catch (err) {
932
+ _didIteratorError = true;
933
+ _iteratorError = err;
934
+ } finally{
935
+ try {
936
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
937
+ _iterator.return();
938
+ }
939
+ } finally{
940
+ if (_didIteratorError) {
941
+ throw _iteratorError;
942
+ }
943
+ }
944
+ }
945
+ if (!(upsertRows.length > 0)) return [
946
+ 3,
947
+ 5
948
+ ];
949
+ return [
950
+ 4,
951
+ db.runBatch('INSERT INTO links (src, target, target_base, dst, embed) VALUES (?, ?, ?, NULL, ?) ON CONFLICT(src, target, embed) DO UPDATE SET target_base = excluded.target_base', upsertRows)
952
+ ];
953
+ case 4:
954
+ _state.sent();
955
+ _state.label = 5;
956
+ case 5:
957
+ return [
958
+ 2
959
+ ];
479
960
  }
480
- }
481
- }
961
+ });
962
+ })();
482
963
  },
483
964
  afterReconcile: function afterReconcile(db, delta) {
484
- var _ref;
485
- var _removedWithLinks_get;
486
- // Any deleted rows that carried edges mean the edge set shrank -- whether the file
487
- // vanished or was reparsed down to fewer/no links. dstChanged alone misses the
488
- // reparsed-to-zero-links case (no surviving rows to re-resolve).
489
- var removeHadLinks = ((_ref = (_removedWithLinks_get = removedWithLinks.get(delta)) === null || _removedWithLinks_get === void 0 ? void 0 : _removedWithLinks_get.size) !== null && _ref !== void 0 ? _ref : 0) > 0;
490
- var churn = delta.reparsed.length + delta.vanished.length;
491
- // Past this share of the tree, a full pass is the only one guaranteed to match
492
- // resolveTarget's ambiguity rules. A cold build clears the threshold on its own.
493
- var large = delta.files.length === 0 || churn > 0.2 * delta.files.length;
494
- var dstChanged = large ? resolveAll(db, delta.files) : resolveIncremental(db, delta);
495
- delta.linksChanged = dstChanged || removeHadLinks;
965
+ return _async_to_generator(function() {
966
+ var _removedWithLinks_get, removeHadLinks, churn, large, dstChanged, _tmp;
967
+ return _ts_generator(this, function(_state) {
968
+ switch(_state.label){
969
+ case 0:
970
+ // Any deleted rows mean the edge set shrank -- whether the file vanished or was reparsed
971
+ // down to fewer/no links.
972
+ removeHadLinks = (_removedWithLinks_get = removedWithLinks.get(delta)) !== null && _removedWithLinks_get !== void 0 ? _removedWithLinks_get : false;
973
+ churn = delta.reparsed.length + delta.vanished.length;
974
+ // Past this share of the tree, a full pass is the only one guaranteed to match
975
+ // resolveTarget's ambiguity rules. A cold build clears the threshold on its own.
976
+ large = delta.files.length === 0 || churn > 0.2 * delta.files.length;
977
+ if (!large) return [
978
+ 3,
979
+ 2
980
+ ];
981
+ return [
982
+ 4,
983
+ resolveAll(db, delta.files)
984
+ ];
985
+ case 1:
986
+ _tmp = _state.sent();
987
+ return [
988
+ 3,
989
+ 4
990
+ ];
991
+ case 2:
992
+ return [
993
+ 4,
994
+ resolveIncremental(db, delta)
995
+ ];
996
+ case 3:
997
+ _tmp = _state.sent();
998
+ _state.label = 4;
999
+ case 4:
1000
+ dstChanged = _tmp;
1001
+ delta.linksChanged = dstChanged || removeHadLinks;
1002
+ return [
1003
+ 2
1004
+ ];
1005
+ }
1006
+ });
1007
+ })();
496
1008
  }
497
1009
  };
498
1010
  /* 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; }