sensemaking 0.17.1 → 0.18.1

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 (425) hide show
  1. package/README.md +15 -13
  2. package/dist/cjs/cli/map.js +144 -3
  3. package/dist/cjs/cli/map.js.map +1 -1
  4. package/dist/cjs/cli/named.js +19 -11
  5. package/dist/cjs/cli/named.js.map +1 -1
  6. package/dist/cjs/cli/path.js +186 -26
  7. package/dist/cjs/cli/path.js.map +1 -1
  8. package/dist/cjs/cli/peek.js +145 -4
  9. package/dist/cjs/cli/peek.js.map +1 -1
  10. package/dist/cjs/cli/related.js +2 -2
  11. package/dist/cjs/cli/related.js.map +1 -1
  12. package/dist/cjs/cli/search.js +2 -2
  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 +184 -53
  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 +3 -3
  64. package/dist/cjs/embed/distribution.d.ts +3 -3
  65. package/dist/cjs/embed/distribution.js +162 -6
  66. package/dist/cjs/embed/distribution.js.map +1 -1
  67. package/dist/cjs/embed/langfit.d.cts +2 -2
  68. package/dist/cjs/embed/langfit.d.ts +2 -2
  69. package/dist/cjs/embed/langfit.js +57 -44
  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/types.d.cts +1 -0
  76. package/dist/cjs/embed/types.d.ts +1 -0
  77. package/dist/cjs/embed/types.js +11 -2
  78. package/dist/cjs/embed/types.js.map +1 -1
  79. package/dist/cjs/errors.d.cts +1 -1
  80. package/dist/cjs/errors.d.ts +1 -1
  81. package/dist/cjs/errors.js.map +1 -1
  82. package/dist/cjs/features/embed.js +218 -11
  83. package/dist/cjs/features/embed.js.map +1 -1
  84. package/dist/cjs/features/index.d.cts +1 -1
  85. package/dist/cjs/features/index.d.ts +1 -1
  86. package/dist/cjs/features/index.js +6 -0
  87. package/dist/cjs/features/index.js.map +1 -1
  88. package/dist/cjs/features/links.d.cts +7 -2
  89. package/dist/cjs/features/links.d.ts +7 -2
  90. package/dist/cjs/features/links.js +710 -198
  91. package/dist/cjs/features/links.js.map +1 -1
  92. package/dist/cjs/features/rank.js +231 -31
  93. package/dist/cjs/features/rank.js.map +1 -1
  94. package/dist/cjs/features/sections.js +218 -8
  95. package/dist/cjs/features/sections.js.map +1 -1
  96. package/dist/cjs/features/tags.js +236 -40
  97. package/dist/cjs/features/tags.js.map +1 -1
  98. package/dist/cjs/features/types.d.cts +9 -5
  99. package/dist/cjs/features/types.d.ts +9 -5
  100. package/dist/cjs/graph/traverse.d.cts +2 -2
  101. package/dist/cjs/graph/traverse.d.ts +2 -2
  102. package/dist/cjs/graph/traverse.js +321 -42
  103. package/dist/cjs/graph/traverse.js.map +1 -1
  104. package/dist/cjs/index.d.cts +3 -2
  105. package/dist/cjs/index.d.ts +3 -2
  106. package/dist/cjs/index.js +2 -2
  107. package/dist/cjs/index.js.map +1 -1
  108. package/dist/cjs/lib/guarded-tick.d.cts +1 -0
  109. package/dist/cjs/lib/guarded-tick.d.ts +1 -0
  110. package/dist/cjs/lib/guarded-tick.js +19 -0
  111. package/dist/cjs/lib/guarded-tick.js.map +1 -0
  112. package/dist/cjs/output/column-hint.d.cts +1 -2
  113. package/dist/cjs/output/column-hint.d.ts +1 -2
  114. package/dist/cjs/output/column-hint.js +9 -11
  115. package/dist/cjs/output/column-hint.js.map +1 -1
  116. package/dist/cjs/output/output.d.cts +2 -1
  117. package/dist/cjs/output/output.d.ts +2 -1
  118. package/dist/cjs/output/output.js +515 -97
  119. package/dist/cjs/output/output.js.map +1 -1
  120. package/dist/cjs/scan/frontmatter.js.map +1 -1
  121. package/dist/cjs/scan/index.js.map +1 -1
  122. package/dist/cjs/scan/reparse.d.cts +10 -0
  123. package/dist/cjs/scan/reparse.d.ts +10 -0
  124. package/dist/cjs/scan/reparse.js +104 -0
  125. package/dist/cjs/scan/reparse.js.map +1 -0
  126. package/dist/cjs/store/duckdb/batch.d.cts +16 -0
  127. package/dist/cjs/store/duckdb/batch.d.ts +16 -0
  128. package/dist/cjs/store/duckdb/batch.js +208 -0
  129. package/dist/cjs/store/duckdb/batch.js.map +1 -0
  130. package/dist/cjs/store/duckdb/connection.d.cts +5 -0
  131. package/dist/cjs/store/duckdb/connection.d.ts +5 -0
  132. package/dist/cjs/store/duckdb/connection.js +772 -0
  133. package/dist/cjs/store/duckdb/connection.js.map +1 -0
  134. package/dist/cjs/store/duckdb/lexical.d.cts +10 -0
  135. package/dist/cjs/store/duckdb/lexical.d.ts +10 -0
  136. package/dist/cjs/store/duckdb/lexical.js +502 -0
  137. package/dist/cjs/store/duckdb/lexical.js.map +1 -0
  138. package/dist/cjs/store/duckdb/native.d.cts +3 -0
  139. package/dist/cjs/store/duckdb/native.d.ts +3 -0
  140. package/dist/cjs/store/duckdb/native.js +360 -0
  141. package/dist/cjs/store/duckdb/native.js.map +1 -0
  142. package/dist/cjs/store/duckdb/open.d.cts +12 -0
  143. package/dist/cjs/store/duckdb/open.d.ts +12 -0
  144. package/dist/cjs/store/duckdb/open.js +501 -0
  145. package/dist/cjs/store/duckdb/open.js.map +1 -0
  146. package/dist/cjs/store/duckdb/reconcile.d.cts +6 -0
  147. package/dist/cjs/store/duckdb/reconcile.d.ts +6 -0
  148. package/dist/cjs/store/duckdb/reconcile.js +753 -0
  149. package/dist/cjs/store/duckdb/reconcile.js.map +1 -0
  150. package/dist/cjs/store/duckdb/sql-functions.d.cts +2 -0
  151. package/dist/cjs/store/duckdb/sql-functions.d.ts +2 -0
  152. package/dist/cjs/store/duckdb/sql-functions.js +203 -0
  153. package/dist/cjs/store/duckdb/sql-functions.js.map +1 -0
  154. package/dist/cjs/store/duckdb/store.d.cts +5 -0
  155. package/dist/cjs/store/duckdb/store.d.ts +5 -0
  156. package/dist/cjs/store/duckdb/store.js +504 -0
  157. package/dist/cjs/store/duckdb/store.js.map +1 -0
  158. package/dist/cjs/store/duckdb/vectors.d.cts +9 -0
  159. package/dist/cjs/store/duckdb/vectors.d.ts +9 -0
  160. package/dist/cjs/store/duckdb/vectors.js +502 -0
  161. package/dist/cjs/store/duckdb/vectors.js.map +1 -0
  162. package/dist/cjs/store/index.d.cts +8 -0
  163. package/dist/cjs/store/index.d.ts +8 -0
  164. package/dist/cjs/store/index.js +214 -0
  165. package/dist/cjs/store/index.js.map +1 -0
  166. package/dist/cjs/store/meta.d.cts +3 -0
  167. package/dist/cjs/store/meta.d.ts +3 -0
  168. package/dist/cjs/store/meta.js +215 -0
  169. package/dist/cjs/store/meta.js.map +1 -0
  170. package/dist/cjs/store/shared.d.cts +5 -0
  171. package/dist/cjs/store/shared.d.ts +5 -0
  172. package/dist/cjs/store/shared.js +252 -0
  173. package/dist/cjs/store/shared.js.map +1 -0
  174. package/dist/cjs/store/sql-functions.d.cts +2 -0
  175. package/dist/cjs/store/sql-functions.d.ts +2 -0
  176. package/dist/cjs/store/sql-functions.js +48 -0
  177. package/dist/cjs/store/sql-functions.js.map +1 -0
  178. package/dist/cjs/store/sqlite/connection.d.cts +3 -0
  179. package/dist/cjs/store/sqlite/connection.d.ts +3 -0
  180. package/dist/cjs/store/sqlite/connection.js +516 -0
  181. package/dist/cjs/store/sqlite/connection.js.map +1 -0
  182. package/dist/cjs/store/sqlite/lexical.d.cts +2 -0
  183. package/dist/cjs/store/sqlite/lexical.d.ts +2 -0
  184. package/dist/cjs/store/sqlite/lexical.js +177 -0
  185. package/dist/cjs/store/sqlite/lexical.js.map +1 -0
  186. package/dist/cjs/{db → store/sqlite}/open.d.cts +5 -5
  187. package/dist/cjs/{db → store/sqlite}/open.d.ts +5 -5
  188. package/dist/cjs/store/sqlite/open.js +604 -0
  189. package/dist/cjs/store/sqlite/open.js.map +1 -0
  190. package/dist/cjs/store/sqlite/reconcile.d.cts +10 -0
  191. package/dist/cjs/store/sqlite/reconcile.d.ts +10 -0
  192. package/dist/cjs/store/sqlite/reconcile.js +1020 -0
  193. package/dist/cjs/store/sqlite/reconcile.js.map +1 -0
  194. package/dist/cjs/store/sqlite/sql-functions.js +34 -0
  195. package/dist/cjs/store/sqlite/sql-functions.js.map +1 -0
  196. package/dist/cjs/store/sqlite/store.d.cts +5 -0
  197. package/dist/cjs/store/sqlite/store.d.ts +5 -0
  198. package/dist/cjs/store/sqlite/store.js +588 -0
  199. package/dist/cjs/store/sqlite/store.js.map +1 -0
  200. package/dist/cjs/store/sqlite/vectors.d.cts +13 -0
  201. package/dist/cjs/store/sqlite/vectors.d.ts +13 -0
  202. package/dist/cjs/store/sqlite/vectors.js +470 -0
  203. package/dist/cjs/store/sqlite/vectors.js.map +1 -0
  204. package/dist/cjs/store/transaction.d.cts +5 -0
  205. package/dist/cjs/store/transaction.d.ts +5 -0
  206. package/dist/cjs/store/transaction.js +297 -0
  207. package/dist/cjs/store/transaction.js.map +1 -0
  208. package/dist/cjs/store/types.d.cts +91 -0
  209. package/dist/cjs/store/types.d.ts +91 -0
  210. package/dist/cjs/store/types.js +15 -0
  211. package/dist/cjs/store/types.js.map +1 -0
  212. package/dist/cjs/watch.d.cts +3 -0
  213. package/dist/cjs/watch.d.ts +3 -0
  214. package/dist/cjs/watch.js +216 -73
  215. package/dist/cjs/watch.js.map +1 -1
  216. package/dist/esm/cli/map.js +4 -4
  217. package/dist/esm/cli/map.js.map +1 -1
  218. package/dist/esm/cli/named.js +2 -2
  219. package/dist/esm/cli/named.js.map +1 -1
  220. package/dist/esm/cli/path.js +4 -4
  221. package/dist/esm/cli/path.js.map +1 -1
  222. package/dist/esm/cli/peek.js +4 -4
  223. package/dist/esm/cli/peek.js.map +1 -1
  224. package/dist/esm/cli/related.js +2 -2
  225. package/dist/esm/cli/related.js.map +1 -1
  226. package/dist/esm/cli/search.js +1 -1
  227. package/dist/esm/cli/search.js.map +1 -1
  228. package/dist/esm/cli/shared.d.ts +3 -3
  229. package/dist/esm/cli/shared.js +17 -17
  230. package/dist/esm/cli/shared.js.map +1 -1
  231. package/dist/esm/cli/sql.js +2 -2
  232. package/dist/esm/cli/sql.js.map +1 -1
  233. package/dist/esm/cli/status.js +28 -24
  234. package/dist/esm/cli/status.js.map +1 -1
  235. package/dist/esm/commands/map.d.ts +2 -2
  236. package/dist/esm/commands/map.js +51 -41
  237. package/dist/esm/commands/map.js.map +1 -1
  238. package/dist/esm/commands/peek.d.ts +2 -2
  239. package/dist/esm/commands/peek.js +58 -50
  240. package/dist/esm/commands/peek.js.map +1 -1
  241. package/dist/esm/commands/related.d.ts +2 -2
  242. package/dist/esm/commands/related.js +9 -9
  243. package/dist/esm/commands/related.js.map +1 -1
  244. package/dist/esm/commands/scope.d.ts +7 -7
  245. package/dist/esm/commands/scope.js +28 -17
  246. package/dist/esm/commands/scope.js.map +1 -1
  247. package/dist/esm/commands/search.d.ts +2 -2
  248. package/dist/esm/commands/search.js +42 -35
  249. package/dist/esm/commands/search.js.map +1 -1
  250. package/dist/esm/commands/signals.d.ts +4 -10
  251. package/dist/esm/commands/signals.js +17 -13
  252. package/dist/esm/commands/signals.js.map +1 -1
  253. package/dist/esm/commands/status.d.ts +2 -2
  254. package/dist/esm/commands/status.js +13 -7
  255. package/dist/esm/commands/status.js.map +1 -1
  256. package/dist/esm/config/access.d.ts +1 -0
  257. package/dist/esm/config/access.js +5 -0
  258. package/dist/esm/config/access.js.map +1 -1
  259. package/dist/esm/config/index.d.ts +1 -1
  260. package/dist/esm/config/index.js +1 -1
  261. package/dist/esm/config/index.js.map +1 -1
  262. package/dist/esm/config/types.d.ts +1 -0
  263. package/dist/esm/config/types.js.map +1 -1
  264. package/dist/esm/config/validate.js +10 -1
  265. package/dist/esm/config/validate.js.map +1 -1
  266. package/dist/esm/embed/distribution.d.ts +3 -3
  267. package/dist/esm/embed/distribution.js +5 -5
  268. package/dist/esm/embed/distribution.js.map +1 -1
  269. package/dist/esm/embed/langfit.d.ts +2 -2
  270. package/dist/esm/embed/langfit.js +4 -4
  271. package/dist/esm/embed/langfit.js.map +1 -1
  272. package/dist/esm/embed/query.d.ts +6 -13
  273. package/dist/esm/embed/query.js +23 -84
  274. package/dist/esm/embed/query.js.map +1 -1
  275. package/dist/esm/embed/types.d.ts +1 -0
  276. package/dist/esm/embed/types.js +5 -3
  277. package/dist/esm/embed/types.js.map +1 -1
  278. package/dist/esm/errors.d.ts +1 -1
  279. package/dist/esm/errors.js.map +1 -1
  280. package/dist/esm/features/embed.js +22 -10
  281. package/dist/esm/features/embed.js.map +1 -1
  282. package/dist/esm/features/index.d.ts +1 -1
  283. package/dist/esm/features/index.js +1 -1
  284. package/dist/esm/features/index.js.map +1 -1
  285. package/dist/esm/features/links.d.ts +7 -2
  286. package/dist/esm/features/links.js +124 -97
  287. package/dist/esm/features/links.js.map +1 -1
  288. package/dist/esm/features/rank.js +15 -8
  289. package/dist/esm/features/rank.js.map +1 -1
  290. package/dist/esm/features/sections.js +20 -7
  291. package/dist/esm/features/sections.js.map +1 -1
  292. package/dist/esm/features/tags.js +19 -18
  293. package/dist/esm/features/tags.js.map +1 -1
  294. package/dist/esm/features/types.d.ts +9 -5
  295. package/dist/esm/features/types.js +1 -1
  296. package/dist/esm/features/types.js.map +1 -1
  297. package/dist/esm/graph/traverse.d.ts +2 -2
  298. package/dist/esm/graph/traverse.js +26 -23
  299. package/dist/esm/graph/traverse.js.map +1 -1
  300. package/dist/esm/index.d.ts +3 -2
  301. package/dist/esm/index.js +1 -1
  302. package/dist/esm/index.js.map +1 -1
  303. package/dist/esm/lib/guarded-tick.d.ts +1 -0
  304. package/dist/esm/lib/guarded-tick.js +8 -0
  305. package/dist/esm/lib/guarded-tick.js.map +1 -0
  306. package/dist/esm/output/column-hint.d.ts +1 -2
  307. package/dist/esm/output/column-hint.js +11 -9
  308. package/dist/esm/output/column-hint.js.map +1 -1
  309. package/dist/esm/output/output.d.ts +2 -1
  310. package/dist/esm/output/output.js +27 -23
  311. package/dist/esm/output/output.js.map +1 -1
  312. package/dist/esm/scan/frontmatter.js +1 -1
  313. package/dist/esm/scan/frontmatter.js.map +1 -1
  314. package/dist/esm/scan/index.js +1 -1
  315. package/dist/esm/scan/index.js.map +1 -1
  316. package/dist/esm/scan/reparse.d.ts +10 -0
  317. package/dist/esm/scan/reparse.js +30 -0
  318. package/dist/esm/scan/reparse.js.map +1 -0
  319. package/dist/esm/store/duckdb/batch.d.ts +16 -0
  320. package/dist/esm/store/duckdb/batch.js +96 -0
  321. package/dist/esm/store/duckdb/batch.js.map +1 -0
  322. package/dist/esm/store/duckdb/connection.d.ts +5 -0
  323. package/dist/esm/store/duckdb/connection.js +97 -0
  324. package/dist/esm/store/duckdb/connection.js.map +1 -0
  325. package/dist/esm/store/duckdb/lexical.d.ts +10 -0
  326. package/dist/esm/store/duckdb/lexical.js +163 -0
  327. package/dist/esm/store/duckdb/lexical.js.map +1 -0
  328. package/dist/esm/store/duckdb/native.d.ts +3 -0
  329. package/dist/esm/store/duckdb/native.js +96 -0
  330. package/dist/esm/store/duckdb/native.js.map +1 -0
  331. package/dist/esm/store/duckdb/open.d.ts +12 -0
  332. package/dist/esm/store/duckdb/open.js +127 -0
  333. package/dist/esm/store/duckdb/open.js.map +1 -0
  334. package/dist/esm/store/duckdb/reconcile.d.ts +6 -0
  335. package/dist/esm/store/duckdb/reconcile.js +141 -0
  336. package/dist/esm/store/duckdb/reconcile.js.map +1 -0
  337. package/dist/esm/store/duckdb/sql-functions.d.ts +2 -0
  338. package/dist/esm/store/duckdb/sql-functions.js +56 -0
  339. package/dist/esm/store/duckdb/sql-functions.js.map +1 -0
  340. package/dist/esm/store/duckdb/store.d.ts +5 -0
  341. package/dist/esm/store/duckdb/store.js +104 -0
  342. package/dist/esm/store/duckdb/store.js.map +1 -0
  343. package/dist/esm/store/duckdb/vectors.d.ts +9 -0
  344. package/dist/esm/store/duckdb/vectors.js +171 -0
  345. package/dist/esm/store/duckdb/vectors.js.map +1 -0
  346. package/dist/esm/store/index.d.ts +8 -0
  347. package/dist/esm/store/index.js +47 -0
  348. package/dist/esm/store/index.js.map +1 -0
  349. package/dist/esm/store/meta.d.ts +3 -0
  350. package/dist/esm/store/meta.js +17 -0
  351. package/dist/esm/store/meta.js.map +1 -0
  352. package/dist/esm/store/shared.d.ts +5 -0
  353. package/dist/esm/store/shared.js +24 -0
  354. package/dist/esm/store/shared.js.map +1 -0
  355. package/dist/esm/store/sql-functions.d.ts +2 -0
  356. package/dist/esm/store/sql-functions.js +29 -0
  357. package/dist/esm/store/sql-functions.js.map +1 -0
  358. package/dist/esm/store/sqlite/connection.d.ts +3 -0
  359. package/dist/esm/store/sqlite/connection.js +50 -0
  360. package/dist/esm/store/sqlite/connection.js.map +1 -0
  361. package/dist/esm/store/sqlite/lexical.d.ts +2 -0
  362. package/dist/esm/store/sqlite/lexical.js +21 -0
  363. package/dist/esm/store/sqlite/lexical.js.map +1 -0
  364. package/dist/esm/{db → store/sqlite}/open.d.ts +5 -5
  365. package/dist/esm/store/sqlite/open.js +193 -0
  366. package/dist/esm/store/sqlite/open.js.map +1 -0
  367. package/dist/esm/store/sqlite/reconcile.d.ts +10 -0
  368. package/dist/esm/{db → store/sqlite}/reconcile.js +101 -99
  369. package/dist/esm/store/sqlite/reconcile.js.map +1 -0
  370. package/dist/esm/store/sqlite/sql-functions.js +23 -0
  371. package/dist/esm/store/sqlite/sql-functions.js.map +1 -0
  372. package/dist/esm/store/sqlite/store.d.ts +5 -0
  373. package/dist/esm/store/sqlite/store.js +82 -0
  374. package/dist/esm/store/sqlite/store.js.map +1 -0
  375. package/dist/esm/store/sqlite/vectors.d.ts +13 -0
  376. package/dist/esm/store/sqlite/vectors.js +90 -0
  377. package/dist/esm/store/sqlite/vectors.js.map +1 -0
  378. package/dist/esm/store/transaction.d.ts +5 -0
  379. package/dist/esm/store/transaction.js +57 -0
  380. package/dist/esm/store/transaction.js.map +1 -0
  381. package/dist/esm/store/types.d.ts +91 -0
  382. package/dist/esm/store/types.js +11 -0
  383. package/dist/esm/store/types.js.map +1 -0
  384. package/dist/esm/watch.d.ts +3 -0
  385. package/dist/esm/watch.js +40 -22
  386. package/dist/esm/watch.js.map +1 -1
  387. package/package.json +3 -1
  388. package/schema.json +5 -0
  389. package/skills/sense/EXAMPLES.md +3 -3
  390. package/skills/sense/SKILL.md +16 -14
  391. package/skills/sense-bases/EXAMPLES.md +2 -2
  392. package/skills/sense-bases/SKILL.md +6 -6
  393. package/skills/sense-setup/EXAMPLES.md +1 -1
  394. package/skills/sense-setup/SKILL.md +5 -4
  395. package/dist/cjs/db/index.d.cts +0 -4
  396. package/dist/cjs/db/index.d.ts +0 -4
  397. package/dist/cjs/db/index.js +0 -42
  398. package/dist/cjs/db/index.js.map +0 -1
  399. package/dist/cjs/db/open.js +0 -230
  400. package/dist/cjs/db/open.js.map +0 -1
  401. package/dist/cjs/db/reconcile.d.cts +0 -10
  402. package/dist/cjs/db/reconcile.d.ts +0 -10
  403. package/dist/cjs/db/reconcile.js +0 -579
  404. package/dist/cjs/db/reconcile.js.map +0 -1
  405. package/dist/cjs/db/shared.d.cts +0 -5
  406. package/dist/cjs/db/shared.d.ts +0 -5
  407. package/dist/cjs/db/shared.js +0 -45
  408. package/dist/cjs/db/shared.js.map +0 -1
  409. package/dist/cjs/db/sql-functions.js +0 -64
  410. package/dist/cjs/db/sql-functions.js.map +0 -1
  411. package/dist/esm/db/index.d.ts +0 -4
  412. package/dist/esm/db/index.js +0 -5
  413. package/dist/esm/db/index.js.map +0 -1
  414. package/dist/esm/db/open.js +0 -165
  415. package/dist/esm/db/open.js.map +0 -1
  416. package/dist/esm/db/reconcile.d.ts +0 -10
  417. package/dist/esm/db/reconcile.js.map +0 -1
  418. package/dist/esm/db/shared.d.ts +0 -5
  419. package/dist/esm/db/shared.js +0 -20
  420. package/dist/esm/db/shared.js.map +0 -1
  421. package/dist/esm/db/sql-functions.js +0 -47
  422. package/dist/esm/db/sql-functions.js.map +0 -1
  423. /package/dist/cjs/{db → store/sqlite}/sql-functions.d.cts +0 -0
  424. /package/dist/cjs/{db → store/sqlite}/sql-functions.d.ts +0 -0
  425. /package/dist/esm/{db → store/sqlite}/sql-functions.d.ts +0 -0
