@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monoes/monograph",
3
- "version": "1.5.4",
3
+ "version": "1.5.5",
4
4
  "type": "module",
5
5
  "description": "Native TypeScript code intelligence engine for monomind",
6
6
  "main": "dist/src/index.js",
@@ -19,7 +19,9 @@
19
19
  "tag": "latest"
20
20
  },
21
21
  "scripts": {
22
+ "prebuild": "node ../../../scripts/build-fs.mjs clean dist tsconfig.tsbuildinfo",
22
23
  "build": "tsc",
24
+ "prepublishOnly": "npm run build",
23
25
  "test": "vitest run",
24
26
  "test:coverage": "vitest run --coverage"
25
27
  },
@@ -62,6 +62,20 @@ export const llmExtractPhase: PipelinePhase<LlmExtractOutput> = {
62
62
 
63
63
  const { isClaudeCliAvailable } = await import('../../claude-cli.js');
64
64
  if (!isClaudeCliAvailable()) {
65
+ // Say so. Returning 0 silently is indistinguishable from "your docs had
66
+ // nothing to infer", so `--llm` looked like it ran and found nothing —
67
+ // reported as "silently produces 0 inferred edges" (#43), with the
68
+ // reasonable but wrong conclusion that an API key was missing.
69
+ //
70
+ // No API key is involved: LLM work goes through `claude --print`, which
71
+ // reuses Claude Code's own auth. The only requirement is that `claude` is
72
+ // on PATH — which is why this can fail *inside* a Claude Code session,
73
+ // where users least expect it.
74
+ console.warn(
75
+ '[monograph] --llm skipped: the `claude` CLI was not found on PATH.\n' +
76
+ ' Semantic extraction runs through `claude --print` and needs no ANTHROPIC_API_KEY.\n' +
77
+ ' Install it with: npm install -g @anthropic-ai/claude-code',
78
+ );
65
79
  return { triplesExtracted: 0, sectionsProcessed: 0 };
66
80
  }
67
81
 
@@ -150,7 +150,13 @@ export async function generateWikiPage(
150
150
  } else {
151
151
  const { claudeCliCall, isClaudeCliAvailable } = await import('../claude-cli.js');
152
152
  if (!isClaudeCliAvailable()) {
153
- throw new Error('Claude Code CLI not found. Install with: npm install -g @anthropic-ai/claude-code');
153
+ // Spell out that no API key is wanted — users hitting this reasonably
154
+ // assume ANTHROPIC_API_KEY is the missing piece and go set one, which
155
+ // changes nothing (#43).
156
+ throw new Error(
157
+ 'Claude Code CLI not found on PATH. Wiki generation runs through `claude --print` ' +
158
+ 'and needs no ANTHROPIC_API_KEY. Install it with: npm install -g @anthropic-ai/claude-code',
159
+ );
154
160
  }
155
161
  content = await claudeCliCall(prompt);
156
162
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=benchmark.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/analysis/benchmark.test.ts"],"names":[],"mappings":""}
@@ -1,54 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- import { runBenchmark, estimateTokens } from '../../analysis/benchmark.js';
4
- function makeDb(nodeCount) {
5
- const db = new Database(':memory:');
6
- db.exec(`
7
- CREATE TABLE nodes (id TEXT PRIMARY KEY, name TEXT, label TEXT, file_path TEXT, start_line INTEGER, end_line INTEGER, community_id INTEGER);
8
- CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT, target_id TEXT, relation TEXT, confidence TEXT, confidence_score REAL);
9
- `);
10
- const insert = db.prepare('INSERT INTO nodes VALUES (?,?,?,?,?,?,?)');
11
- for (let i = 0; i < nodeCount; i++) {
12
- insert.run(`n${i}`, `symbol_${i}`, 'Function', `/app/file${i % 10}.ts`, i * 5 + 1, i * 5 + 4, i % 3);
13
- }
14
- for (let i = 1; i < Math.min(nodeCount, 20); i++) {
15
- db.prepare('INSERT INTO edges VALUES (?,?,?,?,?,?)').run(`e${i}`, `n${i - 1}`, `n${i}`, 'CALLS', 'EXTRACTED', 0.9);
16
- }
17
- return db;
18
- }
19
- describe('estimateTokens', () => {
20
- it('estimates tokens as text length divided by 4', () => {
21
- expect(estimateTokens('a'.repeat(400))).toBe(100);
22
- expect(estimateTokens('')).toBe(0);
23
- });
24
- });
25
- describe('runBenchmark', () => {
26
- it('returns corpus_tokens, avg_query_tokens, and reduction_ratio', () => {
27
- const db = makeDb(50);
28
- const result = runBenchmark(db, { corpusWordCount: 5000 });
29
- expect(result.corpus_tokens).toBeGreaterThan(0);
30
- expect(result.avg_query_tokens).toBeGreaterThanOrEqual(0);
31
- expect(result.reduction_ratio).toBeGreaterThanOrEqual(0);
32
- expect(result.nodes).toBe(50);
33
- });
34
- it('returns per_question breakdown', () => {
35
- const db = makeDb(30);
36
- const result = runBenchmark(db, {
37
- questions: ['how does authentication work', 'what is the entry point'],
38
- corpusWordCount: 3000,
39
- });
40
- expect(Array.isArray(result.per_question)).toBe(true);
41
- });
42
- it('works with no matching nodes gracefully', () => {
43
- const db = makeDb(5);
44
- const result = runBenchmark(db, { questions: ['zzz_nonexistent_xyz'] });
45
- expect(result.nodes).toBe(5);
46
- expect(typeof result.reduction_ratio).toBe('number');
47
- });
48
- it('uses default questions when none provided', () => {
49
- const db = makeDb(20);
50
- const result = runBenchmark(db);
51
- expect(result.per_question.length).toBeGreaterThan(0);
52
- });
53
- });
54
- //# sourceMappingURL=benchmark.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark.test.js","sourceRoot":"","sources":["../../../../src/__tests__/analysis/benchmark.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cluster-quality.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cluster-quality.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/analysis/cluster-quality.test.ts"],"names":[],"mappings":""}
@@ -1,99 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { silhouetteScore, modularityScore } from '../../analysis/cluster-quality.js';
3
- describe('silhouetteScore', () => {
4
- it('returns 0 for a single node', () => {
5
- const memberships = new Map([['a', 0]]);
6
- const edges = [];
7
- expect(silhouetteScore(memberships, edges)).toBeCloseTo(0);
8
- });
9
- it('returns 1 for two perfectly separated communities with no cross edges', () => {
10
- // Community 0: a-b-c fully connected, Community 1: d-e-f fully connected
11
- const memberships = new Map([
12
- ['a', 0], ['b', 0], ['c', 0],
13
- ['d', 1], ['e', 1], ['f', 1],
14
- ]);
15
- const edges = [
16
- { sourceId: 'a', targetId: 'b' },
17
- { sourceId: 'b', targetId: 'c' },
18
- { sourceId: 'a', targetId: 'c' },
19
- { sourceId: 'd', targetId: 'e' },
20
- { sourceId: 'e', targetId: 'f' },
21
- { sourceId: 'd', targetId: 'f' },
22
- ];
23
- const score = silhouetteScore(memberships, edges);
24
- expect(score).toBeGreaterThan(0.5);
25
- });
26
- it('returns negative score for misassigned nodes (cross edges dominate)', () => {
27
- // Node 'a' is in community 0 but only connected to community 1 nodes
28
- const memberships = new Map([
29
- ['a', 0],
30
- ['b', 1], ['c', 1], ['d', 1],
31
- ]);
32
- const edges = [
33
- { sourceId: 'a', targetId: 'b' },
34
- { sourceId: 'a', targetId: 'c' },
35
- { sourceId: 'a', targetId: 'd' },
36
- { sourceId: 'b', targetId: 'c' },
37
- { sourceId: 'c', targetId: 'd' },
38
- ];
39
- const score = silhouetteScore(memberships, edges);
40
- // 'a' is isolated in its community, so its silhouette is negative
41
- expect(score).toBeLessThan(0.5);
42
- });
43
- it('handles nodes with no edges gracefully', () => {
44
- const memberships = new Map([['x', 0], ['y', 1]]);
45
- const edges = [];
46
- const score = silhouetteScore(memberships, edges);
47
- expect(typeof score).toBe('number');
48
- expect(isNaN(score)).toBe(false);
49
- });
50
- });
51
- describe('modularityScore', () => {
52
- it('returns 0 for empty graph', () => {
53
- const memberships = new Map();
54
- const edges = [];
55
- expect(modularityScore(memberships, edges)).toBeCloseTo(0);
56
- });
57
- it('returns positive value for well-structured communities', () => {
58
- // Two dense clusters with few cross edges
59
- const memberships = new Map([
60
- ['a', 0], ['b', 0], ['c', 0],
61
- ['d', 1], ['e', 1], ['f', 1],
62
- ]);
63
- const edges = [
64
- { sourceId: 'a', targetId: 'b' },
65
- { sourceId: 'b', targetId: 'c' },
66
- { sourceId: 'a', targetId: 'c' },
67
- { sourceId: 'd', targetId: 'e' },
68
- { sourceId: 'e', targetId: 'f' },
69
- { sourceId: 'd', targetId: 'f' },
70
- { sourceId: 'c', targetId: 'd' }, // one bridge edge
71
- ];
72
- const q = modularityScore(memberships, edges);
73
- expect(q).toBeGreaterThan(0);
74
- });
75
- it('returns close to 0 or negative for random partition', () => {
76
- // All edges cross community boundaries
77
- const memberships = new Map([
78
- ['a', 0], ['b', 1], ['c', 0], ['d', 1],
79
- ]);
80
- const edges = [
81
- { sourceId: 'a', targetId: 'b' },
82
- { sourceId: 'b', targetId: 'c' },
83
- { sourceId: 'c', targetId: 'd' },
84
- { sourceId: 'd', targetId: 'a' },
85
- ];
86
- const q = modularityScore(memberships, edges);
87
- expect(q).toBeLessThan(0.3);
88
- });
89
- it('handles single-community graph', () => {
90
- const memberships = new Map([['a', 0], ['b', 0], ['c', 0]]);
91
- const edges = [
92
- { sourceId: 'a', targetId: 'b' },
93
- { sourceId: 'b', targetId: 'c' },
94
- ];
95
- const q = modularityScore(memberships, edges);
96
- expect(typeof q).toBe('number');
97
- });
98
- });
99
- //# sourceMappingURL=cluster-quality.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cluster-quality.test.js","sourceRoot":"","sources":["../../../../src/__tests__/analysis/cluster-quality.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=corpus-health.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"corpus-health.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/analysis/corpus-health.test.ts"],"names":[],"mappings":""}
@@ -1,29 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { checkCorpusHealth } from '../../analysis/corpus-health.js';
3
- describe('checkCorpusHealth', () => {
4
- it('passes for healthy corpus', () => {
5
- const r = checkCorpusHealth({ wordCount: 100_000, fileCount: 50 });
6
- expect(r.healthy).toBe(true);
7
- expect(r.warnings).toHaveLength(0);
8
- });
9
- it('warns when corpus too small', () => {
10
- const r = checkCorpusHealth({ wordCount: 10_000, fileCount: 10 });
11
- expect(r.healthy).toBe(false);
12
- expect(r.warnings.some(w => /small/i.test(w))).toBe(true);
13
- });
14
- it('warns when corpus too large', () => {
15
- const r = checkCorpusHealth({ wordCount: 600_000, fileCount: 100 });
16
- expect(r.healthy).toBe(false);
17
- expect(r.warnings.some(w => /large/i.test(w))).toBe(true);
18
- });
19
- it('warns when file count too high', () => {
20
- const r = checkCorpusHealth({ wordCount: 200_000, fileCount: 250 });
21
- expect(r.healthy).toBe(false);
22
- expect(r.warnings.some(w => /file/i.test(w))).toBe(true);
23
- });
24
- it('collects multiple warnings', () => {
25
- const r = checkCorpusHealth({ wordCount: 600_000, fileCount: 300 });
26
- expect(r.warnings.length).toBeGreaterThanOrEqual(2);
27
- });
28
- });
29
- //# sourceMappingURL=corpus-health.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"corpus-health.test.js","sourceRoot":"","sources":["../../../../src/__tests__/analysis/corpus-health.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAA2B,MAAM,iCAAiC,CAAC;AAE7F,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=dependency-health.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency-health.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/analysis/dependency-health.test.ts"],"names":[],"mappings":""}
@@ -1,96 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { dependencyHealth, } from '../../analysis/dependency-health.js';
3
- describe('dependencyHealth', () => {
4
- it('returns score 1 for a perfectly healthy small graph', () => {
5
- const input = {
6
- nodes: ['a', 'b', 'c'],
7
- edges: [
8
- { sourceId: 'a', targetId: 'b' },
9
- { sourceId: 'b', targetId: 'c' },
10
- ],
11
- cycleCount: 0,
12
- deadNodeCount: 0,
13
- };
14
- const result = dependencyHealth(input);
15
- expect(result.score).toBeGreaterThan(0.8);
16
- });
17
- it('penalizes cycles', () => {
18
- const baseline = {
19
- nodes: ['a', 'b', 'c'],
20
- edges: [
21
- { sourceId: 'a', targetId: 'b' },
22
- { sourceId: 'b', targetId: 'c' },
23
- ],
24
- cycleCount: 0,
25
- deadNodeCount: 0,
26
- };
27
- const withCycle = {
28
- ...baseline,
29
- edges: [
30
- ...baseline.edges,
31
- { sourceId: 'c', targetId: 'a' },
32
- ],
33
- cycleCount: 1,
34
- };
35
- expect(dependencyHealth(withCycle).score).toBeLessThan(dependencyHealth(baseline).score);
36
- });
37
- it('penalizes dead code', () => {
38
- const baseline = {
39
- nodes: ['a', 'b', 'c'],
40
- edges: [{ sourceId: 'a', targetId: 'b' }],
41
- cycleCount: 0,
42
- deadNodeCount: 0,
43
- };
44
- const withDead = { ...baseline, deadNodeCount: 2 };
45
- expect(dependencyHealth(withDead).score).toBeLessThan(dependencyHealth(baseline).score);
46
- });
47
- it('penalizes high fan-in concentration (god nodes)', () => {
48
- // One node targeted by all others → god node
49
- const nodes = ['a', 'b', 'c', 'd', 'e', 'hub'];
50
- const edges = nodes.slice(0, 5).map(n => ({ sourceId: n, targetId: 'hub' }));
51
- const input = {
52
- nodes,
53
- edges,
54
- cycleCount: 0,
55
- deadNodeCount: 0,
56
- };
57
- const result = dependencyHealth(input);
58
- expect(result.score).toBeLessThan(1);
59
- expect(result.details.godNodeConcentration).toBeGreaterThan(0);
60
- });
61
- it('returns score in [0, 1] range', () => {
62
- const input = {
63
- nodes: ['a', 'b'],
64
- edges: [{ sourceId: 'a', targetId: 'b' }, { sourceId: 'b', targetId: 'a' }],
65
- cycleCount: 1,
66
- deadNodeCount: 1,
67
- };
68
- const result = dependencyHealth(input);
69
- expect(result.score).toBeGreaterThanOrEqual(0);
70
- expect(result.score).toBeLessThanOrEqual(1);
71
- });
72
- it('exposes details breakdown', () => {
73
- const input = {
74
- nodes: ['a', 'b', 'c'],
75
- edges: [{ sourceId: 'a', targetId: 'b' }],
76
- cycleCount: 0,
77
- deadNodeCount: 1,
78
- };
79
- const { details } = dependencyHealth(input);
80
- expect(typeof details.cyclePenalty).toBe('number');
81
- expect(typeof details.deadCodeRatio).toBe('number');
82
- expect(typeof details.fanSkew).toBe('number');
83
- expect(typeof details.godNodeConcentration).toBe('number');
84
- });
85
- it('handles empty graph without throwing', () => {
86
- const input = {
87
- nodes: [],
88
- edges: [],
89
- cycleCount: 0,
90
- deadNodeCount: 0,
91
- };
92
- expect(() => dependencyHealth(input)).not.toThrow();
93
- expect(dependencyHealth(input).score).toBe(1);
94
- });
95
- });
96
- //# sourceMappingURL=dependency-health.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency-health.test.js","sourceRoot":"","sources":["../../../../src/__tests__/analysis/dependency-health.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=file-classifier.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-classifier.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/analysis/file-classifier.test.ts"],"names":[],"mappings":""}
@@ -1,49 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { classifyFile, classifyContent } from '../../analysis/file-classifier.js';
3
- describe('classifyFile', () => {
4
- it('classifies TypeScript as CODE', () => {
5
- expect(classifyFile('src/app.ts')).toBe('CODE');
6
- });
7
- it('classifies Python as CODE', () => {
8
- expect(classifyFile('main.py')).toBe('CODE');
9
- });
10
- it('classifies markdown as DOCUMENT', () => {
11
- expect(classifyFile('README.md')).toBe('DOCUMENT');
12
- });
13
- it('classifies PDF as DOCUMENT', () => {
14
- expect(classifyFile('report.pdf')).toBe('DOCUMENT');
15
- });
16
- it('classifies PNG as IMAGE', () => {
17
- expect(classifyFile('logo.png')).toBe('IMAGE');
18
- });
19
- it('classifies mp4 as VIDEO', () => {
20
- expect(classifyFile('demo.mp4')).toBe('VIDEO');
21
- });
22
- it('classifies arxiv URL as PAPER', () => {
23
- expect(classifyFile('https://arxiv.org/abs/2401.00001')).toBe('PAPER');
24
- });
25
- it('returns CODE for unknown extension', () => {
26
- expect(classifyFile('Makefile')).toBe('CODE');
27
- });
28
- it('detects paper signals in filename', () => {
29
- expect(classifyFile('attention_is_all_you_need.pdf')).toBe('PAPER');
30
- });
31
- });
32
- describe('paper detection signals', () => {
33
- it('detects LaTeX cite command', () => {
34
- expect(classifyContent('We show \\cite{smith2020} that...')).toBe('PAPER');
35
- });
36
- it('detects numbered citations', () => {
37
- expect(classifyContent('The results [1][2][3] confirm...')).toBe('PAPER');
38
- });
39
- it('detects DOI pattern', () => {
40
- expect(classifyContent('doi:10.1145/3491102.3501993')).toBe('PAPER');
41
- });
42
- it('detects abstract keyword', () => {
43
- expect(classifyContent('Abstract\nIn this paper we propose...')).toBe('PAPER');
44
- });
45
- it('does not classify random text as PAPER', () => {
46
- expect(classifyContent('Hello world this is a readme.')).not.toBe('PAPER');
47
- });
48
- });
49
- //# sourceMappingURL=file-classifier.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-classifier.test.js","sourceRoot":"","sources":["../../../../src/__tests__/analysis/file-classifier.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=node-similarity.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-similarity.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/analysis/node-similarity.test.ts"],"names":[],"mappings":""}
@@ -1,66 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { jaccardSimilarity, findSimilarNodes, buildNeighborMap, } from '../../analysis/node-similarity.js';
3
- describe('jaccardSimilarity', () => {
4
- it('returns 1 for identical sets', () => {
5
- expect(jaccardSimilarity(new Set(['a', 'b', 'c']), new Set(['a', 'b', 'c']))).toBeCloseTo(1);
6
- });
7
- it('returns 0 for disjoint sets', () => {
8
- expect(jaccardSimilarity(new Set(['a', 'b']), new Set(['c', 'd']))).toBeCloseTo(0);
9
- });
10
- it('returns 1/3 for sets with one shared and two unique elements', () => {
11
- // intersection={b}, union={a,b,c} => 1/3
12
- expect(jaccardSimilarity(new Set(['a', 'b']), new Set(['b', 'c']))).toBeCloseTo(1 / 3);
13
- });
14
- it('returns 0 for two empty sets', () => {
15
- expect(jaccardSimilarity(new Set(), new Set())).toBeCloseTo(0);
16
- });
17
- it('returns 0 when one set is empty and other is not', () => {
18
- expect(jaccardSimilarity(new Set(['a']), new Set())).toBeCloseTo(0);
19
- });
20
- });
21
- describe('buildNeighborMap', () => {
22
- it('builds an undirected adjacency map', () => {
23
- const edges = [
24
- { sourceId: 'a', targetId: 'b' },
25
- { sourceId: 'b', targetId: 'c' },
26
- ];
27
- const map = buildNeighborMap(edges);
28
- expect(map.get('a')).toEqual(new Set(['b']));
29
- expect(map.get('b')).toEqual(new Set(['a', 'c']));
30
- expect(map.get('c')).toEqual(new Set(['b']));
31
- });
32
- });
33
- describe('findSimilarNodes', () => {
34
- const edges = [
35
- { sourceId: 'a', targetId: 'b' },
36
- { sourceId: 'a', targetId: 'c' },
37
- { sourceId: 'a', targetId: 'd' },
38
- { sourceId: 'x', targetId: 'b' },
39
- { sourceId: 'x', targetId: 'c' },
40
- { sourceId: 'x', targetId: 'd' },
41
- { sourceId: 'y', targetId: 'e' },
42
- ];
43
- it('returns nodes sorted by jaccard similarity descending', () => {
44
- const results = findSimilarNodes('a', edges, 5);
45
- // 'x' shares all 3 neighbors (b,c,d) — should be top result
46
- expect(results[0]?.nodeId).toBe('x');
47
- expect(results[0]?.score).toBeGreaterThan(0.5);
48
- });
49
- it('respects the k limit', () => {
50
- const results = findSimilarNodes('a', edges, 1);
51
- expect(results.length).toBe(1);
52
- });
53
- it('excludes the query node itself', () => {
54
- const results = findSimilarNodes('a', edges, 10);
55
- expect(results.every(r => r.nodeId !== 'a')).toBe(true);
56
- });
57
- it('returns empty array for unknown node', () => {
58
- const results = findSimilarNodes('unknown', edges, 5);
59
- expect(results).toHaveLength(0);
60
- });
61
- it('returns only nodes with score > 0', () => {
62
- const results = findSimilarNodes('a', edges, 10);
63
- expect(results.every(r => r.score > 0)).toBe(true);
64
- });
65
- });
66
- //# sourceMappingURL=node-similarity.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-similarity.test.js","sourceRoot":"","sources":["../../../../src/__tests__/analysis/node-similarity.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=augment-cache.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"augment-cache.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/cache/augment-cache.test.ts"],"names":[],"mappings":""}
@@ -1,47 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import { createAugmentCache } from '../../cache/augment-cache.js';
3
- describe('AugmentCache', () => {
4
- let cache;
5
- beforeEach(() => {
6
- cache = createAugmentCache({ maxSize: 3, ttlMs: 60_000 });
7
- });
8
- it('stores and retrieves a value by key', () => {
9
- cache.set('k1', 'result1');
10
- expect(cache.get('k1')).toBe('result1');
11
- });
12
- it('returns undefined for a missing key', () => {
13
- expect(cache.get('missing')).toBeUndefined();
14
- });
15
- it('evicts the oldest entry when maxSize is exceeded', () => {
16
- cache.set('k1', 'v1');
17
- cache.set('k2', 'v2');
18
- cache.set('k3', 'v3');
19
- cache.set('k4', 'v4');
20
- expect(cache.get('k1')).toBeUndefined();
21
- expect(cache.get('k4')).toBe('v4');
22
- });
23
- it('expires entries after TTL', async () => {
24
- const shortCache = createAugmentCache({ maxSize: 10, ttlMs: 10 });
25
- shortCache.set('k1', 'v1');
26
- await new Promise(r => setTimeout(r, 20));
27
- expect(shortCache.get('k1')).toBeUndefined();
28
- });
29
- it('reports size correctly', () => {
30
- cache.set('k1', 'v1');
31
- cache.set('k2', 'v2');
32
- expect(cache.size()).toBe(2);
33
- });
34
- it('clears all entries', () => {
35
- cache.set('k1', 'v1');
36
- cache.set('k2', 'v2');
37
- cache.clear();
38
- expect(cache.size()).toBe(0);
39
- });
40
- it('provides a makeKey helper that encodes all relevant params', () => {
41
- const { makeKey } = cache;
42
- const k = makeKey('query', '/repo', 10, 'markdown');
43
- expect(k).toContain('query');
44
- expect(k).toContain('/repo');
45
- });
46
- });
47
- //# sourceMappingURL=augment-cache.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"augment-cache.test.js","sourceRoot":"","sources":["../../../../src/__tests__/cache/augment-cache.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=check-update.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-update.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/cli/check-update.test.ts"],"names":[],"mappings":""}