@monoes/monograph 1.2.0 → 1.2.2

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 (469) hide show
  1. package/.monomind/loops/mastermind-review-1782162423447.json +16 -0
  2. package/__tests__/mcp-tools/cypher.test.ts +10 -6
  3. package/__tests__/mcp-tools/detect-changes.test.ts +14 -11
  4. package/__tests__/pipeline/phases/wildcard-synthesis.test.ts +4 -4
  5. package/__tests__/search/embed-batch-config.test.ts +7 -7
  6. package/__tests__/search/hybrid-query.test.ts +3 -1
  7. package/__tests__/web/api.test.ts +1 -1
  8. package/dist/src/analysis/churn-cache.d.ts.map +1 -1
  9. package/dist/src/analysis/churn-cache.js +19 -6
  10. package/dist/src/analysis/churn-cache.js.map +1 -1
  11. package/dist/src/analysis/churn-trend.d.ts.map +1 -1
  12. package/dist/src/analysis/churn-trend.js +50 -6
  13. package/dist/src/analysis/churn-trend.js.map +1 -1
  14. package/dist/src/analysis/cluster-quality.d.ts +3 -0
  15. package/dist/src/analysis/cluster-quality.d.ts.map +1 -1
  16. package/dist/src/analysis/cluster-quality.js +18 -12
  17. package/dist/src/analysis/cluster-quality.js.map +1 -1
  18. package/dist/src/analysis/coverage-gaps.d.ts +3 -0
  19. package/dist/src/analysis/coverage-gaps.d.ts.map +1 -1
  20. package/dist/src/analysis/coverage-gaps.js +40 -1
  21. package/dist/src/analysis/coverage-gaps.js.map +1 -1
  22. package/dist/src/analysis/dep-classification.d.ts +2 -0
  23. package/dist/src/analysis/dep-classification.d.ts.map +1 -1
  24. package/dist/src/analysis/dep-classification.js +30 -0
  25. package/dist/src/analysis/dep-classification.js.map +1 -1
  26. package/dist/src/analysis/dependency-health.d.ts +4 -0
  27. package/dist/src/analysis/dependency-health.d.ts.map +1 -1
  28. package/dist/src/analysis/dependency-health.js +28 -0
  29. package/dist/src/analysis/dependency-health.js.map +1 -1
  30. package/dist/src/analysis/duplicate-exports.d.ts +9 -5
  31. package/dist/src/analysis/duplicate-exports.d.ts.map +1 -1
  32. package/dist/src/analysis/duplicate-exports.js +26 -2
  33. package/dist/src/analysis/duplicate-exports.js.map +1 -1
  34. package/dist/src/analysis/feature-flags.d.ts.map +1 -1
  35. package/dist/src/analysis/feature-flags.js +36 -17
  36. package/dist/src/analysis/feature-flags.js.map +1 -1
  37. package/dist/src/analysis/node-similarity.d.ts +19 -0
  38. package/dist/src/analysis/node-similarity.d.ts.map +1 -1
  39. package/dist/src/analysis/node-similarity.js +34 -3
  40. package/dist/src/analysis/node-similarity.js.map +1 -1
  41. package/dist/src/analysis/private-type-leaks.d.ts +4 -0
  42. package/dist/src/analysis/private-type-leaks.d.ts.map +1 -1
  43. package/dist/src/analysis/private-type-leaks.js +43 -2
  44. package/dist/src/analysis/private-type-leaks.js.map +1 -1
  45. package/dist/src/analysis/project-state.d.ts +2 -0
  46. package/dist/src/analysis/project-state.d.ts.map +1 -1
  47. package/dist/src/analysis/project-state.js +18 -7
  48. package/dist/src/analysis/project-state.js.map +1 -1
  49. package/dist/src/analysis/suppressions.d.ts.map +1 -1
  50. package/dist/src/analysis/suppressions.js +3 -1
  51. package/dist/src/analysis/suppressions.js.map +1 -1
  52. package/dist/src/analysis/trace.d.ts +5 -3
  53. package/dist/src/analysis/trace.d.ts.map +1 -1
  54. package/dist/src/analysis/trace.js +59 -53
  55. package/dist/src/analysis/trace.js.map +1 -1
  56. package/dist/src/analysis/unused-class-members.d.ts.map +1 -1
  57. package/dist/src/analysis/unused-class-members.js +7 -1
  58. package/dist/src/analysis/unused-class-members.js.map +1 -1
  59. package/dist/src/analysis/worker-pool.d.ts +3 -0
  60. package/dist/src/analysis/worker-pool.d.ts.map +1 -1
  61. package/dist/src/analysis/worker-pool.js +30 -8
  62. package/dist/src/analysis/worker-pool.js.map +1 -1
  63. package/dist/src/cli/augment.d.ts.map +1 -1
  64. package/dist/src/cli/augment.js +10 -3
  65. package/dist/src/cli/augment.js.map +1 -1
  66. package/dist/src/cli/skill-gen.js +3 -0
  67. package/dist/src/cli/skill-gen.js.map +1 -1
  68. package/dist/src/export/sarif.js +5 -5
  69. package/dist/src/export/sarif.js.map +1 -1
  70. package/dist/src/graph/analyzer.d.ts.map +1 -1
  71. package/dist/src/graph/analyzer.js +17 -2
  72. package/dist/src/graph/analyzer.js.map +1 -1
  73. package/dist/src/graph/author-analytics.d.ts +2 -0
  74. package/dist/src/graph/author-analytics.d.ts.map +1 -1
  75. package/dist/src/graph/author-analytics.js +39 -5
  76. package/dist/src/graph/author-analytics.js.map +1 -1
  77. package/dist/src/graph/baseline.d.ts +5 -0
  78. package/dist/src/graph/baseline.d.ts.map +1 -1
  79. package/dist/src/graph/baseline.js +65 -18
  80. package/dist/src/graph/baseline.js.map +1 -1
  81. package/dist/src/graph/clone-detector.d.ts.map +1 -1
  82. package/dist/src/graph/clone-detector.js +19 -33
  83. package/dist/src/graph/clone-detector.js.map +1 -1
  84. package/dist/src/graph/clone-families.d.ts +2 -0
  85. package/dist/src/graph/clone-families.d.ts.map +1 -1
  86. package/dist/src/graph/clone-families.js +38 -10
  87. package/dist/src/graph/clone-families.js.map +1 -1
  88. package/dist/src/graph/codeowners-extended.d.ts +17 -0
  89. package/dist/src/graph/codeowners-extended.d.ts.map +1 -1
  90. package/dist/src/graph/codeowners-extended.js +42 -0
  91. package/dist/src/graph/codeowners-extended.js.map +1 -1
  92. package/dist/src/graph/codeowners-gitlab.d.ts +21 -0
  93. package/dist/src/graph/codeowners-gitlab.d.ts.map +1 -1
  94. package/dist/src/graph/codeowners-gitlab.js +37 -0
  95. package/dist/src/graph/codeowners-gitlab.js.map +1 -1
  96. package/dist/src/graph/codeowners.d.ts +10 -0
  97. package/dist/src/graph/codeowners.d.ts.map +1 -1
  98. package/dist/src/graph/codeowners.js +24 -2
  99. package/dist/src/graph/codeowners.js.map +1 -1
  100. package/dist/src/graph/complexity.d.ts +10 -0
  101. package/dist/src/graph/complexity.d.ts.map +1 -1
  102. package/dist/src/graph/complexity.js +93 -43
  103. package/dist/src/graph/complexity.js.map +1 -1
  104. package/dist/src/graph/cross-reference-findings.d.ts.map +1 -1
  105. package/dist/src/graph/cross-reference-findings.js +19 -2
  106. package/dist/src/graph/cross-reference-findings.js.map +1 -1
  107. package/dist/src/graph/cross-reference.d.ts +4 -0
  108. package/dist/src/graph/cross-reference.d.ts.map +1 -1
  109. package/dist/src/graph/cross-reference.js +23 -0
  110. package/dist/src/graph/cross-reference.js.map +1 -1
  111. package/dist/src/graph/cycle-detection.d.ts +2 -0
  112. package/dist/src/graph/cycle-detection.d.ts.map +1 -1
  113. package/dist/src/graph/cycle-detection.js +26 -3
  114. package/dist/src/graph/cycle-detection.js.map +1 -1
  115. package/dist/src/graph/cycles.d.ts +11 -3
  116. package/dist/src/graph/cycles.d.ts.map +1 -1
  117. package/dist/src/graph/cycles.js +121 -83
  118. package/dist/src/graph/cycles.js.map +1 -1
  119. package/dist/src/graph/dead-code.d.ts +23 -0
  120. package/dist/src/graph/dead-code.d.ts.map +1 -1
  121. package/dist/src/graph/dead-code.js +53 -13
  122. package/dist/src/graph/dead-code.js.map +1 -1
  123. package/dist/src/graph/dependency-closure.d.ts.map +1 -1
  124. package/dist/src/graph/dependency-closure.js +20 -4
  125. package/dist/src/graph/dependency-closure.js.map +1 -1
  126. package/dist/src/graph/dfs.d.ts +14 -0
  127. package/dist/src/graph/dfs.d.ts.map +1 -1
  128. package/dist/src/graph/dfs.js +61 -0
  129. package/dist/src/graph/dfs.js.map +1 -1
  130. package/dist/src/graph/duplication-stats.d.ts.map +1 -1
  131. package/dist/src/graph/duplication-stats.js +19 -3
  132. package/dist/src/graph/duplication-stats.js.map +1 -1
  133. package/dist/src/graph/edge-filter.d.ts +2 -0
  134. package/dist/src/graph/edge-filter.d.ts.map +1 -1
  135. package/dist/src/graph/edge-filter.js +26 -12
  136. package/dist/src/graph/edge-filter.js.map +1 -1
  137. package/dist/src/graph/health-score.d.ts +8 -0
  138. package/dist/src/graph/health-score.d.ts.map +1 -1
  139. package/dist/src/graph/health-score.js +48 -17
  140. package/dist/src/graph/health-score.js.map +1 -1
  141. package/dist/src/graph/hotspots.d.ts +7 -0
  142. package/dist/src/graph/hotspots.d.ts.map +1 -1
  143. package/dist/src/graph/hotspots.js +50 -5
  144. package/dist/src/graph/hotspots.js.map +1 -1
  145. package/dist/src/graph/import-chain.d.ts +17 -1
  146. package/dist/src/graph/import-chain.d.ts.map +1 -1
  147. package/dist/src/graph/import-chain.js +68 -19
  148. package/dist/src/graph/import-chain.js.map +1 -1
  149. package/dist/src/graph/loader.d.ts.map +1 -1
  150. package/dist/src/graph/loader.js +9 -10
  151. package/dist/src/graph/loader.js.map +1 -1
  152. package/dist/src/graph/maintainability.d.ts +8 -0
  153. package/dist/src/graph/maintainability.d.ts.map +1 -1
  154. package/dist/src/graph/maintainability.js +65 -10
  155. package/dist/src/graph/maintainability.js.map +1 -1
  156. package/dist/src/graph/mirrored-dirs.d.ts +4 -0
  157. package/dist/src/graph/mirrored-dirs.d.ts.map +1 -1
  158. package/dist/src/graph/mirrored-dirs.js +48 -13
  159. package/dist/src/graph/mirrored-dirs.js.map +1 -1
  160. package/dist/src/graph/narrowing.d.ts +15 -0
  161. package/dist/src/graph/narrowing.d.ts.map +1 -1
  162. package/dist/src/graph/narrowing.js +33 -0
  163. package/dist/src/graph/narrowing.js.map +1 -1
  164. package/dist/src/graph/node-search.d.ts +3 -0
  165. package/dist/src/graph/node-search.d.ts.map +1 -1
  166. package/dist/src/graph/node-search.js +37 -4
  167. package/dist/src/graph/node-search.js.map +1 -1
  168. package/dist/src/graph/normalize-id.d.ts +4 -0
  169. package/dist/src/graph/normalize-id.d.ts.map +1 -1
  170. package/dist/src/graph/normalize-id.js +25 -2
  171. package/dist/src/graph/normalize-id.js.map +1 -1
  172. package/dist/src/graph/pagerank.d.ts +7 -0
  173. package/dist/src/graph/pagerank.d.ts.map +1 -1
  174. package/dist/src/graph/pagerank.js +49 -2
  175. package/dist/src/graph/pagerank.js.map +1 -1
  176. package/dist/src/graph/prune.d.ts +31 -0
  177. package/dist/src/graph/prune.d.ts.map +1 -1
  178. package/dist/src/graph/prune.js +65 -0
  179. package/dist/src/graph/prune.js.map +1 -1
  180. package/dist/src/graph/regex-search.d.ts +10 -2
  181. package/dist/src/graph/regex-search.d.ts.map +1 -1
  182. package/dist/src/graph/regex-search.js +33 -4
  183. package/dist/src/graph/regex-search.js.map +1 -1
  184. package/dist/src/graph/regression.d.ts +5 -0
  185. package/dist/src/graph/regression.d.ts.map +1 -1
  186. package/dist/src/graph/regression.js +45 -23
  187. package/dist/src/graph/regression.js.map +1 -1
  188. package/dist/src/graph/ripple-impact.d.ts +27 -0
  189. package/dist/src/graph/ripple-impact.d.ts.map +1 -1
  190. package/dist/src/graph/ripple-impact.js +55 -7
  191. package/dist/src/graph/ripple-impact.js.map +1 -1
  192. package/dist/src/graph/risk-profile.d.ts +7 -0
  193. package/dist/src/graph/risk-profile.d.ts.map +1 -1
  194. package/dist/src/graph/risk-profile.js +82 -48
  195. package/dist/src/graph/risk-profile.js.map +1 -1
  196. package/dist/src/graph/shingle-filter.d.ts.map +1 -1
  197. package/dist/src/graph/shingle-filter.js +25 -26
  198. package/dist/src/graph/shingle-filter.js.map +1 -1
  199. package/dist/src/graph/statistics.d.ts +19 -0
  200. package/dist/src/graph/statistics.d.ts.map +1 -1
  201. package/dist/src/graph/statistics.js +53 -40
  202. package/dist/src/graph/statistics.js.map +1 -1
  203. package/dist/src/graph/stats.d.ts +2 -0
  204. package/dist/src/graph/stats.d.ts.map +1 -1
  205. package/dist/src/graph/stats.js +54 -8
  206. package/dist/src/graph/stats.js.map +1 -1
  207. package/dist/src/graph/subgraph.d.ts +5 -0
  208. package/dist/src/graph/subgraph.d.ts.map +1 -1
  209. package/dist/src/graph/subgraph.js +73 -9
  210. package/dist/src/graph/subgraph.js.map +1 -1
  211. package/dist/src/graph/topo-sort.d.ts +15 -0
  212. package/dist/src/graph/topo-sort.d.ts.map +1 -1
  213. package/dist/src/graph/topo-sort.js +83 -10
  214. package/dist/src/graph/topo-sort.js.map +1 -1
  215. package/dist/src/graph/wcc.d.ts +29 -0
  216. package/dist/src/graph/wcc.d.ts.map +1 -1
  217. package/dist/src/graph/wcc.js +122 -39
  218. package/dist/src/graph/wcc.js.map +1 -1
  219. package/dist/src/index.js +1 -1
  220. package/dist/src/index.js.map +1 -1
  221. package/dist/src/mcp-tools/api-impact.d.ts.map +1 -1
  222. package/dist/src/mcp-tools/api-impact.js +13 -6
  223. package/dist/src/mcp-tools/api-impact.js.map +1 -1
  224. package/dist/src/mcp-tools/context.d.ts.map +1 -1
  225. package/dist/src/mcp-tools/context.js +19 -29
  226. package/dist/src/mcp-tools/context.js.map +1 -1
  227. package/dist/src/mcp-tools/cypher.d.ts +11 -0
  228. package/dist/src/mcp-tools/cypher.d.ts.map +1 -1
  229. package/dist/src/mcp-tools/cypher.js +13 -1
  230. package/dist/src/mcp-tools/cypher.js.map +1 -1
  231. package/dist/src/mcp-tools/detect-changes.d.ts.map +1 -1
  232. package/dist/src/mcp-tools/detect-changes.js +35 -20
  233. package/dist/src/mcp-tools/detect-changes.js.map +1 -1
  234. package/dist/src/mcp-tools/explain.d.ts.map +1 -1
  235. package/dist/src/mcp-tools/explain.js +4 -1
  236. package/dist/src/mcp-tools/explain.js.map +1 -1
  237. package/dist/src/mcp-tools/graph-query.d.ts +2 -0
  238. package/dist/src/mcp-tools/graph-query.d.ts.map +1 -1
  239. package/dist/src/mcp-tools/graph-query.js +20 -3
  240. package/dist/src/mcp-tools/graph-query.js.map +1 -1
  241. package/dist/src/mcp-tools/group-list.d.ts +1 -0
  242. package/dist/src/mcp-tools/group-list.d.ts.map +1 -1
  243. package/dist/src/mcp-tools/group-list.js +7 -9
  244. package/dist/src/mcp-tools/group-list.js.map +1 -1
  245. package/dist/src/mcp-tools/impact.d.ts.map +1 -1
  246. package/dist/src/mcp-tools/impact.js +20 -59
  247. package/dist/src/mcp-tools/impact.js.map +1 -1
  248. package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
  249. package/dist/src/mcp-tools/neighbors.js +24 -33
  250. package/dist/src/mcp-tools/neighbors.js.map +1 -1
  251. package/dist/src/mcp-tools/query.d.ts +2 -0
  252. package/dist/src/mcp-tools/query.d.ts.map +1 -1
  253. package/dist/src/mcp-tools/query.js +1 -0
  254. package/dist/src/mcp-tools/query.js.map +1 -1
  255. package/dist/src/mcp-tools/rename.d.ts.map +1 -1
  256. package/dist/src/mcp-tools/rename.js +12 -7
  257. package/dist/src/mcp-tools/rename.js.map +1 -1
  258. package/dist/src/mcp-tools/route-map.d.ts.map +1 -1
  259. package/dist/src/mcp-tools/route-map.js +19 -23
  260. package/dist/src/mcp-tools/route-map.js.map +1 -1
  261. package/dist/src/mcp-tools/shape-check.d.ts.map +1 -1
  262. package/dist/src/mcp-tools/shape-check.js +17 -13
  263. package/dist/src/mcp-tools/shape-check.js.map +1 -1
  264. package/dist/src/parsers/loader.js +6 -5
  265. package/dist/src/parsers/loader.js.map +1 -1
  266. package/dist/src/pipeline/cluster-only.d.ts.map +1 -1
  267. package/dist/src/pipeline/cluster-only.js +8 -4
  268. package/dist/src/pipeline/cluster-only.js.map +1 -1
  269. package/dist/src/pipeline/orchestrator.d.ts +2 -0
  270. package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
  271. package/dist/src/pipeline/orchestrator.js +19 -0
  272. package/dist/src/pipeline/orchestrator.js.map +1 -1
  273. package/dist/src/pipeline/phases/boundary.d.ts +2 -0
  274. package/dist/src/pipeline/phases/boundary.d.ts.map +1 -1
  275. package/dist/src/pipeline/phases/boundary.js +31 -2
  276. package/dist/src/pipeline/phases/boundary.js.map +1 -1
  277. package/dist/src/pipeline/phases/communities.d.ts +14 -0
  278. package/dist/src/pipeline/phases/communities.d.ts.map +1 -1
  279. package/dist/src/pipeline/phases/communities.js +58 -5
  280. package/dist/src/pipeline/phases/communities.js.map +1 -1
  281. package/dist/src/pipeline/phases/contextual-proximity.d.ts.map +1 -1
  282. package/dist/src/pipeline/phases/contextual-proximity.js +21 -14
  283. package/dist/src/pipeline/phases/contextual-proximity.js.map +1 -1
  284. package/dist/src/pipeline/phases/cross-file.d.ts.map +1 -1
  285. package/dist/src/pipeline/phases/cross-file.js +35 -14
  286. package/dist/src/pipeline/phases/cross-file.js.map +1 -1
  287. package/dist/src/pipeline/phases/field-access.d.ts.map +1 -1
  288. package/dist/src/pipeline/phases/field-access.js +9 -4
  289. package/dist/src/pipeline/phases/field-access.js.map +1 -1
  290. package/dist/src/pipeline/phases/god-nodes.d.ts +4 -0
  291. package/dist/src/pipeline/phases/god-nodes.d.ts.map +1 -1
  292. package/dist/src/pipeline/phases/god-nodes.js +43 -9
  293. package/dist/src/pipeline/phases/god-nodes.js.map +1 -1
  294. package/dist/src/pipeline/phases/import-resolver.d.ts +11 -0
  295. package/dist/src/pipeline/phases/import-resolver.d.ts.map +1 -1
  296. package/dist/src/pipeline/phases/import-resolver.js +34 -7
  297. package/dist/src/pipeline/phases/import-resolver.js.map +1 -1
  298. package/dist/src/pipeline/phases/leiden.d.ts.map +1 -1
  299. package/dist/src/pipeline/phases/leiden.js +27 -19
  300. package/dist/src/pipeline/phases/leiden.js.map +1 -1
  301. package/dist/src/pipeline/phases/markdown.d.ts.map +1 -1
  302. package/dist/src/pipeline/phases/markdown.js +10 -5
  303. package/dist/src/pipeline/phases/markdown.js.map +1 -1
  304. package/dist/src/pipeline/phases/pdf-parse.d.ts.map +1 -1
  305. package/dist/src/pipeline/phases/pdf-parse.js +18 -3
  306. package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
  307. package/dist/src/pipeline/phases/processes.d.ts.map +1 -1
  308. package/dist/src/pipeline/phases/processes.js +26 -9
  309. package/dist/src/pipeline/phases/processes.js.map +1 -1
  310. package/dist/src/pipeline/phases/re-export-propagation.d.ts.map +1 -1
  311. package/dist/src/pipeline/phases/re-export-propagation.js +33 -14
  312. package/dist/src/pipeline/phases/re-export-propagation.js.map +1 -1
  313. package/dist/src/pipeline/phases/reachability.d.ts.map +1 -1
  314. package/dist/src/pipeline/phases/reachability.js +42 -26
  315. package/dist/src/pipeline/phases/reachability.js.map +1 -1
  316. package/dist/src/pipeline/phases/routes.d.ts.map +1 -1
  317. package/dist/src/pipeline/phases/routes.js +30 -21
  318. package/dist/src/pipeline/phases/routes.js.map +1 -1
  319. package/dist/src/pipeline/phases/scope-resolution.d.ts.map +1 -1
  320. package/dist/src/pipeline/phases/scope-resolution.js +93 -63
  321. package/dist/src/pipeline/phases/scope-resolution.js.map +1 -1
  322. package/dist/src/pipeline/runner.d.ts +4 -0
  323. package/dist/src/pipeline/runner.d.ts.map +1 -1
  324. package/dist/src/pipeline/runner.js +30 -11
  325. package/dist/src/pipeline/runner.js.map +1 -1
  326. package/dist/src/query/cypher-parser.d.ts +20 -0
  327. package/dist/src/query/cypher-parser.d.ts.map +1 -1
  328. package/dist/src/query/cypher-parser.js +73 -0
  329. package/dist/src/query/cypher-parser.js.map +1 -1
  330. package/dist/src/search/embed-batch.d.ts.map +1 -1
  331. package/dist/src/search/embed-batch.js +4 -1
  332. package/dist/src/search/embed-batch.js.map +1 -1
  333. package/dist/src/search/hybrid-query.d.ts +4 -0
  334. package/dist/src/search/hybrid-query.d.ts.map +1 -1
  335. package/dist/src/search/hybrid-query.js +5 -1
  336. package/dist/src/search/hybrid-query.js.map +1 -1
  337. package/dist/src/staleness/git-staleness.js +3 -3
  338. package/dist/src/staleness/git-staleness.js.map +1 -1
  339. package/dist/src/storage/db.d.ts.map +1 -1
  340. package/dist/src/storage/db.js +12 -0
  341. package/dist/src/storage/db.js.map +1 -1
  342. package/dist/src/storage/edge-store.d.ts +2 -0
  343. package/dist/src/storage/edge-store.d.ts.map +1 -1
  344. package/dist/src/storage/edge-store.js +26 -1
  345. package/dist/src/storage/edge-store.js.map +1 -1
  346. package/dist/src/storage/embedding-store.d.ts +16 -0
  347. package/dist/src/storage/embedding-store.d.ts.map +1 -1
  348. package/dist/src/storage/embedding-store.js +26 -2
  349. package/dist/src/storage/embedding-store.js.map +1 -1
  350. package/dist/src/storage/file-cache.d.ts +5 -0
  351. package/dist/src/storage/file-cache.d.ts.map +1 -1
  352. package/dist/src/storage/file-cache.js +35 -9
  353. package/dist/src/storage/file-cache.js.map +1 -1
  354. package/dist/src/storage/fts-store.d.ts +4 -0
  355. package/dist/src/storage/fts-store.d.ts.map +1 -1
  356. package/dist/src/storage/fts-store.js +8 -3
  357. package/dist/src/storage/fts-store.js.map +1 -1
  358. package/dist/src/storage/node-store.d.ts +2 -0
  359. package/dist/src/storage/node-store.d.ts.map +1 -1
  360. package/dist/src/storage/node-store.js +28 -1
  361. package/dist/src/storage/node-store.js.map +1 -1
  362. package/dist/src/wiki/wiki-generator.d.ts.map +1 -1
  363. package/dist/src/wiki/wiki-generator.js +5 -1
  364. package/dist/src/wiki/wiki-generator.js.map +1 -1
  365. package/dist/tsconfig.tsbuildinfo +1 -1
  366. package/package.json +1 -1
  367. package/src/__tests__/pipeline/runner.parallel.test.ts +2 -2
  368. package/src/analysis/churn-cache.ts +18 -7
  369. package/src/analysis/churn-trend.ts +35 -6
  370. package/src/analysis/cluster-quality.ts +20 -11
  371. package/src/analysis/coverage-gaps.ts +44 -1
  372. package/src/analysis/dep-classification.ts +34 -0
  373. package/src/analysis/dependency-health.ts +25 -0
  374. package/src/analysis/duplicate-exports.ts +40 -4
  375. package/src/analysis/feature-flags.ts +37 -17
  376. package/src/analysis/node-similarity.ts +45 -4
  377. package/src/analysis/private-type-leaks.ts +49 -2
  378. package/src/analysis/project-state.ts +19 -9
  379. package/src/analysis/suppressions.ts +4 -1
  380. package/src/analysis/trace.ts +73 -54
  381. package/src/analysis/unused-class-members.ts +8 -1
  382. package/src/analysis/worker-pool.ts +40 -8
  383. package/src/cli/augment.ts +10 -3
  384. package/src/cli/skill-gen.ts +3 -0
  385. package/src/export/sarif.ts +5 -5
  386. package/src/graph/analyzer.ts +26 -2
  387. package/src/graph/author-analytics.ts +45 -5
  388. package/src/graph/baseline.ts +78 -24
  389. package/src/graph/clone-detector.ts +22 -36
  390. package/src/graph/clone-families.ts +34 -10
  391. package/src/graph/codeowners-extended.ts +54 -0
  392. package/src/graph/codeowners-gitlab.ts +46 -0
  393. package/src/graph/codeowners.ts +33 -2
  394. package/src/graph/complexity.ts +102 -47
  395. package/src/graph/cross-reference-findings.ts +23 -2
  396. package/src/graph/cross-reference.ts +26 -0
  397. package/src/graph/cycle-detection.ts +22 -3
  398. package/src/graph/cycles.ts +155 -96
  399. package/src/graph/dead-code.ts +76 -17
  400. package/src/graph/dependency-closure.ts +24 -7
  401. package/src/graph/dfs.ts +78 -0
  402. package/src/graph/duplication-stats.ts +17 -6
  403. package/src/graph/edge-filter.ts +26 -12
  404. package/src/graph/health-score.ts +47 -17
  405. package/src/graph/hotspots.ts +57 -8
  406. package/src/graph/import-chain.ts +89 -19
  407. package/src/graph/loader.ts +10 -7
  408. package/src/graph/maintainability.ts +72 -22
  409. package/src/graph/mirrored-dirs.ts +45 -14
  410. package/src/graph/narrowing.ts +44 -0
  411. package/src/graph/node-search.ts +50 -4
  412. package/src/graph/normalize-id.ts +26 -2
  413. package/src/graph/pagerank.ts +70 -2
  414. package/src/graph/prune.ts +76 -0
  415. package/src/graph/regex-search.ts +38 -4
  416. package/src/graph/regression.ts +48 -23
  417. package/src/graph/ripple-impact.ts +71 -11
  418. package/src/graph/risk-profile.ts +98 -53
  419. package/src/graph/shingle-filter.ts +33 -27
  420. package/src/graph/statistics.ts +73 -45
  421. package/src/graph/stats.ts +50 -16
  422. package/src/graph/subgraph.ts +97 -25
  423. package/src/graph/topo-sort.ts +101 -16
  424. package/src/graph/wcc.ts +146 -37
  425. package/src/index.ts +1 -1
  426. package/src/mcp-tools/api-impact.ts +13 -6
  427. package/src/mcp-tools/context.ts +31 -40
  428. package/src/mcp-tools/cypher.ts +14 -1
  429. package/src/mcp-tools/detect-changes.ts +38 -23
  430. package/src/mcp-tools/explain.ts +4 -1
  431. package/src/mcp-tools/graph-query.ts +24 -3
  432. package/src/mcp-tools/group-list.ts +9 -11
  433. package/src/mcp-tools/impact.ts +26 -66
  434. package/src/mcp-tools/neighbors.ts +34 -39
  435. package/src/mcp-tools/query.ts +3 -0
  436. package/src/mcp-tools/rename.ts +9 -8
  437. package/src/mcp-tools/route-map.ts +21 -23
  438. package/src/mcp-tools/shape-check.ts +18 -14
  439. package/src/parsers/loader.ts +5 -5
  440. package/src/pipeline/cluster-only.ts +8 -4
  441. package/src/pipeline/orchestrator.ts +22 -0
  442. package/src/pipeline/phases/boundary.ts +40 -2
  443. package/src/pipeline/phases/communities.ts +66 -5
  444. package/src/pipeline/phases/contextual-proximity.ts +15 -14
  445. package/src/pipeline/phases/cross-file.ts +35 -14
  446. package/src/pipeline/phases/field-access.ts +11 -4
  447. package/src/pipeline/phases/god-nodes.ts +47 -10
  448. package/src/pipeline/phases/import-resolver.ts +37 -5
  449. package/src/pipeline/phases/leiden.ts +25 -18
  450. package/src/pipeline/phases/markdown.ts +12 -7
  451. package/src/pipeline/phases/pdf-parse.ts +19 -2
  452. package/src/pipeline/phases/processes.ts +27 -15
  453. package/src/pipeline/phases/re-export-propagation.ts +40 -18
  454. package/src/pipeline/phases/reachability.ts +39 -24
  455. package/src/pipeline/phases/routes.ts +32 -21
  456. package/src/pipeline/phases/scope-resolution.ts +110 -71
  457. package/src/pipeline/runner.ts +28 -11
  458. package/src/query/cypher-parser.ts +83 -0
  459. package/src/search/embed-batch.ts +4 -1
  460. package/src/search/hybrid-query.ts +11 -1
  461. package/src/staleness/git-staleness.ts +3 -3
  462. package/src/storage/db.ts +11 -0
  463. package/src/storage/edge-store.ts +34 -1
  464. package/src/storage/embedding-store.ts +38 -6
  465. package/src/storage/file-cache.ts +35 -21
  466. package/src/storage/fts-store.ts +12 -3
  467. package/src/storage/node-store.ts +39 -1
  468. package/src/wiki/wiki-generator.ts +5 -1
  469. package/src/coverage/runtime.ts +0 -249