@@ -11,80 +11,386 @@ Object.defineProperty(exports, "mapTree", {
11
11
  var _indexts = require("../config/index.js");
12
12
  var _scopets = require("./scope.js");
13
13
  var _statusts = require("./status.js");
14
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
15
+ try {
16
+ var info = gen[key](arg);
17
+ var value = info.value;
18
+ } catch (error) {
19
+ reject(error);
20
+ return;
21
+ }
22
+ if (info.done) resolve(value);
23
+ else Promise.resolve(value).then(_next, _throw);
24
+ }
25
+ function _async_to_generator(fn) {
26
+ return function() {
27
+ var self = this, args = arguments;
28
+ return new Promise(function(resolve, reject) {
29
+ var gen = fn.apply(self, args);
30
+ function _next(value) {
31
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
32
+ }
33
+ function _throw(err) {
34
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
35
+ }
36
+ _next(undefined);
37
+ });
38
+ };
39
+ }
40
+ function _ts_generator(thisArg, body) {
41
+ var f, y, t, _ = {
42
+ label: 0,
43
+ sent: function() {
44
+ if (t[0] & 1) throw t[1];
45
+ return t[1];
46
+ },
47
+ trys: [],
48
+ ops: []
49
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
50
+ return d(g, "next", {
51
+ value: verb(0)
52
+ }), d(g, "throw", {
53
+ value: verb(1)
54
+ }), d(g, "return", {
55
+ value: verb(2)
56
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
57
+ value: function() {
58
+ return this;
59
+ }
60
+ }), g;
61
+ function verb(n) {
62
+ return function(v) {
63
+ return step([
64
+ n,
65
+ v
66
+ ]);
67
+ };
68
+ }
69
+ function step(op) {
70
+ if (f) throw new TypeError("Generator is already executing.");
71
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
72
+ 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;
73
+ if (y = 0, t) op = [
74
+ op[0] & 2,
75
+ t.value
76
+ ];
77
+ switch(op[0]){
78
+ case 0:
79
+ case 1:
80
+ t = op;
81
+ break;
82
+ case 4:
83
+ _.label++;
84
+ return {
85
+ value: op[1],
86
+ done: false
87
+ };
88
+ case 5:
89
+ _.label++;
90
+ y = op[1];
91
+ op = [
92
+ 0
93
+ ];
94
+ continue;
95
+ case 7:
96
+ op = _.ops.pop();
97
+ _.trys.pop();
98
+ continue;
99
+ default:
100
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
101
+ _ = 0;
102
+ continue;
103
+ }
104
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
105
+ _.label = op[1];
106
+ break;
107
+ }
108
+ if (op[0] === 6 && _.label < t[1]) {
109
+ _.label = t[1];
110
+ t = op;
111
+ break;
112
+ }
113
+ if (t && _.label < t[2]) {
114
+ _.label = t[2];
115
+ _.ops.push(op);
116
+ break;
117
+ }
118
+ if (t[2]) _.ops.pop();
119
+ _.trys.pop();
120
+ continue;
121
+ }
122
+ op = body.call(thisArg, _);
123
+ } catch (e) {
124
+ op = [
125
+ 6,
126
+ e
127
+ ];
128
+ y = 0;
129
+ } finally{
130
+ f = t = 0;
131
+ }
132
+ if (op[0] & 5) throw op[1];
133
+ return {
134
+ value: op[0] ? op[1] : void 0,
135
+ done: true
136
+ };
137
+ }
138
+ }
139
+ function _ts_values(o) {
140
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
141
+ if (m) {
142
+ return m.call(o);
143
+ }
144
+ if (o && typeof o.length === "number") {
145
+ return {
146
+ next: function() {
147
+ if (o && i >= o.length) {
148
+ o = void 0;
149
+ }
150
+ return {
151
+ value: o && o[i++],
152
+ done: !o
153
+ };
154
+ }
155
+ };
156
+ }
157
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
158
+ }
14
159
  // A result row is capped at SQLITE_MAX_COLUMN (2000, default); two aggregate expressions
