sensemaking 0.17.1 → 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 (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 +177 -52
  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 +1 -4
  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 +7 -0
  163. package/dist/cjs/store/index.d.ts +7 -0
  164. package/dist/cjs/store/index.js +201 -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 +215 -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 +23 -22
  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 +3 -2
  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 +7 -0
  347. package/dist/esm/store/index.js +35 -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 +39 -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
package/dist/cjs/watch.js CHANGED
@@ -10,8 +10,9 @@ Object.defineProperty(exports, "runWatch", {
10
10
  });
11
11
  var _nodefs = require("node:fs");
12
12
  var _indexts = require("./config/index.js");
13
- var _indexts1 = require("./db/index.js");
14
13
  var _errorsts = require("./errors.js");
14
+ var _guardedtickts = require("./lib/guarded-tick.js");
15
+ var _indexts1 = require("./store/index.js");
15
16
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
16
17
  try {
17
18
  var info = gen[key](arg);
@@ -143,84 +144,225 @@ var HEARTBEAT_INTERVAL_MS = 5000;
143
144
  var STALE_HEARTBEAT_MS = 15000;
144
145
  function runWatch(_0) {
145
146
  return _async_to_generator(function(cfg) {
146
- var opts, _opts_onEvent, onEvent, _open, db, dbPath, initialWarnings, initialParsed, baseDir, existingHeartbeat, age, touchHeartbeat, debounceTimer, scheduleReconcile, watcher, heartbeatTimer;
147
+ var opts, _opts_onEvent, _opts_debounceMs, _opts_heartbeatIntervalMs, onEvent, debounceMs, heartbeatIntervalMs, _ref, store, dbPath, initialWarnings, initialParsed, baseDir, existingHeartbeat, age, _tmp, stopping, touchHeartbeat, debounceTimer, scheduleReconcile, watcher, heartbeatTimer;
147
148
  var _arguments = arguments;
148
149
  return _ts_generator(this, function(_state) {
149
- opts = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
150
- onEvent = (_opts_onEvent = opts.onEvent) !== null && _opts_onEvent !== void 0 ? _opts_onEvent : function() {};
151
- _open = (0, _indexts1.open)(cfg), db = _open.db, dbPath = _open.dbPath, initialWarnings = _open.warnings, initialParsed = _open.parsed;
152
- baseDir = cfg.baseDir;
153
- existingHeartbeat = (0, _indexts1.getMeta)(db, 'watch_heartbeat');
154
- if (existingHeartbeat && !opts.force) {
155
- age = Date.now() - Date.parse(existingHeartbeat);
156
- if (age >= 0 && age < STALE_HEARTBEAT_MS) {
157
- db.close();
150
+ switch(_state.label){
151
+ case 0:
152
+ opts = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
153
+ onEvent = (_opts_onEvent = opts.onEvent) !== null && _opts_onEvent !== void 0 ? _opts_onEvent : function() {};
154
+ debounceMs = (_opts_debounceMs = opts.debounceMs) !== null && _opts_debounceMs !== void 0 ? _opts_debounceMs : DEBOUNCE_MS;
155
+ heartbeatIntervalMs = (_opts_heartbeatIntervalMs = opts.heartbeatIntervalMs) !== null && _opts_heartbeatIntervalMs !== void 0 ? _opts_heartbeatIntervalMs : HEARTBEAT_INTERVAL_MS;
156
+ return [
157
+ 4,
158
+ (0, _indexts1.openStore)(cfg)
159
+ ];
160
+ case 1:
161
+ _ref = _state.sent(), store = _ref.store, dbPath = _ref.dbPath, initialWarnings = _ref.warnings, initialParsed = _ref.parsed;
162
+ baseDir = cfg.baseDir;
163
+ return [
164
+ 4,
165
+ (0, _indexts1.getMeta)(store, 'watch_heartbeat')
166
+ ];
167
+ case 2:
168
+ existingHeartbeat = _state.sent();
169
+ if (!(existingHeartbeat && !opts.force)) return [
170
+ 3,
171
+ 4
172
+ ];
173
+ age = Date.now() - Date.parse(existingHeartbeat);
174
+ if (!(age >= 0 && age < STALE_HEARTBEAT_MS)) return [
175
+ 3,
176
+ 4
177
+ ];
178
+ return [
179
+ 4,
180
+ store.close()
181
+ ];
182
+ case 3:
183
+ _state.sent();
158
184
  throw new _errorsts.SenseError('WATCH_ACTIVE', "another watcher appears active (heartbeat ".concat(Math.round(age / 1000), "s ago); use --force to override"));
159
- }
160
- }
161
- onEvent({
162
- type: 'started',
163
- baseDir: baseDir,
164
- dbPath: dbPath
165
- });
166
- if (initialWarnings.length > 0 || initialParsed > 0) {
167
- onEvent({
168
- type: 'reconciled',
169
- parsed: initialParsed,
170
- total: (0, _indexts1.docCount)(db),
171
- warnings: initialWarnings
172
- });
173
- }
174
- touchHeartbeat = function touchHeartbeat() {
175
- (0, _indexts1.setMeta)(db, 'watch_heartbeat', new Date().toISOString());
176
- (0, _indexts1.setMeta)(db, 'watch_pid', String(process.pid));
177
- };
178
- touchHeartbeat();
179
- debounceTimer = null;
180
- scheduleReconcile = function scheduleReconcile() {
181
- if (debounceTimer) clearTimeout(debounceTimer);
182
- debounceTimer = setTimeout(function() {
185
+ case 4:
186
+ onEvent({
187
+ type: 'started',
188
+ baseDir: baseDir,
189
+ dbPath: dbPath
190
+ });
191
+ if (!(initialWarnings.length > 0 || initialParsed > 0)) return [
192
+ 3,
193
+ 6
194
+ ];
195
+ _tmp = {
196
+ type: 'reconciled',
197
+ parsed: initialParsed
198
+ };
199
+ return [
200
+ 4,
201
+ (0, _indexts1.docCount)(store)
202
+ ];
203
+ case 5:
204
+ onEvent.apply(void 0, [
205
+ (_tmp.total = _state.sent(), _tmp.warnings = initialWarnings, _tmp)
206
+ ]);
207
+ _state.label = 6;
208
+ case 6:
209
+ stopping = false;
210
+ touchHeartbeat = function touchHeartbeat() {
211
+ return _async_to_generator(function() {
212
+ return _ts_generator(this, function(_state) {
213
+ switch(_state.label){
214
+ case 0:
215
+ return [
216
+ 4,
217
+ (0, _indexts1.setMeta)(store, 'watch_heartbeat', new Date().toISOString())
218
+ ];
219
+ case 1:
220
+ _state.sent();
221
+ return [
222
+ 4,
223
+ (0, _indexts1.setMeta)(store, 'watch_pid', String(process.pid))
224
+ ];
225
+ case 2:
226
+ _state.sent();
227
+ return [
228
+ 2
229
+ ];
230
+ }
231
+ });
232
+ })();
233
+ };
234
+ return [
235
+ 4,
236
+ touchHeartbeat()
237
+ ];
238
+ case 7:
239
+ _state.sent();
183
240
  debounceTimer = null;
184
- try {
185
- var _reconcile = (0, _indexts1.reconcile)(db, cfg, baseDir), parsed = _reconcile.parsed, warnings = _reconcile.warnings;
186
- onEvent({
187
- type: 'reconciled',
188
- parsed: parsed,
189
- total: (0, _indexts1.docCount)(db),
190
- warnings: warnings
191
- });
192
- } catch (err) {
193
- onEvent({
194
- type: 'reconcile-error',
195
- message: err.message
196
- });
197
- }
198
- }, DEBOUNCE_MS);
199
- };
200
- // Ignore our own state dir, or the heartbeat write would retrigger itself forever.
201
- watcher = (0, _nodefs.watch)(baseDir, {
202
- recursive: true
203
- }, function(_event, filename) {
204
- if (typeof filename === 'string' && filename.startsWith(_indexts.STATE_DIR)) return;
205
- scheduleReconcile();
206
- });
207
- heartbeatTimer = setInterval(touchHeartbeat, HEARTBEAT_INTERVAL_MS);
208
- return [
209
- 2,
210
- new Promise(function(resolveShutdown) {
211
- var cleanExit = function cleanExit() {
212
- clearInterval(heartbeatTimer);
241
+ scheduleReconcile = function scheduleReconcile() {
213
242
  if (debounceTimer) clearTimeout(debounceTimer);
214
- watcher.close();
215
- (0, _indexts1.setMeta)(db, 'watch_heartbeat', null);
216
- (0, _indexts1.setMeta)(db, 'watch_pid', null);
217
- db.close();
218
- resolveShutdown();
243
+ debounceTimer = setTimeout(function() {
244
+ return _async_to_generator(function() {
245
+ var _ref, parsed, warnings, _tmp, err;
246
+ return _ts_generator(this, function(_state) {
247
+ switch(_state.label){
248
+ case 0:
249
+ debounceTimer = null;
250
+ _state.label = 1;
251
+ case 1:
252
+ _state.trys.push([
253
+ 1,
254
+ 4,
255
+ ,
256
+ 5
257
+ ]);
258
+ return [
259
+ 4,
260
+ store.reconcile()
261
+ ];
262
+ case 2:
263
+ _ref = _state.sent(), parsed = _ref.parsed, warnings = _ref.warnings;
264
+ _tmp = {
265
+ type: 'reconciled',
266
+ parsed: parsed
267
+ };
268
+ return [
269
+ 4,
270
+ (0, _indexts1.docCount)(store)
271
+ ];
272
+ case 3:
273
+ onEvent.apply(void 0, [
274
+ (_tmp.total = _state.sent(), _tmp.warnings = warnings, _tmp)
275
+ ]);
276
+ return [
277
+ 3,
278
+ 5
279
+ ];
280
+ case 4:
281
+ err = _state.sent();
282
+ onEvent({
283
+ type: 'reconcile-error',
284
+ message: err.message
285
+ });
286
+ return [
287
+ 3,
288
+ 5
289
+ ];
290
+ case 5:
291
+ return [
292
+ 2
293
+ ];
294
+ }
295
+ });
296
+ })();
297
+ }, debounceMs);
219
298
  };
220
- process.once('SIGINT', cleanExit);
221
- process.once('SIGTERM', cleanExit);
222
- })
223
- ];
299
+ // Ignore our own state dir, or the heartbeat write would retrigger itself forever.
300
+ watcher = (0, _nodefs.watch)(baseDir, {
301
+ recursive: true
302
+ }, function(_event, filename) {
303
+ if (typeof filename === 'string' && filename.startsWith(_indexts.STATE_DIR)) return;
304
+ scheduleReconcile();
305
+ });
306
+ heartbeatTimer = setInterval((0, _guardedtickts.guardedTick)(touchHeartbeat, function() {
307
+ return stopping;
308
+ }), heartbeatIntervalMs);
309
+ return [
310
+ 2,
311
+ new Promise(function(resolveShutdown) {
312
+ var _opts_signal, _opts_signal1;
313
+ // SIGINT/SIGTERM and an aborted signal all run this same path exactly once; each is
314
+ // unregistered here too so a second runWatch call in the same process starts clean.
315
+ var shutdown = function shutdown1() {
316
+ return _async_to_generator(function() {
317
+ var _opts_signal;
318
+ return _ts_generator(this, function(_state) {
319
+ switch(_state.label){
320
+ case 0:
321
+ if (stopping) return [
322
+ 2
323
+ ];
324
+ stopping = true;
325
+ process.off('SIGINT', shutdown);
326
+ process.off('SIGTERM', shutdown);
327
+ (_opts_signal = opts.signal) === null || _opts_signal === void 0 ? void 0 : _opts_signal.removeEventListener('abort', shutdown);
328
+ clearInterval(heartbeatTimer);
329
+ if (debounceTimer) clearTimeout(debounceTimer);
330
+ watcher.close();
331
+ return [
332
+ 4,
333
+ (0, _indexts1.setMeta)(store, 'watch_heartbeat', null)
334
+ ];
335
+ case 1:
336
+ _state.sent();
337
+ return [
338
+ 4,
339
+ (0, _indexts1.setMeta)(store, 'watch_pid', null)
340
+ ];
341
+ case 2:
342
+ _state.sent();
343
+ return [
344
+ 4,
345
+ store.close()
346
+ ];
347
+ case 3:
348
+ _state.sent();
349
+ resolveShutdown();
350
+ return [
351
+ 2
352
+ ];
353
+ }
354
+ });
355
+ })();
356
+ };
357
+ process.once('SIGINT', shutdown);
358
+ process.once('SIGTERM', shutdown);
359
+ if ((_opts_signal = opts.signal) === null || _opts_signal === void 0 ? void 0 : _opts_signal.aborted) shutdown();
360
+ else (_opts_signal1 = opts.signal) === null || _opts_signal1 === void 0 ? void 0 : _opts_signal1.addEventListener('abort', shutdown, {
361
+ once: true
362
+ });
363
+ })
364
+ ];
365
+ }
224
366
  });
225
367
  }).apply(this, arguments);
226
368
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/watch.ts"],"sourcesContent":["import { watch as fsWatch } from 'node:fs';\nimport type { ResolvedConfig } from './config/index.ts';\nimport { STATE_DIR } from './config/index.ts';\nimport { docCount, getMeta, open, reconcile, setMeta } from './db/index.ts';\nimport { SenseError } from './errors.ts';\n\n// Watch is a cache pre-warmer, not a correctness mechanism: open() always reconciles anyway, so any fs event just triggers a debounced full reconcile.\nconst DEBOUNCE_MS = 200;\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_HEARTBEAT_MS = 15000;\n\nexport type WatchEvent = { type: 'started'; baseDir: string; dbPath: string } | { type: 'reconciled'; parsed: number; total: number; warnings: string[] } | { type: 'reconcile-error'; message: string };\n\nexport interface WatchOptions {\n force?: boolean;\n onEvent?: (event: WatchEvent) => void;\n}\n\n// Runs in the foreground until SIGINT/SIGTERM. Throws WATCH_ACTIVE if another watcher's heartbeat is still fresh and --force wasn't given.\nexport async function runWatch(cfg: ResolvedConfig, opts: WatchOptions = {}): Promise<void> {\n const onEvent = opts.onEvent ?? (() => {});\n const { db, dbPath, warnings: initialWarnings, parsed: initialParsed } = open(cfg);\n const baseDir = cfg.baseDir;\n\n const existingHeartbeat = getMeta(db, 'watch_heartbeat');\n if (existingHeartbeat && !opts.force) {\n const age = Date.now() - Date.parse(existingHeartbeat);\n if (age >= 0 && age < STALE_HEARTBEAT_MS) {\n db.close();\n throw new SenseError('WATCH_ACTIVE', `another watcher appears active (heartbeat ${Math.round(age / 1000)}s ago); use --force to override`);\n }\n }\n\n onEvent({ type: 'started', baseDir, dbPath });\n if (initialWarnings.length > 0 || initialParsed > 0) {\n onEvent({ type: 'reconciled', parsed: initialParsed, total: docCount(db), warnings: initialWarnings });\n }\n\n const touchHeartbeat = () => {\n setMeta(db, 'watch_heartbeat', new Date().toISOString());\n setMeta(db, 'watch_pid', String(process.pid));\n };\n touchHeartbeat();\n\n let debounceTimer: NodeJS.Timeout | null = null;\n const scheduleReconcile = () => {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n debounceTimer = null;\n try {\n const { parsed, warnings } = reconcile(db, cfg, baseDir);\n onEvent({ type: 'reconciled', parsed, total: docCount(db), warnings });\n } catch (err) {\n onEvent({ type: 'reconcile-error', message: (err as Error).message });\n }\n }, DEBOUNCE_MS);\n };\n\n // Ignore our own state dir, or the heartbeat write would retrigger itself forever.\n const watcher = fsWatch(baseDir, { recursive: true }, (_event, filename) => {\n if (typeof filename === 'string' && filename.startsWith(STATE_DIR)) return;\n scheduleReconcile();\n });\n const heartbeatTimer = setInterval(touchHeartbeat, HEARTBEAT_INTERVAL_MS);\n\n return new Promise<void>((resolveShutdown) => {\n const cleanExit = () => {\n clearInterval(heartbeatTimer);\n if (debounceTimer) clearTimeout(debounceTimer);\n watcher.close();\n setMeta(db, 'watch_heartbeat', null);\n setMeta(db, 'watch_pid', null);\n db.close();\n resolveShutdown();\n };\n process.once('SIGINT', cleanExit);\n process.once('SIGTERM', cleanExit);\n });\n}\n"],"names":["runWatch","DEBOUNCE_MS","HEARTBEAT_INTERVAL_MS","STALE_HEARTBEAT_MS","cfg","opts","onEvent","open","db","dbPath","initialWarnings","initialParsed","baseDir","existingHeartbeat","age","touchHeartbeat","debounceTimer","scheduleReconcile","watcher","heartbeatTimer","warnings","parsed","getMeta","force","Date","now","parse","close","SenseError","Math","round","type","length","total","docCount","setMeta","toISOString","String","process","pid","clearTimeout","setTimeout","reconcile","err","message","fsWatch","recursive","_event","filename","startsWith","STATE_DIR","setInterval","Promise","resolveShutdown","cleanExit","clearInterval","once"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/watch.ts"],"sourcesContent":["import { watch as fsWatch } from 'node:fs';\nimport type { ResolvedConfig } from './config/index.ts';\nimport { STATE_DIR } from './config/index.ts';\nimport { SenseError } from './errors.ts';\nimport { guardedTick } from './lib/guarded-tick.ts';\nimport { docCount, getMeta, openStore, setMeta } from './store/index.ts';\n\n// Watch is a cache pre-warmer, not a correctness mechanism: open() always reconciles anyway, so any fs event just triggers a debounced full reconcile.\nconst DEBOUNCE_MS = 200;\nconst HEARTBEAT_INTERVAL_MS = 5000;\nconst STALE_HEARTBEAT_MS = 15000;\n\nexport type WatchEvent = { type: 'started'; baseDir: string; dbPath: string } | { type: 'reconciled'; parsed: number; total: number; warnings: string[] } | { type: 'reconcile-error'; message: string };\n\nexport interface WatchOptions {\n force?: boolean;\n onEvent?: (event: WatchEvent) => void;\n // Aborting runs the same shutdown path as SIGINT/SIGTERM.\n signal?: AbortSignal;\n debounceMs?: number;\n heartbeatIntervalMs?: number;\n}\n\n// Runs in the foreground until SIGINT/SIGTERM/signal abort. Throws WATCH_ACTIVE if another watcher's heartbeat is still fresh and --force wasn't given.\nexport async function runWatch(cfg: ResolvedConfig, opts: WatchOptions = {}): Promise<void> {\n const onEvent = opts.onEvent ?? (() => {});\n const debounceMs = opts.debounceMs ?? DEBOUNCE_MS;\n const heartbeatIntervalMs = opts.heartbeatIntervalMs ?? HEARTBEAT_INTERVAL_MS;\n const { store, dbPath, warnings: initialWarnings, parsed: initialParsed } = await openStore(cfg);\n const baseDir = cfg.baseDir;\n\n const existingHeartbeat = await getMeta(store, 'watch_heartbeat');\n if (existingHeartbeat && !opts.force) {\n const age = Date.now() - Date.parse(existingHeartbeat);\n if (age >= 0 && age < STALE_HEARTBEAT_MS) {\n await store.close();\n throw new SenseError('WATCH_ACTIVE', `another watcher appears active (heartbeat ${Math.round(age / 1000)}s ago); use --force to override`);\n }\n }\n\n onEvent({ type: 'started', baseDir, dbPath });\n if (initialWarnings.length > 0 || initialParsed > 0) {\n onEvent({ type: 'reconciled', parsed: initialParsed, total: await docCount(store), warnings: initialWarnings });\n }\n\n let stopping = false;\n const touchHeartbeat = async () => {\n await setMeta(store, 'watch_heartbeat', new Date().toISOString());\n await setMeta(store, 'watch_pid', String(process.pid));\n };\n await touchHeartbeat();\n\n let debounceTimer: NodeJS.Timeout | null = null;\n const scheduleReconcile = () => {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(async () => {\n debounceTimer = null;\n try {\n const { parsed, warnings } = await store.reconcile();\n onEvent({ type: 'reconciled', parsed, total: await docCount(store), warnings });\n } catch (err) {\n onEvent({ type: 'reconcile-error', message: (err as Error).message });\n }\n }, debounceMs);\n };\n\n // Ignore our own state dir, or the heartbeat write would retrigger itself forever.\n const watcher = fsWatch(baseDir, { recursive: true }, (_event, filename) => {\n if (typeof filename === 'string' && filename.startsWith(STATE_DIR)) return;\n scheduleReconcile();\n });\n const heartbeatTimer = setInterval(\n guardedTick(touchHeartbeat, () => stopping),\n heartbeatIntervalMs\n );\n\n return new Promise<void>((resolveShutdown) => {\n // SIGINT/SIGTERM and an aborted signal all run this same path exactly once; each is\n // unregistered here too so a second runWatch call in the same process starts clean.\n const shutdown = async () => {\n if (stopping) return;\n stopping = true;\n process.off('SIGINT', shutdown);\n process.off('SIGTERM', shutdown);\n opts.signal?.removeEventListener('abort', shutdown);\n clearInterval(heartbeatTimer);\n if (debounceTimer) clearTimeout(debounceTimer);\n watcher.close();\n await setMeta(store, 'watch_heartbeat', null);\n await setMeta(store, 'watch_pid', null);\n await store.close();\n resolveShutdown();\n };\n process.once('SIGINT', shutdown);\n process.once('SIGTERM', shutdown);\n if (opts.signal?.aborted) shutdown();\n else opts.signal?.addEventListener('abort', shutdown, { once: true });\n });\n}\n"],"names":["runWatch","DEBOUNCE_MS","HEARTBEAT_INTERVAL_MS","STALE_HEARTBEAT_MS","cfg","opts","onEvent","debounceMs","heartbeatIntervalMs","store","dbPath","initialWarnings","initialParsed","baseDir","existingHeartbeat","age","stopping","touchHeartbeat","debounceTimer","scheduleReconcile","watcher","heartbeatTimer","openStore","warnings","parsed","getMeta","force","Date","now","parse","close","SenseError","Math","round","type","length","docCount","total","setMeta","toISOString","String","process","pid","clearTimeout","setTimeout","err","reconcile","message","fsWatch","recursive","_event","filename","startsWith","STATE_DIR","setInterval","guardedTick","Promise","resolveShutdown","shutdown","off","signal","removeEventListener","clearInterval","once","aborted","addEventListener"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { mapTree } from '../commands/map.js';
2
- import { renderMap } from '../output/output.js';
2
+ import { renderMap, stringifyJson } from '../output/output.js';
3
3
  import { USAGE } from './index.js';
4
4
  import { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.js';
5
5
  const map = (ctx)=>{
@@ -9,9 +9,9 @@ const map = (ctx)=>{
9
9
  ...CONFIG
10
10
  });
11
11
  const format = formatOf(values);
12
- return withDb(ctx, values.config, (db, cfg)=>{
13
- const result = mapTree(db, cfg, scopeOf(values));
14
- console.log(format === 'json' ? JSON.stringify(result, null, 2) : renderMap(result));
12
+ return withDb(ctx, values.config, async (store, cfg)=>{
13
+ const result = await mapTree(store, cfg, scopeOf(values));
14
+ console.log(format === 'json' ? stringifyJson(result, 2) : renderMap(result));
15
15
  });
16
16
  };
17
17
  export default map;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/map.ts"],"sourcesContent":["import { mapTree } from '../commands/map.ts';\nimport { renderMap } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst map: Command = (ctx) => {\n const { values } = parse(ctx.argv, `usage: ${ctx.name} ${USAGE.map}`, { ...SCOPE, ...FORMAT, ...CONFIG });\n const format = formatOf(values);\n return withDb(ctx, values.config as string | undefined, (db, cfg) => {\n const result = mapTree(db, cfg, scopeOf(values));\n console.log(format === 'json' ? JSON.stringify(result, null, 2) : renderMap(result));\n });\n};\nexport default map;\n"],"names":["mapTree","renderMap","USAGE","CONFIG","FORMAT","formatOf","parse","SCOPE","scopeOf","withDb","map","ctx","values","argv","name","format","config","db","cfg","result","console","log","JSON","stringify"],"mappings":"AAAA,SAASA,OAAO,QAAQ,qBAAqB;AAC7C,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGtF,MAAMC,MAAe,CAACC;IACpB,MAAM,EAAEC,MAAM,EAAE,GAAGN,MAAMK,IAAIE,IAAI,EAAE,CAAC,OAAO,EAAEF,IAAIG,IAAI,CAAC,CAAC,EAAEZ,MAAMQ,GAAG,EAAE,EAAE;QAAE,GAAGH,KAAK;QAAE,GAAGH,MAAM;QAAE,GAAGD,MAAM;IAAC;IACvG,MAAMY,SAASV,SAASO;IACxB,OAAOH,OAAOE,KAAKC,OAAOI,MAAM,EAAwB,CAACC,IAAIC;QAC3D,MAAMC,SAASnB,QAAQiB,IAAIC,KAAKV,QAAQI;QACxCQ,QAAQC,GAAG,CAACN,WAAW,SAASO,KAAKC,SAAS,CAACJ,QAAQ,MAAM,KAAKlB,UAAUkB;IAC9E;AACF;AACA,eAAeT,IAAI"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/map.ts"],"sourcesContent":["import { mapTree } from '../commands/map.ts';\nimport { renderMap, stringifyJson } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst map: Command = (ctx) => {\n const { values } = parse(ctx.argv, `usage: ${ctx.name} ${USAGE.map}`, { ...SCOPE, ...FORMAT, ...CONFIG });\n const format = formatOf(values);\n return withDb(ctx, values.config as string | undefined, async (store, cfg) => {\n const result = await mapTree(store, cfg, scopeOf(values));\n console.log(format === 'json' ? stringifyJson(result, 2) : renderMap(result));\n });\n};\nexport default map;\n"],"names":["mapTree","renderMap","stringifyJson","USAGE","CONFIG","FORMAT","formatOf","parse","SCOPE","scopeOf","withDb","map","ctx","values","argv","name","format","config","store","cfg","result","console","log"],"mappings":"AAAA,SAASA,OAAO,QAAQ,qBAAqB;AAC7C,SAASC,SAAS,EAAEC,aAAa,QAAQ,sBAAsB;AAC/D,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGtF,MAAMC,MAAe,CAACC;IACpB,MAAM,EAAEC,MAAM,EAAE,GAAGN,MAAMK,IAAIE,IAAI,EAAE,CAAC,OAAO,EAAEF,IAAIG,IAAI,CAAC,CAAC,EAAEZ,MAAMQ,GAAG,EAAE,EAAE;QAAE,GAAGH,KAAK;QAAE,GAAGH,MAAM;QAAE,GAAGD,MAAM;IAAC;IACvG,MAAMY,SAASV,SAASO;IACxB,OAAOH,OAAOE,KAAKC,OAAOI,MAAM,EAAwB,OAAOC,OAAOC;QACpE,MAAMC,SAAS,MAAMpB,QAAQkB,OAAOC,KAAKV,QAAQI;QACjDQ,QAAQC,GAAG,CAACN,WAAW,SAASd,cAAckB,QAAQ,KAAKnB,UAAUmB;IACvE;AACF;AACA,eAAeT,IAAI"}
@@ -23,7 +23,7 @@ export default async function named(ctx, queryName) {
23
23
  if ('sql' in entry) {
24
24
  // A saved statement written against `scope` is preset-agnostic, so the same entry can be
25
25
  // re-pointed at another layer from the command line instead of being copied per preset.
26
- runSql(cfg, entry.sql, params, format, `query "${queryName}"`, values.preset);
26
+ await runSql(cfg, entry.sql, params, format, `query "${queryName}"`, values.preset);
27
27
  return;
28
28
  }
29
29
  // A saved search's text is fixed in config; there is nowhere for a positional to bind.
@@ -36,7 +36,7 @@ export default async function named(ctx, queryName) {
36
36
  const include = (_values_include = values.include) !== null && _values_include !== void 0 ? _values_include : entry.include;
37
37
  const exclude = (_values_exclude = values.exclude) !== null && _values_exclude !== void 0 ? _values_exclude : entry.exclude;
38
38
  const noExclude = values['no-exclude'] === true;
39
- await withDb(ctx, configPath, async (db, resolvedCfg)=>printRows(await search(db, resolvedCfg, entry.search, {
39
+ await withDb(ctx, configPath, async (store, resolvedCfg)=>printRows(await search(store, resolvedCfg, entry.search, {
40
40
  k,
41
41
  where,
42
42
  preset,
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/named.ts"],"sourcesContent":["import { search } from '../commands/search.ts';\nimport { printRows } from '../output/output.ts';\nimport { CONFIG, FORMAT, parse, parseK, rowFormatOf, runSql, SEARCH_FLAGS, withDb } from './shared.ts';\nimport type { Ctx } from './types.ts';\n\n// Fallback when the first positional is not a command: a saved query, { sql } or { search }.\n// SEARCH_FLAGS override a saved search's fields the same way they override a preset's.\nexport default async function named(ctx: Ctx, queryName: string): Promise<void> {\n const usage = `usage: ${ctx.name} ${queryName} [params...] [--format table|json|csv] [--config path] [--where \"<sql>\"] [--k n] [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude]`;\n const { values, positionals: params } = parse(ctx.argv, usage, { ...SEARCH_FLAGS, ...FORMAT, ...CONFIG });\n const format = rowFormatOf(values);\n const configPath = values.config as string | undefined;\n\n const cfg = ctx.resolveConfig(configPath);\n const entry = cfg.queries[queryName];\n if (entry === undefined) {\n console.error(`unknown command or saved entry: \"${queryName}\"`);\n console.error(`saved queries: ${Object.keys(cfg.queries).sort().join(', ')}`);\n process.exit(2);\n }\n\n if ('sql' in entry) {\n // A saved statement written against `scope` is preset-agnostic, so the same entry can be\n // re-pointed at another layer from the command line instead of being copied per preset.\n runSql(cfg, entry.sql, params, format, `query \"${queryName}\"`, values.preset as string | undefined);\n return;\n }\n\n // A saved search's text is fixed in config; there is nowhere for a positional to bind.\n if (params.length > 0) {\n ctx.usageError(`\"${queryName}\" is a saved search and takes no positional parameters; edit its \"search\" in sense.config.json, or use \"${ctx.name} search\" directly`);\n }\n const k = parseK(values.k as string | undefined, ctx.usageError) ?? entry.k;\n const where = (values.where as string | undefined) ?? entry.where;\n const preset = (values.preset as string | undefined) ?? entry.preset;\n const include = (values.include as string[] | undefined) ?? entry.include;\n const exclude = (values.exclude as string[] | undefined) ?? entry.exclude;\n const noExclude = values['no-exclude'] === true;\n await withDb(ctx, configPath, async (db, resolvedCfg) => printRows(await search(db, resolvedCfg, entry.search, { k, where, preset, include, exclude, noExclude }), format));\n}\n"],"names":["search","printRows","CONFIG","FORMAT","parse","parseK","rowFormatOf","runSql","SEARCH_FLAGS","withDb","named","ctx","queryName","values","usage","name","positionals","params","argv","format","configPath","config","cfg","resolveConfig","entry","queries","undefined","console","error","Object","keys","sort","join","process","exit","sql","preset","length","usageError","k","where","include","exclude","noExclude","db","resolvedCfg"],"mappings":"AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,YAAY,EAAEC,MAAM,QAAQ,cAAc;AAGvG,6FAA6F;AAC7F,uFAAuF;AACvF,eAAe,eAAeC,MAAMC,GAAQ,EAAEC,SAAiB;QAyBnDP,SACKQ,eACCA,gBACCA,iBACAA;IA5BjB,MAAMC,QAAQ,CAAC,OAAO,EAAEH,IAAII,IAAI,CAAC,CAAC,EAAEH,UAAU,yJAAyJ,CAAC;IACxM,MAAM,EAAEC,MAAM,EAAEG,aAAaC,MAAM,EAAE,GAAGb,MAAMO,IAAIO,IAAI,EAAEJ,OAAO;QAAE,GAAGN,YAAY;QAAE,GAAGL,MAAM;QAAE,GAAGD,MAAM;IAAC;IACvG,MAAMiB,SAASb,YAAYO;IAC3B,MAAMO,aAAaP,OAAOQ,MAAM;IAEhC,MAAMC,MAAMX,IAAIY,aAAa,CAACH;IAC9B,MAAMI,QAAQF,IAAIG,OAAO,CAACb,UAAU;IACpC,IAAIY,UAAUE,WAAW;QACvBC,QAAQC,KAAK,CAAC,CAAC,iCAAiC,EAAEhB,UAAU,CAAC,CAAC;QAC9De,QAAQC,KAAK,CAAC,CAAC,eAAe,EAAEC,OAAOC,IAAI,CAACR,IAAIG,OAAO,EAAEM,IAAI,GAAGC,IAAI,CAAC,OAAO;QAC5EC,QAAQC,IAAI,CAAC;IACf;IAEA,IAAI,SAASV,OAAO;QAClB,yFAAyF;QACzF,wFAAwF;QACxFjB,OAAOe,KAAKE,MAAMW,GAAG,EAAElB,QAAQE,QAAQ,CAAC,OAAO,EAAEP,UAAU,CAAC,CAAC,EAAEC,OAAOuB,MAAM;QAC5E;IACF;IAEA,uFAAuF;IACvF,IAAInB,OAAOoB,MAAM,GAAG,GAAG;QACrB1B,IAAI2B,UAAU,CAAC,CAAC,CAAC,EAAE1B,UAAU,wGAAwG,EAAED,IAAII,IAAI,CAAC,iBAAiB,CAAC;IACpK;IACA,MAAMwB,KAAIlC,UAAAA,OAAOQ,OAAO0B,CAAC,EAAwB5B,IAAI2B,UAAU,eAArDjC,qBAAAA,UAA0DmB,MAAMe,CAAC;IAC3E,MAAMC,SAAS3B,gBAAAA,OAAO2B,KAAK,cAAZ3B,2BAAAA,gBAAuCW,MAAMgB,KAAK;IACjE,MAAMJ,UAAUvB,iBAAAA,OAAOuB,MAAM,cAAbvB,4BAAAA,iBAAwCW,MAAMY,MAAM;IACpE,MAAMK,WAAW5B,kBAAAA,OAAO4B,OAAO,cAAd5B,6BAAAA,kBAA2CW,MAAMiB,OAAO;IACzE,MAAMC,WAAW7B,kBAAAA,OAAO6B,OAAO,cAAd7B,6BAAAA,kBAA2CW,MAAMkB,OAAO;IACzE,MAAMC,YAAY9B,MAAM,CAAC,aAAa,KAAK;IAC3C,MAAMJ,OAAOE,KAAKS,YAAY,OAAOwB,IAAIC,cAAgB5C,UAAU,MAAMD,OAAO4C,IAAIC,aAAarB,MAAMxB,MAAM,EAAE;YAAEuC;YAAGC;YAAOJ;YAAQK;YAASC;YAASC;QAAU,IAAIxB;AACrK"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/named.ts"],"sourcesContent":["import { search } from '../commands/search.ts';\nimport { printRows } from '../output/output.ts';\nimport { CONFIG, FORMAT, parse, parseK, rowFormatOf, runSql, SEARCH_FLAGS, withDb } from './shared.ts';\nimport type { Ctx } from './types.ts';\n\n// Fallback when the first positional is not a command: a saved query, { sql } or { search }.\n// SEARCH_FLAGS override a saved search's fields the same way they override a preset's.\nexport default async function named(ctx: Ctx, queryName: string): Promise<void> {\n const usage = `usage: ${ctx.name} ${queryName} [params...] [--format table|json|csv] [--config path] [--where \"<sql>\"] [--k n] [--preset name] [--include glob ...] [--exclude glob ...] [--no-exclude]`;\n const { values, positionals: params } = parse(ctx.argv, usage, { ...SEARCH_FLAGS, ...FORMAT, ...CONFIG });\n const format = rowFormatOf(values);\n const configPath = values.config as string | undefined;\n\n const cfg = ctx.resolveConfig(configPath);\n const entry = cfg.queries[queryName];\n if (entry === undefined) {\n console.error(`unknown command or saved entry: \"${queryName}\"`);\n console.error(`saved queries: ${Object.keys(cfg.queries).sort().join(', ')}`);\n process.exit(2);\n }\n\n if ('sql' in entry) {\n // A saved statement written against `scope` is preset-agnostic, so the same entry can be\n // re-pointed at another layer from the command line instead of being copied per preset.\n await runSql(cfg, entry.sql, params, format, `query \"${queryName}\"`, values.preset as string | undefined);\n return;\n }\n\n // A saved search's text is fixed in config; there is nowhere for a positional to bind.\n if (params.length > 0) {\n ctx.usageError(`\"${queryName}\" is a saved search and takes no positional parameters; edit its \"search\" in sense.config.json, or use \"${ctx.name} search\" directly`);\n }\n const k = parseK(values.k as string | undefined, ctx.usageError) ?? entry.k;\n const where = (values.where as string | undefined) ?? entry.where;\n const preset = (values.preset as string | undefined) ?? entry.preset;\n const include = (values.include as string[] | undefined) ?? entry.include;\n const exclude = (values.exclude as string[] | undefined) ?? entry.exclude;\n const noExclude = values['no-exclude'] === true;\n await withDb(ctx, configPath, async (store, resolvedCfg) => printRows(await search(store, resolvedCfg, entry.search, { k, where, preset, include, exclude, noExclude }), format));\n}\n"],"names":["search","printRows","CONFIG","FORMAT","parse","parseK","rowFormatOf","runSql","SEARCH_FLAGS","withDb","named","ctx","queryName","values","usage","name","positionals","params","argv","format","configPath","config","cfg","resolveConfig","entry","queries","undefined","console","error","Object","keys","sort","join","process","exit","sql","preset","length","usageError","k","where","include","exclude","noExclude","store","resolvedCfg"],"mappings":"AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,YAAY,EAAEC,MAAM,QAAQ,cAAc;AAGvG,6FAA6F;AAC7F,uFAAuF;AACvF,eAAe,eAAeC,MAAMC,GAAQ,EAAEC,SAAiB;QAyBnDP,SACKQ,eACCA,gBACCA,iBACAA;IA5BjB,MAAMC,QAAQ,CAAC,OAAO,EAAEH,IAAII,IAAI,CAAC,CAAC,EAAEH,UAAU,yJAAyJ,CAAC;IACxM,MAAM,EAAEC,MAAM,EAAEG,aAAaC,MAAM,EAAE,GAAGb,MAAMO,IAAIO,IAAI,EAAEJ,OAAO;QAAE,GAAGN,YAAY;QAAE,GAAGL,MAAM;QAAE,GAAGD,MAAM;IAAC;IACvG,MAAMiB,SAASb,YAAYO;IAC3B,MAAMO,aAAaP,OAAOQ,MAAM;IAEhC,MAAMC,MAAMX,IAAIY,aAAa,CAACH;IAC9B,MAAMI,QAAQF,IAAIG,OAAO,CAACb,UAAU;IACpC,IAAIY,UAAUE,WAAW;QACvBC,QAAQC,KAAK,CAAC,CAAC,iCAAiC,EAAEhB,UAAU,CAAC,CAAC;QAC9De,QAAQC,KAAK,CAAC,CAAC,eAAe,EAAEC,OAAOC,IAAI,CAACR,IAAIG,OAAO,EAAEM,IAAI,GAAGC,IAAI,CAAC,OAAO;QAC5EC,QAAQC,IAAI,CAAC;IACf;IAEA,IAAI,SAASV,OAAO;QAClB,yFAAyF;QACzF,wFAAwF;QACxF,MAAMjB,OAAOe,KAAKE,MAAMW,GAAG,EAAElB,QAAQE,QAAQ,CAAC,OAAO,EAAEP,UAAU,CAAC,CAAC,EAAEC,OAAOuB,MAAM;QAClF;IACF;IAEA,uFAAuF;IACvF,IAAInB,OAAOoB,MAAM,GAAG,GAAG;QACrB1B,IAAI2B,UAAU,CAAC,CAAC,CAAC,EAAE1B,UAAU,wGAAwG,EAAED,IAAII,IAAI,CAAC,iBAAiB,CAAC;IACpK;IACA,MAAMwB,KAAIlC,UAAAA,OAAOQ,OAAO0B,CAAC,EAAwB5B,IAAI2B,UAAU,eAArDjC,qBAAAA,UAA0DmB,MAAMe,CAAC;IAC3E,MAAMC,SAAS3B,gBAAAA,OAAO2B,KAAK,cAAZ3B,2BAAAA,gBAAuCW,MAAMgB,KAAK;IACjE,MAAMJ,UAAUvB,iBAAAA,OAAOuB,MAAM,cAAbvB,4BAAAA,iBAAwCW,MAAMY,MAAM;IACpE,MAAMK,WAAW5B,kBAAAA,OAAO4B,OAAO,cAAd5B,6BAAAA,kBAA2CW,MAAMiB,OAAO;IACzE,MAAMC,WAAW7B,kBAAAA,OAAO6B,OAAO,cAAd7B,6BAAAA,kBAA2CW,MAAMkB,OAAO;IACzE,MAAMC,YAAY9B,MAAM,CAAC,aAAa,KAAK;IAC3C,MAAMJ,OAAOE,KAAKS,YAAY,OAAOwB,OAAOC,cAAgB5C,UAAU,MAAMD,OAAO4C,OAAOC,aAAarB,MAAMxB,MAAM,EAAE;YAAEuC;YAAGC;YAAOJ;YAAQK;YAASC;YAASC;QAAU,IAAIxB;AAC3K"}
@@ -25,12 +25,12 @@ const pathCmd = (ctx)=>{
25
25
  if (!a || !b) ctx.usageError(usage);
26
26
  const maxDepth = parseMaxDepth(values['max-depth'], ctx.usageError);
27
27
  const format = formatOf(values);
28
- return withDb(ctx, values.config, (db, cfg)=>{
29
- const paths = db.prepare('SELECT "path" FROM frontmatter').all().map((r)=>r.path);
28
+ return withDb(ctx, values.config, async (store, cfg)=>{
29
+ const paths = (await (await store.prepare('SELECT "path" FROM frontmatter')).all()).map((r)=>r.path);
30
30
  const from = resolveNote(paths, a);
31
31
  const to = resolveNote(paths, b);
32
- const allowed = scopedPaths(db, cfg, scopeOf(values));
33
- const hops = findPath(db, from, to, {
32
+ const allowed = await scopedPaths(store, cfg, scopeOf(values));
33
+ const hops = await findPath(store, from, to, {
34
34
  maxDepth,
35
35
  allowed
36
36
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/path.ts"],"sourcesContent":["import { resolveNote } from '../commands/peek.ts';\nimport { scopedPaths } from '../commands/scope.ts';\nimport { findPath } from '../graph/traverse.ts';\nimport type { Row } from '../output/output.ts';\nimport { printRows } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\n// --max-depth must be a positive integer, mirroring shared.ts's parseK.\nfunction parseMaxDepth(depth: string | undefined, usageError: (message: string) => never): number | undefined {\n if (depth === undefined) return undefined;\n const parsed = Number(depth);\n if (!Number.isInteger(parsed) || parsed <= 0) usageError(`--max-depth expects a positive integer, got \"${depth}\"`);\n return parsed;\n}\n\nconst pathCmd: Command = (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.path}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SCOPE, ...FORMAT, ...CONFIG, 'max-depth': { type: 'string' } });\n const [a, b] = positionals;\n if (!a || !b) ctx.usageError(usage);\n const maxDepth = parseMaxDepth(values['max-depth'] as string | undefined, ctx.usageError);\n const format = formatOf(values);\n return withDb(ctx, values.config as string | undefined, (db, cfg) => {\n const paths = (db.prepare('SELECT \"path\" FROM frontmatter').all() as Array<{ path: string }>).map((r) => r.path);\n const from = resolveNote(paths, a);\n const to = resolveNote(paths, b);\n const allowed = scopedPaths(db, cfg, scopeOf(values));\n const hops = findPath(db, from, to, { maxDepth, allowed });\n\n if (format === 'json') {\n console.log(JSON.stringify(hops));\n return;\n }\n if (hops === null) {\n console.log(maxDepth ? `no path within ${maxDepth} hops` : 'no path');\n return;\n }\n const rows: Row[] = hops.map((p, step) => ({ step, path: p }));\n printRows(rows, format);\n });\n};\nexport default pathCmd;\n"],"names":["resolveNote","scopedPaths","findPath","printRows","USAGE","CONFIG","FORMAT","formatOf","parse","SCOPE","scopeOf","withDb","parseMaxDepth","depth","usageError","undefined","parsed","Number","isInteger","pathCmd","ctx","usage","name","path","values","positionals","argv","type","a","b","maxDepth","format","config","db","cfg","paths","prepare","all","map","r","from","to","allowed","hops","console","log","JSON","stringify","rows","p","step"],"mappings":"AAAA,SAASA,WAAW,QAAQ,sBAAsB;AAClD,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGtF,wEAAwE;AACxE,SAASC,cAAcC,KAAyB,EAAEC,UAAsC;IACtF,IAAID,UAAUE,WAAW,OAAOA;IAChC,MAAMC,SAASC,OAAOJ;IACtB,IAAI,CAACI,OAAOC,SAAS,CAACF,WAAWA,UAAU,GAAGF,WAAW,CAAC,6CAA6C,EAAED,MAAM,CAAC,CAAC;IACjH,OAAOG;AACT;AAEA,MAAMG,UAAmB,CAACC;IACxB,MAAMC,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAElB,MAAMmB,IAAI,EAAE;IAChD,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGjB,MAAMY,IAAIM,IAAI,EAAEL,OAAO;QAAE,GAAGZ,KAAK;QAAE,GAAGH,MAAM;QAAE,GAAGD,MAAM;QAAE,aAAa;YAAEsB,MAAM;QAAS;IAAE;IACzH,MAAM,CAACC,GAAGC,EAAE,GAAGJ;IACf,IAAI,CAACG,KAAK,CAACC,GAAGT,IAAIN,UAAU,CAACO;IAC7B,MAAMS,WAAWlB,cAAcY,MAAM,CAAC,YAAY,EAAwBJ,IAAIN,UAAU;IACxF,MAAMiB,SAASxB,SAASiB;IACxB,OAAOb,OAAOS,KAAKI,OAAOQ,MAAM,EAAwB,CAACC,IAAIC;QAC3D,MAAMC,QAAQ,AAACF,GAAGG,OAAO,CAAC,kCAAkCC,GAAG,GAA+BC,GAAG,CAAC,CAACC,IAAMA,EAAEhB,IAAI;QAC/G,MAAMiB,OAAOxC,YAAYmC,OAAOP;QAChC,MAAMa,KAAKzC,YAAYmC,OAAON;QAC9B,MAAMa,UAAUzC,YAAYgC,IAAIC,KAAKxB,QAAQc;QAC7C,MAAMmB,OAAOzC,SAAS+B,IAAIO,MAAMC,IAAI;YAAEX;YAAUY;QAAQ;QAExD,IAAIX,WAAW,QAAQ;YACrBa,QAAQC,GAAG,CAACC,KAAKC,SAAS,CAACJ;YAC3B;QACF;QACA,IAAIA,SAAS,MAAM;YACjBC,QAAQC,GAAG,CAACf,WAAW,CAAC,eAAe,EAAEA,SAAS,KAAK,CAAC,GAAG;YAC3D;QACF;QACA,MAAMkB,OAAcL,KAAKL,GAAG,CAAC,CAACW,GAAGC,OAAU,CAAA;gBAAEA;gBAAM3B,MAAM0B;YAAE,CAAA;QAC3D9C,UAAU6C,MAAMjB;IAClB;AACF;AACA,eAAeZ,QAAQ"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/path.ts"],"sourcesContent":["import { resolveNote } from '../commands/peek.ts';\nimport { scopedPaths } from '../commands/scope.ts';\nimport { findPath } from '../graph/traverse.ts';\nimport type { Row } from '../output/output.ts';\nimport { printRows } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\n// --max-depth must be a positive integer, mirroring shared.ts's parseK.\nfunction parseMaxDepth(depth: string | undefined, usageError: (message: string) => never): number | undefined {\n if (depth === undefined) return undefined;\n const parsed = Number(depth);\n if (!Number.isInteger(parsed) || parsed <= 0) usageError(`--max-depth expects a positive integer, got \"${depth}\"`);\n return parsed;\n}\n\nconst pathCmd: Command = (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.path}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SCOPE, ...FORMAT, ...CONFIG, 'max-depth': { type: 'string' } });\n const [a, b] = positionals;\n if (!a || !b) ctx.usageError(usage);\n const maxDepth = parseMaxDepth(values['max-depth'] as string | undefined, ctx.usageError);\n const format = formatOf(values);\n return withDb(ctx, values.config as string | undefined, async (store, cfg) => {\n const paths = ((await (await store.prepare('SELECT \"path\" FROM frontmatter')).all()) as Array<{ path: string }>).map((r) => r.path);\n const from = resolveNote(paths, a);\n const to = resolveNote(paths, b);\n const allowed = await scopedPaths(store, cfg, scopeOf(values));\n const hops = await findPath(store, from, to, { maxDepth, allowed });\n\n if (format === 'json') {\n console.log(JSON.stringify(hops));\n return;\n }\n if (hops === null) {\n console.log(maxDepth ? `no path within ${maxDepth} hops` : 'no path');\n return;\n }\n const rows: Row[] = hops.map((p, step) => ({ step, path: p }));\n printRows(rows, format);\n });\n};\nexport default pathCmd;\n"],"names":["resolveNote","scopedPaths","findPath","printRows","USAGE","CONFIG","FORMAT","formatOf","parse","SCOPE","scopeOf","withDb","parseMaxDepth","depth","usageError","undefined","parsed","Number","isInteger","pathCmd","ctx","usage","name","path","values","positionals","argv","type","a","b","maxDepth","format","config","store","cfg","paths","prepare","all","map","r","from","to","allowed","hops","console","log","JSON","stringify","rows","p","step"],"mappings":"AAAA,SAASA,WAAW,QAAQ,sBAAsB;AAClD,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGtF,wEAAwE;AACxE,SAASC,cAAcC,KAAyB,EAAEC,UAAsC;IACtF,IAAID,UAAUE,WAAW,OAAOA;IAChC,MAAMC,SAASC,OAAOJ;IACtB,IAAI,CAACI,OAAOC,SAAS,CAACF,WAAWA,UAAU,GAAGF,WAAW,CAAC,6CAA6C,EAAED,MAAM,CAAC,CAAC;IACjH,OAAOG;AACT;AAEA,MAAMG,UAAmB,CAACC;IACxB,MAAMC,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAElB,MAAMmB,IAAI,EAAE;IAChD,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGjB,MAAMY,IAAIM,IAAI,EAAEL,OAAO;QAAE,GAAGZ,KAAK;QAAE,GAAGH,MAAM;QAAE,GAAGD,MAAM;QAAE,aAAa;YAAEsB,MAAM;QAAS;IAAE;IACzH,MAAM,CAACC,GAAGC,EAAE,GAAGJ;IACf,IAAI,CAACG,KAAK,CAACC,GAAGT,IAAIN,UAAU,CAACO;IAC7B,MAAMS,WAAWlB,cAAcY,MAAM,CAAC,YAAY,EAAwBJ,IAAIN,UAAU;IACxF,MAAMiB,SAASxB,SAASiB;IACxB,OAAOb,OAAOS,KAAKI,OAAOQ,MAAM,EAAwB,OAAOC,OAAOC;QACpE,MAAMC,QAAQ,AAAE,CAAA,MAAM,AAAC,CAAA,MAAMF,MAAMG,OAAO,CAAC,iCAAgC,EAAGC,GAAG,EAAC,EAA+BC,GAAG,CAAC,CAACC,IAAMA,EAAEhB,IAAI;QAClI,MAAMiB,OAAOxC,YAAYmC,OAAOP;QAChC,MAAMa,KAAKzC,YAAYmC,OAAON;QAC9B,MAAMa,UAAU,MAAMzC,YAAYgC,OAAOC,KAAKxB,QAAQc;QACtD,MAAMmB,OAAO,MAAMzC,SAAS+B,OAAOO,MAAMC,IAAI;YAAEX;YAAUY;QAAQ;QAEjE,IAAIX,WAAW,QAAQ;YACrBa,QAAQC,GAAG,CAACC,KAAKC,SAAS,CAACJ;YAC3B;QACF;QACA,IAAIA,SAAS,MAAM;YACjBC,QAAQC,GAAG,CAACf,WAAW,CAAC,eAAe,EAAEA,SAAS,KAAK,CAAC,GAAG;YAC3D;QACF;QACA,MAAMkB,OAAcL,KAAKL,GAAG,CAAC,CAACW,GAAGC,OAAU,CAAA;gBAAEA;gBAAM3B,MAAM0B;YAAE,CAAA;QAC3D9C,UAAU6C,MAAMjB;IAClB;AACF;AACA,eAAeZ,QAAQ"}
@@ -1,5 +1,5 @@
1
1
  import { peek } from '../commands/peek.js';
2
- import { renderPeek } from '../output/output.js';
2
+ import { renderPeek, stringifyJson } from '../output/output.js';
3
3
  import { USAGE } from './index.js';
4
4
  import { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.js';
5
5
  const peekCmd = (ctx)=>{
@@ -12,10 +12,10 @@ const peekCmd = (ctx)=>{
12
12
  const [pathArg] = positionals;
13
13
  if (!pathArg) ctx.usageError(usage);
14
14
  const format = formatOf(values);
15
- return withDb(ctx, values.config, (db, cfg)=>{
15
+ return withDb(ctx, values.config, async (store, cfg)=>{
16
16
  const overrides = scopeOf(values);
17
- const result = peek(db, cfg, pathArg, overrides);
18
- console.log(format === 'json' ? JSON.stringify(result, null, 2) : renderPeek(result));
17
+ const result = await peek(store, cfg, pathArg, overrides);
18
+ console.log(format === 'json' ? stringifyJson(result, 2) : renderPeek(result));
19
19
  });
20
20
  };
21
21
  export default peekCmd;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/peek.ts"],"sourcesContent":["import { peek } from '../commands/peek.ts';\nimport { renderPeek } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst peekCmd: Command = (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.peek}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SCOPE, ...FORMAT, ...CONFIG });\n const [pathArg] = positionals;\n if (!pathArg) ctx.usageError(usage);\n const format = formatOf(values);\n return withDb(ctx, values.config as string | undefined, (db, cfg) => {\n const overrides = scopeOf(values);\n const result = peek(db, cfg, pathArg, overrides);\n console.log(format === 'json' ? JSON.stringify(result, null, 2) : renderPeek(result));\n });\n};\nexport default peekCmd;\n"],"names":["peek","renderPeek","USAGE","CONFIG","FORMAT","formatOf","parse","SCOPE","scopeOf","withDb","peekCmd","ctx","usage","name","values","positionals","argv","pathArg","usageError","format","config","db","cfg","overrides","result","console","log","JSON","stringify"],"mappings":"AAAA,SAASA,IAAI,QAAQ,sBAAsB;AAC3C,SAASC,UAAU,QAAQ,sBAAsB;AACjD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGtF,MAAMC,UAAmB,CAACC;IACxB,MAAMC,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAEX,MAAMF,IAAI,EAAE;IAChD,MAAM,EAAEc,MAAM,EAAEC,WAAW,EAAE,GAAGT,MAAMK,IAAIK,IAAI,EAAEJ,OAAO;QAAE,GAAGL,KAAK;QAAE,GAAGH,MAAM;QAAE,GAAGD,MAAM;IAAC;IACxF,MAAM,CAACc,QAAQ,GAAGF;IAClB,IAAI,CAACE,SAASN,IAAIO,UAAU,CAACN;IAC7B,MAAMO,SAASd,SAASS;IACxB,OAAOL,OAAOE,KAAKG,OAAOM,MAAM,EAAwB,CAACC,IAAIC;QAC3D,MAAMC,YAAYf,QAAQM;QAC1B,MAAMU,SAASxB,KAAKqB,IAAIC,KAAKL,SAASM;QACtCE,QAAQC,GAAG,CAACP,WAAW,SAASQ,KAAKC,SAAS,CAACJ,QAAQ,MAAM,KAAKvB,WAAWuB;IAC/E;AACF;AACA,eAAed,QAAQ"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/peek.ts"],"sourcesContent":["import { peek } from '../commands/peek.ts';\nimport { renderPeek, stringifyJson } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, formatOf, parse, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst peekCmd: Command = (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.peek}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SCOPE, ...FORMAT, ...CONFIG });\n const [pathArg] = positionals;\n if (!pathArg) ctx.usageError(usage);\n const format = formatOf(values);\n return withDb(ctx, values.config as string | undefined, async (store, cfg) => {\n const overrides = scopeOf(values);\n const result = await peek(store, cfg, pathArg, overrides);\n console.log(format === 'json' ? stringifyJson(result, 2) : renderPeek(result));\n });\n};\nexport default peekCmd;\n"],"names":["peek","renderPeek","stringifyJson","USAGE","CONFIG","FORMAT","formatOf","parse","SCOPE","scopeOf","withDb","peekCmd","ctx","usage","name","values","positionals","argv","pathArg","usageError","format","config","store","cfg","overrides","result","console","log"],"mappings":"AAAA,SAASA,IAAI,QAAQ,sBAAsB;AAC3C,SAASC,UAAU,EAAEC,aAAa,QAAQ,sBAAsB;AAChE,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGtF,MAAMC,UAAmB,CAACC;IACxB,MAAMC,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAEX,MAAMH,IAAI,EAAE;IAChD,MAAM,EAAEe,MAAM,EAAEC,WAAW,EAAE,GAAGT,MAAMK,IAAIK,IAAI,EAAEJ,OAAO;QAAE,GAAGL,KAAK;QAAE,GAAGH,MAAM;QAAE,GAAGD,MAAM;IAAC;IACxF,MAAM,CAACc,QAAQ,GAAGF;IAClB,IAAI,CAACE,SAASN,IAAIO,UAAU,CAACN;IAC7B,MAAMO,SAASd,SAASS;IACxB,OAAOL,OAAOE,KAAKG,OAAOM,MAAM,EAAwB,OAAOC,OAAOC;QACpE,MAAMC,YAAYf,QAAQM;QAC1B,MAAMU,SAAS,MAAMzB,KAAKsB,OAAOC,KAAKL,SAASM;QAC/CE,QAAQC,GAAG,CAACP,WAAW,SAASlB,cAAcuB,QAAQ,KAAKxB,WAAWwB;IACxE;AACF;AACA,eAAed,QAAQ"}
@@ -18,9 +18,9 @@ const relatedCmd = (ctx)=>{
18
18
  if (!pathArg) ctx.usageError(usage);
19
19
  const k = (_parseK = parseK(values.k, ctx.usageError)) !== null && _parseK !== void 0 ? _parseK : RELATED_DEFAULT_K;
20
20
  const format = rowFormatOf(values);
21
- return withDb(ctx, values.config, async (db, cfg)=>{
21
+ return withDb(ctx, values.config, async (store, cfg)=>{
22
22
  const overrides = scopeOf(values);
23
- printRows(await relatedNotes(db, cfg, pathArg, overrides, k), format);
23
+ printRows(await relatedNotes(store, cfg, pathArg, overrides, k), format);
24
24
  });
25
25
  };
26
26
  export default relatedCmd;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/related.ts"],"sourcesContent":["import { relatedNotes } from '../commands/related.ts';\nimport type { Row } from '../output/output.ts';\nimport { printRows } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, parse, parseK, rowFormatOf, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst RELATED_DEFAULT_K = 5;\n\nconst relatedCmd: Command = (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.related}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SCOPE, ...FORMAT, ...CONFIG, k: { type: 'string' } });\n const [pathArg] = positionals;\n if (!pathArg) ctx.usageError(usage);\n const k = parseK(values.k as string | undefined, ctx.usageError) ?? RELATED_DEFAULT_K;\n const format = rowFormatOf(values);\n return withDb(ctx, values.config as string | undefined, async (db, cfg) => {\n const overrides = scopeOf(values);\n printRows((await relatedNotes(db, cfg, pathArg, overrides, k)) as Row[], format);\n });\n};\nexport default relatedCmd;\n"],"names":["relatedNotes","printRows","USAGE","CONFIG","FORMAT","parse","parseK","rowFormatOf","SCOPE","scopeOf","withDb","RELATED_DEFAULT_K","relatedCmd","ctx","usage","name","related","values","positionals","argv","k","type","pathArg","usageError","format","config","db","cfg","overrides"],"mappings":"AAAA,SAASA,YAAY,QAAQ,yBAAyB;AAEtD,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,WAAW,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGjG,MAAMC,oBAAoB;AAE1B,MAAMC,aAAsB,CAACC;QAKjBP;IAJV,MAAMQ,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAEb,MAAMc,OAAO,EAAE;IACnD,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGb,MAAMQ,IAAIM,IAAI,EAAEL,OAAO;QAAE,GAAGN,KAAK;QAAE,GAAGJ,MAAM;QAAE,GAAGD,MAAM;QAAEiB,GAAG;YAAEC,MAAM;QAAS;IAAE;IAC/G,MAAM,CAACC,QAAQ,GAAGJ;IAClB,IAAI,CAACI,SAAST,IAAIU,UAAU,CAACT;IAC7B,MAAMM,KAAId,UAAAA,OAAOW,OAAOG,CAAC,EAAwBP,IAAIU,UAAU,eAArDjB,qBAAAA,UAA0DK;IACpE,MAAMa,SAASjB,YAAYU;IAC3B,OAAOP,OAAOG,KAAKI,OAAOQ,MAAM,EAAwB,OAAOC,IAAIC;QACjE,MAAMC,YAAYnB,QAAQQ;QAC1BhB,UAAW,MAAMD,aAAa0B,IAAIC,KAAKL,SAASM,WAAWR,IAAcI;IAC3E;AACF;AACA,eAAeZ,WAAW"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/related.ts"],"sourcesContent":["import { relatedNotes } from '../commands/related.ts';\nimport type { Row } from '../output/output.ts';\nimport { printRows } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, parse, parseK, rowFormatOf, SCOPE, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst RELATED_DEFAULT_K = 5;\n\nconst relatedCmd: Command = (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.related}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SCOPE, ...FORMAT, ...CONFIG, k: { type: 'string' } });\n const [pathArg] = positionals;\n if (!pathArg) ctx.usageError(usage);\n const k = parseK(values.k as string | undefined, ctx.usageError) ?? RELATED_DEFAULT_K;\n const format = rowFormatOf(values);\n return withDb(ctx, values.config as string | undefined, async (store, cfg) => {\n const overrides = scopeOf(values);\n printRows((await relatedNotes(store, cfg, pathArg, overrides, k)) as Row[], format);\n });\n};\nexport default relatedCmd;\n"],"names":["relatedNotes","printRows","USAGE","CONFIG","FORMAT","parse","parseK","rowFormatOf","SCOPE","scopeOf","withDb","RELATED_DEFAULT_K","relatedCmd","ctx","usage","name","related","values","positionals","argv","k","type","pathArg","usageError","format","config","store","cfg","overrides"],"mappings":"AAAA,SAASA,YAAY,QAAQ,yBAAyB;AAEtD,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,WAAW,EAAEC,KAAK,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGjG,MAAMC,oBAAoB;AAE1B,MAAMC,aAAsB,CAACC;QAKjBP;IAJV,MAAMQ,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAEb,MAAMc,OAAO,EAAE;IACnD,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGb,MAAMQ,IAAIM,IAAI,EAAEL,OAAO;QAAE,GAAGN,KAAK;QAAE,GAAGJ,MAAM;QAAE,GAAGD,MAAM;QAAEiB,GAAG;YAAEC,MAAM;QAAS;IAAE;IAC/G,MAAM,CAACC,QAAQ,GAAGJ;IAClB,IAAI,CAACI,SAAST,IAAIU,UAAU,CAACT;IAC7B,MAAMM,KAAId,UAAAA,OAAOW,OAAOG,CAAC,EAAwBP,IAAIU,UAAU,eAArDjB,qBAAAA,UAA0DK;IACpE,MAAMa,SAASjB,YAAYU;IAC3B,OAAOP,OAAOG,KAAKI,OAAOQ,MAAM,EAAwB,OAAOC,OAAOC;QACpE,MAAMC,YAAYnB,QAAQQ;QAC1BhB,UAAW,MAAMD,aAAa0B,OAAOC,KAAKL,SAASM,WAAWR,IAAcI;IAC9E;AACF;AACA,eAAeZ,WAAW"}
@@ -13,7 +13,7 @@ const searchCmd = async (ctx)=>{
13
13
  if (!terms) ctx.usageError(usage);
14
14
  const k = parseK(values.k, ctx.usageError);
15
15
  const format = rowFormatOf(values);
16
- await withDb(ctx, values.config, async (db, cfg)=>printRows(await search(db, cfg, terms, {
16
+ await withDb(ctx, values.config, async (store, cfg)=>printRows(await search(store, cfg, terms, {
17
17
  k,
18
18
  ...scopeOf(values)
19
19
  }), format));
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/search.ts"],"sourcesContent":["import { search } from '../commands/search.ts';\nimport { printRows } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, parse, parseK, rowFormatOf, SEARCH_FLAGS, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst searchCmd: Command = async (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.search}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SEARCH_FLAGS, ...FORMAT, ...CONFIG });\n const [terms] = positionals;\n if (!terms) ctx.usageError(usage);\n const k = parseK(values.k as string | undefined, ctx.usageError);\n const format = rowFormatOf(values);\n await withDb(ctx, values.config as string | undefined, async (db, cfg) => printRows(await search(db, cfg, terms, { k, ...scopeOf(values) }), format));\n};\nexport default searchCmd;\n"],"names":["search","printRows","USAGE","CONFIG","FORMAT","parse","parseK","rowFormatOf","SEARCH_FLAGS","scopeOf","withDb","searchCmd","ctx","usage","name","values","positionals","argv","terms","usageError","k","format","config","db","cfg"],"mappings":"AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,WAAW,EAAEC,YAAY,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGxG,MAAMC,YAAqB,OAAOC;IAChC,MAAMC,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAEZ,MAAMF,MAAM,EAAE;IAClD,MAAM,EAAEe,MAAM,EAAEC,WAAW,EAAE,GAAGX,MAAMO,IAAIK,IAAI,EAAEJ,OAAO;QAAE,GAAGL,YAAY;QAAE,GAAGJ,MAAM;QAAE,GAAGD,MAAM;IAAC;IAC/F,MAAM,CAACe,MAAM,GAAGF;IAChB,IAAI,CAACE,OAAON,IAAIO,UAAU,CAACN;IAC3B,MAAMO,IAAId,OAAOS,OAAOK,CAAC,EAAwBR,IAAIO,UAAU;IAC/D,MAAME,SAASd,YAAYQ;IAC3B,MAAML,OAAOE,KAAKG,OAAOO,MAAM,EAAwB,OAAOC,IAAIC,MAAQvB,UAAU,MAAMD,OAAOuB,IAAIC,KAAKN,OAAO;YAAEE;YAAG,GAAGX,QAAQM,OAAO;QAAC,IAAIM;AAC/I;AACA,eAAeV,UAAU"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/search.ts"],"sourcesContent":["import { search } from '../commands/search.ts';\nimport { printRows } from '../output/output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, parse, parseK, rowFormatOf, SEARCH_FLAGS, scopeOf, withDb } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst searchCmd: Command = async (ctx) => {\n const usage = `usage: ${ctx.name} ${USAGE.search}`;\n const { values, positionals } = parse(ctx.argv, usage, { ...SEARCH_FLAGS, ...FORMAT, ...CONFIG });\n const [terms] = positionals;\n if (!terms) ctx.usageError(usage);\n const k = parseK(values.k as string | undefined, ctx.usageError);\n const format = rowFormatOf(values);\n await withDb(ctx, values.config as string | undefined, async (store, cfg) => printRows(await search(store, cfg, terms, { k, ...scopeOf(values) }), format));\n};\nexport default searchCmd;\n"],"names":["search","printRows","USAGE","CONFIG","FORMAT","parse","parseK","rowFormatOf","SEARCH_FLAGS","scopeOf","withDb","searchCmd","ctx","usage","name","values","positionals","argv","terms","usageError","k","format","config","store","cfg"],"mappings":"AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,KAAK,QAAQ,aAAa;AACnC,SAASC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,WAAW,EAAEC,YAAY,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAGxG,MAAMC,YAAqB,OAAOC;IAChC,MAAMC,QAAQ,CAAC,OAAO,EAAED,IAAIE,IAAI,CAAC,CAAC,EAAEZ,MAAMF,MAAM,EAAE;IAClD,MAAM,EAAEe,MAAM,EAAEC,WAAW,EAAE,GAAGX,MAAMO,IAAIK,IAAI,EAAEJ,OAAO;QAAE,GAAGL,YAAY;QAAE,GAAGJ,MAAM;QAAE,GAAGD,MAAM;IAAC;IAC/F,MAAM,CAACe,MAAM,GAAGF;IAChB,IAAI,CAACE,OAAON,IAAIO,UAAU,CAACN;IAC3B,MAAMO,IAAId,OAAOS,OAAOK,CAAC,EAAwBR,IAAIO,UAAU;IAC/D,MAAME,SAASd,YAAYQ;IAC3B,MAAML,OAAOE,KAAKG,OAAOO,MAAM,EAAwB,OAAOC,OAAOC,MAAQvB,UAAU,MAAMD,OAAOuB,OAAOC,KAAKN,OAAO;YAAEE;YAAG,GAAGX,QAAQM,OAAO;QAAC,IAAIM;AACrJ;AACA,eAAeV,UAAU"}
@@ -1,7 +1,7 @@
1
1
  import type { ParseArgsOptionsConfig } from 'node:util';
2
2
  import type { ResolvedConfig, SearchOverrides } from '../config/index.js';
3
- import type { OpenResult } from '../db/index.js';
4
3
  import type { RowFormat } from '../output/output.js';
4
+ import type { OpenResult } from '../store/index.js';
5
5
  import type { Ctx } from './types.js';
6
6
  export declare const FORMAT: ParseArgsOptionsConfig;
7
7
  export declare const CONFIG: ParseArgsOptionsConfig;
@@ -17,6 +17,6 @@ export declare function parse(argv: string[], usage: string, options: ParseArgsO
17
17
  };
18
18
  export declare function parseK(k: string | undefined, usageError: (message: string) => never): number | undefined;
19
19
  export declare function printWarnings(warnings: string[]): void;
20
- export declare function withDb(ctx: Ctx, configPath: string | undefined, fn: (db: OpenResult['db'], cfg: ResolvedConfig) => void | Promise<void>): Promise<void>;
21
- export declare function runSql(cfg: ResolvedConfig, sql: string, params: string[], format: RowFormat, label: string, preset?: string): void;
20
+ export declare function withDb(ctx: Ctx, configPath: string | undefined, fn: (store: OpenResult['store'], cfg: ResolvedConfig) => void | Promise<void>): Promise<void>;
21
+ export declare function runSql(cfg: ResolvedConfig, sql: string, params: string[], format: RowFormat, label: string, preset?: string): Promise<void>;
22
22
  export {};