@@ -1 +1 @@
1
- {"version":3,"file":"narrowing.d.ts","sourceRoot":"","sources":["../../../src/graph/narrowing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,OAAO,CAET;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAexE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAEvE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,eAAe,GACxB,GAAG,CAAC,MAAM,CAAC,CAWb"}
1
+ {"version":3,"file":"narrowing.d.ts","sourceRoot":"","sources":["../../../src/graph/narrowing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,OAAO,CAET;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAexE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAEvE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,eAAe,GACxB,GAAG,CAAC,MAAM,CAAC,CAWb;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,eAAe,GACxB,eAAe,CAYjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAUxE"}
@@ -32,4 +32,37 @@ export function markMemberExportsReferenced(exports, accessed) {
32
32
  }
33
33
  return result;
34
34
  }
35
+ /**
36
+ * Given a file's exports and the accessed members from all import sites,
37
+ * return a report of which exports are unused.
38
+ */
39
+ export function filterUnusedExports(filePath, exports, accessed) {
40
+ const referenced = markMemberExportsReferenced(exports, accessed);
41
+ const unusedExports = [];
42
+ for (const exp of exports) {
43
+ if (!referenced.has(exp))
44
+ unusedExports.push(exp);
45
+ }
46
+ return {
47
+ filePath,
48
+ totalExports: exports.length,
49
+ referencedExports: Array.from(referenced),
50
+ unusedExports,
51
+ };
52
+ }
53
+ /**
54
+ * Format narrowing reports as structured text for LLM dead-import diagnostics.
55
+ */
56
+ export function formatNarrowingReport(reports) {
57
+ const withUnused = reports.filter(r => r.unusedExports.length > 0);
58
+ if (withUnused.length === 0)
59
+ return 'No unused exports found.';
60
+ const lines = [`Unused exports in ${withUnused.length} file(s):`, ''];
61
+ for (const r of withUnused) {
62
+ lines.push(` ${r.filePath} (${r.unusedExports.length}/${r.totalExports} unused)`);
63
+ for (const exp of r.unusedExports)
64
+ lines.push(` - ${exp}`);
65
+ }
66
+ return lines.join('\n');
67
+ }
35
68
  //# sourceMappingURL=narrowing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"narrowing.js","sourceRoot":"","sources":["../../../src/graph/narrowing.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,qBAAqB,CACnC,YAAoB,EACpB,eAA4B;IAE5B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAgB;IACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAiB;IACxD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAiB,EACjB,QAAyB;IAEzB,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAChC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"narrowing.js","sourceRoot":"","sources":["../../../src/graph/narrowing.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,9 @@ export interface NodeSearchOptions {
19
19
  /**
20
20
  * Search nodes by structured property criteria.
21
21
  * All supplied criteria are combined with AND.
22
+ *
23
+ * Prepared statements are cached per-DB keyed by the active condition set so
24
+ * repeated calls with the same filter shape reuse the compiled statement.
22
25
  */
23
26
  export declare function searchNodesByProperty(db: MonographDb, options?: NodeSearchOptions): MonographNode[];
24
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"node-search.d.ts","sourceRoot":"","sources":["../../../src/graph/node-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkCD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,iBAAsB,GAC9B,aAAa,EAAE,CA8CjB;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,aAAa,EAAE,CAqCjB"}
1
+ {"version":3,"file":"node-search.d.ts","sourceRoot":"","sources":["../../../src/graph/node-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2DD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,iBAAsB,GAC9B,aAAa,EAAE,CA+DjB;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,aAAa,EAAE,CAqCjB"}
@@ -14,21 +14,46 @@ function rowToNode(r) {
14
14
  properties: r.properties ? JSON.parse(r.properties) : undefined,
15
15
  };
16
16
  }
17
+ // ── Prepared statement cache ───────────────────────────────────────────────────
18
+ // Keyed by a fingerprint of which conditions are active (not by param values),
19
+ // so the same query shape reuses the compiled statement across calls.
20
+ // WeakMap ensures the cache is garbage-collected when the DB object is released.
21
+ const stmtCache = new WeakMap();
22
+ function getCachedStmt(db, key, buildSql) {
23
+ let dbCache = stmtCache.get(db);
24
+ if (!dbCache) {
25
+ dbCache = new Map();
26
+ stmtCache.set(db, dbCache);
27
+ }
28
+ let stmt = dbCache.get(key);
29
+ if (!stmt) {
30
+ stmt = db.prepare(buildSql());
31
+ dbCache.set(key, stmt);
32
+ }
33
+ return stmt;
34
+ }
17
35
  // ── DB-backed search ───────────────────────────────────────────────────────────
18
36
  /**
19
37
  * Search nodes by structured property criteria.
20
38
  * All supplied criteria are combined with AND.
39
+ *
40
+ * Prepared statements are cached per-DB keyed by the active condition set so
41
+ * repeated calls with the same filter shape reuse the compiled statement.
21
42
  */
22
43
  export function searchNodesByProperty(db, options = {}) {
23
44
  const conditions = [];
24
45
  const params = [];
46
+ // fingerprint encodes which conditions are active (not their values)
47
+ const fingerprint = [];
25
48
  if (options.label) {
26
49
  conditions.push('label = ?');
27
50
  params.push(options.label);
51
+ fingerprint.push('lbl');
28
52
  }
29
53
  if (options.language) {
30
54
  conditions.push('LOWER(language) = LOWER(?)');
31
55
  params.push(options.language);
56
+ fingerprint.push('lang');
32
57
  }
33
58
  if (options.fileExtension !== undefined) {
34
59
  // Normalise: ensure leading dot
@@ -37,25 +62,33 @@ export function searchNodesByProperty(db, options = {}) {
37
62
  : `.${options.fileExtension}`;
38
63
  conditions.push("file_path LIKE ?");
39
64
  params.push(`%${ext}`);
65
+ fingerprint.push('ext');
40
66
  }
41
67
  if (options.filePath !== undefined) {
42
68
  conditions.push("LOWER(file_path) LIKE LOWER(?)");
43
69
  params.push(`%${options.filePath}%`);
70
+ fingerprint.push('fp');
44
71
  }
45
72
  if (options.isExported !== undefined) {
46
73
  conditions.push('is_exported = ?');
47
74
  params.push(options.isExported ? 1 : 0);
75
+ fingerprint.push('exp');
48
76
  }
49
77
  if (options.communityId !== undefined) {
50
78
  conditions.push('community_id = ?');
51
79
  params.push(options.communityId);
80
+ fingerprint.push('com');
52
81
  }
82
+ const hasLimit = options.limit !== undefined;
83
+ if (hasLimit)
84
+ fingerprint.push('lim');
53
85
  const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
54
- const limitClause = options.limit !== undefined ? `LIMIT ${Number(options.limit)}` : '';
55
- const sql = `SELECT id, label, name, norm_label, file_path, start_line, end_line,
86
+ const limitClause = hasLimit ? `LIMIT ${Number(options.limit)}` : '';
87
+ const cacheKey = fingerprint.join(':') || 'all';
88
+ const stmt = getCachedStmt(db, cacheKey, () => `SELECT id, label, name, norm_label, file_path, start_line, end_line,
56
89
  community_id, is_exported, language, properties
57
- FROM nodes ${where} ${limitClause}`;
58
- const rows = db.prepare(sql).all(...params);
90
+ FROM nodes ${where} ${limitClause}`);
91
+ const rows = stmt.all(...params);
59
92
  return rows.map(rowToNode);
60
93
  }
61
94
  // ── In-memory search ───────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"node-search.js","sourceRoot":"","sources":["../../../src/graph/node-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-search.js","sourceRoot":"","sources":["../../../src/graph/node-search.ts"],"names":[],"mappings":"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"}
@@ -50,4 +50,8 @@ export interface ReconciliationResult {
50
50
  * Mutates `source`/`target` fields on resolved edges in-place when remapping.
51
51
  */
52
52
  export declare function reconcileEdges(edges: RawEdge[], nodeIds: Set<string>): ReconciliationResult;
53
+ /**
54
+ * Format a ReconciliationResult as structured text for LLM consumption.
55
+ */
56
+ export declare function formatReconciliationResult(result: ReconciliationResult): string;
53
57
  //# sourceMappingURL=normalize-id.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-id.d.ts","sourceRoot":"","sources":["../../../src/graph/normalize-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAK9C;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/E;AAID,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gEAAgE;IAChE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EAAE,EAChB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,oBAAoB,CAqCtB"}
1
+ {"version":3,"file":"normalize-id.d.ts","sourceRoot":"","sources":["../../../src/graph/normalize-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAK9C;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/E;AAID,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gEAAgE;IAChE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EAAE,EAChB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,oBAAoB,CAsCtB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAkB/E"}
@@ -59,15 +59,16 @@ export function reconcileEdges(edges, nodeIds) {
59
59
  let tgt = edge.target;
60
60
  let remapped = false;
61
61
  if (!nodeIds.has(src)) {
62
+ // Cache normalizeId result to avoid calling it twice for the same string
62
63
  const canonical = normToId.get(normalizeId(src));
63
- if (canonical) {
64
+ if (canonical !== undefined) {
64
65
  src = canonical;
65
66
  remapped = true;
66
67
  }
67
68
  }
68
69
  if (!nodeIds.has(tgt)) {
69
70
  const canonical = normToId.get(normalizeId(tgt));
70
- if (canonical) {
71
+ if (canonical !== undefined) {
71
72
  tgt = canonical;
72
73
  remapped = true;
73
74
  }
@@ -83,4 +84,26 @@ export function reconcileEdges(edges, nodeIds) {
83
84
  }
84
85
  return { resolved, dangling, remappedCount };
85
86
  }
87
+ /**
88
+ * Format a ReconciliationResult as structured text for LLM consumption.
89
+ */
90
+ export function formatReconciliationResult(result) {
91
+ const total = result.resolved.length + result.dangling.length;
92
+ const lines = [
93
+ `Edge reconciliation: ${result.resolved.length}/${total} resolved, ${result.remappedCount} remapped, ${result.dangling.length} dangling`,
94
+ ];
95
+ if (result.dangling.length > 0) {
96
+ lines.push('');
97
+ lines.push('Dangling edges (unresolvable endpoints):');
98
+ const limit = Math.min(result.dangling.length, 20);
99
+ for (let i = 0; i < limit; i++) {
100
+ const e = result.dangling[i];
101
+ lines.push(` ${e.source} -> ${e.target}`);
102
+ }
103
+ if (result.dangling.length > limit) {
104
+ lines.push(` ... and ${result.dangling.length - limit} more`);
105
+ }
106
+ }
107
+ return lines.join('\n');
108
+ }
86
109
  //# sourceMappingURL=normalize-id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-id.js","sourceRoot":"","sources":["../../../src/graph/normalize-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kFAAkF;AAElF;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,EAAE;SACN,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,kFAAkF;AAElF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACxD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAmBD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAgB,EAChB,OAAoB;IAEpB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,GAAG,SAAS,CAAC;gBAChB,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,GAAG,SAAS,CAAC;gBAChB,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACrD,IAAI,QAAQ;gBAAE,aAAa,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"normalize-id.js","sourceRoot":"","sources":["../../../src/graph/normalize-id.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@ export interface PageRankOptions {
7
7
  /** Convergence threshold (L1 norm delta). Default: 1e-6 */
8
8
  tolerance?: number;
9
9
  }
10
+ /**
11
+ * Evict cached statements and results for a given DB instance (call after writes).
12
+ */
13
+ export declare function invalidatePageRankCache(db: MonographDb): void;
10
14
  /**
11
15
  * Compute PageRank scores for all nodes using power iteration.
12
16
  *
@@ -14,6 +18,9 @@ export interface PageRankOptions {
14
18
  * After convergence the scores still sum to ~1 (standard normalized PageRank).
15
19
  * Dangling nodes (out-degree 0) distribute their rank equally to all nodes.
16
20
  *
21
+ * Results are cached for 5 seconds when the graph's node+edge counts are
22
+ * unchanged, making repeated calls (e.g. during context preloading) free.
23
+ *
17
24
  * @param db - The MonographDb instance
18
25
  * @param options - Optional tuning parameters
19
26
  * @returns Map of nodeId → PageRank score
@@ -1 +1 @@
1
- {"version":3,"file":"pagerank.d.ts","sourceRoot":"","sources":["../../../src/graph/pagerank.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,GAAE,eAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAiE5F"}
1
+ {"version":3,"file":"pagerank.d.ts","sourceRoot":"","sources":["../../../src/graph/pagerank.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2CD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAO7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,GAAE,eAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA4E5F"}
@@ -1,3 +1,38 @@
1
+ const _stmtCache = new Map();
2
+ function getStmts(db) {
3
+ const key = db.name ?? '__default__';
4
+ let cache = _stmtCache.get(key);
5
+ if (!cache) {
6
+ cache = {
7
+ selectNodes: db.prepare('SELECT id FROM nodes'),
8
+ selectEdges: db.prepare('SELECT source_id, target_id FROM edges'),
9
+ };
10
+ _stmtCache.set(key, cache);
11
+ }
12
+ return cache;
13
+ }
14
+ // ---------------------------------------------------------------------------
15
+ // Result cache — avoids re-running power iteration when the graph hasn't
16
+ // changed. Keyed by (dbName, nodeCount, edgeCount) with a 5-second TTL.
17
+ // ---------------------------------------------------------------------------
18
+ const PAGERANK_CACHE_TTL_MS = 5_000;
19
+ const _resultCache = new Map();
20
+ function resultCacheKey(db, nodeCount, edgeCount) {
21
+ const name = db.name ?? '__default__';
22
+ return `${name}:${nodeCount}:${edgeCount}`;
23
+ }
24
+ /**
25
+ * Evict cached statements and results for a given DB instance (call after writes).
26
+ */
27
+ export function invalidatePageRankCache(db) {
28
+ const key = db.name ?? '__default__';
29
+ _stmtCache.delete(key);
30
+ // Purge all result-cache entries for this DB (they have the name as prefix)
31
+ for (const k of _resultCache.keys()) {
32
+ if (k.startsWith(`${key}:`))
33
+ _resultCache.delete(k);
34
+ }
35
+ }
1
36
  /**
2
37
  * Compute PageRank scores for all nodes using power iteration.
3
38
  *
@@ -5,16 +40,26 @@
5
40
  * After convergence the scores still sum to ~1 (standard normalized PageRank).
6
41
  * Dangling nodes (out-degree 0) distribute their rank equally to all nodes.
7
42
  *
43
+ * Results are cached for 5 seconds when the graph's node+edge counts are
44
+ * unchanged, making repeated calls (e.g. during context preloading) free.
45
+ *
8
46
  * @param db - The MonographDb instance
9
47
  * @param options - Optional tuning parameters
10
48
  * @returns Map of nodeId → PageRank score
11
49
  */
12
50
  export function pageRank(db, options = {}) {
13
51
  const { dampingFactor = 0.85, maxIterations = 100, tolerance = 1e-6 } = options;
14
- const nodeRows = db.prepare('SELECT id FROM nodes').all();
15
- const edgeRows = db.prepare('SELECT source_id, target_id FROM edges').all();
52
+ const stmts = getStmts(db);
53
+ const nodeRows = stmts.selectNodes.all();
54
+ const edgeRows = stmts.selectEdges.all();
16
55
  if (nodeRows.length === 0)
17
56
  return new Map();
57
+ // Check result cache before running power iteration
58
+ const cacheKey = resultCacheKey(db, nodeRows.length, edgeRows.length);
59
+ const now = Date.now();
60
+ const cached = _resultCache.get(cacheKey);
61
+ if (cached && now < cached.expiresAt)
62
+ return cached.result;
18
63
  const nodes = nodeRows.map(r => r.id);
19
64
  const n = nodes.length;
20
65
  const nodeIndex = new Map();
@@ -64,6 +109,8 @@ export function pageRank(db, options = {}) {
64
109
  for (let i = 0; i < n; i++) {
65
110
  result.set(nodes[i], scores[i]);
66
111
  }
112
+ // Store in result cache
113
+ _resultCache.set(cacheKey, { result, expiresAt: now + PAGERANK_CACHE_TTL_MS });
67
114
  return result;
68
115
  }
69
116
  //# sourceMappingURL=pagerank.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagerank.js","sourceRoot":"","sources":["../../../src/graph/pagerank.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pagerank.js","sourceRoot":"","sources":["../../../src/graph/pagerank.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import type { MonographDb } from '../storage/db.js';
2
+ export interface PruneResult {
3
+ danglingEdgesRemoved: number;
4
+ orphanNodesRemoved: number;
5
+ staleFileNodesRemoved: number;
6
+ }
2
7
  /**
3
8
  * Remove edges whose source or target node does not exist in the nodes table.
4
9
  *
@@ -6,4 +11,30 @@ import type { MonographDb } from '../storage/db.js';
6
11
  * @returns The number of dangling edges pruned
7
12
  */
8
13
  export declare function pruneDanglingEdges(db: MonographDb): number;
14
+ /**
15
+ * Remove non-File nodes that have no incoming or outgoing edges.
16
+ * Leaves File nodes in place so they can still be queried even if isolated.
17
+ *
18
+ * @param db - The MonographDb instance
19
+ * @returns Number of orphan nodes removed
20
+ */
21
+ export declare function pruneOrphanNodes(db: MonographDb): number;
22
+ /**
23
+ * Remove File nodes whose file_path no longer exists on disk.
24
+ * Also cascades to remove any edges connected to those nodes (via pruneDanglingEdges).
25
+ *
26
+ * @param db - The MonographDb instance
27
+ * @param existingPaths - Set of file paths that currently exist on disk
28
+ * @returns Number of stale File nodes removed (call pruneDanglingEdges after to clean edges)
29
+ */
30
+ export declare function pruneStaleFileNodes(db: MonographDb, existingPaths: Set<string>): number;
31
+ /**
32
+ * Run a full prune pass: dangling edges → orphan nodes → stale file nodes.
33
+ * Optionally pass existingPaths to also remove deleted-file nodes.
34
+ */
35
+ export declare function pruneAll(db: MonographDb, existingPaths?: Set<string>): PruneResult;
36
+ /**
37
+ * Format a PruneResult as structured text for LLM consumption.
38
+ */
39
+ export declare function formatPruneResult(result: PruneResult): string;
9
40
  //# sourceMappingURL=prune.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../../src/graph/prune.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAU1D"}
1
+ {"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../../src/graph/prune.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAU1D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAOxD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAiBvF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,CAOlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAS7D"}
@@ -14,4 +14,69 @@ export function pruneDanglingEdges(db) {
14
14
  `).run();
15
15
  return result.changes;
16
16
  }
17
+ /**
18
+ * Remove non-File nodes that have no incoming or outgoing edges.
19
+ * Leaves File nodes in place so they can still be queried even if isolated.
20
+ *
21
+ * @param db - The MonographDb instance
22
+ * @returns Number of orphan nodes removed
23
+ */
24
+ export function pruneOrphanNodes(db) {
25
+ const result = db.prepare(`
26
+ DELETE FROM nodes
27
+ WHERE label != 'File'
28
+ AND NOT EXISTS (SELECT 1 FROM edges WHERE source_id = nodes.id OR target_id = nodes.id)
29
+ `).run();
30
+ return result.changes;
31
+ }
32
+ /**
33
+ * Remove File nodes whose file_path no longer exists on disk.
34
+ * Also cascades to remove any edges connected to those nodes (via pruneDanglingEdges).
35
+ *
36
+ * @param db - The MonographDb instance
37
+ * @param existingPaths - Set of file paths that currently exist on disk
38
+ * @returns Number of stale File nodes removed (call pruneDanglingEdges after to clean edges)
39
+ */
40
+ export function pruneStaleFileNodes(db, existingPaths) {
41
+ const staleRows = db.prepare(`SELECT id, file_path FROM nodes WHERE label = 'File' AND file_path IS NOT NULL`).all();
42
+ let removed = 0;
43
+ const deleteStmt = db.prepare(`DELETE FROM nodes WHERE id = ?`);
44
+ const tx = db.transaction(() => {
45
+ for (const row of staleRows) {
46
+ if (!existingPaths.has(row.file_path)) {
47
+ deleteStmt.run(row.id);
48
+ removed++;
49
+ }
50
+ }
51
+ });
52
+ tx();
53
+ return removed;
54
+ }
55
+ /**
56
+ * Run a full prune pass: dangling edges → orphan nodes → stale file nodes.
57
+ * Optionally pass existingPaths to also remove deleted-file nodes.
58
+ */
59
+ export function pruneAll(db, existingPaths) {
60
+ const danglingEdgesRemoved = pruneDanglingEdges(db);
61
+ const orphanNodesRemoved = pruneOrphanNodes(db);
62
+ const staleFileNodesRemoved = existingPaths ? pruneStaleFileNodes(db, existingPaths) : 0;
63
+ // A second dangling-edge pass cleans up any edges left by stale file node removal
64
+ if (staleFileNodesRemoved > 0)
65
+ pruneDanglingEdges(db);
66
+ return { danglingEdgesRemoved, orphanNodesRemoved, staleFileNodesRemoved };
67
+ }
68
+ /**
69
+ * Format a PruneResult as structured text for LLM consumption.
70
+ */
71
+ export function formatPruneResult(result) {
72
+ const total = result.danglingEdgesRemoved + result.orphanNodesRemoved + result.staleFileNodesRemoved;
73
+ if (total === 0)
74
+ return 'Prune pass: nothing to remove — graph is clean.';
75
+ return [
76
+ `Prune pass removed ${total} artifact(s):`,
77
+ ` dangling edges: ${result.danglingEdgesRemoved}`,
78
+ ` orphan nodes: ${result.orphanNodesRemoved}`,
79
+ ` stale file nodes: ${result.staleFileNodesRemoved}`,
80
+ ].join('\n');
81
+ }
17
82
  //# sourceMappingURL=prune.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../src/graph/prune.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAe;IAChD,gFAAgF;IAChF,0FAA0F;IAC1F,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIzB,CAAC,CAAC,GAAG,EAAE,CAAC;IAET,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../src/graph/prune.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAe;IAChD,gFAAgF;IAChF,0FAA0F;IAC1F,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIzB,CAAC,CAAC,GAAG,EAAE,CAAC;IAET,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAe;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIzB,CAAC,CAAC,GAAG,EAAE,CAAC;IACT,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAe,EAAE,aAA0B;IAC7E,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,gFAAgF,CACjF,CAAC,GAAG,EAAyC,CAAC;IAE/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAChE,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,EAAE,EAAE,CAAC;IACL,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAe,EAAE,aAA2B;IACnE,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,qBAAqB,GAAG,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,kFAAkF;IAClF,IAAI,qBAAqB,GAAG,CAAC;QAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACrG,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,iDAAiD,CAAC;IAC1E,OAAO;QACL,sBAAsB,KAAK,eAAe;QAC1C,wBAAwB,MAAM,CAAC,oBAAoB,EAAE;QACrD,wBAAwB,MAAM,CAAC,kBAAkB,EAAE;QACnD,wBAAwB,MAAM,CAAC,qBAAqB,EAAE;KACvD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -13,7 +13,7 @@ export interface RegexNodeMatch {
13
13
  * @param pattern - A RegExp (or a string that will be compiled to one).
14
14
  * @param fields - Which fields to test; default: ['name', 'filePath'].
15
15
  */
16
- export declare function regexSearchNodes(db: MonographDb, pattern: RegExp | string, fields?: Array<'name' | 'filePath' | 'language' | 'label'>): RegexNodeMatch[];
16
+ export declare function regexSearchNodes(db: MonographDb, pattern: RegExp | string, fields?: Array<'name' | 'filePath' | 'language' | 'label'>, limit?: number): RegexNodeMatch[];
17
17
  export interface RegexEdgeMatch {
18
18
  edge: MonographEdge;
19
19
  /** Which field of the edge matched. */
@@ -27,7 +27,15 @@ export interface RegexEdgeMatch {
27
27
  * @param pattern - A RegExp (or a string that will be compiled to one).
28
28
  * @param fields - Which fields to test; default: ['relation', 'reason'].
29
29
  */
30
- export declare function regexSearchEdges(db: MonographDb, pattern: RegExp | string, fields?: Array<'relation' | 'confidence' | 'reason'>): RegexEdgeMatch[];
30
+ export declare function regexSearchEdges(db: MonographDb, pattern: RegExp | string, fields?: Array<'relation' | 'confidence' | 'reason'>, limit?: number): RegexEdgeMatch[];
31
31
  export declare function regexSearchNodesInMemory(nodes: MonographNode[], pattern: RegExp | string, fields?: Array<'name' | 'filePath' | 'language' | 'label'>): RegexNodeMatch[];
32
32
  export declare function regexSearchEdgesInMemory(edges: MonographEdge[], pattern: RegExp | string, fields?: Array<'relation' | 'confidence' | 'reason'>): RegexEdgeMatch[];
33
+ /**
34
+ * Format node regex match results as structured text for LLM consumption.
35
+ */
36
+ export declare function formatRegexNodeMatches(matches: RegexNodeMatch[], pattern: string): string;
37
+ /**
38
+ * Format edge regex match results as structured text for LLM consumption.
39
+ */
40
+ export declare function formatRegexEdgeMatches(matches: RegexEdgeMatch[], pattern: string): string;
33
41
  //# sourceMappingURL=regex-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"regex-search.d.ts","sourceRoot":"","sources":["../../../src/graph/regex-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,uCAAuC;IACvC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAwB,GAC/E,cAAc,EAAE,CAqDlB;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,uCAAuC;IACvC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,QAAQ,CAA0B,GAC3E,cAAc,EAAE,CA2ClB;AAID,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAwB,GAC/E,cAAc,EAAE,CAoBlB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,QAAQ,CAA0B,GAC3E,cAAc,EAAE,CAmBlB"}
1
+ {"version":3,"file":"regex-search.d.ts","sourceRoot":"","sources":["../../../src/graph/regex-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,uCAAuC;IACvC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAwB,EAChF,KAAK,SAAM,GACV,cAAc,EAAE,CAqDlB;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,uCAAuC;IACvC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,QAAQ,CAA0B,EAC5E,KAAK,SAAM,GACV,cAAc,EAAE,CA2ClB;AAID,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAwB,GAC/E,cAAc,EAAE,CAoBlB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,GAAE,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,QAAQ,CAA0B,GAC3E,cAAc,EAAE,CAmBlB;AAID;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUzF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUzF"}
@@ -6,11 +6,11 @@
6
6
  * @param pattern - A RegExp (or a string that will be compiled to one).
7
7
  * @param fields - Which fields to test; default: ['name', 'filePath'].
8
8
  */
9
- export function regexSearchNodes(db, pattern, fields = ['name', 'filePath']) {
9
+ export function regexSearchNodes(db, pattern, fields = ['name', 'filePath'], limit = 200) {
10
10
  const re = typeof pattern === 'string' ? new RegExp(pattern) : pattern;
11
11
  const rows = db.prepare(`SELECT id, label, name, norm_label, file_path, start_line, end_line,
12
12
  community_id, is_exported, language, properties
13
- FROM nodes`).all();
13
+ FROM nodes LIMIT ?`).all(limit);
14
14
  const results = [];
15
15
  for (const r of rows) {
16
16
  const node = {
@@ -47,10 +47,10 @@ export function regexSearchNodes(db, pattern, fields = ['name', 'filePath']) {
47
47
  * @param pattern - A RegExp (or a string that will be compiled to one).
48
48
  * @param fields - Which fields to test; default: ['relation', 'reason'].
49
49
  */
50
- export function regexSearchEdges(db, pattern, fields = ['relation', 'reason']) {
50
+ export function regexSearchEdges(db, pattern, fields = ['relation', 'reason'], limit = 200) {
51
51
  const re = typeof pattern === 'string' ? new RegExp(pattern) : pattern;
52
52
  const rows = db.prepare(`SELECT id, source_id, target_id, relation, confidence, confidence_score, reason
53
- FROM edges`).all();
53
+ FROM edges LIMIT ?`).all(limit);
54
54
  const results = [];
55
55
  for (const r of rows) {
56
56
  const edge = {
@@ -108,4 +108,33 @@ export function regexSearchEdgesInMemory(edges, pattern, fields = ['relation', '
108
108
  }
109
109
  return results;
110
110
  }
111
+ // ── LLM formatters ─────────────────────────────────────────────────────────────
112
+ /**
113
+ * Format node regex match results as structured text for LLM consumption.
114
+ */
115
+ export function formatRegexNodeMatches(matches, pattern) {
116
+ if (matches.length === 0)
117
+ return `No nodes matching /${pattern}/.`;
118
+ const lines = [`${matches.length} node(s) matching /${pattern}/:`];
119
+ for (const m of matches) {
120
+ const loc = m.node.filePath
121
+ ? ` ${m.node.filePath}${m.node.startLine != null ? `:${m.node.startLine}` : ''}`
122
+ : '';
123
+ lines.push(` [${m.field}] ${m.node.label} ${m.node.name}${loc}`);
124
+ }
125
+ return lines.join('\n');
126
+ }
127
+ /**
128
+ * Format edge regex match results as structured text for LLM consumption.
129
+ */
130
+ export function formatRegexEdgeMatches(matches, pattern) {
131
+ if (matches.length === 0)
132
+ return `No edges matching /${pattern}/.`;
133
+ const lines = [`${matches.length} edge(s) matching /${pattern}/:`];
134
+ for (const m of matches) {
135
+ lines.push(` [${m.field}] ${m.edge.sourceId} -[${m.edge.relation}]-> ${m.edge.targetId}` +
136
+ (m.edge.reason ? ` // ${m.edge.reason}` : ''));
137
+ }
138
+ return lines.join('\n');
139
+ }
111
140
  //# sourceMappingURL=regex-search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"regex-search.js","sourceRoot":"","sources":["../../../src/graph/regex-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"regex-search.js","sourceRoot":"","sources":["../../../src/graph/regex-search.ts"],"names":[],"mappings":"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"}