15
160
  // per field keeps a chunk's row safely under that regardless of how many fields the tree has.
16
161
  var MAP_COLUMN_CHUNK = 300;
162
+ // "YYYY-MM-DD HH:MM:SS" UTC, the exact shape sqlite's datetime(ms / 1000, 'unixepoch') prints;
163
+ // formatted in JS so the query stays dialect-free.
164
+ function utcSecond(ms) {
165
+ return new Date(ms).toISOString().slice(0, 19).replace('T', ' ');
166
+ }
17
167
  function chunk(items, size) {
18
168
  var out = [];
19
169
  for(var i = 0; i < items.length; i += size)out.push(items.slice(i, i + size));
20
170
  return out;
21
171
  }
22
- function mapTree(db, cfg) {
23
- var overrides = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
24
- (0, _scopets.setupMapScope)(db, (0, _scopets.scopedPaths)(db, cfg, overrides));
25
- var scopeWhere = 'WHERE "path" IN (SELECT "path" FROM _map_scope)';
26
- var scopeAnd = 'AND f."path" IN (SELECT "path" FROM _map_scope)';
27
- var docs = db.prepare('SELECT COUNT(*) AS count, COALESCE(SUM("_size"), 0) AS bytes FROM frontmatter '.concat(scopeWhere)).get();
28
- var columns = db.prepare('PRAGMA table_info(frontmatter)').all().map(function(r) {
29
- return r.name;
30
- }).filter(function(name) {
31
- return !_scopets.INTERNAL_COLUMNS.has(name);
32
- });
33
- // Observed types, not declared: SQLite types per value, so a field can be text in most notes
34
- // and numeric in a few. One aggregate scan per chunk of columns; FILTER matches COUNT's nulls.
35
- var allFields = [];
36
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
37
- try {
38
- var _loop = function() {
39
- var group = _step.value;
40
- var exprs = group.map(function(name, i) {
41
- var quoted = '"'.concat(name.split('"').join('""'), '"');
42
- return "COUNT(".concat(quoted, ") AS n").concat(i, ", GROUP_CONCAT(DISTINCT typeof(").concat(quoted, ")) FILTER (WHERE ").concat(quoted, " IS NOT NULL) AS t").concat(i);
43
- });
44
- var result = db.prepare("SELECT ".concat(exprs.join(', '), " FROM frontmatter ").concat(scopeWhere)).get();
45
- group.forEach(function(name, i) {
46
- var _result_;
47
- return allFields.push({
48
- field: name,
49
- coverage: result["n".concat(i)],
50
- type: (_result_ = result["t".concat(i)]) !== null && _result_ !== void 0 ? _result_ : ''
51
- });
52
- });
53
- };
54
- for(var _iterator = chunk(columns, MAP_COLUMN_CHUNK)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
55
- } catch (err) {
56
- _didIteratorError = true;
57
- _iteratorError = err;
58
- } finally{
59
- try {
60
- if (!_iteratorNormalCompletion && _iterator.return != null) {
61
- _iterator.return();
62
- }
63
- } finally{
64
- if (_didIteratorError) {
65
- throw _iteratorError;
66
- }
67
- }
68
- }
69
- allFields.sort(function(a, b) {
70
- return b.coverage - a.coverage;
71
- });
72
- var fields = allFields.slice(0, 20);
73
- var hubs = (0, _indexts.featureEnabled)(cfg, 'rank') ? db.prepare('SELECT f."path" AS path, round(f."_rank" * 100, 2) AS rank, content.title FROM frontmatter f JOIN content ON content.path = f."path" WHERE f."_rank" IS NOT NULL '.concat(scopeAnd, ' ORDER BY f."_rank" DESC LIMIT 8')).all() : [];
74
- var recent = db.prepare('SELECT "path", datetime("_mtime" / 1000, \'unixepoch\') AS modified FROM frontmatter '.concat(scopeWhere, ' ORDER BY "_mtime" DESC LIMIT 5')).all();
75
- // A fresh clone/copy stamps files with checkout time, not edit history; second granularity
76
- // matches the `recent` table above and is coarse enough to catch that without an exact-ms match.
77
- var topSecond = db.prepare("SELECT COUNT(*) AS n FROM frontmatter ".concat(scopeWhere, ' GROUP BY CAST("_mtime" / 1000 AS INTEGER) ORDER BY n DESC LIMIT 1')).get();
78
- var recentCaveat = topSecond && docs.count > 1 && topSecond.n > docs.count / 2 ? "".concat(topSecond.n, " of ").concat(docs.count, " files share one modified second, so recency likely reflects a checkout or copy, not edit history") : null;
79
- return {
80
- docs: docs,
81
- fields: fields,
82
- fieldsTotal: allFields.length,
83
- features: (0, _indexts.featureStates)(cfg),
84
- presets: (0, _statusts.presetCoverage)(db, cfg),
85
- hubs: hubs,
86
- recent: recent,
87
- recentCaveat: recentCaveat
88
- };
172
+ function mapTree(_0, _1) {
173
+ return _async_to_generator(function(store, cfg) {
174
+ var overrides;
175
+ var _arguments = arguments;
176
+ return _ts_generator(this, function(_state) {
177
+ overrides = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
178
+ return [
179
+ 2,
180
+ store.transaction(function() {
181
+ return _async_to_generator(function() {
182
+ var _tmp, scopeWhere, scopeAnd, docs, columns, allFields, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err, fields, hubs, _tmp1, recent, topSecond, recentCaveat, _tmp2;
183
+ return _ts_generator(this, function(_state) {
184
+ switch(_state.label){
185
+ case 0:
186
+ _tmp = [
187
+ store
188
+ ];
189
+ return [
190
+ 4,
191
+ (0, _scopets.scopedPaths)(store, cfg, overrides)
192
+ ];
193
+ case 1:
194
+ return [
195
+ 4,
196
+ _scopets.setupMapScope.apply(void 0, _tmp.concat([
197
+ _state.sent()
198
+ ]))
199
+ ];
200
+ case 2:
201
+ _state.sent();
202
+ scopeWhere = 'WHERE "path" IN (SELECT "path" FROM _map_scope)';
203
+ scopeAnd = 'AND f."path" IN (SELECT "path" FROM _map_scope)';
204
+ return [
205
+ 4,
206
+ store.prepare('SELECT COUNT(*) AS count, COALESCE(SUM("_size"), 0) AS bytes FROM frontmatter '.concat(scopeWhere))
207
+ ];
208
+ case 3:
209
+ return [
210
+ 4,
211
+ _state.sent().get()
212
+ ];
213
+ case 4:
214
+ docs = _state.sent();
215
+ return [
216
+ 4,
217
+ store.docs.columns()
218
+ ];
219
+ case 5:
220
+ columns = _state.sent().filter(function(name) {
221
+ return !_scopets.INTERNAL_COLUMNS.has(name);
222
+ });
223
+ // Observed types, not declared: SQLite types per value, so a field can be text in most notes
224
+ // and numeric in a few. One aggregate scan per chunk of columns; FILTER matches COUNT's nulls.
225
+ allFields = [];
226
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
227
+ _state.label = 6;
228
+ case 6:
229
+ _state.trys.push([
230
+ 6,
231
+ 11,
232
+ 12,
233
+ 13
234
+ ]);
235
+ _loop = function() {
236
+ var group, exprs, result;
237
+ return _ts_generator(this, function(_state) {
238
+ switch(_state.label){
239
+ case 0:
240
+ group = _step.value;
241
+ exprs = group.map(function(name, i) {
242
+ var quoted = '"'.concat(name.split('"').join('""'), '"');
243
+ return "COUNT(".concat(quoted, ") AS n").concat(i, ", GROUP_CONCAT(DISTINCT typeof(").concat(quoted, ")) FILTER (WHERE ").concat(quoted, " IS NOT NULL) AS t").concat(i);
244
+ });
245
+ return [
246
+ 4,
247
+ store.prepare("SELECT ".concat(exprs.join(', '), " FROM frontmatter ").concat(scopeWhere))
248
+ ];
249
+ case 1:
250
+ return [
251
+ 4,
252
+ _state.sent().get()
253
+ ];
254
+ case 2:
255
+ result = _state.sent();
256
+ group.forEach(function(name, i) {
257
+ var _result_;
258
+ return allFields.push({
259
+ field: name,
260
+ coverage: result["n".concat(i)],
261
+ type: (_result_ = result["t".concat(i)]) !== null && _result_ !== void 0 ? _result_ : ''
262
+ });
263
+ });
264
+ return [
265
+ 2
266
+ ];
267
+ }
268
+ });
269
+ };
270
+ _iterator = chunk(columns, MAP_COLUMN_CHUNK)[Symbol.iterator]();
271
+ _state.label = 7;
272
+ case 7:
273
+ if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
274
+ 3,
275
+ 10
276
+ ];
277
+ return [
278
+ 5,
279
+ _ts_values(_loop())
280
+ ];
281
+ case 8:
282
+ _state.sent();
283
+ _state.label = 9;
284
+ case 9:
285
+ _iteratorNormalCompletion = true;
286
+ return [
287
+ 3,
288
+ 7
289
+ ];
290
+ case 10:
291
+ return [
292
+ 3,
293
+ 13
294
+ ];
295
+ case 11:
296
+ err = _state.sent();
297
+ _didIteratorError = true;
298
+ _iteratorError = err;
299
+ return [
300
+ 3,
301
+ 13
302
+ ];
303
+ case 12:
304
+ try {
305
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
306
+ _iterator.return();
307
+ }
308
+ } finally{
309
+ if (_didIteratorError) {
310
+ throw _iteratorError;
311
+ }
312
+ }
313
+ return [
314
+ 7
315
+ ];
316
+ case 13:
317
+ allFields.sort(function(a, b) {
318
+ return b.coverage - a.coverage;
319
+ });
320
+ fields = allFields.slice(0, 20);
321
+ if (!(0, _indexts.featureEnabled)(cfg, 'rank')) return [
322
+ 3,
323
+ 16
324
+ ];
325
+ return [
326
+ 4,
327
+ store.prepare('SELECT f."path" AS path, round(f."_rank" * 100, 2) AS rank, content.title FROM frontmatter f JOIN content ON content.path = f."path" WHERE f."_rank" IS NOT NULL '.concat(scopeAnd, ' ORDER BY f."_rank" DESC LIMIT 8'))
328
+ ];
329
+ case 14:
330
+ return [
331
+ 4,
332
+ _state.sent().all()
333
+ ];
334
+ case 15:
335
+ _tmp1 = _state.sent();
336
+ return [
337
+ 3,
338
+ 17
339
+ ];
340
+ case 16:
341
+ _tmp1 = [];
342
+ _state.label = 17;
343
+ case 17:
344
+ hubs = _tmp1;
345
+ return [
346
+ 4,
347
+ store.prepare('SELECT "path", "_mtime" AS mtime FROM frontmatter '.concat(scopeWhere, ' ORDER BY "_mtime" DESC LIMIT 5'))
348
+ ];
349
+ case 18:
350
+ return [
351
+ 4,
352
+ _state.sent().all()
353
+ ];
354
+ case 19:
355
+ recent = _state.sent().map(function(r) {
356
+ return {
357
+ path: r.path,
358
+ modified: utcSecond(r.mtime)
359
+ };
360
+ });
361
+ return [
362
+ 4,
363
+ store.prepare("SELECT COUNT(*) AS n FROM frontmatter ".concat(scopeWhere, ' GROUP BY CAST("_mtime" / 1000 AS INTEGER) ORDER BY n DESC LIMIT 1'))
364
+ ];
365
+ case 20:
366
+ return [
367
+ 4,
368
+ _state.sent().get()
369
+ ];
370
+ case 21:
371
+ topSecond = _state.sent();
372
+ recentCaveat = topSecond && docs.count > 1 && topSecond.n > docs.count / 2 ? "".concat(topSecond.n, " of ").concat(docs.count, " files share one modified second, so recency likely reflects a checkout or copy, not edit history") : null;
373
+ _tmp2 = {
374
+ docs: docs,
375
+ fields: fields,
376
+ fieldsTotal: allFields.length,
377
+ features: (0, _indexts.featureStates)(cfg)
378
+ };
379
+ return [
380
+ 4,
381
+ (0, _statusts.presetCoverage)(store, cfg)
382
+ ];
383
+ case 22:
384
+ return [
385
+ 2,
386
+ (_tmp2.presets = _state.sent(), _tmp2.hubs = hubs, _tmp2.recent = recent, _tmp2.recentCaveat = recentCaveat, _tmp2)
387
+ ];
388
+ }
389
+ });
390
+ })();
391
+ })
392
+ ];
393
+ });
394
+ }).apply(this, arguments);
89
395
  }
