@monoes/monograph 1.5.4 → 1.5.5

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 (394) hide show
  1. package/dist/src/pipeline/phases/llm-extract.d.ts.map +1 -1
  2. package/dist/src/pipeline/phases/llm-extract.js +12 -0
  3. package/dist/src/pipeline/phases/llm-extract.js.map +1 -1
  4. package/dist/src/wiki/wiki-generator.d.ts.map +1 -1
  5. package/dist/src/wiki/wiki-generator.js +5 -1
  6. package/dist/src/wiki/wiki-generator.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/package.json +3 -1
  9. package/src/pipeline/phases/llm-extract.ts +14 -0
  10. package/src/wiki/wiki-generator.ts +7 -1
  11. package/dist/src/__tests__/analysis/benchmark.test.d.ts +0 -2
  12. package/dist/src/__tests__/analysis/benchmark.test.d.ts.map +0 -1
  13. package/dist/src/__tests__/analysis/benchmark.test.js +0 -54
  14. package/dist/src/__tests__/analysis/benchmark.test.js.map +0 -1
  15. package/dist/src/__tests__/analysis/cluster-quality.test.d.ts +0 -2
  16. package/dist/src/__tests__/analysis/cluster-quality.test.d.ts.map +0 -1
  17. package/dist/src/__tests__/analysis/cluster-quality.test.js +0 -99
  18. package/dist/src/__tests__/analysis/cluster-quality.test.js.map +0 -1
  19. package/dist/src/__tests__/analysis/corpus-health.test.d.ts +0 -2
  20. package/dist/src/__tests__/analysis/corpus-health.test.d.ts.map +0 -1
  21. package/dist/src/__tests__/analysis/corpus-health.test.js +0 -29
  22. package/dist/src/__tests__/analysis/corpus-health.test.js.map +0 -1
  23. package/dist/src/__tests__/analysis/dependency-health.test.d.ts +0 -2
  24. package/dist/src/__tests__/analysis/dependency-health.test.d.ts.map +0 -1
  25. package/dist/src/__tests__/analysis/dependency-health.test.js +0 -96
  26. package/dist/src/__tests__/analysis/dependency-health.test.js.map +0 -1
  27. package/dist/src/__tests__/analysis/file-classifier.test.d.ts +0 -2
  28. package/dist/src/__tests__/analysis/file-classifier.test.d.ts.map +0 -1
  29. package/dist/src/__tests__/analysis/file-classifier.test.js +0 -49
  30. package/dist/src/__tests__/analysis/file-classifier.test.js.map +0 -1
  31. package/dist/src/__tests__/analysis/node-similarity.test.d.ts +0 -2
  32. package/dist/src/__tests__/analysis/node-similarity.test.d.ts.map +0 -1
  33. package/dist/src/__tests__/analysis/node-similarity.test.js +0 -66
  34. package/dist/src/__tests__/analysis/node-similarity.test.js.map +0 -1
  35. package/dist/src/__tests__/cache/augment-cache.test.d.ts +0 -2
  36. package/dist/src/__tests__/cache/augment-cache.test.d.ts.map +0 -1
  37. package/dist/src/__tests__/cache/augment-cache.test.js +0 -47
  38. package/dist/src/__tests__/cache/augment-cache.test.js.map +0 -1
  39. package/dist/src/__tests__/cli/check-update.test.d.ts +0 -2
  40. package/dist/src/__tests__/cli/check-update.test.d.ts.map +0 -1
  41. package/dist/src/__tests__/cli/check-update.test.js +0 -38
  42. package/dist/src/__tests__/cli/check-update.test.js.map +0 -1
  43. package/dist/src/__tests__/cli/hooks-install.test.d.ts +0 -2
  44. package/dist/src/__tests__/cli/hooks-install.test.d.ts.map +0 -1
  45. package/dist/src/__tests__/cli/hooks-install.test.js +0 -48
  46. package/dist/src/__tests__/cli/hooks-install.test.js.map +0 -1
  47. package/dist/src/__tests__/cli/hooks-marker.test.d.ts +0 -2
  48. package/dist/src/__tests__/cli/hooks-marker.test.d.ts.map +0 -1
  49. package/dist/src/__tests__/cli/hooks-marker.test.js +0 -115
  50. package/dist/src/__tests__/cli/hooks-marker.test.js.map +0 -1
  51. package/dist/src/__tests__/cli/hooks-status.test.d.ts +0 -2
  52. package/dist/src/__tests__/cli/hooks-status.test.d.ts.map +0 -1
  53. package/dist/src/__tests__/cli/hooks-status.test.js +0 -36
  54. package/dist/src/__tests__/cli/hooks-status.test.js.map +0 -1
  55. package/dist/src/__tests__/export/adjacency-matrix.test.d.ts +0 -2
  56. package/dist/src/__tests__/export/adjacency-matrix.test.d.ts.map +0 -1
  57. package/dist/src/__tests__/export/adjacency-matrix.test.js +0 -103
  58. package/dist/src/__tests__/export/adjacency-matrix.test.js.map +0 -1
  59. package/dist/src/__tests__/export/csv.test.d.ts +0 -2
  60. package/dist/src/__tests__/export/csv.test.d.ts.map +0 -1
  61. package/dist/src/__tests__/export/csv.test.js +0 -34
  62. package/dist/src/__tests__/export/csv.test.js.map +0 -1
  63. package/dist/src/__tests__/export/dot.test.d.ts +0 -2
  64. package/dist/src/__tests__/export/dot.test.d.ts.map +0 -1
  65. package/dist/src/__tests__/export/dot.test.js +0 -73
  66. package/dist/src/__tests__/export/dot.test.js.map +0 -1
  67. package/dist/src/__tests__/export/gexf.test.d.ts +0 -2
  68. package/dist/src/__tests__/export/gexf.test.d.ts.map +0 -1
  69. package/dist/src/__tests__/export/gexf.test.js +0 -66
  70. package/dist/src/__tests__/export/gexf.test.js.map +0 -1
  71. package/dist/src/__tests__/export/graphml.test.d.ts +0 -2
  72. package/dist/src/__tests__/export/graphml.test.d.ts.map +0 -1
  73. package/dist/src/__tests__/export/graphml.test.js +0 -51
  74. package/dist/src/__tests__/export/graphml.test.js.map +0 -1
  75. package/dist/src/__tests__/export/mermaid.test.d.ts +0 -2
  76. package/dist/src/__tests__/export/mermaid.test.d.ts.map +0 -1
  77. package/dist/src/__tests__/export/mermaid.test.js +0 -78
  78. package/dist/src/__tests__/export/mermaid.test.js.map +0 -1
  79. package/dist/src/__tests__/graph/betweenness.test.d.ts +0 -2
  80. package/dist/src/__tests__/graph/betweenness.test.d.ts.map +0 -1
  81. package/dist/src/__tests__/graph/betweenness.test.js +0 -77
  82. package/dist/src/__tests__/graph/betweenness.test.js.map +0 -1
  83. package/dist/src/__tests__/graph/cycles.test.d.ts +0 -2
  84. package/dist/src/__tests__/graph/cycles.test.d.ts.map +0 -1
  85. package/dist/src/__tests__/graph/cycles.test.js +0 -119
  86. package/dist/src/__tests__/graph/cycles.test.js.map +0 -1
  87. package/dist/src/__tests__/graph/dead-code.test.d.ts +0 -2
  88. package/dist/src/__tests__/graph/dead-code.test.d.ts.map +0 -1
  89. package/dist/src/__tests__/graph/dead-code.test.js +0 -89
  90. package/dist/src/__tests__/graph/dead-code.test.js.map +0 -1
  91. package/dist/src/__tests__/graph/dfs.test.d.ts +0 -2
  92. package/dist/src/__tests__/graph/dfs.test.d.ts.map +0 -1
  93. package/dist/src/__tests__/graph/dfs.test.js +0 -56
  94. package/dist/src/__tests__/graph/dfs.test.js.map +0 -1
  95. package/dist/src/__tests__/graph/diff-summary.test.d.ts +0 -2
  96. package/dist/src/__tests__/graph/diff-summary.test.d.ts.map +0 -1
  97. package/dist/src/__tests__/graph/diff-summary.test.js +0 -74
  98. package/dist/src/__tests__/graph/diff-summary.test.js.map +0 -1
  99. package/dist/src/__tests__/graph/edge-filter.test.d.ts +0 -2
  100. package/dist/src/__tests__/graph/edge-filter.test.d.ts.map +0 -1
  101. package/dist/src/__tests__/graph/edge-filter.test.js +0 -117
  102. package/dist/src/__tests__/graph/edge-filter.test.js.map +0 -1
  103. package/dist/src/__tests__/graph/import-chain.test.d.ts +0 -2
  104. package/dist/src/__tests__/graph/import-chain.test.d.ts.map +0 -1
  105. package/dist/src/__tests__/graph/import-chain.test.js +0 -101
  106. package/dist/src/__tests__/graph/import-chain.test.js.map +0 -1
  107. package/dist/src/__tests__/graph/merge.test.d.ts +0 -2
  108. package/dist/src/__tests__/graph/merge.test.d.ts.map +0 -1
  109. package/dist/src/__tests__/graph/merge.test.js +0 -132
  110. package/dist/src/__tests__/graph/merge.test.js.map +0 -1
  111. package/dist/src/__tests__/graph/node-search.test.d.ts +0 -2
  112. package/dist/src/__tests__/graph/node-search.test.d.ts.map +0 -1
  113. package/dist/src/__tests__/graph/node-search.test.js +0 -127
  114. package/dist/src/__tests__/graph/node-search.test.js.map +0 -1
  115. package/dist/src/__tests__/graph/normalize-id.test.d.ts +0 -2
  116. package/dist/src/__tests__/graph/normalize-id.test.d.ts.map +0 -1
  117. package/dist/src/__tests__/graph/normalize-id.test.js +0 -88
  118. package/dist/src/__tests__/graph/normalize-id.test.js.map +0 -1
  119. package/dist/src/__tests__/graph/pagerank.test.d.ts +0 -2
  120. package/dist/src/__tests__/graph/pagerank.test.d.ts.map +0 -1
  121. package/dist/src/__tests__/graph/pagerank.test.js +0 -87
  122. package/dist/src/__tests__/graph/pagerank.test.js.map +0 -1
  123. package/dist/src/__tests__/graph/prune.test.d.ts +0 -2
  124. package/dist/src/__tests__/graph/prune.test.d.ts.map +0 -1
  125. package/dist/src/__tests__/graph/prune.test.js +0 -98
  126. package/dist/src/__tests__/graph/prune.test.js.map +0 -1
  127. package/dist/src/__tests__/graph/regex-search.test.d.ts +0 -2
  128. package/dist/src/__tests__/graph/regex-search.test.d.ts.map +0 -1
  129. package/dist/src/__tests__/graph/regex-search.test.js +0 -128
  130. package/dist/src/__tests__/graph/regex-search.test.js.map +0 -1
  131. package/dist/src/__tests__/graph/ripple-impact.test.d.ts +0 -2
  132. package/dist/src/__tests__/graph/ripple-impact.test.d.ts.map +0 -1
  133. package/dist/src/__tests__/graph/ripple-impact.test.js +0 -64
  134. package/dist/src/__tests__/graph/ripple-impact.test.js.map +0 -1
  135. package/dist/src/__tests__/graph/scc.test.d.ts +0 -2
  136. package/dist/src/__tests__/graph/scc.test.d.ts.map +0 -1
  137. package/dist/src/__tests__/graph/scc.test.js +0 -77
  138. package/dist/src/__tests__/graph/scc.test.js.map +0 -1
  139. package/dist/src/__tests__/graph/statistics.test.d.ts +0 -2
  140. package/dist/src/__tests__/graph/statistics.test.d.ts.map +0 -1
  141. package/dist/src/__tests__/graph/statistics.test.js +0 -197
  142. package/dist/src/__tests__/graph/statistics.test.js.map +0 -1
  143. package/dist/src/__tests__/graph/subgraph.test.d.ts +0 -2
  144. package/dist/src/__tests__/graph/subgraph.test.d.ts.map +0 -1
  145. package/dist/src/__tests__/graph/subgraph.test.js +0 -116
  146. package/dist/src/__tests__/graph/subgraph.test.js.map +0 -1
  147. package/dist/src/__tests__/graph/topo-sort.test.d.ts +0 -2
  148. package/dist/src/__tests__/graph/topo-sort.test.d.ts.map +0 -1
  149. package/dist/src/__tests__/graph/topo-sort.test.js +0 -101
  150. package/dist/src/__tests__/graph/topo-sort.test.js.map +0 -1
  151. package/dist/src/__tests__/graph/wcc.test.d.ts +0 -2
  152. package/dist/src/__tests__/graph/wcc.test.d.ts.map +0 -1
  153. package/dist/src/__tests__/graph/wcc.test.js +0 -91
  154. package/dist/src/__tests__/graph/wcc.test.js.map +0 -1
  155. package/dist/src/__tests__/groups/grpc-extractor.test.d.ts +0 -2
  156. package/dist/src/__tests__/groups/grpc-extractor.test.d.ts.map +0 -1
  157. package/dist/src/__tests__/groups/grpc-extractor.test.js +0 -42
  158. package/dist/src/__tests__/groups/grpc-extractor.test.js.map +0 -1
  159. package/dist/src/__tests__/groups/service-boundary.test.d.ts +0 -2
  160. package/dist/src/__tests__/groups/service-boundary.test.d.ts.map +0 -1
  161. package/dist/src/__tests__/groups/service-boundary.test.js +0 -75
  162. package/dist/src/__tests__/groups/service-boundary.test.js.map +0 -1
  163. package/dist/src/__tests__/groups/topic-extractor.test.d.ts +0 -2
  164. package/dist/src/__tests__/groups/topic-extractor.test.d.ts.map +0 -1
  165. package/dist/src/__tests__/groups/topic-extractor.test.js +0 -37
  166. package/dist/src/__tests__/groups/topic-extractor.test.js.map +0 -1
  167. package/dist/src/__tests__/ingest/git-clone.test.d.ts +0 -2
  168. package/dist/src/__tests__/ingest/git-clone.test.d.ts.map +0 -1
  169. package/dist/src/__tests__/ingest/git-clone.test.js +0 -100
  170. package/dist/src/__tests__/ingest/git-clone.test.js.map +0 -1
  171. package/dist/src/__tests__/ingest/query-memory.test.d.ts +0 -2
  172. package/dist/src/__tests__/ingest/query-memory.test.d.ts.map +0 -1
  173. package/dist/src/__tests__/ingest/query-memory.test.js +0 -116
  174. package/dist/src/__tests__/ingest/query-memory.test.js.map +0 -1
  175. package/dist/src/__tests__/ingest/transcribe.test.d.ts +0 -2
  176. package/dist/src/__tests__/ingest/transcribe.test.d.ts.map +0 -1
  177. package/dist/src/__tests__/ingest/transcribe.test.js +0 -50
  178. package/dist/src/__tests__/ingest/transcribe.test.js.map +0 -1
  179. package/dist/src/__tests__/ingest/url-ingest.test.d.ts +0 -2
  180. package/dist/src/__tests__/ingest/url-ingest.test.d.ts.map +0 -1
  181. package/dist/src/__tests__/ingest/url-ingest.test.js +0 -43
  182. package/dist/src/__tests__/ingest/url-ingest.test.js.map +0 -1
  183. package/dist/src/__tests__/mcp-resources/repo-context-resource.test.d.ts +0 -2
  184. package/dist/src/__tests__/mcp-resources/repo-context-resource.test.d.ts.map +0 -1
  185. package/dist/src/__tests__/mcp-resources/repo-context-resource.test.js +0 -34
  186. package/dist/src/__tests__/mcp-resources/repo-context-resource.test.js.map +0 -1
  187. package/dist/src/__tests__/mcp-resources/repos-resource.test.d.ts +0 -2
  188. package/dist/src/__tests__/mcp-resources/repos-resource.test.d.ts.map +0 -1
  189. package/dist/src/__tests__/mcp-resources/repos-resource.test.js +0 -63
  190. package/dist/src/__tests__/mcp-resources/repos-resource.test.js.map +0 -1
  191. package/dist/src/__tests__/mcp-resources/wiki-resource.test.d.ts +0 -2
  192. package/dist/src/__tests__/mcp-resources/wiki-resource.test.d.ts.map +0 -1
  193. package/dist/src/__tests__/mcp-resources/wiki-resource.test.js +0 -47
  194. package/dist/src/__tests__/mcp-resources/wiki-resource.test.js.map +0 -1
  195. package/dist/src/__tests__/mcp-tools/explain.test.d.ts +0 -2
  196. package/dist/src/__tests__/mcp-tools/explain.test.d.ts.map +0 -1
  197. package/dist/src/__tests__/mcp-tools/explain.test.js +0 -42
  198. package/dist/src/__tests__/mcp-tools/explain.test.js.map +0 -1
  199. package/dist/src/__tests__/mcp-tools/graph-query.test.d.ts +0 -2
  200. package/dist/src/__tests__/mcp-tools/graph-query.test.d.ts.map +0 -1
  201. package/dist/src/__tests__/mcp-tools/graph-query.test.js +0 -41
  202. package/dist/src/__tests__/mcp-tools/graph-query.test.js.map +0 -1
  203. package/dist/src/__tests__/mcp-tools/group-sync.test.d.ts +0 -2
  204. package/dist/src/__tests__/mcp-tools/group-sync.test.d.ts.map +0 -1
  205. package/dist/src/__tests__/mcp-tools/group-sync.test.js +0 -8
  206. package/dist/src/__tests__/mcp-tools/group-sync.test.js.map +0 -1
  207. package/dist/src/__tests__/mcp-tools/impact-filtering.test.d.ts +0 -2
  208. package/dist/src/__tests__/mcp-tools/impact-filtering.test.d.ts.map +0 -1
  209. package/dist/src/__tests__/mcp-tools/impact-filtering.test.js +0 -45
  210. package/dist/src/__tests__/mcp-tools/impact-filtering.test.js.map +0 -1
  211. package/dist/src/__tests__/mcp-tools/impact.risk.test.d.ts +0 -2
  212. package/dist/src/__tests__/mcp-tools/impact.risk.test.d.ts.map +0 -1
  213. package/dist/src/__tests__/mcp-tools/impact.risk.test.js +0 -21
  214. package/dist/src/__tests__/mcp-tools/impact.risk.test.js.map +0 -1
  215. package/dist/src/__tests__/mcp-tools/list-repos.test.d.ts +0 -2
  216. package/dist/src/__tests__/mcp-tools/list-repos.test.d.ts.map +0 -1
  217. package/dist/src/__tests__/mcp-tools/list-repos.test.js +0 -21
  218. package/dist/src/__tests__/mcp-tools/list-repos.test.js.map +0 -1
  219. package/dist/src/__tests__/mcp-tools/neighbors.test.d.ts +0 -2
  220. package/dist/src/__tests__/mcp-tools/neighbors.test.d.ts.map +0 -1
  221. package/dist/src/__tests__/mcp-tools/neighbors.test.js +0 -44
  222. package/dist/src/__tests__/mcp-tools/neighbors.test.js.map +0 -1
  223. package/dist/src/__tests__/mcp-tools/query.test.d.ts +0 -2
  224. package/dist/src/__tests__/mcp-tools/query.test.d.ts.map +0 -1
  225. package/dist/src/__tests__/mcp-tools/query.test.js +0 -37
  226. package/dist/src/__tests__/mcp-tools/query.test.js.map +0 -1
  227. package/dist/src/__tests__/parsers/language-parsers.test.d.ts +0 -2
  228. package/dist/src/__tests__/parsers/language-parsers.test.d.ts.map +0 -1
  229. package/dist/src/__tests__/parsers/language-parsers.test.js +0 -48
  230. package/dist/src/__tests__/parsers/language-parsers.test.js.map +0 -1
  231. package/dist/src/__tests__/parsers/named-bindings.test.d.ts +0 -2
  232. package/dist/src/__tests__/parsers/named-bindings.test.d.ts.map +0 -1
  233. package/dist/src/__tests__/parsers/named-bindings.test.js +0 -68
  234. package/dist/src/__tests__/parsers/named-bindings.test.js.map +0 -1
  235. package/dist/src/__tests__/pipeline/cluster-only.test.d.ts +0 -2
  236. package/dist/src/__tests__/pipeline/cluster-only.test.d.ts.map +0 -1
  237. package/dist/src/__tests__/pipeline/cluster-only.test.js +0 -31
  238. package/dist/src/__tests__/pipeline/cluster-only.test.js.map +0 -1
  239. package/dist/src/__tests__/pipeline/incremental.test.d.ts +0 -2
  240. package/dist/src/__tests__/pipeline/incremental.test.d.ts.map +0 -1
  241. package/dist/src/__tests__/pipeline/incremental.test.js +0 -38
  242. package/dist/src/__tests__/pipeline/incremental.test.js.map +0 -1
  243. package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.d.ts +0 -2
  244. package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.d.ts.map +0 -1
  245. package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.js +0 -40
  246. package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.js.map +0 -1
  247. package/dist/src/__tests__/pipeline/phases/community-split.test.d.ts +0 -2
  248. package/dist/src/__tests__/pipeline/phases/community-split.test.d.ts.map +0 -1
  249. package/dist/src/__tests__/pipeline/phases/community-split.test.js +0 -27
  250. package/dist/src/__tests__/pipeline/phases/community-split.test.js.map +0 -1
  251. package/dist/src/__tests__/pipeline/phases/framework-detect.test.d.ts +0 -2
  252. package/dist/src/__tests__/pipeline/phases/framework-detect.test.d.ts.map +0 -1
  253. package/dist/src/__tests__/pipeline/phases/framework-detect.test.js +0 -56
  254. package/dist/src/__tests__/pipeline/phases/framework-detect.test.js.map +0 -1
  255. package/dist/src/__tests__/pipeline/phases/import-resolver.test.d.ts +0 -2
  256. package/dist/src/__tests__/pipeline/phases/import-resolver.test.d.ts.map +0 -1
  257. package/dist/src/__tests__/pipeline/phases/import-resolver.test.js +0 -56
  258. package/dist/src/__tests__/pipeline/phases/import-resolver.test.js.map +0 -1
  259. package/dist/src/__tests__/pipeline/phases/parse-arrow.test.d.ts +0 -2
  260. package/dist/src/__tests__/pipeline/phases/parse-arrow.test.d.ts.map +0 -1
  261. package/dist/src/__tests__/pipeline/phases/parse-arrow.test.js +0 -30
  262. package/dist/src/__tests__/pipeline/phases/parse-arrow.test.js.map +0 -1
  263. package/dist/src/__tests__/pipeline/phases/parse-csharp.test.d.ts +0 -2
  264. package/dist/src/__tests__/pipeline/phases/parse-csharp.test.d.ts.map +0 -1
  265. package/dist/src/__tests__/pipeline/phases/parse-csharp.test.js +0 -30
  266. package/dist/src/__tests__/pipeline/phases/parse-csharp.test.js.map +0 -1
  267. package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.d.ts +0 -2
  268. package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.d.ts.map +0 -1
  269. package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.js +0 -46
  270. package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.js.map +0 -1
  271. package/dist/src/__tests__/pipeline/phases/scan.negation.test.d.ts +0 -2
  272. package/dist/src/__tests__/pipeline/phases/scan.negation.test.d.ts.map +0 -1
  273. package/dist/src/__tests__/pipeline/phases/scan.negation.test.js +0 -35
  274. package/dist/src/__tests__/pipeline/phases/scan.negation.test.js.map +0 -1
  275. package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.d.ts +0 -2
  276. package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.d.ts.map +0 -1
  277. package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.js +0 -32
  278. package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.js.map +0 -1
  279. package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.d.ts +0 -2
  280. package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.d.ts.map +0 -1
  281. package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.js +0 -28
  282. package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.js.map +0 -1
  283. package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.d.ts +0 -2
  284. package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.d.ts.map +0 -1
  285. package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.js +0 -29
  286. package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.js.map +0 -1
  287. package/dist/src/__tests__/pipeline/phases/suggest-questions.test.d.ts +0 -2
  288. package/dist/src/__tests__/pipeline/phases/suggest-questions.test.d.ts.map +0 -1
  289. package/dist/src/__tests__/pipeline/phases/suggest-questions.test.js +0 -42
  290. package/dist/src/__tests__/pipeline/phases/suggest-questions.test.js.map +0 -1
  291. package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.d.ts +0 -2
  292. package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.d.ts.map +0 -1
  293. package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.js +0 -42
  294. package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.js.map +0 -1
  295. package/dist/src/__tests__/pipeline/phases/variables-phase.test.d.ts +0 -2
  296. package/dist/src/__tests__/pipeline/phases/variables-phase.test.d.ts.map +0 -1
  297. package/dist/src/__tests__/pipeline/phases/variables-phase.test.js +0 -72
  298. package/dist/src/__tests__/pipeline/phases/variables-phase.test.js.map +0 -1
  299. package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.d.ts +0 -2
  300. package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.d.ts.map +0 -1
  301. package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.js +0 -59
  302. package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.js.map +0 -1
  303. package/dist/src/__tests__/pipeline/runner.parallel.test.d.ts +0 -2
  304. package/dist/src/__tests__/pipeline/runner.parallel.test.d.ts.map +0 -1
  305. package/dist/src/__tests__/pipeline/runner.parallel.test.js +0 -66
  306. package/dist/src/__tests__/pipeline/runner.parallel.test.js.map +0 -1
  307. package/dist/src/__tests__/reporting/graph-report-confidence.test.d.ts +0 -2
  308. package/dist/src/__tests__/reporting/graph-report-confidence.test.d.ts.map +0 -1
  309. package/dist/src/__tests__/reporting/graph-report-confidence.test.js +0 -40
  310. package/dist/src/__tests__/reporting/graph-report-confidence.test.js.map +0 -1
  311. package/dist/src/__tests__/reporting/graph-report-gaps.test.d.ts +0 -2
  312. package/dist/src/__tests__/reporting/graph-report-gaps.test.d.ts.map +0 -1
  313. package/dist/src/__tests__/reporting/graph-report-gaps.test.js +0 -38
  314. package/dist/src/__tests__/reporting/graph-report-gaps.test.js.map +0 -1
  315. package/dist/src/__tests__/scope-resolution/evidence-weights.test.d.ts +0 -2
  316. package/dist/src/__tests__/scope-resolution/evidence-weights.test.d.ts.map +0 -1
  317. package/dist/src/__tests__/scope-resolution/evidence-weights.test.js +0 -40
  318. package/dist/src/__tests__/scope-resolution/evidence-weights.test.js.map +0 -1
  319. package/dist/src/__tests__/search/diacritic.test.d.ts +0 -2
  320. package/dist/src/__tests__/search/diacritic.test.d.ts.map +0 -1
  321. package/dist/src/__tests__/search/diacritic.test.js +0 -23
  322. package/dist/src/__tests__/search/diacritic.test.js.map +0 -1
  323. package/dist/src/__tests__/security/safe-fetch.test.d.ts +0 -2
  324. package/dist/src/__tests__/security/safe-fetch.test.d.ts.map +0 -1
  325. package/dist/src/__tests__/security/safe-fetch.test.js +0 -113
  326. package/dist/src/__tests__/security/safe-fetch.test.js.map +0 -1
  327. package/dist/src/__tests__/skills/platform-skills.extra.test.d.ts +0 -2
  328. package/dist/src/__tests__/skills/platform-skills.extra.test.d.ts.map +0 -1
  329. package/dist/src/__tests__/skills/platform-skills.extra.test.js +0 -31
  330. package/dist/src/__tests__/skills/platform-skills.extra.test.js.map +0 -1
  331. package/dist/src/__tests__/web/api.clusters.test.d.ts +0 -2
  332. package/dist/src/__tests__/web/api.clusters.test.d.ts.map +0 -1
  333. package/dist/src/__tests__/web/api.clusters.test.js +0 -59
  334. package/dist/src/__tests__/web/api.clusters.test.js.map +0 -1
  335. package/dist/src/__tests__/web/api.file.test.d.ts +0 -2
  336. package/dist/src/__tests__/web/api.file.test.d.ts.map +0 -1
  337. package/dist/src/__tests__/web/api.file.test.js +0 -38
  338. package/dist/src/__tests__/web/api.file.test.js.map +0 -1
  339. package/dist/src/__tests__/web/api.grep.test.d.ts +0 -2
  340. package/dist/src/__tests__/web/api.grep.test.d.ts.map +0 -1
  341. package/dist/src/__tests__/web/api.grep.test.js +0 -43
  342. package/dist/src/__tests__/web/api.grep.test.js.map +0 -1
  343. package/dist/src/__tests__/web/api.info.test.d.ts +0 -2
  344. package/dist/src/__tests__/web/api.info.test.d.ts.map +0 -1
  345. package/dist/src/__tests__/web/api.info.test.js +0 -17
  346. package/dist/src/__tests__/web/api.info.test.js.map +0 -1
  347. package/dist/src/__tests__/web/api.jobs.test.d.ts +0 -2
  348. package/dist/src/__tests__/web/api.jobs.test.d.ts.map +0 -1
  349. package/dist/src/__tests__/web/api.jobs.test.js +0 -40
  350. package/dist/src/__tests__/web/api.jobs.test.js.map +0 -1
  351. package/dist/src/__tests__/web/api.progress.test.d.ts +0 -2
  352. package/dist/src/__tests__/web/api.progress.test.d.ts.map +0 -1
  353. package/dist/src/__tests__/web/api.progress.test.js +0 -23
  354. package/dist/src/__tests__/web/api.progress.test.js.map +0 -1
  355. package/dist/src/__tests__/web/api.stream.test.d.ts +0 -2
  356. package/dist/src/__tests__/web/api.stream.test.d.ts.map +0 -1
  357. package/dist/src/__tests__/web/api.stream.test.js +0 -33
  358. package/dist/src/__tests__/web/api.stream.test.js.map +0 -1
  359. package/dist/src/__tests__/wiki/providers-reasoning.test.d.ts +0 -2
  360. package/dist/src/__tests__/wiki/providers-reasoning.test.d.ts.map +0 -1
  361. package/dist/src/__tests__/wiki/providers-reasoning.test.js +0 -41
  362. package/dist/src/__tests__/wiki/providers-reasoning.test.js.map +0 -1
  363. package/dist/src/__tests__/wiki/wiki-review-mode.test.d.ts +0 -2
  364. package/dist/src/__tests__/wiki/wiki-review-mode.test.d.ts.map +0 -1
  365. package/dist/src/__tests__/wiki/wiki-review-mode.test.js +0 -21
  366. package/dist/src/__tests__/wiki/wiki-review-mode.test.js.map +0 -1
  367. package/dist/src/analysis/cycles.d.ts +0 -16
  368. package/dist/src/analysis/cycles.d.ts.map +0 -1
  369. package/dist/src/analysis/cycles.js +0 -203
  370. package/dist/src/analysis/cycles.js.map +0 -1
  371. package/dist/src/analysis/trace.d.ts +0 -80
  372. package/dist/src/analysis/trace.d.ts.map +0 -1
  373. package/dist/src/analysis/trace.js +0 -186
  374. package/dist/src/analysis/trace.js.map +0 -1
  375. package/dist/src/analysis/worker-pool.d.ts +0 -17
  376. package/dist/src/analysis/worker-pool.d.ts.map +0 -1
  377. package/dist/src/analysis/worker-pool.js +0 -62
  378. package/dist/src/analysis/worker-pool.js.map +0 -1
  379. package/dist/src/coverage/runtime.d.ts +0 -36
  380. package/dist/src/coverage/runtime.d.ts.map +0 -1
  381. package/dist/src/coverage/runtime.js +0 -187
  382. package/dist/src/coverage/runtime.js.map +0 -1
  383. package/dist/src/graph/clone-detector.d.ts +0 -15
  384. package/dist/src/graph/clone-detector.d.ts.map +0 -1
  385. package/dist/src/graph/clone-detector.js +0 -132
  386. package/dist/src/graph/clone-detector.js.map +0 -1
  387. package/dist/src/graph/shingle-filter.d.ts +0 -6
  388. package/dist/src/graph/shingle-filter.d.ts.map +0 -1
  389. package/dist/src/graph/shingle-filter.js +0 -129
  390. package/dist/src/graph/shingle-filter.js.map +0 -1
  391. package/dist/src/watch/watch-runner.d.ts +0 -16
  392. package/dist/src/watch/watch-runner.d.ts.map +0 -1
  393. package/dist/src/watch/watch-runner.js +0 -49
  394. package/dist/src/watch/watch-runner.js.map +0 -1
