@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,140 +0,0 @@
1
- const EXPORT_LIST_RE = /^(\s*)(export\s+)(type\s+)?\{([^}]*)\}(.*)$/;
2
- function findExportSpan(lines, startIdx) {
3
- let text = lines[startIdx];
4
- let endIdx = startIdx;
5
- if (!text.includes('{')) {
6
- return { startIdx, endIdx, fullText: text };
7
- }
8
- if (text.includes('}')) {
9
- return { startIdx, endIdx, fullText: text };
10
- }
11
- for (let i = startIdx + 1; i < lines.length; i++) {
12
- text += '\n' + lines[i];
13
- endIdx = i;
14
- if (lines[i].includes('}'))
15
- break;
16
- }
17
- return { startIdx, endIdx, fullText: text };
18
- }
19
- function removeSpecifierFromList(specifierList, exportName) {
20
- const specifiers = specifierList.split(',').map(s => s.trim()).filter(Boolean);
21
- const filtered = specifiers.filter(spec => {
22
- const baseName = spec.split(/\s+as\s+/)[0].trim();
23
- return baseName !== exportName;
24
- });
25
- if (filtered.length === specifiers.length)
26
- return null;
27
- return filtered.join(', ');
28
- }
29
- function applySurgery(fileContent, exportName, line, expectType) {
30
- const lines = fileContent.split('\n');
31
- const idx = line - 1;
32
- if (idx < 0 || idx >= lines.length) {
33
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
34
- }
35
- const { startIdx, endIdx, fullText } = findExportSpan(lines, idx);
36
- const singleLineMatch = fullText.replace(/\n/g, ' ').match(EXPORT_LIST_RE);
37
- if (!singleLineMatch) {
38
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
39
- }
40
- const indent = singleLineMatch[1];
41
- const exportKw = singleLineMatch[2];
42
- const typeKw = singleLineMatch[3] ?? '';
43
- const specifierList = singleLineMatch[4];
44
- const tail = singleLineMatch[5];
45
- if (expectType === true && !typeKw) {
46
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
47
- }
48
- if (expectType === false && typeKw) {
49
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
50
- }
51
- const newList = removeSpecifierFromList(specifierList, exportName);
52
- if (newList === null) {
53
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
54
- }
55
- const spanSize = endIdx - startIdx + 1;
56
- const newLines = [...lines];
57
- if (newList.trim() === '') {
58
- newLines.splice(startIdx, spanSize);
59
- return {
60
- modified: true,
61
- newContent: newLines.join('\n'),
62
- linesRemoved: spanSize,
63
- };
64
- }
65
- const replacement = `${indent}${exportKw}${typeKw}{ ${newList} }${tail}`;
66
- newLines.splice(startIdx, spanSize, replacement);
67
- return {
68
- modified: true,
69
- newContent: newLines.join('\n'),
70
- linesRemoved: spanSize - 1,
71
- };
72
- }
73
- export function removeNameFromExportList(fileContent, exportName, line) {
74
- return applySurgery(fileContent, exportName, line, false);
75
- }
76
- export function removeTypeFromExportList(fileContent, exportName, line) {
77
- return applySurgery(fileContent, exportName, line, true);
78
- }
79
- export function promoteToTypeExport(fileContent, exportName, line) {
80
- const lines = fileContent.split('\n');
81
- const idx = line - 1;
82
- if (idx < 0 || idx >= lines.length) {
83
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
84
- }
85
- const { startIdx, endIdx, fullText } = findExportSpan(lines, idx);
86
- const normalised = fullText.replace(/\n/g, ' ');
87
- const match = normalised.match(EXPORT_LIST_RE);
88
- if (!match || match[3]) {
89
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
90
- }
91
- const indent = match[1];
92
- const specifierList = match[4];
93
- const tail = match[5];
94
- const specifiers = specifierList.split(',').map(s => s.trim()).filter(Boolean);
95
- const target = specifiers.find(spec => spec.split(/\s+as\s+/)[0].trim() === exportName);
96
- if (!target) {
97
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
98
- }
99
- const remaining = specifiers.filter(spec => spec.split(/\s+as\s+/)[0].trim() !== exportName);
100
- const spanSize = endIdx - startIdx + 1;
101
- const newLines = [...lines];
102
- const typeExportLine = `${indent}export type { ${target} }`;
103
- if (remaining.length === 0) {
104
- newLines.splice(startIdx, spanSize, typeExportLine);
105
- }
106
- else {
107
- const valueExportLine = `${indent}export { ${remaining.join(', ')} }${tail}`;
108
- newLines.splice(startIdx, spanSize, valueExportLine, typeExportLine);
109
- }
110
- return {
111
- modified: true,
112
- newContent: newLines.join('\n'),
113
- linesRemoved: spanSize - newLines.length + lines.length,
114
- };
115
- }
116
- export function applyExportSurgeries(fileContent, surgeries) {
117
- const sorted = [...surgeries].sort((a, b) => b.line - a.line);
118
- let content = fileContent;
119
- let totalLinesRemoved = 0;
120
- let anyModified = false;
121
- for (const surgery of sorted) {
122
- let result;
123
- if (surgery.action === 'remove') {
124
- result = removeNameFromExportList(content, surgery.exportName, surgery.line);
125
- }
126
- else if (surgery.action === 'remove-type') {
127
- result = removeTypeFromExportList(content, surgery.exportName, surgery.line);
128
- }
129
- else {
130
- result = promoteToTypeExport(content, surgery.exportName, surgery.line);
131
- }
132
- if (result.modified) {
133
- content = result.newContent;
134
- totalLinesRemoved += result.linesRemoved;
135
- anyModified = true;
136
- }
137
- }
138
- return { modified: anyModified, newContent: content, linesRemoved: totalLinesRemoved };
139
- }
140
- //# sourceMappingURL=export-surgery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export-surgery.js","sourceRoot":"","sources":["../../../src/fix/export-surgery.ts"],"names":[],"mappings":"AAMA,MAAM,cAAc,GAAG,6CAA6C,CAAC;AAErE,SAAS,cAAc,CAAC,KAAe,EAAE,QAAgB;IACvD,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,QAAQ,CAAC;IAEtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,CAAC,CAAC;QACX,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM;IACpC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,uBAAuB,CAAC,aAAqB,EAAE,UAAkB;IACxE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE/E,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,QAAQ,KAAK,UAAU,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CACnB,WAAmB,EACnB,UAAkB,EAClB,IAAY,EACZ,UAA0B;IAE1B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;IAErB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAElE,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3E,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAEhC,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,UAAU,KAAK,KAAK,IAAI,MAAM,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEnE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1B,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/B,YAAY,EAAE,QAAQ;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE,CAAC;IACzE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjD,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,YAAY,EAAE,QAAQ,GAAG,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,UAAkB,EAClB,IAAY;IAEZ,OAAO,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,UAAkB,EAClB,IAAY;IAEZ,OAAO,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,UAAkB,EAClB,IAAY;IAEZ,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;IAErB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,CAAC;IACxF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAE5B,MAAM,cAAc,GAAG,GAAG,MAAM,iBAAiB,MAAM,IAAI,CAAC;IAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,GAAG,MAAM,YAAY,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7E,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,SAAyG;IAEzG,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAE9D,IAAI,OAAO,GAAG,WAAW,CAAC;IAC1B,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,MAA2B,CAAC;QAChC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAC5C,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;YAC5B,iBAAiB,IAAI,MAAM,CAAC,YAAY,CAAC;YACzC,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;AACzF,CAAC"}
@@ -1,16 +0,0 @@
1
- export interface ExportFix {
2
- filePath: string;
3
- exportName: string;
4
- lineNumber: number;
5
- fixType: 'remove-export-keyword' | 'remove-entire-declaration';
6
- }
7
- export interface FixResult {
8
- filePath: string;
9
- fixesApplied: number;
10
- dryRun: boolean;
11
- diff: string[];
12
- }
13
- export declare function fixUnusedExports(fixes: ExportFix[], options?: {
14
- dryRun?: boolean;
15
- }): FixResult[];
16
- //# sourceMappingURL=exports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/fix/exports.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,uBAAuB,GAAG,2BAA2B,CAAC;CAChE;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,SAAS,EAAE,CAuEb"}
@@ -1,65 +0,0 @@
1
- import { readFileSync, writeFileSync, renameSync } from 'fs';
2
- import { tmpdir } from 'os';
3
- import { join } from 'path';
4
- export function fixUnusedExports(fixes, options) {
5
- const dryRun = options?.dryRun ?? false;
6
- // Group fixes by filePath
7
- const byFile = new Map();
8
- for (const fix of fixes) {
9
- const existing = byFile.get(fix.filePath) ?? [];
10
- existing.push(fix);
11
- byFile.set(fix.filePath, existing);
12
- }
13
- const results = [];
14
- for (const [filePath, fileFixes] of byFile) {
15
- let content;
16
- try {
17
- content = readFileSync(filePath, 'utf8');
18
- }
19
- catch {
20
- // Skip files we can't read
21
- continue;
22
- }
23
- const lines = content.split('\n');
24
- const diff = [];
25
- let fixesApplied = 0;
26
- // Sort by lineNumber descending to avoid line-shift bugs
27
- const sortedFixes = [...fileFixes].sort((a, b) => b.lineNumber - a.lineNumber);
28
- for (const fix of sortedFixes) {
29
- const idx = fix.lineNumber - 1;
30
- if (idx < 0 || idx >= lines.length)
31
- continue;
32
- const originalLine = lines[idx];
33
- if (fix.fixType === 'remove-export-keyword') {
34
- // Remove the 'export ' prefix from the line
35
- const newLine = originalLine.replace(/^(\s*)export (default function|function|const|class|type|interface|default )/, '$1$2');
36
- if (newLine !== originalLine) {
37
- diff.push(`- ${originalLine}`);
38
- diff.push(`+ ${newLine}`);
39
- lines[idx] = newLine;
40
- fixesApplied++;
41
- }
42
- }
43
- else if (fix.fixType === 'remove-entire-declaration') {
44
- diff.push(`- ${originalLine}`);
45
- lines.splice(idx, 1);
46
- fixesApplied++;
47
- }
48
- }
49
- if (!dryRun && fixesApplied > 0) {
50
- const newContent = lines.join('\n');
51
- // Atomic write: temp file then rename
52
- const tmpFile = join(tmpdir(), `monograph-fix-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
53
- writeFileSync(tmpFile, newContent, 'utf8');
54
- renameSync(tmpFile, filePath);
55
- }
56
- results.push({
57
- filePath,
58
- fixesApplied,
59
- dryRun,
60
- diff,
61
- });
62
- }
63
- return results;
64
- }
65
- //# sourceMappingURL=exports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../../src/fix/exports.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- export interface FixerAnalysisResults {
2
- unusedExports: unknown[];
3
- unusedDependencies: unknown[];
4
- unusedEnumMembers: unknown[];
5
- }
6
- export interface FixOptions {
7
- root: string;
8
- output: 'human' | 'json';
9
- dryRun: boolean;
10
- yes: boolean;
11
- quiet: boolean;
12
- }
13
- export interface FixRecord {
14
- file: string;
15
- kind: string;
16
- name: string;
17
- applied: boolean;
18
- dryRun: boolean;
19
- }
20
- export type FixApplier = (root: string, results: FixerAnalysisResults, dryRun: boolean, out: FixRecord[]) => Promise<boolean>;
21
- export declare function runFix(results: FixerAnalysisResults, opts: FixOptions, appliers?: {
22
- exports?: FixApplier;
23
- deps?: FixApplier;
24
- enumMembers?: FixApplier;
25
- }): Promise<{
26
- exitCode: number;
27
- }>;
28
- //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/fix/orchestrator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,kBAAkB,EAAE,OAAO,EAAE,CAAC;IAC9B,iBAAiB,EAAE,OAAO,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9H,wBAAsB,MAAM,CAC1B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,GAAE;IACR,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,UAAU,CAAC;CACrB,GACL,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC/B"}
@@ -1,39 +0,0 @@
1
- export async function runFix(results, opts, appliers = {}) {
2
- const isTTY = Boolean(process.stdin.isTTY);
3
- if (!opts.dryRun && !opts.yes && !isTTY) {
4
- const msg = 'fix requires --yes in non-interactive environments. Use --dry-run to preview first.';
5
- if (opts.output === 'json')
6
- console.log(JSON.stringify({ error: msg }));
7
- else
8
- console.error(`Error: ${msg}`);
9
- return { exitCode: 2 };
10
- }
11
- const total = results.unusedExports.length + results.unusedDependencies.length + results.unusedEnumMembers.length;
12
- if (total === 0) {
13
- if (opts.output === 'json')
14
- console.log(JSON.stringify({ dryRun: opts.dryRun, fixes: [], total_fixed: 0 }));
15
- else if (!opts.quiet)
16
- console.error('No issues to fix.');
17
- return { exitCode: 0 };
18
- }
19
- const fixes = [];
20
- let hadError = false;
21
- if (appliers.exports && results.unusedExports.length > 0)
22
- hadError ||= await appliers.exports(opts.root, results, opts.dryRun, fixes);
23
- if (appliers.deps && results.unusedDependencies.length > 0)
24
- hadError ||= await appliers.deps(opts.root, results, opts.dryRun, fixes);
25
- if (appliers.enumMembers && results.unusedEnumMembers.length > 0)
26
- hadError ||= await appliers.enumMembers(opts.root, results, opts.dryRun, fixes);
27
- if (opts.output === 'json') {
28
- const applied = fixes.filter(f => f.applied).length;
29
- console.log(JSON.stringify({ dryRun: opts.dryRun, fixes, total_fixed: applied }, null, 2));
30
- }
31
- else if (!opts.quiet) {
32
- if (opts.dryRun)
33
- console.error('Dry run complete. No files were modified.');
34
- else
35
- console.error(`Fixed ${fixes.filter(f => f.applied).length} issue(s).`);
36
- }
37
- return { exitCode: hadError ? 2 : 0 };
38
- }
39
- //# sourceMappingURL=orchestrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/fix/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- import { runBenchmark, estimateTokens } from '../../analysis/benchmark.js';
4
-
5
- function makeDb(nodeCount: number): Database.Database {
6
- const db = new Database(':memory:');
7
- db.exec(`
8
- CREATE TABLE nodes (id TEXT PRIMARY KEY, name TEXT, label TEXT, file_path TEXT, start_line INTEGER, end_line INTEGER, community_id INTEGER);
9
- CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT, target_id TEXT, relation TEXT, confidence TEXT, confidence_score REAL);
10
- `);
11
- const insert = db.prepare('INSERT INTO nodes VALUES (?,?,?,?,?,?,?)');
12
- for (let i = 0; i < nodeCount; i++) {
13
- insert.run(`n${i}`, `symbol_${i}`, 'Function', `/app/file${i % 10}.ts`, i * 5 + 1, i * 5 + 4, i % 3);
14
- }
15
- for (let i = 1; i < Math.min(nodeCount, 20); i++) {
16
- db.prepare('INSERT INTO edges VALUES (?,?,?,?,?,?)').run(`e${i}`, `n${i - 1}`, `n${i}`, 'CALLS', 'EXTRACTED', 0.9);
17
- }
18
- return db;
19
- }
20
-
21
- describe('estimateTokens', () => {
22
- it('estimates tokens as text length divided by 4', () => {
23
- expect(estimateTokens('a'.repeat(400))).toBe(100);
24
- expect(estimateTokens('')).toBe(0);
25
- });
26
- });
27
-
28
- describe('runBenchmark', () => {
29
- it('returns corpus_tokens, avg_query_tokens, and reduction_ratio', () => {
30
- const db = makeDb(50);
31
- const result = runBenchmark(db, { corpusWordCount: 5000 });
32
- expect(result.corpus_tokens).toBeGreaterThan(0);
33
- expect(result.avg_query_tokens).toBeGreaterThanOrEqual(0);
34
- expect(result.reduction_ratio).toBeGreaterThanOrEqual(0);
35
- expect(result.nodes).toBe(50);
36
- });
37
-
38
- it('returns per_question breakdown', () => {
39
- const db = makeDb(30);
40
- const result = runBenchmark(db, {
41
- questions: ['how does authentication work', 'what is the entry point'],
42
- corpusWordCount: 3000,
43
- });
44
- expect(Array.isArray(result.per_question)).toBe(true);
45
- });
46
-
47
- it('works with no matching nodes gracefully', () => {
48
- const db = makeDb(5);
49
- const result = runBenchmark(db, { questions: ['zzz_nonexistent_xyz'] });
50
- expect(result.nodes).toBe(5);
51
- expect(typeof result.reduction_ratio).toBe('number');
52
- });
53
-
54
- it('uses default questions when none provided', () => {
55
- const db = makeDb(20);
56
- const result = runBenchmark(db);
57
- expect(result.per_question.length).toBeGreaterThan(0);
58
- });
59
- });
@@ -1,106 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { silhouetteScore, modularityScore } from '../../analysis/cluster-quality.js';
3
-
4
- describe('silhouetteScore', () => {
5
- it('returns 0 for a single node', () => {
6
- const memberships = new Map([['a', 0]]);
7
- const edges: Array<{ sourceId: string; targetId: string }> = [];
8
- expect(silhouetteScore(memberships, edges)).toBeCloseTo(0);
9
- });
10
-
11
- it('returns 1 for two perfectly separated communities with no cross edges', () => {
12
- // Community 0: a-b-c fully connected, Community 1: d-e-f fully connected
13
- const memberships = new Map([
14
- ['a', 0], ['b', 0], ['c', 0],
15
- ['d', 1], ['e', 1], ['f', 1],
16
- ]);
17
- const edges = [
18
- { sourceId: 'a', targetId: 'b' },
19
- { sourceId: 'b', targetId: 'c' },
20
- { sourceId: 'a', targetId: 'c' },
21
- { sourceId: 'd', targetId: 'e' },
22
- { sourceId: 'e', targetId: 'f' },
23
- { sourceId: 'd', targetId: 'f' },
24
- ];
25
- const score = silhouetteScore(memberships, edges);
26
- expect(score).toBeGreaterThan(0.5);
27
- });
28
-
29
- it('returns negative score for misassigned nodes (cross edges dominate)', () => {
30
- // Node 'a' is in community 0 but only connected to community 1 nodes
31
- const memberships = new Map([
32
- ['a', 0],
33
- ['b', 1], ['c', 1], ['d', 1],
34
- ]);
35
- const edges = [
36
- { sourceId: 'a', targetId: 'b' },
37
- { sourceId: 'a', targetId: 'c' },
38
- { sourceId: 'a', targetId: 'd' },
39
- { sourceId: 'b', targetId: 'c' },
40
- { sourceId: 'c', targetId: 'd' },
41
- ];
42
- const score = silhouetteScore(memberships, edges);
43
- // 'a' is isolated in its community, so its silhouette is negative
44
- expect(score).toBeLessThan(0.5);
45
- });
46
-
47
- it('handles nodes with no edges gracefully', () => {
48
- const memberships = new Map([['x', 0], ['y', 1]]);
49
- const edges: Array<{ sourceId: string; targetId: string }> = [];
50
- const score = silhouetteScore(memberships, edges);
51
- expect(typeof score).toBe('number');
52
- expect(isNaN(score)).toBe(false);
53
- });
54
- });
55
-
56
- describe('modularityScore', () => {
57
- it('returns 0 for empty graph', () => {
58
- const memberships = new Map<string, number>();
59
- const edges: Array<{ sourceId: string; targetId: string }> = [];
60
- expect(modularityScore(memberships, edges)).toBeCloseTo(0);
61
- });
62
-
63
- it('returns positive value for well-structured communities', () => {
64
- // Two dense clusters with few cross edges
65
- const memberships = new Map([
66
- ['a', 0], ['b', 0], ['c', 0],
67
- ['d', 1], ['e', 1], ['f', 1],
68
- ]);
69
- const edges = [
70
- { sourceId: 'a', targetId: 'b' },
71
- { sourceId: 'b', targetId: 'c' },
72
- { sourceId: 'a', targetId: 'c' },
73
- { sourceId: 'd', targetId: 'e' },
74
- { sourceId: 'e', targetId: 'f' },
75
- { sourceId: 'd', targetId: 'f' },
76
- { sourceId: 'c', targetId: 'd' }, // one bridge edge
77
- ];
78
- const q = modularityScore(memberships, edges);
79
- expect(q).toBeGreaterThan(0);
80
- });
81
-
82
- it('returns close to 0 or negative for random partition', () => {
83
- // All edges cross community boundaries
84
- const memberships = new Map([
85
- ['a', 0], ['b', 1], ['c', 0], ['d', 1],
86
- ]);
87
- const edges = [
88
- { sourceId: 'a', targetId: 'b' },
89
- { sourceId: 'b', targetId: 'c' },
90
- { sourceId: 'c', targetId: 'd' },
91
- { sourceId: 'd', targetId: 'a' },
92
- ];
93
- const q = modularityScore(memberships, edges);
94
- expect(q).toBeLessThan(0.3);
95
- });
96
-
97
- it('handles single-community graph', () => {
98
- const memberships = new Map([['a', 0], ['b', 0], ['c', 0]]);
99
- const edges = [
100
- { sourceId: 'a', targetId: 'b' },
101
- { sourceId: 'b', targetId: 'c' },
102
- ];
103
- const q = modularityScore(memberships, edges);
104
- expect(typeof q).toBe('number');
105
- });
106
- });
@@ -1,33 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { checkCorpusHealth, type CorpusHealthResult } from '../../analysis/corpus-health.js';
3
-
4
- describe('checkCorpusHealth', () => {
5
- it('passes for healthy corpus', () => {
6
- const r = checkCorpusHealth({ wordCount: 100_000, fileCount: 50 });
7
- expect(r.healthy).toBe(true);
8
- expect(r.warnings).toHaveLength(0);
9
- });
10
-
11
- it('warns when corpus too small', () => {
12
- const r = checkCorpusHealth({ wordCount: 10_000, fileCount: 10 });
13
- expect(r.healthy).toBe(false);
14
- expect(r.warnings.some(w => /small/i.test(w))).toBe(true);
15
- });
16
-
17
- it('warns when corpus too large', () => {
18
- const r = checkCorpusHealth({ wordCount: 600_000, fileCount: 100 });
19
- expect(r.healthy).toBe(false);
20
- expect(r.warnings.some(w => /large/i.test(w))).toBe(true);
21
- });
22
-
23
- it('warns when file count too high', () => {
24
- const r = checkCorpusHealth({ wordCount: 200_000, fileCount: 250 });
25
- expect(r.healthy).toBe(false);
26
- expect(r.warnings.some(w => /file/i.test(w))).toBe(true);
27
- });
28
-
29
- it('collects multiple warnings', () => {
30
- const r = checkCorpusHealth({ wordCount: 600_000, fileCount: 300 });
31
- expect(r.warnings.length).toBeGreaterThanOrEqual(2);
32
- });
33
- });
@@ -1,105 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import {
3
- dependencyHealth,
4
- type DependencyHealthInput,
5
- } from '../../analysis/dependency-health.js';
6
-
7
- describe('dependencyHealth', () => {
8
- it('returns score 1 for a perfectly healthy small graph', () => {
9
- const input: DependencyHealthInput = {
10
- nodes: ['a', 'b', 'c'],
11
- edges: [
12
- { sourceId: 'a', targetId: 'b' },
13
- { sourceId: 'b', targetId: 'c' },
14
- ],
15
- cycleCount: 0,
16
- deadNodeCount: 0,
17
- };
18
- const result = dependencyHealth(input);
19
- expect(result.score).toBeGreaterThan(0.8);
20
- });
21
-
22
- it('penalizes cycles', () => {
23
- const baseline: DependencyHealthInput = {
24
- nodes: ['a', 'b', 'c'],
25
- edges: [
26
- { sourceId: 'a', targetId: 'b' },
27
- { sourceId: 'b', targetId: 'c' },
28
- ],
29
- cycleCount: 0,
30
- deadNodeCount: 0,
31
- };
32
- const withCycle: DependencyHealthInput = {
33
- ...baseline,
34
- edges: [
35
- ...baseline.edges,
36
- { sourceId: 'c', targetId: 'a' },
37
- ],
38
- cycleCount: 1,
39
- };
40
- expect(dependencyHealth(withCycle).score).toBeLessThan(dependencyHealth(baseline).score);
41
- });
42
-
43
- it('penalizes dead code', () => {
44
- const baseline: DependencyHealthInput = {
45
- nodes: ['a', 'b', 'c'],
46
- edges: [{ sourceId: 'a', targetId: 'b' }],
47
- cycleCount: 0,
48
- deadNodeCount: 0,
49
- };
50
- const withDead: DependencyHealthInput = { ...baseline, deadNodeCount: 2 };
51
- expect(dependencyHealth(withDead).score).toBeLessThan(dependencyHealth(baseline).score);
52
- });
53
-
54
- it('penalizes high fan-in concentration (god nodes)', () => {
55
- // One node targeted by all others → god node
56
- const nodes = ['a', 'b', 'c', 'd', 'e', 'hub'];
57
- const edges = nodes.slice(0, 5).map(n => ({ sourceId: n, targetId: 'hub' }));
58
- const input: DependencyHealthInput = {
59
- nodes,
60
- edges,
61
- cycleCount: 0,
62
- deadNodeCount: 0,
63
- };
64
- const result = dependencyHealth(input);
65
- expect(result.score).toBeLessThan(1);
66
- expect(result.details.godNodeConcentration).toBeGreaterThan(0);
67
- });
68
-
69
- it('returns score in [0, 1] range', () => {
70
- const input: DependencyHealthInput = {
71
- nodes: ['a', 'b'],
72
- edges: [{ sourceId: 'a', targetId: 'b' }, { sourceId: 'b', targetId: 'a' }],
73
- cycleCount: 1,
74
- deadNodeCount: 1,
75
- };
76
- const result = dependencyHealth(input);
77
- expect(result.score).toBeGreaterThanOrEqual(0);
78
- expect(result.score).toBeLessThanOrEqual(1);
79
- });
80
-
81
- it('exposes details breakdown', () => {
82
- const input: DependencyHealthInput = {
83
- nodes: ['a', 'b', 'c'],
84
- edges: [{ sourceId: 'a', targetId: 'b' }],
85
- cycleCount: 0,
86
- deadNodeCount: 1,
87
- };
88
- const { details } = dependencyHealth(input);
89
- expect(typeof details.cyclePenalty).toBe('number');
90
- expect(typeof details.deadCodeRatio).toBe('number');
91
- expect(typeof details.fanSkew).toBe('number');
92
- expect(typeof details.godNodeConcentration).toBe('number');
93
- });
94
-
95
- it('handles empty graph without throwing', () => {
96
- const input: DependencyHealthInput = {
97
- nodes: [],
98
- edges: [],
99
- cycleCount: 0,
100
- deadNodeCount: 0,
101
- };
102
- expect(() => dependencyHealth(input)).not.toThrow();
103
- expect(dependencyHealth(input).score).toBe(1);
104
- });
105
- });