@monoes/monograph 1.5.6 → 1.5.8

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 (708) hide show
  1. package/README.md +31 -15
  2. package/dist/src/analysis/changed-files.d.ts +3 -0
  3. package/dist/src/analysis/changed-files.d.ts.map +1 -1
  4. package/dist/src/analysis/changed-files.js +11 -9
  5. package/dist/src/analysis/changed-files.js.map +1 -1
  6. package/dist/src/analysis/changed-workspaces.d.ts.map +1 -1
  7. package/dist/src/analysis/changed-workspaces.js +2 -9
  8. package/dist/src/analysis/changed-workspaces.js.map +1 -1
  9. package/dist/src/analysis/git-changed-files.d.ts +3 -0
  10. package/dist/src/analysis/git-changed-files.d.ts.map +1 -1
  11. package/dist/src/analysis/git-changed-files.js +17 -12
  12. package/dist/src/analysis/git-changed-files.js.map +1 -1
  13. package/dist/src/analysis/git-ref.d.ts +33 -0
  14. package/dist/src/analysis/git-ref.d.ts.map +1 -0
  15. package/dist/src/analysis/git-ref.js +54 -0
  16. package/dist/src/analysis/git-ref.js.map +1 -0
  17. package/dist/src/analyze/boundary-analysis.d.ts.map +1 -1
  18. package/dist/src/analyze/boundary-analysis.js +42 -42
  19. package/dist/src/analyze/boundary-analysis.js.map +1 -1
  20. package/dist/src/index.d.ts +1 -0
  21. package/dist/src/index.d.ts.map +1 -1
  22. package/dist/src/index.js +1 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/lsp/server.d.ts +1 -1
  25. package/dist/src/lsp/server.d.ts.map +1 -1
  26. package/dist/src/lsp/server.js +48 -13
  27. package/dist/src/lsp/server.js.map +1 -1
  28. package/dist/src/mcp-tools/api-impact.d.ts.map +1 -1
  29. package/dist/src/mcp-tools/api-impact.js +1 -16
  30. package/dist/src/mcp-tools/api-impact.js.map +1 -1
  31. package/dist/src/mcp-tools/context.d.ts.map +1 -1
  32. package/dist/src/mcp-tools/context.js +12 -23
  33. package/dist/src/mcp-tools/context.js.map +1 -1
  34. package/dist/src/mcp-tools/explain.d.ts.map +1 -1
  35. package/dist/src/mcp-tools/explain.js +15 -20
  36. package/dist/src/mcp-tools/explain.js.map +1 -1
  37. package/dist/src/mcp-tools/graph-query.d.ts.map +1 -1
  38. package/dist/src/mcp-tools/graph-query.js +10 -19
  39. package/dist/src/mcp-tools/graph-query.js.map +1 -1
  40. package/dist/src/mcp-tools/impact.d.ts.map +1 -1
  41. package/dist/src/mcp-tools/impact.js +38 -41
  42. package/dist/src/mcp-tools/impact.js.map +1 -1
  43. package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
  44. package/dist/src/mcp-tools/neighbors.js +4 -22
  45. package/dist/src/mcp-tools/neighbors.js.map +1 -1
  46. package/dist/src/mcp-tools/query.d.ts.map +1 -1
  47. package/dist/src/mcp-tools/query.js +14 -9
  48. package/dist/src/mcp-tools/query.js.map +1 -1
  49. package/dist/src/mcp-tools/rename.d.ts.map +1 -1
  50. package/dist/src/mcp-tools/rename.js +3 -20
  51. package/dist/src/mcp-tools/rename.js.map +1 -1
  52. package/dist/src/parsers/c.d.ts.map +1 -1
  53. package/dist/src/parsers/c.js +12 -0
  54. package/dist/src/parsers/c.js.map +1 -1
  55. package/dist/src/parsers/extractor.d.ts.map +1 -1
  56. package/dist/src/parsers/extractor.js +2 -1
  57. package/dist/src/parsers/extractor.js.map +1 -1
  58. package/dist/src/parsers/go.d.ts.map +1 -1
  59. package/dist/src/parsers/go.js +19 -1
  60. package/dist/src/parsers/go.js.map +1 -1
  61. package/dist/src/parsers/language-config.d.ts +4 -0
  62. package/dist/src/parsers/language-config.d.ts.map +1 -1
  63. package/dist/src/parsers/language-parsers.d.ts.map +1 -1
  64. package/dist/src/parsers/language-parsers.js +3 -1
  65. package/dist/src/parsers/language-parsers.js.map +1 -1
  66. package/dist/src/parsers/loader.d.ts +1 -0
  67. package/dist/src/parsers/loader.d.ts.map +1 -1
  68. package/dist/src/parsers/loader.js +161 -20
  69. package/dist/src/parsers/loader.js.map +1 -1
  70. package/dist/src/parsers/python.d.ts.map +1 -1
  71. package/dist/src/parsers/python.js +6 -0
  72. package/dist/src/parsers/python.js.map +1 -1
  73. package/dist/src/parsers/rust.d.ts.map +1 -1
  74. package/dist/src/parsers/rust.js +10 -0
  75. package/dist/src/parsers/rust.js.map +1 -1
  76. package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
  77. package/dist/src/pipeline/orchestrator.js +17 -0
  78. package/dist/src/pipeline/orchestrator.js.map +1 -1
  79. package/dist/src/pipeline/phases/pdf-parse.d.ts.map +1 -1
  80. package/dist/src/pipeline/phases/pdf-parse.js +10 -11
  81. package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
  82. package/dist/src/storage/edge-store.d.ts +1 -0
  83. package/dist/src/storage/edge-store.d.ts.map +1 -1
  84. package/dist/src/storage/edge-store.js +5 -8
  85. package/dist/src/storage/edge-store.js.map +1 -1
  86. package/dist/src/storage/node-store.d.ts +1 -0
  87. package/dist/src/storage/node-store.d.ts.map +1 -1
  88. package/dist/src/storage/node-store.js +11 -12
  89. package/dist/src/storage/node-store.js.map +1 -1
  90. package/dist/src/storage/schema.d.ts.map +1 -1
  91. package/dist/src/storage/schema.js +6 -0
  92. package/dist/src/storage/schema.js.map +1 -1
  93. package/dist/src/storage/utils.d.ts +11 -0
  94. package/dist/src/storage/utils.d.ts.map +1 -0
  95. package/dist/src/storage/utils.js +24 -0
  96. package/dist/src/storage/utils.js.map +1 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +12 -9
  99. package/.monomind/data/ranked-context.json +0 -5
  100. package/.monomind/loops/mastermind-review-1782162423447.json +0 -16
  101. package/.monomind/sessions/session-1777578175215.json +0 -15
  102. package/.monomind/sessions/session-1777823684507.json +0 -15
  103. package/.monomind/sessions/session-1777928944749.json +0 -15
  104. package/.monomind/sessions/session-1778052902210.json +0 -15
  105. package/.monomind/sessions/session-1778056744636.json +0 -15
  106. package/.monomind/sessions/session-1778061077599.json +0 -15
  107. package/.monomind/sessions/session-1778102154764.json +0 -15
  108. package/__tests__/analysis/shape-extractor.test.ts +0 -124
  109. package/__tests__/analysis/surprise-scorer.test.ts +0 -154
  110. package/__tests__/cache/extraction-cache.test.ts +0 -45
  111. package/__tests__/cli/ai-context.test.ts +0 -175
  112. package/__tests__/cli/augment.test.ts +0 -128
  113. package/__tests__/cli/doctor.test.ts +0 -125
  114. package/__tests__/cli/eval-server.test.ts +0 -89
  115. package/__tests__/cli/setup.test.ts +0 -178
  116. package/__tests__/cli/skill-gen.test.ts +0 -280
  117. package/__tests__/export/formats.test.ts +0 -82
  118. package/__tests__/fixtures/sample.c +0 -25
  119. package/__tests__/fixtures/sample.cpp +0 -32
  120. package/__tests__/fixtures/sample.dart +0 -34
  121. package/__tests__/fixtures/sample.kt +0 -30
  122. package/__tests__/fixtures/sample.php +0 -30
  123. package/__tests__/fixtures/sample.py +0 -11
  124. package/__tests__/fixtures/sample.rb +0 -26
  125. package/__tests__/fixtures/sample.swift +0 -42
  126. package/__tests__/fixtures/sample.ts +0 -17
  127. package/__tests__/fixtures/sample.vue +0 -40
  128. package/__tests__/groups/group-search.test.ts +0 -221
  129. package/__tests__/groups/group-sync.test.ts +0 -336
  130. package/__tests__/integration/build-atomicity.test.ts +0 -61
  131. package/__tests__/integration/call-attribution.test.ts +0 -116
  132. package/__tests__/integration/full-pipeline.test.ts +0 -64
  133. package/__tests__/integration/graph-report-freshness.test.ts +0 -53
  134. package/__tests__/integration/incremental-build.test.ts +0 -103
  135. package/__tests__/mcp-resources/resources.test.ts +0 -256
  136. package/__tests__/mcp-tools/api-impact.test.ts +0 -188
  137. package/__tests__/mcp-tools/context.test.ts +0 -130
  138. package/__tests__/mcp-tools/cypher.test.ts +0 -258
  139. package/__tests__/mcp-tools/detect-changes.test.ts +0 -114
  140. package/__tests__/mcp-tools/impact.test.ts +0 -133
  141. package/__tests__/mcp-tools/rename.test.ts +0 -117
  142. package/__tests__/mcp-tools/route-map.test.ts +0 -237
  143. package/__tests__/mcp-tools/shape-check.test.ts +0 -202
  144. package/__tests__/mcp-tools/tool-map.test.ts +0 -135
  145. package/__tests__/parsers/c.test.ts +0 -28
  146. package/__tests__/parsers/cpp.test.ts +0 -28
  147. package/__tests__/parsers/csharp.test.ts +0 -62
  148. package/__tests__/parsers/dart.test.ts +0 -28
  149. package/__tests__/parsers/kotlin.test.ts +0 -28
  150. package/__tests__/parsers/loader.test.ts +0 -14
  151. package/__tests__/parsers/php.test.ts +0 -28
  152. package/__tests__/parsers/python.test.ts +0 -32
  153. package/__tests__/parsers/ruby.test.ts +0 -33
  154. package/__tests__/parsers/swift.test.ts +0 -28
  155. package/__tests__/parsers/typescript.test.ts +0 -45
  156. package/__tests__/parsers/vue.test.ts +0 -28
  157. package/__tests__/pipeline/analysis.test.ts +0 -58
  158. package/__tests__/pipeline/phases/corpus-check.test.ts +0 -26
  159. package/__tests__/pipeline/phases/evidence.test.ts +0 -41
  160. package/__tests__/pipeline/phases/field-access.test.ts +0 -22
  161. package/__tests__/pipeline/phases/leiden.test.ts +0 -72
  162. package/__tests__/pipeline/phases/markdown.test.ts +0 -84
  163. package/__tests__/pipeline/phases/middleware-extractor.test.ts +0 -131
  164. package/__tests__/pipeline/phases/orm.test.ts +0 -379
  165. package/__tests__/pipeline/phases/processes.test.ts +0 -191
  166. package/__tests__/pipeline/phases/routes.test.ts +0 -195
  167. package/__tests__/pipeline/phases/scope-resolution.test.ts +0 -133
  168. package/__tests__/pipeline/phases/tools.test.ts +0 -161
  169. package/__tests__/pipeline/phases/variables.test.ts +0 -30
  170. package/__tests__/pipeline/phases/wildcard-synthesis.test.ts +0 -207
  171. package/__tests__/pipeline/phases.test.ts +0 -41
  172. package/__tests__/pipeline/runner.test.ts +0 -28
  173. package/__tests__/registry/repo-registry.test.ts +0 -127
  174. package/__tests__/reporting/graph-report.suggest.test.ts +0 -36
  175. package/__tests__/reporting/graph-report.test.ts +0 -165
  176. package/__tests__/search/ast-chunker.test.ts +0 -63
  177. package/__tests__/search/rrf.test.ts +0 -95
  178. package/__tests__/security/safe-fetch.test.ts +0 -41
  179. package/__tests__/security/sensitive-files.test.ts +0 -32
  180. package/__tests__/setup.ts +0 -1
  181. package/__tests__/skills/platform-skills.test.ts +0 -63
  182. package/__tests__/staleness/git-staleness.test.ts +0 -107
  183. package/__tests__/storage/db.test.ts +0 -37
  184. package/__tests__/storage/evidence-roundtrip.test.ts +0 -89
  185. package/__tests__/storage/stores.test.ts +0 -165
  186. package/__tests__/types.test.ts +0 -13
  187. package/__tests__/validation/extraction-validator.test.ts +0 -48
  188. package/__tests__/watch/watcher.test.ts +0 -31
  189. package/__tests__/web/analyze-api.test.ts +0 -66
  190. package/__tests__/web/api.test.ts +0 -210
  191. package/__tests__/web/mcp-http.test.ts +0 -67
  192. package/__tests__/web/react-ui.test.ts +0 -43
  193. package/__tests__/wiki/gist-publisher.test.ts +0 -66
  194. package/__tests__/wiki/providers.test.ts +0 -69
  195. package/__tests__/wiki/wiki-generator.test.ts +0 -260
  196. package/dist/src/fix/deps.d.ts +0 -14
  197. package/dist/src/fix/deps.d.ts.map +0 -1
  198. package/dist/src/fix/deps.js +0 -47
  199. package/dist/src/fix/deps.js.map +0 -1
  200. package/dist/src/fix/enum-members.d.ts +0 -20
  201. package/dist/src/fix/enum-members.d.ts.map +0 -1
  202. package/dist/src/fix/enum-members.js +0 -95
  203. package/dist/src/fix/enum-members.js.map +0 -1
  204. package/dist/src/fix/export-surgery.d.ts +0 -14
  205. package/dist/src/fix/export-surgery.d.ts.map +0 -1
  206. package/dist/src/fix/export-surgery.js +0 -140
  207. package/dist/src/fix/export-surgery.js.map +0 -1
  208. package/dist/src/fix/exports.d.ts +0 -16
  209. package/dist/src/fix/exports.d.ts.map +0 -1
  210. package/dist/src/fix/exports.js +0 -65
  211. package/dist/src/fix/exports.js.map +0 -1
  212. package/dist/src/fix/orchestrator.d.ts +0 -28
  213. package/dist/src/fix/orchestrator.d.ts.map +0 -1
  214. package/dist/src/fix/orchestrator.js +0 -39
  215. package/dist/src/fix/orchestrator.js.map +0 -1
  216. package/src/__tests__/analysis/benchmark.test.ts +0 -59
  217. package/src/__tests__/analysis/cluster-quality.test.ts +0 -106
  218. package/src/__tests__/analysis/corpus-health.test.ts +0 -33
  219. package/src/__tests__/analysis/dependency-health.test.ts +0 -105
  220. package/src/__tests__/analysis/file-classifier.test.ts +0 -50
  221. package/src/__tests__/analysis/node-similarity.test.ts +0 -81
  222. package/src/__tests__/cache/augment-cache.test.ts +0 -55
  223. package/src/__tests__/cli/check-update.test.ts +0 -42
  224. package/src/__tests__/cli/hooks-install.test.ts +0 -56
  225. package/src/__tests__/cli/hooks-marker.test.ts +0 -138
  226. package/src/__tests__/cli/hooks-status.test.ts +0 -42
  227. package/src/__tests__/export/adjacency-matrix.test.ts +0 -116
  228. package/src/__tests__/export/csv.test.ts +0 -39
  229. package/src/__tests__/export/dot.test.ts +0 -86
  230. package/src/__tests__/export/gexf.test.ts +0 -78
  231. package/src/__tests__/export/graphml.test.ts +0 -57
  232. package/src/__tests__/export/mermaid.test.ts +0 -89
  233. package/src/__tests__/graph/betweenness.test.ts +0 -89
  234. package/src/__tests__/graph/cycles.test.ts +0 -131
  235. package/src/__tests__/graph/dead-code.test.ts +0 -174
  236. package/src/__tests__/graph/dfs.test.ts +0 -62
  237. package/src/__tests__/graph/diff-summary.test.ts +0 -83
  238. package/src/__tests__/graph/edge-filter.test.ts +0 -129
  239. package/src/__tests__/graph/import-chain.test.ts +0 -111
  240. package/src/__tests__/graph/merge.test.ts +0 -151
  241. package/src/__tests__/graph/node-search.test.ts +0 -167
  242. package/src/__tests__/graph/normalize-id.test.ts +0 -102
  243. package/src/__tests__/graph/pagerank.test.ts +0 -96
  244. package/src/__tests__/graph/prune.test.ts +0 -110
  245. package/src/__tests__/graph/regex-search.test.ts +0 -166
  246. package/src/__tests__/graph/ripple-impact.test.ts +0 -73
  247. package/src/__tests__/graph/scc.test.ts +0 -85
  248. package/src/__tests__/graph/statistics.test.ts +0 -219
  249. package/src/__tests__/graph/subgraph.test.ts +0 -127
  250. package/src/__tests__/graph/topo-sort.test.ts +0 -110
  251. package/src/__tests__/graph/wcc.test.ts +0 -101
  252. package/src/__tests__/groups/grpc-extractor.test.ts +0 -47
  253. package/src/__tests__/groups/service-boundary.test.ts +0 -86
  254. package/src/__tests__/groups/topic-extractor.test.ts +0 -43
  255. package/src/__tests__/ingest/git-clone.test.ts +0 -128
  256. package/src/__tests__/ingest/query-memory.test.ts +0 -123
  257. package/src/__tests__/ingest/transcribe.test.ts +0 -58
  258. package/src/__tests__/ingest/url-ingest.test.ts +0 -48
  259. package/src/__tests__/mcp-resources/repo-context-resource.test.ts +0 -37
  260. package/src/__tests__/mcp-resources/repos-resource.test.ts +0 -71
  261. package/src/__tests__/mcp-resources/wiki-resource.test.ts +0 -52
  262. package/src/__tests__/mcp-tools/explain.test.ts +0 -46
  263. package/src/__tests__/mcp-tools/graph-query.test.ts +0 -45
  264. package/src/__tests__/mcp-tools/group-sync.test.ts +0 -8
  265. package/src/__tests__/mcp-tools/impact-filtering.test.ts +0 -48
  266. package/src/__tests__/mcp-tools/impact.risk.test.ts +0 -24
  267. package/src/__tests__/mcp-tools/list-repos.test.ts +0 -24
  268. package/src/__tests__/mcp-tools/neighbors.test.ts +0 -48
  269. package/src/__tests__/mcp-tools/query.test.ts +0 -42
  270. package/src/__tests__/parsers/language-parsers.test.ts +0 -52
  271. package/src/__tests__/parsers/named-bindings.test.ts +0 -73
  272. package/src/__tests__/pipeline/cluster-only.test.ts +0 -33
  273. package/src/__tests__/pipeline/phases/bridge-adapters/electron-ipc.test.ts +0 -87
  274. package/src/__tests__/pipeline/phases/bridge-adapters/tauri.test.ts +0 -116
  275. package/src/__tests__/pipeline/phases/bridge-adapters/wails.test.ts +0 -81
  276. package/src/__tests__/pipeline/phases/bridge-resolver.test.ts +0 -110
  277. package/src/__tests__/pipeline/phases/communities.cohesion.test.ts +0 -43
  278. package/src/__tests__/pipeline/phases/community-split.test.ts +0 -30
  279. package/src/__tests__/pipeline/phases/framework-detect.test.ts +0 -65
  280. package/src/__tests__/pipeline/phases/import-resolver.test.ts +0 -64
  281. package/src/__tests__/pipeline/phases/parse-arrow.test.ts +0 -33
  282. package/src/__tests__/pipeline/phases/parse-csharp.test.ts +0 -33
  283. package/src/__tests__/pipeline/phases/scan.monographignore.test.ts +0 -53
  284. package/src/__tests__/pipeline/phases/scan.negation.test.ts +0 -40
  285. package/src/__tests__/pipeline/phases/scope-resolution.go.test.ts +0 -34
  286. package/src/__tests__/pipeline/phases/scope-resolution.java.test.ts +0 -30
  287. package/src/__tests__/pipeline/phases/scope-resolution.rust.test.ts +0 -31
  288. package/src/__tests__/pipeline/phases/suggest-questions.test.ts +0 -46
  289. package/src/__tests__/pipeline/phases/surprises-scoring.test.ts +0 -46
  290. package/src/__tests__/pipeline/phases/variables-phase.test.ts +0 -78
  291. package/src/__tests__/pipeline/phases/wildcard-phase.test.ts +0 -99
  292. package/src/__tests__/pipeline/runner.parallel.test.ts +0 -78
  293. package/src/__tests__/reporting/graph-report-confidence.test.ts +0 -43
  294. package/src/__tests__/reporting/graph-report-gaps.test.ts +0 -41
  295. package/src/__tests__/scope-resolution/call-sites.test.ts +0 -89
  296. package/src/__tests__/scope-resolution/evidence-weights.test.ts +0 -49
  297. package/src/__tests__/search/diacritic.test.ts +0 -23
  298. package/src/__tests__/security/safe-fetch.test.ts +0 -125
  299. package/src/__tests__/skills/platform-skills.extra.test.ts +0 -36
  300. package/src/__tests__/web/api.clusters.test.ts +0 -65
  301. package/src/__tests__/web/api.file.test.ts +0 -44
  302. package/src/__tests__/web/api.grep.test.ts +0 -47
  303. package/src/__tests__/web/api.info.test.ts +0 -18
  304. package/src/__tests__/web/api.jobs.test.ts +0 -47
  305. package/src/__tests__/web/api.progress.test.ts +0 -25
  306. package/src/__tests__/web/api.stream.test.ts +0 -35
  307. package/src/__tests__/wiki/providers-reasoning.test.ts +0 -46
  308. package/src/__tests__/wiki/wiki-review-mode.test.ts +0 -22
  309. package/src/analysis/benchmark.ts +0 -132
  310. package/src/analysis/changed-files.ts +0 -73
  311. package/src/analysis/changed-workspaces.ts +0 -94
  312. package/src/analysis/churn-cache.ts +0 -179
  313. package/src/analysis/churn-trend.ts +0 -57
  314. package/src/analysis/churn.ts +0 -263
  315. package/src/analysis/cluster-quality.ts +0 -142
  316. package/src/analysis/combined.ts +0 -41
  317. package/src/analysis/corpus-health.ts +0 -41
  318. package/src/analysis/coverage-gaps.ts +0 -246
  319. package/src/analysis/dep-classification.ts +0 -167
  320. package/src/analysis/dependency-health.ts +0 -146
  321. package/src/analysis/duplicate-exports.ts +0 -110
  322. package/src/analysis/fallow-suppression.ts +0 -98
  323. package/src/analysis/feature-flags-config.ts +0 -47
  324. package/src/analysis/feature-flags.ts +0 -223
  325. package/src/analysis/file-classifier.ts +0 -87
  326. package/src/analysis/git-changed-files.ts +0 -62
  327. package/src/analysis/health-baseline.ts +0 -80
  328. package/src/analysis/issue-filters.ts +0 -56
  329. package/src/analysis/list.ts +0 -74
  330. package/src/analysis/node-similarity.ts +0 -115
  331. package/src/analysis/private-type-leaks.ts +0 -119
  332. package/src/analysis/progress.ts +0 -43
  333. package/src/analysis/project-state.ts +0 -95
  334. package/src/analysis/regression-config.ts +0 -36
  335. package/src/analysis/rule-overrides.ts +0 -81
  336. package/src/analysis/scripts.ts +0 -95
  337. package/src/analysis/shape-extractor.ts +0 -202
  338. package/src/analysis/since-duration.ts +0 -42
  339. package/src/analysis/suppression-context.ts +0 -95
  340. package/src/analysis/suppressions.ts +0 -80
  341. package/src/analysis/surprise-scorer.ts +0 -74
  342. package/src/analysis/targets.ts +0 -237
  343. package/src/analysis/unused-class-members.ts +0 -79
  344. package/src/analysis/workspace-filter.ts +0 -89
  345. package/src/analyze/boundary-analysis.ts +0 -129
  346. package/src/analyze/predicates/file.ts +0 -86
  347. package/src/analyze/predicates/import.ts +0 -90
  348. package/src/analyze/predicates/lifecycle.ts +0 -55
  349. package/src/analyze/unused-deps.ts +0 -70
  350. package/src/analyze/unused-exports.ts +0 -145
  351. package/src/analyze/unused-files.ts +0 -46
  352. package/src/api/production-override.ts +0 -63
  353. package/src/api/programmatic.ts +0 -118
  354. package/src/audit.ts +0 -234
  355. package/src/cache/augment-cache.ts +0 -63
  356. package/src/cache/extraction-cache.ts +0 -141
  357. package/src/check/filtering.ts +0 -78
  358. package/src/check/index.ts +0 -99
  359. package/src/check/output.ts +0 -79
  360. package/src/check/rules.ts +0 -61
  361. package/src/ci-template.ts +0 -84
  362. package/src/claude-cli.ts +0 -59
  363. package/src/cli/ai-context.ts +0 -193
  364. package/src/cli/augment.ts +0 -114
  365. package/src/cli/check-update.ts +0 -40
  366. package/src/cli/doctor.ts +0 -182
  367. package/src/cli/eval-server.ts +0 -126
  368. package/src/cli/hooks-install.ts +0 -202
  369. package/src/cli/setup.ts +0 -197
  370. package/src/cli/skill-gen.ts +0 -347
  371. package/src/commands/flags.ts +0 -72
  372. package/src/config/boundary-config.ts +0 -183
  373. package/src/config/cli-schema.ts +0 -81
  374. package/src/config/config-parsing.ts +0 -102
  375. package/src/config/duplicates-config.ts +0 -62
  376. package/src/config/external-plugin.ts +0 -77
  377. package/src/config/health-config.ts +0 -42
  378. package/src/config/ignore-exports-used-in-file.ts +0 -46
  379. package/src/config/migration-types.ts +0 -73
  380. package/src/config/output-format.ts +0 -24
  381. package/src/config/plugins/builtin.ts +0 -411
  382. package/src/config/plugins/registry.ts +0 -77
  383. package/src/config/plugins/types.ts +0 -14
  384. package/src/config/resolution.ts +0 -102
  385. package/src/config/rules.ts +0 -70
  386. package/src/config/schema-gen.ts +0 -115
  387. package/src/config/types.ts +0 -149
  388. package/src/config/used-class-members.ts +0 -53
  389. package/src/config/validate.ts +0 -108
  390. package/src/config/workspace.ts +0 -137
  391. package/src/coverage/cloud-client.ts +0 -111
  392. package/src/coverage/upload-inventory.ts +0 -84
  393. package/src/coverage/upload-source-maps.ts +0 -97
  394. package/src/discover/entry-points.ts +0 -51
  395. package/src/discover/infrastructure-entries.ts +0 -175
  396. package/src/duplicates/detect/concatenation.ts +0 -37
  397. package/src/duplicates/detect/extraction.ts +0 -107
  398. package/src/duplicates/detect/filtering.ts +0 -112
  399. package/src/duplicates/detect/lcp.ts +0 -27
  400. package/src/duplicates/detect/ranking.ts +0 -16
  401. package/src/duplicates/detect/statistics.ts +0 -69
  402. package/src/duplicates/detect/suffix-array.ts +0 -88
  403. package/src/duplicates/families.ts +0 -95
  404. package/src/duplicates/normalize.ts +0 -58
  405. package/src/duplicates/shingle-filter.ts +0 -37
  406. package/src/duplicates/token-types.ts +0 -62
  407. package/src/duplicates/tokenize/index.ts +0 -104
  408. package/src/error/fallow-error.ts +0 -94
  409. package/src/error.ts +0 -47
  410. package/src/export/adjacency-matrix.ts +0 -127
  411. package/src/export/analysis-json.ts +0 -87
  412. package/src/export/badge.ts +0 -105
  413. package/src/export/canvas.ts +0 -42
  414. package/src/export/codeclimate.ts +0 -201
  415. package/src/export/compact-health.ts +0 -119
  416. package/src/export/compact.ts +0 -83
  417. package/src/export/csv.ts +0 -33
  418. package/src/export/cypher.ts +0 -33
  419. package/src/export/dot.ts +0 -52
  420. package/src/export/gexf.ts +0 -59
  421. package/src/export/graphml.ts +0 -50
  422. package/src/export/html.ts +0 -548
  423. package/src/export/index.ts +0 -9
  424. package/src/export/json.ts +0 -36
  425. package/src/export/markdown.ts +0 -290
  426. package/src/export/mermaid.ts +0 -100
  427. package/src/export/obsidian.ts +0 -44
  428. package/src/export/sarif.ts +0 -245
  429. package/src/export/svg.ts +0 -68
  430. package/src/fix/deps.ts +0 -70
  431. package/src/fix/enum-members.ts +0 -103
  432. package/src/fix/export-surgery.ts +0 -197
  433. package/src/fix/exports.ts +0 -93
  434. package/src/fix/orchestrator.ts +0 -67
  435. package/src/graph/analyzer.ts +0 -69
  436. package/src/graph/author-analytics.ts +0 -217
  437. package/src/graph/baseline.ts +0 -432
  438. package/src/graph/clone-families.ts +0 -132
  439. package/src/graph/codeowners-extended.ts +0 -114
  440. package/src/graph/codeowners-gitlab.ts +0 -150
  441. package/src/graph/codeowners.ts +0 -217
  442. package/src/graph/complexity.ts +0 -200
  443. package/src/graph/cross-reference-findings.ts +0 -85
  444. package/src/graph/cross-reference.ts +0 -139
  445. package/src/graph/cycle-detection.ts +0 -311
  446. package/src/graph/cycles.ts +0 -222
  447. package/src/graph/dead-code.ts +0 -128
  448. package/src/graph/dependency-closure.ts +0 -126
  449. package/src/graph/dfs.ts +0 -118
  450. package/src/graph/diff.ts +0 -92
  451. package/src/graph/duplication-stats.ts +0 -79
  452. package/src/graph/edge-filter.ts +0 -117
  453. package/src/graph/explain.ts +0 -133
  454. package/src/graph/external-style-usage.ts +0 -81
  455. package/src/graph/health-score.ts +0 -179
  456. package/src/graph/hotspots.ts +0 -219
  457. package/src/graph/import-chain.ts +0 -148
  458. package/src/graph/loader.ts +0 -44
  459. package/src/graph/maintainability.ts +0 -156
  460. package/src/graph/merge.ts +0 -174
  461. package/src/graph/mirrored-dirs.ts +0 -202
  462. package/src/graph/narrowing.ts +0 -92
  463. package/src/graph/node-search.ts +0 -201
  464. package/src/graph/node-types.ts +0 -67
  465. package/src/graph/normalize-id.ts +0 -138
  466. package/src/graph/pagerank.ts +0 -165
  467. package/src/graph/prune.ts +0 -95
  468. package/src/graph/re-exports/propagate.ts +0 -95
  469. package/src/graph/reachability.ts +0 -99
  470. package/src/graph/regex-search.ts +0 -232
  471. package/src/graph/regression.ts +0 -199
  472. package/src/graph/resolve/discover-types.ts +0 -45
  473. package/src/graph/resolve/dynamic-imports.ts +0 -102
  474. package/src/graph/resolve/fallbacks.ts +0 -79
  475. package/src/graph/resolve/index.ts +0 -68
  476. package/src/graph/resolve/path-info.ts +0 -41
  477. package/src/graph/resolve/re-exports.ts +0 -14
  478. package/src/graph/resolve/react-native.ts +0 -27
  479. package/src/graph/resolve/require-imports.ts +0 -18
  480. package/src/graph/resolve/specifier.ts +0 -120
  481. package/src/graph/resolve/static-imports.ts +0 -14
  482. package/src/graph/resolve/types.ts +0 -108
  483. package/src/graph/resolve/upgrades.ts +0 -32
  484. package/src/graph/ripple-impact.ts +0 -131
  485. package/src/graph/risk-profile.ts +0 -179
  486. package/src/graph/statistics.ts +0 -165
  487. package/src/graph/stats.ts +0 -157
  488. package/src/graph/subgraph.ts +0 -162
  489. package/src/graph/topo-sort.ts +0 -171
  490. package/src/graph/wcc.ts +0 -187
  491. package/src/groups/contract-bridge.ts +0 -103
  492. package/src/groups/contract-registry.ts +0 -263
  493. package/src/groups/group-config.ts +0 -108
  494. package/src/groups/group-search.ts +0 -139
  495. package/src/groups/group-sync.ts +0 -82
  496. package/src/groups/grpc-extractor.ts +0 -64
  497. package/src/groups/service-boundary.ts +0 -119
  498. package/src/groups/topic-extractor.ts +0 -90
  499. package/src/health/analysis-counts-snapshot.ts +0 -57
  500. package/src/health/analysis-counts.ts +0 -70
  501. package/src/health/complexity-findings.ts +0 -115
  502. package/src/health/distribution-thresholds.ts +0 -54
  503. package/src/health/grouping.ts +0 -138
  504. package/src/health/health-grouping.ts +0 -86
  505. package/src/health/health-report-types.ts +0 -165
  506. package/src/health/health-report.ts +0 -81
  507. package/src/health/health-score.ts +0 -65
  508. package/src/health/hotspot-utils.ts +0 -55
  509. package/src/health/hotspots.ts +0 -104
  510. package/src/health/large-functions.ts +0 -34
  511. package/src/health/ownership-metrics.ts +0 -61
  512. package/src/health/ownership-risk.ts +0 -98
  513. package/src/health/ownership.ts +0 -174
  514. package/src/health/quality-gate.ts +0 -57
  515. package/src/health/risk-profile.ts +0 -39
  516. package/src/health/runtime-coverage-report.ts +0 -101
  517. package/src/health/runtime-coverage.ts +0 -71
  518. package/src/health/scores.ts +0 -72
  519. package/src/health/scoring-types.ts +0 -48
  520. package/src/health/target-thresholds.ts +0 -92
  521. package/src/health/target-types.ts +0 -54
  522. package/src/health/targets.ts +0 -151
  523. package/src/health/timings.ts +0 -86
  524. package/src/health/trend-types.ts +0 -57
  525. package/src/health/trends.ts +0 -86
  526. package/src/health/vital-signs-compute.ts +0 -108
  527. package/src/health/vital-signs-snapshot.ts +0 -72
  528. package/src/health/vital-signs.ts +0 -101
  529. package/src/index.ts +0 -111
  530. package/src/ingest/git-clone.ts +0 -246
  531. package/src/ingest/query-memory.ts +0 -132
  532. package/src/ingest/transcribe.ts +0 -254
  533. package/src/ingest/url-ingest.ts +0 -87
  534. package/src/init/agent-hooks.ts +0 -86
  535. package/src/init/git-hooks.ts +0 -71
  536. package/src/init/project-detection.ts +0 -105
  537. package/src/license/manager.ts +0 -120
  538. package/src/lsp/code-actions.ts +0 -127
  539. package/src/lsp/code-lens.ts +0 -56
  540. package/src/lsp/diagnostics-ext.ts +0 -150
  541. package/src/lsp/diagnostics-push.ts +0 -103
  542. package/src/lsp/diagnostics.ts +0 -98
  543. package/src/lsp/hover.ts +0 -64
  544. package/src/lsp/server.ts +0 -254
  545. package/src/mcp/params.ts +0 -201
  546. package/src/mcp/resources.ts +0 -124
  547. package/src/mcp/tool-builders.ts +0 -203
  548. package/src/mcp-resources/communities-resource.ts +0 -72
  549. package/src/mcp-resources/graph-resource.ts +0 -14
  550. package/src/mcp-resources/index.ts +0 -9
  551. package/src/mcp-resources/named-cluster-resource.ts +0 -35
  552. package/src/mcp-resources/named-process-resource.ts +0 -26
  553. package/src/mcp-resources/processes-resource.ts +0 -67
  554. package/src/mcp-resources/repo-context-resource.ts +0 -36
  555. package/src/mcp-resources/repos-resource.ts +0 -21
  556. package/src/mcp-resources/schema-resource.ts +0 -46
  557. package/src/mcp-resources/wiki-resource.ts +0 -23
  558. package/src/mcp-tools/api-impact.ts +0 -181
  559. package/src/mcp-tools/context.ts +0 -111
  560. package/src/mcp-tools/cypher.ts +0 -29
  561. package/src/mcp-tools/detect-changes.ts +0 -116
  562. package/src/mcp-tools/explain.ts +0 -65
  563. package/src/mcp-tools/graph-query.ts +0 -128
  564. package/src/mcp-tools/group-list.ts +0 -88
  565. package/src/mcp-tools/group-query.ts +0 -26
  566. package/src/mcp-tools/group-sync.ts +0 -32
  567. package/src/mcp-tools/impact.ts +0 -202
  568. package/src/mcp-tools/index.ts +0 -21
  569. package/src/mcp-tools/list-repos.ts +0 -38
  570. package/src/mcp-tools/neighbors.ts +0 -80
  571. package/src/mcp-tools/query.ts +0 -86
  572. package/src/mcp-tools/rename.ts +0 -118
  573. package/src/mcp-tools/route-map.ts +0 -98
  574. package/src/mcp-tools/serve.ts +0 -41
  575. package/src/mcp-tools/shape-check.ts +0 -182
  576. package/src/mcp-tools/staleness.ts +0 -13
  577. package/src/mcp-tools/tool-map.ts +0 -66
  578. package/src/mcp-tools/wiki-build.ts +0 -37
  579. package/src/mcp-tools/wiki.ts +0 -28
  580. package/src/migrate/jscpd.ts +0 -78
  581. package/src/migrate/jsonc-gen.ts +0 -38
  582. package/src/migrate/knip.ts +0 -126
  583. package/src/migrate/toml-gen.ts +0 -48
  584. package/src/parsers/c.ts +0 -31
  585. package/src/parsers/cpp.ts +0 -29
  586. package/src/parsers/csharp.ts +0 -43
  587. package/src/parsers/dart.ts +0 -39
  588. package/src/parsers/extractor.ts +0 -202
  589. package/src/parsers/go.ts +0 -27
  590. package/src/parsers/java.ts +0 -27
  591. package/src/parsers/kotlin.ts +0 -36
  592. package/src/parsers/language-config.ts +0 -28
  593. package/src/parsers/language-parsers.ts +0 -120
  594. package/src/parsers/loader.ts +0 -149
  595. package/src/parsers/named-bindings.ts +0 -63
  596. package/src/parsers/php.ts +0 -37
  597. package/src/parsers/python.ts +0 -26
  598. package/src/parsers/ruby.ts +0 -39
  599. package/src/parsers/rust.ts +0 -25
  600. package/src/parsers/swift.ts +0 -28
  601. package/src/parsers/typescript.ts +0 -41
  602. package/src/parsers/vue.ts +0 -79
  603. package/src/pipeline/cluster-only.ts +0 -64
  604. package/src/pipeline/effort.ts +0 -50
  605. package/src/pipeline/orchestrator.ts +0 -384
  606. package/src/pipeline/phases/boundary.ts +0 -151
  607. package/src/pipeline/phases/bridge-adapters/electron-ipc.ts +0 -91
  608. package/src/pipeline/phases/bridge-adapters/registry.ts +0 -14
  609. package/src/pipeline/phases/bridge-adapters/tauri.ts +0 -103
  610. package/src/pipeline/phases/bridge-adapters/types.ts +0 -31
  611. package/src/pipeline/phases/bridge-adapters/wails.ts +0 -33
  612. package/src/pipeline/phases/bridge-resolver.ts +0 -77
  613. package/src/pipeline/phases/call-site-extractors.ts +0 -177
  614. package/src/pipeline/phases/communities.ts +0 -183
  615. package/src/pipeline/phases/contextual-proximity.ts +0 -88
  616. package/src/pipeline/phases/cross-file.ts +0 -116
  617. package/src/pipeline/phases/docs-parse.ts +0 -307
  618. package/src/pipeline/phases/evidence.ts +0 -9
  619. package/src/pipeline/phases/field-access.ts +0 -49
  620. package/src/pipeline/phases/framework-detect.ts +0 -109
  621. package/src/pipeline/phases/god-nodes.ts +0 -163
  622. package/src/pipeline/phases/import-resolver.ts +0 -114
  623. package/src/pipeline/phases/leiden.ts +0 -77
  624. package/src/pipeline/phases/llm-extract.ts +0 -178
  625. package/src/pipeline/phases/markdown.ts +0 -121
  626. package/src/pipeline/phases/middleware-extractor.ts +0 -127
  627. package/src/pipeline/phases/module-resolution.ts +0 -294
  628. package/src/pipeline/phases/mro.ts +0 -56
  629. package/src/pipeline/phases/orm.ts +0 -503
  630. package/src/pipeline/phases/parse.ts +0 -222
  631. package/src/pipeline/phases/pdf-parse.ts +0 -133
  632. package/src/pipeline/phases/processes.ts +0 -249
  633. package/src/pipeline/phases/re-export-propagation.ts +0 -160
  634. package/src/pipeline/phases/reachability.ts +0 -156
  635. package/src/pipeline/phases/routes.ts +0 -350
  636. package/src/pipeline/phases/scan.ts +0 -133
  637. package/src/pipeline/phases/scope-resolution.ts +0 -442
  638. package/src/pipeline/phases/structure.ts +0 -68
  639. package/src/pipeline/phases/suggest.ts +0 -92
  640. package/src/pipeline/phases/surprises.ts +0 -83
  641. package/src/pipeline/phases/tools.ts +0 -180
  642. package/src/pipeline/phases/variables-phase.ts +0 -37
  643. package/src/pipeline/phases/variables.ts +0 -67
  644. package/src/pipeline/phases/wildcard-phase.ts +0 -50
  645. package/src/pipeline/phases/wildcard-synthesis.ts +0 -214
  646. package/src/pipeline/progress.ts +0 -58
  647. package/src/pipeline/runner.ts +0 -88
  648. package/src/pipeline/types.ts +0 -41
  649. package/src/query/cypher-parser.ts +0 -450
  650. package/src/registry/repo-registry.ts +0 -125
  651. package/src/regression/baseline-deltas.ts +0 -215
  652. package/src/regression/baseline.ts +0 -76
  653. package/src/regression/counts.ts +0 -87
  654. package/src/regression/outcome.ts +0 -78
  655. package/src/regression/tolerance.ts +0 -35
  656. package/src/report/attributed-duplication.ts +0 -112
  657. package/src/report/badge-svg.ts +0 -100
  658. package/src/report/cross-ref-human.ts +0 -50
  659. package/src/report/duplication-grouping.ts +0 -74
  660. package/src/report/grouping.ts +0 -137
  661. package/src/report/human-check.ts +0 -291
  662. package/src/report/human-dupes.ts +0 -142
  663. package/src/report/human-health.ts +0 -195
  664. package/src/report/human.ts +0 -120
  665. package/src/report/json-actions.ts +0 -91
  666. package/src/report/json-builders.ts +0 -70
  667. package/src/report/json-schema.ts +0 -75
  668. package/src/report/number-format.ts +0 -91
  669. package/src/report/output-grouped.ts +0 -102
  670. package/src/report/pipeline-perf.ts +0 -56
  671. package/src/report/trace-human.ts +0 -127
  672. package/src/reporting/graph-report.ts +0 -431
  673. package/src/results/fallow-results.ts +0 -152
  674. package/src/results/types.ts +0 -149
  675. package/src/scope-resolution/evidence-weights.ts +0 -41
  676. package/src/search/ast-chunker.ts +0 -206
  677. package/src/search/diacritic.ts +0 -7
  678. package/src/search/hybrid-query.ts +0 -65
  679. package/src/search/rrf.ts +0 -51
  680. package/src/security/safe-fetch.ts +0 -113
  681. package/src/security/sensitive-files.ts +0 -24
  682. package/src/skills/platform-skills.ts +0 -233
  683. package/src/staleness/git-staleness.ts +0 -66
  684. package/src/storage/db.ts +0 -110
  685. package/src/storage/edge-store.ts +0 -103
  686. package/src/storage/file-cache.ts +0 -78
  687. package/src/storage/fts-store.ts +0 -385
  688. package/src/storage/node-store.ts +0 -209
  689. package/src/storage/schema.ts +0 -171
  690. package/src/storage/suppressions.ts +0 -145
  691. package/src/storage/unlinked-refs.ts +0 -117
  692. package/src/types.ts +0 -197
  693. package/src/validation/extraction-validator.ts +0 -54
  694. package/src/watch/watcher.ts +0 -160
  695. package/src/web/analyze-api.ts +0 -146
  696. package/src/web/api.ts +0 -584
  697. package/src/web/async-jobs.ts +0 -109
  698. package/src/web/mcp-http.ts +0 -227
  699. package/src/web/react-ui.ts +0 -78
  700. package/src/web/server.ts +0 -90
  701. package/src/web/ui/index.html +0 -204
  702. package/src/wiki/gist-publisher.ts +0 -76
  703. package/src/wiki/prompt-builder.ts +0 -35
  704. package/src/wiki/providers.ts +0 -134
  705. package/src/wiki/wiki-generator.ts +0 -223
  706. package/src/wiki/wiki-store.ts +0 -49
  707. package/tsconfig.json +0 -11
  708. package/vitest.config.ts +0 -20