@@ -1,66 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { toGexf } from '../../export/gexf.js';
3
- function makeNode(id, label = 'Function', name = id) {
4
- return { id, label: label, name, isExported: false };
5
- }
6
- function makeEdge(id, sourceId, targetId, relation = 'CALLS') {
7
- return { id, sourceId, targetId, relation, confidence: 'EXTRACTED', confidenceScore: 1.0 };
8
- }
9
- describe('toGexf', () => {
10
- it('returns a string', () => {
11
- expect(typeof toGexf([], [])).toBe('string');
12
- });
13
- it('starts with XML declaration', () => {
14
- const result = toGexf([], []);
15
- expect(result).toMatch(/^<\?xml/);
16
- });
17
- it('contains gexf root element', () => {
18
- const result = toGexf([], []);
19
- expect(result).toContain('<gexf');
20
- expect(result).toContain('</gexf>');
21
- });
22
- it('contains graph element', () => {
23
- const result = toGexf([], []);
24
- expect(result).toContain('<graph');
25
- expect(result).toContain('</graph>');
26
- });
27
- it('includes nodes section', () => {
28
- const nodes = [makeNode('a'), makeNode('b')];
29
- const result = toGexf(nodes, []);
30
- expect(result).toContain('<nodes>');
31
- expect(result).toContain('</nodes>');
32
- expect(result).toContain('"a"');
33
- expect(result).toContain('"b"');
34
- });
35
- it('includes edges section', () => {
36
- const nodes = [makeNode('a'), makeNode('b')];
37
- const edges = [makeEdge('e1', 'a', 'b')];
38
- const result = toGexf(nodes, edges);
39
- expect(result).toContain('<edges>');
40
- expect(result).toContain('</edges>');
41
- expect(result).toContain('e1');
42
- });
43
- it('includes node label attribute', () => {
44
- const nodes = [makeNode('fn1', 'Function', 'myFunc')];
45
- const result = toGexf(nodes, []);
46
- expect(result).toContain('myFunc');
47
- });
48
- it('includes edge source and target', () => {
49
- const nodes = [makeNode('a'), makeNode('b')];
50
- const edges = [makeEdge('e1', 'a', 'b')];
51
- const result = toGexf(nodes, edges);
52
- expect(result).toContain('source="a"');
53
- expect(result).toContain('target="b"');
54
- });
55
- it('handles empty nodes and edges gracefully', () => {
56
- const result = toGexf([], []);
57
- expect(result).toBeTruthy();
58
- expect(result).toContain('<nodes');
59
- expect(result).toContain('<edges');
60
- });
61
- it('marks graph as directed', () => {
62
- const result = toGexf([], []);
63
- expect(result).toContain('directed');
64
- });
65
- });
66
- //# sourceMappingURL=gexf.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gexf.test.js","sourceRoot":"","sources":["../../../../src/__tests__/export/gexf.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=graphml.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphml.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/export/graphml.test.ts"],"names":[],"mappings":""}
@@ -1,51 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { toGraphml } from '../../export/graphml.js';
3
- const nodeWithCommunity = {
4
- id: 'n1', label: 'Function', name: 'doStuff',
5
- normLabel: 'function', filePath: '/a.ts',
6
- isExported: true, communityId: 42,
7
- };
8
- const nodeWithoutCommunity = {
9
- id: 'n2', label: 'Class', name: 'Foo',
10
- normLabel: 'class', filePath: '/b.ts',
11
- isExported: false,
12
- };
13
- const edge = {
14
- id: 'e1', sourceId: 'n1', targetId: 'n2',
15
- relation: 'CALLS', confidence: 'EXTRACTED', confidenceScore: 1.0,
16
- };
17
- describe('toGraphml', () => {
18
- it('includes community key declaration in header', () => {
19
- const out = toGraphml([nodeWithCommunity], []);
20
- expect(out).toContain('<key id="community"');
21
- expect(out).toContain('attr.name="community"');
22
- expect(out).toContain('attr.type="int"');
23
- });
24
- it('includes community data element for node with communityId', () => {
25
- const out = toGraphml([nodeWithCommunity], []);
26
- expect(out).toContain('<data key="community">42</data>');
27
- });
28
- it('omits community data element when communityId is absent', () => {
29
- const out = toGraphml([nodeWithoutCommunity], []);
30
- // Should not have a community data tag for this node
31
- const nodeSection = out.split('<node id="n2">')[1]?.split('</node>')[0] ?? '';
32
- expect(nodeSection).not.toContain('<data key="community">');
33
- });
34
- it('produces valid graphml with edges', () => {
35
- const out = toGraphml([nodeWithCommunity, nodeWithoutCommunity], [edge]);
36
- expect(out).toContain('<?xml version="1.0"');
37
- expect(out).toContain('<graphml');
38
- expect(out).toContain('<edge id="e1"');
39
- expect(out).toContain('<data key="relation">CALLS</data>');
40
- });
41
- it('escapes XML special characters in names', () => {
42
- const n = {
43
- id: 'n3', label: 'Function', name: 'foo<bar>&baz',
44
- normLabel: 'function', isExported: false,
45
- };
46
- const out = toGraphml([n], []);
47
- expect(out).toContain('foo&lt;bar&gt;&amp;baz');
48
- expect(out).not.toContain('foo<bar>');
49
- });
50
- });
51
- //# sourceMappingURL=graphml.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphml.test.js","sourceRoot":"","sources":["../../../../src/__tests__/export/graphml.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mermaid.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mermaid.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/export/mermaid.test.ts"],"names":[],"mappings":""}
@@ -1,78 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { toMermaid } from '../../export/mermaid.js';
3
- const fn = {
4
- id: 'fn_alpha', label: 'Function', name: 'alpha',
5
- normLabel: 'function', filePath: '/src/a.ts',
6
- isExported: true,
7
- };
8
- const cls = {
9
- id: 'cls_beta', label: 'Class', name: 'Beta',
10
- normLabel: 'class', filePath: '/src/b.ts',
11
- isExported: false,
12
- };
13
- const edge = {
14
- id: 'e1', sourceId: 'fn_alpha', targetId: 'cls_beta',
15
- relation: 'CALLS', confidence: 'EXTRACTED', confidenceScore: 1.0,
16
- };
17
- describe('toMermaid', () => {
18
- it('starts with "graph" declaration', () => {
19
- const out = toMermaid([fn], []);
20
- expect(out).toMatch(/^graph\s+(TD|LR|RL|BT)/);
21
- });
22
- it('includes all node ids', () => {
23
- const out = toMermaid([fn, cls], [edge]);
24
- expect(out).toContain('fn_alpha');
25
- expect(out).toContain('cls_beta');
26
- });
27
- it('includes an edge arrow between connected nodes', () => {
28
- const out = toMermaid([fn, cls], [edge]);
29
- // Arrow may include a label: fn_alpha -->|CALLS| cls_beta
30
- expect(out).toMatch(/fn_alpha\s*-->(\|[^|]+\|)?\s*cls_beta/);
31
- });
32
- it('includes edge label with relation', () => {
33
- const out = toMermaid([fn, cls], [edge]);
34
- expect(out).toContain('CALLS');
35
- });
36
- it('includes node type/label in the diagram', () => {
37
- const out = toMermaid([fn], []);
38
- expect(out).toContain('Function');
39
- });
40
- it('returns empty graph declaration for empty inputs', () => {
41
- const out = toMermaid([], []);
42
- expect(out).toMatch(/^graph\s+(TD|LR|RL|BT)/);
43
- expect(out).not.toContain('-->');
44
- });
45
- it('caps nodes at 200 to avoid huge diagrams', () => {
46
- const nodes = Array.from({ length: 300 }, (_, i) => ({
47
- id: `n${i}`, label: 'Function', name: `fn${i}`,
48
- normLabel: 'function', isExported: false,
49
- }));
50
- const out = toMermaid(nodes, []);
51
- // Should only contain up to 200 node definitions
52
- const matches = out.match(/\bn\d+\b/g) ?? [];
53
- const uniqueIds = new Set(matches);
54
- expect(uniqueIds.size).toBeLessThanOrEqual(200);
55
- });
56
- it('sanitizes special characters in node names', () => {
57
- const n = {
58
- id: 'n_special', label: 'Function', name: 'foo<bar>"baz"',
59
- normLabel: 'function', isExported: false,
60
- };
61
- const out = toMermaid([n], []);
62
- expect(out).not.toContain('<bar>');
63
- expect(out).not.toContain('"baz"');
64
- });
65
- it('includes community groupings as subgraphs when nodes have communityId', () => {
66
- const a = { ...fn, communityId: 1 };
67
- const b = { ...cls, communityId: 2 };
68
- const out = toMermaid([a, b], []);
69
- expect(out).toContain('subgraph');
70
- });
71
- it('uses dashed arrows for non-EXTRACTED edges', () => {
72
- const inferredEdge = { ...edge, id: 'e2', confidence: 'INFERRED' };
73
- const out = toMermaid([fn, cls], [inferredEdge]);
74
- // Dashed arrow syntax: -..-> or -.->
75
- expect(out).toMatch(/fn_alpha\s*-\.+->(\|[^|]+\|)?\s*cls_beta/);
76
- });
77
- });
78
- //# sourceMappingURL=mermaid.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mermaid.test.js","sourceRoot":"","sources":["../../../../src/__tests__/export/mermaid.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=betweenness.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"betweenness.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/graph/betweenness.test.ts"],"names":[],"mappings":""}
@@ -1,77 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { getBetweennessCentrality } from '../../graph/analyzer.js';
3
- import { openDb } from '../../storage/db.js';
4
- import { join } from 'path';
5
- import { mkdtempSync } from 'fs';
6
- import { tmpdir } from 'os';
7
- function makeTempDb() {
8
- const dir = mkdtempSync(join(tmpdir(), 'monograph-test-'));
9
- return openDb(join(dir, 'test.db'));
10
- }
11
- function insertNode(db, id, name = id) {
12
- db.prepare(`INSERT INTO nodes (id, label, name, norm_label, is_exported) VALUES (?, 'Function', ?, ?, 0)`)
13
- .run(id, name, name.toLowerCase());
14
- }
15
- function insertEdge(db, src, tgt) {
16
- db.prepare(`INSERT INTO edges (id, source_id, target_id, relation, confidence, confidence_score) VALUES (?, ?, ?, 'CALLS', 'EXTRACTED', 1.0)`)
17
- .run(`${src}_${tgt}`, src, tgt);
18
- }
19
- describe('getBetweennessCentrality', () => {
20
- it('returns a map from node id to centrality score', () => {
21
- const db = makeTempDb();
22
- insertNode(db, 'a');
23
- insertNode(db, 'b');
24
- insertNode(db, 'c');
25
- insertEdge(db, 'a', 'b');
26
- insertEdge(db, 'b', 'c');
27
- const result = getBetweennessCentrality(db);
28
- expect(result).toBeInstanceOf(Map);
29
- expect(result.has('a')).toBe(true);
30
- expect(result.has('b')).toBe(true);
31
- expect(result.has('c')).toBe(true);
32
- db.close();
33
- });
34
- it('node on all shortest paths has highest centrality', () => {
35
- // a -> b -> c: b is on all paths between a and c
36
- const db = makeTempDb();
37
- insertNode(db, 'a');
38
- insertNode(db, 'b');
39
- insertNode(db, 'c');
40
- insertEdge(db, 'a', 'b');
41
- insertEdge(db, 'b', 'c');
42
- const result = getBetweennessCentrality(db);
43
- // b should have higher betweenness than a and c (endpoints)
44
- expect(result.get('b')).toBeGreaterThan(result.get('a'));
45
- expect(result.get('b')).toBeGreaterThan(result.get('c'));
46
- db.close();
47
- });
48
- it('returns zero for isolated nodes', () => {
49
- const db = makeTempDb();
50
- insertNode(db, 'isolated');
51
- const result = getBetweennessCentrality(db);
52
- expect(result.get('isolated')).toBe(0);
53
- db.close();
54
- });
55
- it('returns empty map for empty graph', () => {
56
- const db = makeTempDb();
57
- const result = getBetweennessCentrality(db);
58
- expect(result.size).toBe(0);
59
- db.close();
60
- });
61
- it('all scores are non-negative numbers', () => {
62
- const db = makeTempDb();
63
- insertNode(db, 'x');
64
- insertNode(db, 'y');
65
- insertNode(db, 'z');
66
- insertEdge(db, 'x', 'y');
67
- insertEdge(db, 'y', 'z');
68
- insertEdge(db, 'x', 'z');
69
- const result = getBetweennessCentrality(db);
70
- for (const [, score] of result) {
71
- expect(typeof score).toBe('number');
72
- expect(score).toBeGreaterThanOrEqual(0);
73
- }
74
- db.close();
75
- });
76
- });
77
- //# sourceMappingURL=betweenness.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"betweenness.test.js","sourceRoot":"","sources":["../../../../src/__tests__/graph/betweenness.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cycles.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cycles.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/graph/cycles.test.ts"],"names":[],"mappings":""}
@@ -1,119 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { findCycles } from '../../graph/cycles.js';
3
- import { openDb } from '../../storage/db.js';
4
- import { join } from 'path';
5
- import { mkdtempSync } from 'fs';
6
- import { tmpdir } from 'os';
7
- function makeTempDb() {
8
- const dir = mkdtempSync(join(tmpdir(), 'monograph-cycles-test-'));
9
- return openDb(join(dir, 'test.db'));
10
- }
11
- function insertNode(db, id) {
12
- db.prepare(`INSERT INTO nodes (id, label, name, norm_label, is_exported) VALUES (?, 'Function', ?, ?, 0)`)
13
- .run(id, id, id.toLowerCase());
14
- }
15
- function insertEdge(db, src, tgt) {
16
- db.prepare(`INSERT INTO edges (id, source_id, target_id, relation, confidence, confidence_score) VALUES (?, ?, ?, 'CALLS', 'EXTRACTED', 1.0)`)
17
- .run(`${src}_${tgt}`, src, tgt);
18
- }
19
- describe('findCycles', () => {
20
- it('returns empty array for empty graph', () => {
21
- const db = makeTempDb();
22
- expect(findCycles(db)).toEqual([]);
23
- db.close();
24
- });
25
- it('returns empty array for single node with no self-loop', () => {
26
- const db = makeTempDb();
27
- insertNode(db, 'a');
28
- expect(findCycles(db)).toEqual([]);
29
- db.close();
30
- });
31
- it('returns empty array for a DAG (no cycles)', () => {
32
- const db = makeTempDb();
33
- insertNode(db, 'a');
34
- insertNode(db, 'b');
35
- insertNode(db, 'c');
36
- insertEdge(db, 'a', 'b');
37
- insertEdge(db, 'b', 'c');
38
- const cycles = findCycles(db);
39
- expect(cycles).toEqual([]);
40
- db.close();
41
- });
42
- it('detects a simple 2-node cycle: a->b->a', () => {
43
- const db = makeTempDb();
44
- insertNode(db, 'a');
45
- insertNode(db, 'b');
46
- insertEdge(db, 'a', 'b');
47
- insertEdge(db, 'b', 'a');
48
- const cycles = findCycles(db);
49
- expect(cycles.length).toBeGreaterThan(0);
50
- db.close();
51
- });
52
- it('detects a 3-node cycle: a->b->c->a', () => {
53
- const db = makeTempDb();
54
- insertNode(db, 'a');
55
- insertNode(db, 'b');
56
- insertNode(db, 'c');
57
- insertEdge(db, 'a', 'b');
58
- insertEdge(db, 'b', 'c');
59
- insertEdge(db, 'c', 'a');
60
- const cycles = findCycles(db);
61
- expect(cycles.length).toBeGreaterThan(0);
62
- db.close();
63
- });
64
- it('each cycle is an array of node ids forming the cycle', () => {
65
- const db = makeTempDb();
66
- insertNode(db, 'x');
67
- insertNode(db, 'y');
68
- insertEdge(db, 'x', 'y');
69
- insertEdge(db, 'y', 'x');
70
- const cycles = findCycles(db);
71
- expect(cycles.length).toBeGreaterThan(0);
72
- const cycle = cycles[0];
73
- expect(Array.isArray(cycle)).toBe(true);
74
- expect(cycle.length).toBeGreaterThan(0);
75
- for (const id of cycle) {
76
- expect(typeof id).toBe('string');
77
- }
78
- db.close();
79
- });
80
- it('does not detect cycles in a tree', () => {
81
- const db = makeTempDb();
82
- // a tree: a->b, a->c, b->d, b->e
83
- ['a', 'b', 'c', 'd', 'e'].forEach(id => insertNode(db, id));
84
- insertEdge(db, 'a', 'b');
85
- insertEdge(db, 'a', 'c');
86
- insertEdge(db, 'b', 'd');
87
- insertEdge(db, 'b', 'e');
88
- expect(findCycles(db)).toEqual([]);
89
- db.close();
90
- });
91
- it('detects self-loop as a cycle', () => {
92
- const db = makeTempDb();
93
- insertNode(db, 'loop');
94
- // bypass FK by doing the insertion with FK off
95
- db.pragma('foreign_keys = OFF');
96
- db.prepare(`INSERT INTO edges (id, source_id, target_id, relation, confidence, confidence_score) VALUES ('self', 'loop', 'loop', 'CALLS', 'EXTRACTED', 1.0)`).run();
97
- db.pragma('foreign_keys = ON');
98
- const cycles = findCycles(db);
99
- expect(cycles.length).toBeGreaterThan(0);
100
- db.close();
101
- });
102
- it('handles multiple disconnected cycles', () => {
103
- const db = makeTempDb();
104
- // cycle 1: a->b->a
105
- insertNode(db, 'a');
106
- insertNode(db, 'b');
107
- insertEdge(db, 'a', 'b');
108
- insertEdge(db, 'b', 'a');
109
- // cycle 2: c->d->c
110
- insertNode(db, 'c');
111
- insertNode(db, 'd');
112
- insertEdge(db, 'c', 'd');
113
- insertEdge(db, 'd', 'c');
114
- const cycles = findCycles(db);
115
- expect(cycles.length).toBeGreaterThanOrEqual(2);
116
- db.close();
117
- });
118
- });
119
- //# sourceMappingURL=cycles.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cycles.test.js","sourceRoot":"","sources":["../../../../src/__tests__/graph/cycles.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAE5B,SAAS,UAAU;IACjB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,EAAqB,EAAE,EAAU;IACnD,EAAE,CAAC,OAAO,CAAC,8FAA8F,CAAC;SACvG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,EAAqB,EAAE,GAAW,EAAE,GAAW;IACjE,EAAE,CAAC,OAAO,CAAC,kIAAkI,CAAC;SAC3I,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,iCAAiC;QACjC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACvB,+CAA+C;QAC/C,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAChC,EAAE,CAAC,OAAO,CAAC,iJAAiJ,CAAC,CAAC,GAAG,EAAE,CAAC;QACpK,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,mBAAmB;QACnB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,mBAAmB;QACnB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAChD,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=dead-code.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dead-code.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/graph/dead-code.test.ts"],"names":[],"mappings":""}
@@ -1,89 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { detectDeadCode } from '../../graph/dead-code.js';
3
- import { openDb } from '../../storage/db.js';
4
- import { join } from 'path';
5
- import { mkdtempSync } from 'fs';
6
- import { tmpdir } from 'os';
7
- function makeTempDb() {
8
- const dir = mkdtempSync(join(tmpdir(), 'monograph-deadcode-test-'));
9
- return openDb(join(dir, 'test.db'));
10
- }
11
- function insertNode(db, id, isExported = 0) {
12
- db.prepare(`INSERT INTO nodes (id, label, name, norm_label, is_exported) VALUES (?, 'Function', ?, ?, ?)`)
13
- .run(id, id, id.toLowerCase(), isExported);
14
- }
15
- function insertEdge(db, src, tgt) {
16
- db.prepare(`INSERT INTO edges (id, source_id, target_id, relation, confidence, confidence_score) VALUES (?, ?, ?, 'CALLS', 'EXTRACTED', 1.0)`)
17
- .run(`${src}_${tgt}`, src, tgt);
18
- }
19
- describe('detectDeadCode', () => {
20
- it('returns empty array for empty graph', () => {
21
- const db = makeTempDb();
22
- expect(detectDeadCode(db)).toEqual([]);
23
- db.close();
24
- });
25
- it('detects a node with in-degree 0 that is not exported', () => {
26
- const db = makeTempDb();
27
- // orphan: no incoming edges, not exported
28
- insertNode(db, 'orphan', 0);
29
- insertNode(db, 'b');
30
- insertEdge(db, 'b', 'orphan');
31
- // orphan has in-degree 1 — not dead
32
- // let's make a true orphan
33
- insertNode(db, 'dead', 0);
34
- // dead has no incoming edges
35
- const result = detectDeadCode(db);
36
- expect(result).toContain('dead');
37
- db.close();
38
- });
39
- it('does NOT flag exported nodes as dead code', () => {
40
- const db = makeTempDb();
41
- // exported root with in-degree 0 — this is an entrypoint, not dead code
42
- insertNode(db, 'entry', 1);
43
- const result = detectDeadCode(db);
44
- expect(result).not.toContain('entry');
45
- db.close();
46
- });
47
- it('does NOT flag nodes that have incoming edges', () => {
48
- const db = makeTempDb();
49
- insertNode(db, 'a');
50
- insertNode(db, 'b');
51
- insertEdge(db, 'a', 'b');
52
- // b has in-degree 1 — reachable from a
53
- const result = detectDeadCode(db);
54
- expect(result).not.toContain('b');
55
- db.close();
56
- });
57
- it('flags node with in-degree 0 and not exported', () => {
58
- const db = makeTempDb();
59
- insertNode(db, 'unused', 0);
60
- const result = detectDeadCode(db);
61
- expect(result).toContain('unused');
62
- db.close();
63
- });
64
- it('handles mix of dead and live nodes', () => {
65
- const db = makeTempDb();
66
- insertNode(db, 'live_exported', 1); // exported — not dead
67
- insertNode(db, 'live_used'); // has incoming
68
- insertNode(db, 'dead1'); // orphan, not exported
69
- insertNode(db, 'dead2'); // orphan, not exported
70
- insertEdge(db, 'live_exported', 'live_used');
71
- const result = detectDeadCode(db);
72
- expect(result).toContain('dead1');
73
- expect(result).toContain('dead2');
74
- expect(result).not.toContain('live_exported');
75
- expect(result).not.toContain('live_used');
76
- db.close();
77
- });
78
- it('returns array of node id strings', () => {
79
- const db = makeTempDb();
80
- insertNode(db, 'unused');
81
- const result = detectDeadCode(db);
82
- expect(Array.isArray(result)).toBe(true);
83
- for (const id of result) {
84
- expect(typeof id).toBe('string');
85
- }
86
- db.close();
87
- });
88
- });
89
- //# sourceMappingURL=dead-code.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dead-code.test.js","sourceRoot":"","sources":["../../../../src/__tests__/graph/dead-code.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=dfs.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dfs.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/graph/dfs.test.ts"],"names":[],"mappings":""}
@@ -1,56 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { dfsTraversal } from '../../graph/dfs.js';
3
- function makeGraph() {
4
- const adj = new Map();
5
- adj.set('a', ['b', 'c']);
6
- adj.set('b', ['d']);
7
- adj.set('c', ['d', 'e']);
8
- adj.set('d', []);
9
- adj.set('e', []);
10
- return adj;
11
- }
12
- describe('dfsTraversal', () => {
13
- it('visits all reachable nodes', () => {
14
- const visited = [];
15
- dfsTraversal('a', makeGraph(), (node) => { visited.push(node.id); });
16
- expect(visited.sort()).toEqual(['a', 'b', 'c', 'd', 'e'].sort());
17
- });
18
- it('respects depth limit', () => {
19
- const visited = [];
20
- dfsTraversal('a', makeGraph(), (node) => { visited.push(node.id); }, { maxDepth: 1 });
21
- expect(visited).toContain('a');
22
- expect(visited).toContain('b');
23
- expect(visited).toContain('c');
24
- expect(visited).not.toContain('d');
25
- expect(visited).not.toContain('e');
26
- });
27
- it('provides depth info in visitor', () => {
28
- const depths = {};
29
- dfsTraversal('a', makeGraph(), (node) => { depths[node.id] = node.depth; });
30
- expect(depths['a']).toBe(0);
31
- expect(depths['b']).toBe(1);
32
- expect(depths['d']).toBe(2);
33
- });
34
- it('does not revisit nodes (cycle safety)', () => {
35
- const cyclic = new Map();
36
- cyclic.set('a', ['b']);
37
- cyclic.set('b', ['c']);
38
- cyclic.set('c', ['a']); // cycle
39
- const visited = [];
40
- dfsTraversal('a', cyclic, (node) => { visited.push(node.id); });
41
- expect(visited.length).toBe(3);
42
- expect(new Set(visited).size).toBe(3);
43
- });
44
- it('returns empty when start node not in graph', () => {
45
- const visited = [];
46
- dfsTraversal('z', makeGraph(), (node) => { visited.push(node.id); });
47
- expect(visited).toEqual([]);
48
- });
49
- it('returns nodes in DFS pre-order', () => {
50
- const visited = [];
51
- dfsTraversal('a', makeGraph(), (node) => { visited.push(node.id); });
52
- expect(visited.indexOf('a')).toBeLessThan(visited.indexOf('b'));
53
- expect(visited.indexOf('b')).toBeLessThan(visited.indexOf('d'));
54
- });
55
- });
56
- //# sourceMappingURL=dfs.test.js.map