90
396
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/commands/map.ts"],"sourcesContent":["import type { DatabaseSync } from 'node:sqlite';\nimport type { FeatureName, ResolvedConfig, SearchOverrides } from '../config/index.ts';\nimport { featureEnabled, featureStates } from '../config/index.ts';\nimport type { Row } from '../output/output.ts';\nimport { INTERNAL_COLUMNS, scopedPaths, setupMapScope } from './scope.ts';\nimport type { PresetCoverage } from './status.ts';\nimport { presetCoverage } from './status.ts';\n\nexport interface TreeMap {\n docs: { count: number; bytes: number };\n fields: Row[]; // top 20 by coverage; fieldsTotal carries the real count\n fieldsTotal: number;\n features: { on: FeatureName[]; off: FeatureName[] };\n presets: PresetCoverage[];\n hubs: Row[];\n recent: Row[];\n recentCaveat: string | null;\n}\n\n// A result row is capped at SQLITE_MAX_COLUMN (2000, default); two aggregate expressions\n// per field keeps a chunk's row safely under that regardless of how many fields the tree has.\nconst MAP_COLUMN_CHUNK = 300;\n\nfunction chunk<T>(items: T[], size: number): T[][] {\n const out: T[][] = [];\n for (let i = 0; i < items.length; i += size) out.push(items.slice(i, i + size));\n return out;\n}\n\n// What is this scope: fixed-size output regardless of tree size. Coverage and features stay\n// global -- they describe the tree, not the current question.\nexport function mapTree(db: DatabaseSync, cfg: ResolvedConfig, overrides: SearchOverrides = {}): TreeMap {\n setupMapScope(db, scopedPaths(db, cfg, overrides));\n const scopeWhere = 'WHERE \"path\" IN (SELECT \"path\" FROM _map_scope)';\n const scopeAnd = 'AND f.\"path\" IN (SELECT \"path\" FROM _map_scope)';\n\n const docs = db.prepare(`SELECT COUNT(*) AS count, COALESCE(SUM(\"_size\"), 0) AS bytes FROM frontmatter ${scopeWhere}`).get() as { count: number; bytes: number };\n\n const columns = (db.prepare('PRAGMA table_info(frontmatter)').all() as Array<{ name: string }>).map((r) => r.name).filter((name) => !INTERNAL_COLUMNS.has(name));\n // Observed types, not declared: SQLite types per value, so a field can be text in most notes\n // and numeric in a few. One aggregate scan per chunk of columns; FILTER matches COUNT's nulls.\n const allFields: Row[] = [];\n for (const group of chunk(columns, MAP_COLUMN_CHUNK)) {\n const exprs = group.map((name, i) => {\n const quoted = `\"${name.split('\"').join('\"\"')}\"`;\n return `COUNT(${quoted}) AS n${i}, GROUP_CONCAT(DISTINCT typeof(${quoted})) FILTER (WHERE ${quoted} IS NOT NULL) AS t${i}`;\n });\n const result = db.prepare(`SELECT ${exprs.join(', ')} FROM frontmatter ${scopeWhere}`).get() as Record<string, number | string | null>;\n group.forEach((name, i) => allFields.push({ field: name, coverage: result[`n${i}`] as number, type: (result[`t${i}`] as string) ?? '' }));\n }\n allFields.sort((a, b) => (b.coverage as number) - (a.coverage as number));\n const fields = allFields.slice(0, 20);\n\n const hubs = featureEnabled(cfg, 'rank') ? (db.prepare(`SELECT f.\"path\" AS path, round(f.\"_rank\" * 100, 2) AS rank, content.title FROM frontmatter f JOIN content ON content.path = f.\"path\" WHERE f.\"_rank\" IS NOT NULL ${scopeAnd} ORDER BY f.\"_rank\" DESC LIMIT 8`).all() as Row[]) : [];\n\n const recent = db.prepare(`SELECT \"path\", datetime(\"_mtime\" / 1000, 'unixepoch') AS modified FROM frontmatter ${scopeWhere} ORDER BY \"_mtime\" DESC LIMIT 5`).all() as Row[];\n\n // A fresh clone/copy stamps files with checkout time, not edit history; second granularity\n // matches the `recent` table above and is coarse enough to catch that without an exact-ms match.\n const topSecond = db.prepare(`SELECT COUNT(*) AS n FROM frontmatter ${scopeWhere} GROUP BY CAST(\"_mtime\" / 1000 AS INTEGER) ORDER BY n DESC LIMIT 1`).get() as { n: number } | undefined;\n const recentCaveat = topSecond && docs.count > 1 && topSecond.n > docs.count / 2 ? `${topSecond.n} of ${docs.count} files share one modified second, so recency likely reflects a checkout or copy, not edit history` : null;\n\n return { docs, fields, fieldsTotal: allFields.length, features: featureStates(cfg), presets: presetCoverage(db, cfg), hubs, recent, recentCaveat };\n}\n"],"names":["mapTree","MAP_COLUMN_CHUNK","chunk","items","size","out","i","length","push","slice","db","cfg","overrides","setupMapScope","scopedPaths","scopeWhere","scopeAnd","docs","prepare","get","columns","all","map","r","name","filter","INTERNAL_COLUMNS","has","allFields","group","exprs","quoted","split","join","result","forEach","field","coverage","type","sort","a","b","fields","hubs","featureEnabled","recent","topSecond","recentCaveat","count","n","fieldsTotal","features","featureStates","presets","presetCoverage"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/commands/map.ts"],"sourcesContent":["import type { FeatureName, ResolvedConfig, SearchOverrides } from '../config/index.ts';\nimport { featureEnabled, featureStates } from '../config/index.ts';\nimport type { Row } from '../output/output.ts';\nimport type { Store } from '../store/types.ts';\nimport { INTERNAL_COLUMNS, scopedPaths, setupMapScope } from './scope.ts';\nimport type { PresetCoverage } from './status.ts';\nimport { presetCoverage } from './status.ts';\n\nexport interface TreeMap {\n docs: { count: number; bytes: number };\n fields: Row[]; // top 20 by coverage; fieldsTotal carries the real count\n fieldsTotal: number;\n features: { on: FeatureName[]; off: FeatureName[] };\n presets: PresetCoverage[];\n hubs: Row[];\n recent: Row[];\n recentCaveat: string | null;\n}\n\n// A result row is capped at SQLITE_MAX_COLUMN (2000, default); two aggregate expressions\n// per field keeps a chunk's row safely under that regardless of how many fields the tree has.\nconst MAP_COLUMN_CHUNK = 300;\n\n// \"YYYY-MM-DD HH:MM:SS\" UTC, the exact shape sqlite's datetime(ms / 1000, 'unixepoch') prints;\n// formatted in JS so the query stays dialect-free.\nfunction utcSecond(ms: number): string {\n return new Date(ms).toISOString().slice(0, 19).replace('T', ' ');\n}\n\nfunction chunk<T>(items: T[], size: number): T[][] {\n const out: T[][] = [];\n for (let i = 0; i < items.length; i += size) out.push(items.slice(i, i + size));\n return out;\n}\n\n// What is this scope: fixed-size output regardless of tree size. Coverage and features stay\n// global -- they describe the tree, not the current question.\nexport async function mapTree(store: Store, cfg: ResolvedConfig, overrides: SearchOverrides = {}): Promise<TreeMap> {\n return store.transaction(async () => {\n await setupMapScope(store, await scopedPaths(store, cfg, overrides));\n const scopeWhere = 'WHERE \"path\" IN (SELECT \"path\" FROM _map_scope)';\n const scopeAnd = 'AND f.\"path\" IN (SELECT \"path\" FROM _map_scope)';\n\n const docs = (await (await store.prepare(`SELECT COUNT(*) AS count, COALESCE(SUM(\"_size\"), 0) AS bytes FROM frontmatter ${scopeWhere}`)).get()) as { count: number; bytes: number };\n\n const columns = (await store.docs.columns()).filter((name) => !INTERNAL_COLUMNS.has(name));\n // Observed types, not declared: SQLite types per value, so a field can be text in most notes\n // and numeric in a few. One aggregate scan per chunk of columns; FILTER matches COUNT's nulls.\n const allFields: Row[] = [];\n for (const group of chunk(columns, MAP_COLUMN_CHUNK)) {\n const exprs = group.map((name, i) => {\n const quoted = `\"${name.split('\"').join('\"\"')}\"`;\n return `COUNT(${quoted}) AS n${i}, GROUP_CONCAT(DISTINCT typeof(${quoted})) FILTER (WHERE ${quoted} IS NOT NULL) AS t${i}`;\n });\n const result = (await (await store.prepare(`SELECT ${exprs.join(', ')} FROM frontmatter ${scopeWhere}`)).get()) as Record<string, number | string | null>;\n group.forEach((name, i) => allFields.push({ field: name, coverage: result[`n${i}`] as number, type: (result[`t${i}`] as string) ?? '' }));\n }\n allFields.sort((a, b) => (b.coverage as number) - (a.coverage as number));\n const fields = allFields.slice(0, 20);\n\n const hubs = featureEnabled(cfg, 'rank') ? ((await (await store.prepare(`SELECT f.\"path\" AS path, round(f.\"_rank\" * 100, 2) AS rank, content.title FROM frontmatter f JOIN content ON content.path = f.\"path\" WHERE f.\"_rank\" IS NOT NULL ${scopeAnd} ORDER BY f.\"_rank\" DESC LIMIT 8`)).all()) as Row[]) : [];\n\n const recent = ((await (await store.prepare(`SELECT \"path\", \"_mtime\" AS mtime FROM frontmatter ${scopeWhere} ORDER BY \"_mtime\" DESC LIMIT 5`)).all()) as Array<{ path: string; mtime: number }>).map((r) => ({ path: r.path, modified: utcSecond(r.mtime) }));\n\n // A fresh clone/copy stamps files with checkout time, not edit history; second granularity\n // matches the `recent` table above and is coarse enough to catch that without an exact-ms match.\n const topSecond = (await (await store.prepare(`SELECT COUNT(*) AS n FROM frontmatter ${scopeWhere} GROUP BY CAST(\"_mtime\" / 1000 AS INTEGER) ORDER BY n DESC LIMIT 1`)).get()) as { n: number } | undefined;\n const recentCaveat = topSecond && docs.count > 1 && topSecond.n > docs.count / 2 ? `${topSecond.n} of ${docs.count} files share one modified second, so recency likely reflects a checkout or copy, not edit history` : null;\n\n return { docs, fields, fieldsTotal: allFields.length, features: featureStates(cfg), presets: await presetCoverage(store, cfg), hubs, recent, recentCaveat };\n });\n}\n"],"names":["mapTree","MAP_COLUMN_CHUNK","utcSecond","ms","Date","toISOString","slice","replace","chunk","items","size","out","i","length","push","store","cfg","overrides","transaction","scopeWhere","scopeAnd","docs","columns","allFields","fields","hubs","recent","topSecond","recentCaveat","scopedPaths","setupMapScope","prepare","get","filter","name","INTERNAL_COLUMNS","has","group","exprs","result","map","quoted","split","join","forEach","field","coverage","type","sort","a","b","featureEnabled","all","r","path","modified","mtime","count","n","fieldsTotal","features","featureStates","presetCoverage","presets"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { DatabaseSync } from 'node:sqlite';
2
1
  import type { FeatureName, ResolvedConfig, SearchOverrides } from '../config/index.js';
3
2
  import type { Row } from '../output/output.js';
3
+ import type { Store } from '../store/types.js';
4
4
  export declare function resolveNote(paths: string[], arg: string): string;
5
5
  export interface Peek {
6
6
  path: string;
@@ -17,4 +17,4 @@ export interface Peek {
17
17
  unresolvedTotal: number;
18
18
  off: FeatureName[];
19
19
  }
20
- export declare function peek(db: DatabaseSync, cfg: ResolvedConfig, pathArg: string, overrides?: SearchOverrides): Peek;
20
+ export declare function peek(store: Store, cfg: ResolvedConfig, pathArg: string, overrides?: SearchOverrides): Promise<Peek>;
@@ -1,6 +1,6 @@
1
- import type { DatabaseSync } from 'node:sqlite';
2
1
  import type { FeatureName, ResolvedConfig, SearchOverrides } from '../config/index.js';
3
2
  import type { Row } from '../output/output.js';
3
+ import type { Store } from '../store/types.js';
4
4
  export declare function resolveNote(paths: string[], arg: string): string;
5
5
  export interface Peek {
6
6
  path: string;
@@ -17,4 +17,4 @@ export interface Peek {
17
17
  unresolvedTotal: number;
18
18
  off: FeatureName[];
19
19
  }
20
- export declare function peek(db: DatabaseSync, cfg: ResolvedConfig, pathArg: string, overrides?: SearchOverrides): Peek;
20
+ export declare function peek(store: Store, cfg: ResolvedConfig, pathArg: string, overrides?: SearchOverrides): Promise<Peek>;