@@ -1,188 +0,0 @@
1
- import { tmpdir } from 'os';
2
- import { join } from 'path';
3
- import { unlinkSync, existsSync } from 'fs';
4
- import { openDb, closeDb } from '../../src/storage/db.js';
5
- import { insertNode } from '../../src/storage/node-store.js';
6
- import { insertEdge } from '../../src/storage/edge-store.js';
7
- import { getMonographApiImpact } from '../../src/mcp-tools/api-impact.js';
8
- import type { MonographNode, MonographEdge } from '../../src/types.js';
9
-
10
- /**
11
- * Graph:
12
- * Route "ANY /api/users"
13
- * └─ HANDLES_ROUTE → handler "getUsersHandler"
14
- * └─ CALLS → "fetchUsersFromDb"
15
- * └─ CALLS → "runQuery"
16
- *
17
- * Route "GET /health" (no handler, no callees)
18
- */
19
-
20
- const dbPath = join(tmpdir(), `monograph-api-impact-${Date.now()}.db`);
21
- let db: ReturnType<typeof openDb>;
22
-
23
- const routeApiUsers: MonographNode = {
24
- id: 'ai_route_api_users',
25
- label: 'Route',
26
- name: 'ANY /api/users',
27
- normLabel: 'any /api/users',
28
- filePath: 'pages/api/users.ts',
29
- startLine: 0,
30
- isExported: false,
31
- };
32
-
33
- const routeHealth: MonographNode = {
34
- id: 'ai_route_health',
35
- label: 'Route',
36
- name: 'GET /health',
37
- normLabel: 'get /health',
38
- filePath: 'pages/health.ts',
39
- startLine: 0,
40
- isExported: false,
41
- };
42
-
43
- const handler: MonographNode = {
44
- id: 'ai_fn_handler',
45
- label: 'Function',
46
- name: 'getUsersHandler',
47
- normLabel: 'getusershandler',
48
- filePath: 'pages/api/users.ts',
49
- startLine: 10,
50
- isExported: true,
51
- };
52
-
53
- const fetchFn: MonographNode = {
54
- id: 'ai_fn_fetch',
55
- label: 'Function',
56
- name: 'fetchUsersFromDb',
57
- normLabel: 'fetchusersfromdb',
58
- filePath: 'src/db/users.ts',
59
- startLine: 20,
60
- isExported: false,
61
- };
62
-
63
- const queryFn: MonographNode = {
64
- id: 'ai_fn_query',
65
- label: 'Function',
66
- name: 'runQuery',
67
- normLabel: 'runquery',
68
- filePath: 'src/db/query.ts',
69
- startLine: 5,
70
- isExported: false,
71
- };
72
-
73
- const edgeHandlesRoute: MonographEdge = {
74
- id: 'ai_e_handles_route',
75
- sourceId: 'ai_route_api_users',
76
- targetId: 'ai_fn_handler',
77
- relation: 'HANDLES_ROUTE',
78
- confidence: 'EXTRACTED',
79
- confidenceScore: 0.9,
80
- };
81
-
82
- const edgeHandlerCallsFetch: MonographEdge = {
83
- id: 'ai_e_handler_fetch',
84
- sourceId: 'ai_fn_handler',
85
- targetId: 'ai_fn_fetch',
86
- relation: 'CALLS',
87
- confidence: 'EXTRACTED',
88
- confidenceScore: 1.0,
89
- };
90
-
91
- const edgeFetchCallsQuery: MonographEdge = {
92
- id: 'ai_e_fetch_query',
93
- sourceId: 'ai_fn_fetch',
94
- targetId: 'ai_fn_query',
95
- relation: 'CALLS',
96
- confidence: 'EXTRACTED',
97
- confidenceScore: 1.0,
98
- };
99
-
100
- beforeAll(() => {
101
- db = openDb(dbPath);
102
- insertNode(db, routeApiUsers);
103
- insertNode(db, routeHealth);
104
- insertNode(db, handler);
105
- insertNode(db, fetchFn);
106
- insertNode(db, queryFn);
107
- insertEdge(db, edgeHandlesRoute);
108
- insertEdge(db, edgeHandlerCallsFetch);
109
- insertEdge(db, edgeFetchCallsQuery);
110
- });
111
-
112
- afterAll(() => {
113
- closeDb(db);
114
- for (const p of [dbPath, dbPath + '-wal', dbPath + '-shm']) {
115
- if (existsSync(p)) unlinkSync(p);
116
- }
117
- });
118
-
119
- describe('getMonographApiImpact', () => {
120
- it('returns null route for unknown path', () => {
121
- const result = getMonographApiImpact(db, { routePath: '/nonexistent' });
122
- expect(result.route).toBeNull();
123
- expect(result.handler).toBeNull();
124
- expect(result.callees).toHaveLength(0);
125
- expect(result.riskScore).toBe(0);
126
- });
127
-
128
- it('finds route for /api/users', () => {
129
- const result = getMonographApiImpact(db, { routePath: '/api/users' });
130
- expect(result.route).not.toBeNull();
131
- expect(result.route!.path).toBe('/api/users');
132
- expect(result.route!.nodeId).toBe('ai_route_api_users');
133
- });
134
-
135
- it('returns handler node for the route', () => {
136
- const result = getMonographApiImpact(db, { routePath: '/api/users' });
137
- expect(result.handler).not.toBeNull();
138
- expect(result.handler!.name).toBe('getUsersHandler');
139
- expect(result.handler!.id).toBe('ai_fn_handler');
140
- });
141
-
142
- it('callees array contains the directly called function', () => {
143
- const result = getMonographApiImpact(db, { routePath: '/api/users' });
144
- expect(result.callees.length).toBeGreaterThan(0);
145
- const fetchCallee = result.callees.find((c) => c.node.id === 'ai_fn_fetch');
146
- expect(fetchCallee).toBeDefined();
147
- expect(fetchCallee!.depth).toBe(1);
148
- });
149
-
150
- it('callees array contains transitively called function', () => {
151
- const result = getMonographApiImpact(db, { routePath: '/api/users' });
152
- const queryCallee = result.callees.find((c) => c.node.id === 'ai_fn_query');
153
- expect(queryCallee).toBeDefined();
154
- expect(queryCallee!.depth).toBe(2);
155
- });
156
-
157
- it('riskScore is greater than 0 when callees exist', () => {
158
- const result = getMonographApiImpact(db, { routePath: '/api/users' });
159
- expect(result.riskScore).toBeGreaterThan(0);
160
- });
161
-
162
- it('riskScore is capped at 10', () => {
163
- const result = getMonographApiImpact(db, { routePath: '/api/users' });
164
- expect(result.riskScore).toBeLessThanOrEqual(10);
165
- });
166
-
167
- it('route with no handler returns handler null but route set', () => {
168
- const result = getMonographApiImpact(db, { routePath: '/health' });
169
- expect(result.route).not.toBeNull();
170
- expect(result.route!.path).toBe('/health');
171
- expect(result.handler).toBeNull();
172
- expect(result.callees).toHaveLength(0);
173
- });
174
-
175
- it('method filter narrows results correctly', () => {
176
- // Route is "ANY /api/users" — filtering by GET should still match since ANY is not GET
177
- // But there's no GET /api/users route, so result.route should be null when strict method is used
178
- // The implementation falls back to all matches if filtered list is empty
179
- const result = getMonographApiImpact(db, { routePath: '/health', method: 'GET' });
180
- expect(result.route).not.toBeNull();
181
- expect(result.route!.method).toBe('GET');
182
- });
183
-
184
- it('affectedProcesses is an array (may be empty if no STEP_IN_PROCESS edges)', () => {
185
- const result = getMonographApiImpact(db, { routePath: '/api/users' });
186
- expect(Array.isArray(result.affectedProcesses)).toBe(true);
187
- });
188
- });
@@ -1,130 +0,0 @@
1
- import { tmpdir } from 'os';
2
- import { join } from 'path';
3
- import { unlinkSync, existsSync } from 'fs';
4
- import { openDb, closeDb } from '../../src/storage/db.js';
5
- import { insertNode } from '../../src/storage/node-store.js';
6
- import { insertEdge } from '../../src/storage/edge-store.js';
7
- import { getMonographContext } from '../../src/mcp-tools/context.js';
8
- import type { MonographNode, MonographEdge } from '../../src/types.js';
9
-
10
- const dbPath = join(tmpdir(), `monograph-context-${Date.now()}.db`);
11
- let db: ReturnType<typeof openDb>;
12
-
13
- const nodeA: MonographNode = {
14
- id: 'ctx_a',
15
- label: 'Function',
16
- name: 'alpha',
17
- normLabel: 'alpha',
18
- filePath: 'src/a.ts',
19
- startLine: 1,
20
- isExported: true,
21
- };
22
- const nodeB: MonographNode = {
23
- id: 'ctx_b',
24
- label: 'Function',
25
- name: 'beta',
26
- normLabel: 'beta',
27
- filePath: 'src/b.ts',
28
- startLine: 5,
29
- isExported: false,
30
- };
31
- const nodeC: MonographNode = {
32
- id: 'ctx_c',
33
- label: 'Class',
34
- name: 'Gamma',
35
- normLabel: 'gamma',
36
- filePath: 'src/c.ts',
37
- startLine: 1,
38
- isExported: true,
39
- };
40
-
41
- // b calls a, a imports c
42
- const edgeCallBA: MonographEdge = {
43
- id: 'e_ba_calls',
44
- sourceId: 'ctx_b',
45
- targetId: 'ctx_a',
46
- relation: 'CALLS',
47
- confidence: 'EXTRACTED',
48
- confidenceScore: 1.0,
49
- };
50
- const edgeImportAC: MonographEdge = {
51
- id: 'e_ac_imports',
52
- sourceId: 'ctx_a',
53
- targetId: 'ctx_c',
54
- relation: 'IMPORTS',
55
- confidence: 'EXTRACTED',
56
- confidenceScore: 1.0,
57
- };
58
-
59
- beforeAll(() => {
60
- db = openDb(dbPath);
61
- insertNode(db, nodeA);
62
- insertNode(db, nodeB);
63
- insertNode(db, nodeC);
64
- insertEdge(db, edgeCallBA);
65
- insertEdge(db, edgeImportAC);
66
- });
67
-
68
- afterAll(() => {
69
- closeDb(db);
70
- for (const p of [dbPath, dbPath + '-wal', dbPath + '-shm']) {
71
- if (existsSync(p)) unlinkSync(p);
72
- }
73
- });
74
-
75
- describe('getMonographContext', () => {
76
- it('returns null node for unknown symbol', () => {
77
- const result = getMonographContext(db, { name: 'nonexistent' });
78
- expect(result.node).toBeNull();
79
- expect(result.callers).toHaveLength(0);
80
- });
81
-
82
- it('finds the node by name', () => {
83
- const result = getMonographContext(db, { name: 'alpha' });
84
- expect(result.node).not.toBeNull();
85
- expect(result.node?.id).toBe('ctx_a');
86
- });
87
-
88
- it('populates callers correctly (b calls a)', () => {
89
- const result = getMonographContext(db, { name: 'alpha' });
90
- expect(result.callers).toHaveLength(1);
91
- expect(result.callers[0].id).toBe('ctx_b');
92
- });
93
-
94
- it('populates callees correctly (a calls nothing here)', () => {
95
- const result = getMonographContext(db, { name: 'alpha' });
96
- expect(result.callees).toHaveLength(0);
97
- });
98
-
99
- it('populates imports correctly (a imports c)', () => {
100
- const result = getMonographContext(db, { name: 'alpha' });
101
- expect(result.imports).toHaveLength(1);
102
- expect(result.imports[0].id).toBe('ctx_c');
103
- });
104
-
105
- it('populates importedBy correctly (c is imported by a)', () => {
106
- const result = getMonographContext(db, { name: 'Gamma' });
107
- expect(result.importedBy).toHaveLength(1);
108
- expect(result.importedBy[0].id).toBe('ctx_a');
109
- });
110
-
111
- it('disambiguates by filePath', () => {
112
- const result = getMonographContext(db, { name: 'alpha', filePath: 'src/a.ts' });
113
- expect(result.node?.id).toBe('ctx_a');
114
- });
115
-
116
- it('returns null for wrong filePath', () => {
117
- const result = getMonographContext(db, { name: 'alpha', filePath: 'src/wrong.ts' });
118
- expect(result.node).toBeNull();
119
- });
120
-
121
- it('community is null when node has no communityId', () => {
122
- const result = getMonographContext(db, { name: 'alpha' });
123
- expect(result.community).toBeNull();
124
- });
125
-
126
- it('inProcesses is empty when no STEP_IN_PROCESS edges', () => {
127
- const result = getMonographContext(db, { name: 'alpha' });
128
- expect(result.inProcesses).toHaveLength(0);
129
- });
130
- });
@@ -1,258 +0,0 @@
1
- import { tmpdir } from 'os';
2
- import { join } from 'path';
3
- import { unlinkSync, existsSync } from 'fs';
4
- import { openDb, closeDb } from '../../src/storage/db.js';
5
- import { insertNode } from '../../src/storage/node-store.js';
6
- import { insertEdge } from '../../src/storage/edge-store.js';
7
- import { getMonographCypher } from '../../src/mcp-tools/cypher.js';
8
- import {
9
- parseCypherQuery,
10
- cypherToSql,
11
- executeCypherQuery,
12
- } from '../../src/query/cypher-parser.js';
13
- import type { MonographNode, MonographEdge } from '../../src/types.js';
14
-
15
- // ── Shared test DB setup ───────────────────────────────────────────────────────
16
-
17
- const dbPath = join(tmpdir(), `monograph-cypher-${Date.now()}.db`);
18
- let db: ReturnType<typeof openDb>;
19
-
20
- const fnBuildAsync: MonographNode = {
21
- id: 'cy_build',
22
- label: 'Function',
23
- name: 'buildAsync',
24
- normLabel: 'buildasync',
25
- filePath: 'src/pipeline/runner.ts',
26
- startLine: 10,
27
- endLine: 50,
28
- isExported: true,
29
- language: 'typescript',
30
- };
31
-
32
- const fnAuthenticate: MonographNode = {
33
- id: 'cy_auth',
34
- label: 'Function',
35
- name: 'authenticate',
36
- normLabel: 'authenticate',
37
- filePath: 'src/auth/index.ts',
38
- startLine: 5,
39
- endLine: 30,
40
- isExported: true,
41
- language: 'typescript',
42
- };
43
-
44
- const clsUserService: MonographNode = {
45
- id: 'cy_us',
46
- label: 'Class',
47
- name: 'UserService',
48
- normLabel: 'userservice',
49
- filePath: 'src/user/service.ts',
50
- startLine: 1,
51
- endLine: 120,
52
- isExported: true,
53
- language: 'typescript',
54
- };
55
-
56
- // buildAsync --CALLS--> authenticate
57
- const edgeCalls: MonographEdge = {
58
- id: 'cy_e_calls',
59
- sourceId: 'cy_build',
60
- targetId: 'cy_auth',
61
- relation: 'CALLS',
62
- confidence: 'EXTRACTED',
63
- confidenceScore: 1.0,
64
- };
65
-
66
- beforeAll(() => {
67
- db = openDb(dbPath);
68
- insertNode(db, fnBuildAsync);
69
- insertNode(db, fnAuthenticate);
70
- insertNode(db, clsUserService);
71
- insertEdge(db, edgeCalls);
72
- });
73
-
74
- afterAll(() => {
75
- closeDb(db);
76
- for (const p of [dbPath, dbPath + '-wal', dbPath + '-shm']) {
77
- if (existsSync(p)) unlinkSync(p);
78
- }
79
- });
80
-
81
- // ── parseCypherQuery unit tests ────────────────────────────────────────────────
82
-
83
- describe('parseCypherQuery', () => {
84
- it('parses a simple node pattern with inline prop', () => {
85
- const { parsed, error } = parseCypherQuery(
86
- 'MATCH (n:Function {name: "buildAsync"}) RETURN n.name',
87
- );
88
- expect(error).toBeUndefined();
89
- expect(parsed).not.toBeNull();
90
- expect(parsed!.type).toBe('node');
91
- expect(parsed!.nodeA.label).toBe('Function');
92
- expect(parsed!.nodeA.props).toEqual({ name: 'buildAsync' });
93
- expect(parsed!.returnFields).toEqual([{ alias: 'n', field: 'name' }]);
94
- });
95
-
96
- it('parses a relationship pattern', () => {
97
- const { parsed, error } = parseCypherQuery(
98
- 'MATCH (a:Function)-[:CALLS]->(b:Function {name: "authenticate"}) RETURN a.name, a.filePath',
99
- );
100
- expect(error).toBeUndefined();
101
- expect(parsed).not.toBeNull();
102
- expect(parsed!.type).toBe('relationship');
103
- expect(parsed!.relation).toBe('CALLS');
104
- expect(parsed!.nodeA.alias).toBe('a');
105
- expect(parsed!.nodeB!.alias).toBe('b');
106
- expect(parsed!.nodeB!.props).toEqual({ name: 'authenticate' });
107
- expect(parsed!.returnFields).toEqual([
108
- { alias: 'a', field: 'name' },
109
- { alias: 'a', field: 'filePath' },
110
- ]);
111
- });
112
-
113
- it('parses a node pattern with WHERE clause', () => {
114
- const { parsed, error } = parseCypherQuery(
115
- 'MATCH (n:Function) WHERE n.name = "buildAsync" RETURN n.name, n.filePath',
116
- );
117
- expect(error).toBeUndefined();
118
- expect(parsed).not.toBeNull();
119
- expect(parsed!.whereClause).toEqual({ alias: 'n', field: 'name', value: 'buildAsync' });
120
- });
121
-
122
- it('blocks CREATE — returns error', () => {
123
- const { parsed, error } = parseCypherQuery('CREATE (n:Node) RETURN n.name');
124
- expect(parsed).toBeNull();
125
- expect(error).toContain('Write operations not supported');
126
- expect(error).toContain('CREATE');
127
- });
128
-
129
- it('blocks MERGE — returns error', () => {
130
- const { parsed, error } = parseCypherQuery('MERGE (n:Node {name: "x"}) RETURN n.name');
131
- expect(parsed).toBeNull();
132
- expect(error).toContain('Write operations not supported');
133
- });
134
-
135
- it('blocks DELETE — returns error', () => {
136
- const { parsed, error } = parseCypherQuery('MATCH (n) DELETE n');
137
- expect(parsed).toBeNull();
138
- expect(error).toContain('Write operations not supported');
139
- });
140
-
141
- it('returns parse error for invalid query string', () => {
142
- const { parsed, error } = parseCypherQuery('invalid query string');
143
- expect(parsed).toBeNull();
144
- expect(error).toMatch(/parse error/i);
145
- });
146
-
147
- it('returns parse error for missing RETURN', () => {
148
- const { parsed, error } = parseCypherQuery('MATCH (n:Function)');
149
- expect(parsed).toBeNull();
150
- expect(error).toMatch(/RETURN/i);
151
- });
152
-
153
- it('rejects unknown RETURN field', () => {
154
- const { parsed, error } = parseCypherQuery('MATCH (n:Function) RETURN n.unknownField');
155
- expect(parsed).toBeNull();
156
- expect(error).toMatch(/unknown|invalid/i);
157
- });
158
- });
159
-
160
- // ── cypherToSql unit tests ─────────────────────────────────────────────────────
161
-
162
- describe('cypherToSql', () => {
163
- it('generates correct SQL for a node-only query', () => {
164
- const { parsed } = parseCypherQuery(
165
- 'MATCH (n:Class {name: "UserService"}) RETURN n.name, n.filePath',
166
- );
167
- const { sql, params } = cypherToSql(parsed!);
168
- expect(sql).toContain('FROM nodes n');
169
- expect(sql).toContain('n.label = ?');
170
- expect(sql).toContain('n.name = ?');
171
- expect(params).toContain('Class');
172
- expect(params).toContain('UserService');
173
- expect(sql).toContain('LIMIT 200');
174
- expect(sql).toContain('n.name AS "n_name"');
175
- expect(sql).toContain('n.file_path AS "n_filePath"');
176
- });
177
-
178
- it('generates correct SQL for a relationship query', () => {
179
- const { parsed } = parseCypherQuery(
180
- 'MATCH (a:Function)-[:CALLS]->(b:Function {name: "authenticate"}) RETURN a.name, a.filePath',
181
- );
182
- const { sql, params } = cypherToSql(parsed!);
183
- expect(sql).toContain('FROM nodes a');
184
- expect(sql).toContain('e.relation = ?');
185
- expect(params).toContain('CALLS');
186
- expect(sql).toContain('JOIN nodes b ON b.id = e.target_id');
187
- expect(sql).toContain('b.name = ?');
188
- expect(params).toContain('authenticate');
189
- expect(sql).toContain('LIMIT 200');
190
- });
191
- });
192
-
193
- // ── executeCypherQuery integration tests ─────────────────────────────────────
194
-
195
- describe('executeCypherQuery', () => {
196
- it('returns rows for a matching node query', () => {
197
- const result = executeCypherQuery(
198
- db,
199
- 'MATCH (n:Function {name: "buildAsync"}) RETURN n.name',
200
- );
201
- expect(result.error).toBeUndefined();
202
- expect(result.rows).toHaveLength(1);
203
- expect(result.rows[0]['n_name']).toBe('buildAsync');
204
- expect(result.queryTime).toBeGreaterThanOrEqual(0);
205
- });
206
-
207
- it('returns empty rows when no match', () => {
208
- const result = executeCypherQuery(
209
- db,
210
- 'MATCH (n:Function {name: "nonexistent"}) RETURN n.name',
211
- );
212
- expect(result.error).toBeUndefined();
213
- expect(result.rows).toHaveLength(0);
214
- });
215
-
216
- it('returns rows for a relationship query', () => {
217
- const result = executeCypherQuery(
218
- db,
219
- 'MATCH (a:Function)-[:CALLS]->(b:Function {name: "authenticate"}) RETURN a.name, a.filePath',
220
- );
221
- expect(result.error).toBeUndefined();
222
- expect(result.rows).toHaveLength(1);
223
- expect(result.rows[0]['a_name']).toBe('buildAsync');
224
- expect(result.rows[0]['a_filePath']).toBe('src/pipeline/runner.ts');
225
- });
226
-
227
- it('returns error (not throw) for write operation', () => {
228
- const result = executeCypherQuery(db, 'CREATE (n:Node) RETURN n.name');
229
- expect(result.error).toContain('Write operations not supported');
230
- expect(result.rows).toHaveLength(0);
231
- });
232
-
233
- it('returns error (not throw) for invalid query', () => {
234
- const result = executeCypherQuery(db, 'garbage query here');
235
- expect(result.error).toMatch(/parse error/i);
236
- expect(result.rows).toHaveLength(0);
237
- });
238
- });
239
-
240
- // ── getMonographCypher (MCP facade) ───────────────────────────────────────────
241
-
242
- describe('getMonographCypher', () => {
243
- it('delegates to executeCypherQuery and returns results', () => {
244
- const result = getMonographCypher(
245
- db,
246
- 'MATCH (n:Class {name: "UserService"}) RETURN n.name, n.filePath',
247
- );
248
- expect(result.error).toBeUndefined();
249
- expect(result.rows).toHaveLength(1);
250
- expect(result.rows[0]['n_name']).toBe('UserService');
251
- });
252
-
253
- it('returns error gracefully for forbidden operation', () => {
254
- const result = getMonographCypher(db, 'DROP TABLE nodes');
255
- expect(result.error).toContain('Write operations not supported');
256
- expect(result.rows).toHaveLength(0);
257
- });
258
- });
@@ -1,114 +0,0 @@
1
- import { tmpdir } from 'os';
2
- import { join } from 'path';
3
- import { unlinkSync, existsSync } from 'fs';
4
- import { vi, describe, it, expect, beforeAll, afterAll, afterEach } from 'vitest';
5
- import { openDb, closeDb } from '../../src/storage/db.js';
6
- import { insertNode } from '../../src/storage/node-store.js';
7
- import { detectMonographChanges } from '../../src/mcp-tools/detect-changes.js';
8
- import type { MonographNode } from '../../src/types.js';
9
-
10
- // vi.mock must be at the top level for Vitest to hoist it correctly
11
- vi.mock('child_process', () => ({
12
- spawnSync: vi.fn(),
13
- }));
14
-
15
- // After the mock, import the mocked module to control it
16
- import { spawnSync } from 'child_process';
17
-
18
- function mockGitOutput(stdout: string) {
19
- vi.mocked(spawnSync).mockReturnValue({ stdout, stderr: '', status: 0, error: undefined } as any);
20
- }
21
-
22
- const dbPath = join(tmpdir(), `monograph-detect-${Date.now()}.db`);
23
- let db: ReturnType<typeof openDb>;
24
-
25
- const nodeAuth: MonographNode = {
26
- id: 'det_auth',
27
- label: 'Function',
28
- name: 'authenticate',
29
- normLabel: 'authenticate',
30
- filePath: 'src/auth.ts',
31
- startLine: 10,
32
- isExported: true,
33
- };
34
-
35
- const nodeOther: MonographNode = {
36
- id: 'det_other',
37
- label: 'Function',
38
- name: 'otherFunc',
39
- normLabel: 'otherfunc',
40
- filePath: 'src/other.ts',
41
- startLine: 1,
42
- isExported: false,
43
- };
44
-
45
- beforeAll(() => {
46
- db = openDb(dbPath);
47
- insertNode(db, nodeAuth);
48
- insertNode(db, nodeOther);
49
- });
50
-
51
- afterAll(() => {
52
- closeDb(db);
53
- for (const p of [dbPath, dbPath + '-wal', dbPath + '-shm']) {
54
- if (existsSync(p)) unlinkSync(p);
55
- }
56
- });
57
-
58
- afterEach(() => {
59
- vi.clearAllMocks();
60
- });
61
-
62
- describe('detectMonographChanges', () => {
63
- it('returns affected symbols for a changed file', () => {
64
- mockGitOutput('src/auth.ts\n');
65
-
66
- const result = detectMonographChanges(db, { baseBranch: 'main' }, '/fake/repo');
67
-
68
- expect(result.changedFiles).toContain('src/auth.ts');
69
- expect(result.affectedSymbols.some(s => s.name === 'authenticate')).toBe(true);
70
- expect(result.error).toBeUndefined();
71
- });
72
-
73
- it('filters out test files when includeTests=false', () => {
74
- mockGitOutput('src/auth.ts\nsrc/auth.test.ts\n');
75
-
76
- const result = detectMonographChanges(db, { baseBranch: 'main', includeTests: false }, '/fake/repo');
77
-
78
- expect(result.changedFiles).toContain('src/auth.ts');
79
- expect(result.changedFiles).not.toContain('src/auth.test.ts');
80
- });
81
-
82
- it('returns empty result when no files changed', () => {
83
- mockGitOutput('');
84
-
85
- const result = detectMonographChanges(db, { baseBranch: 'main' }, '/fake/repo');
86
-
87
- expect(result.changedFiles).toHaveLength(0);
88
- expect(result.affectedSymbols).toHaveLength(0);
89
- expect(result.error).toBeUndefined();
90
- });
91
-
92
- it('handles git errors gracefully', () => {
93
- vi.mocked(spawnSync).mockReturnValue({ stdout: '', stderr: 'git: not a repository', status: 128, error: undefined } as any);
94
-
95
- const result = detectMonographChanges(db, { baseBranch: 'main' }, '/fake/repo');
96
-
97
- expect(result.changedFiles).toHaveLength(0);
98
- expect(result.affectedSymbols).toHaveLength(0);
99
- expect(result.error).toBeDefined();
100
- expect(result.error).toContain('git');
101
- });
102
-
103
- it('uses main as default base branch', () => {
104
- mockGitOutput('');
105
-
106
- detectMonographChanges(db, {}, '/fake/repo');
107
-
108
- expect(spawnSync).toHaveBeenCalledWith(
109
- 'git',
110
- expect.arrayContaining(['main...HEAD']),
111
- expect.any(Object),
112
- );
113
- });
114
- });