memor-code-cli 0.2.0

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 (418) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/IntentionalStructure/index.d.ts +13 -0
  4. package/dist/IntentionalStructure/index.d.ts.map +1 -0
  5. package/dist/IntentionalStructure/index.js +46 -0
  6. package/dist/IntentionalStructure/index.js.map +1 -0
  7. package/dist/IntentionalStructure/parseCompose.d.ts +13 -0
  8. package/dist/IntentionalStructure/parseCompose.d.ts.map +1 -0
  9. package/dist/IntentionalStructure/parseCompose.js +234 -0
  10. package/dist/IntentionalStructure/parseCompose.js.map +1 -0
  11. package/dist/IntentionalStructure/parseDeployConfigs.d.ts +7 -0
  12. package/dist/IntentionalStructure/parseDeployConfigs.d.ts.map +1 -0
  13. package/dist/IntentionalStructure/parseDeployConfigs.js +168 -0
  14. package/dist/IntentionalStructure/parseDeployConfigs.js.map +1 -0
  15. package/dist/IntentionalStructure/parseEnvWiring.d.ts +7 -0
  16. package/dist/IntentionalStructure/parseEnvWiring.d.ts.map +1 -0
  17. package/dist/IntentionalStructure/parseEnvWiring.js +159 -0
  18. package/dist/IntentionalStructure/parseEnvWiring.js.map +1 -0
  19. package/dist/IntentionalStructure/parseWorkspaces.d.ts +8 -0
  20. package/dist/IntentionalStructure/parseWorkspaces.d.ts.map +1 -0
  21. package/dist/IntentionalStructure/parseWorkspaces.js +179 -0
  22. package/dist/IntentionalStructure/parseWorkspaces.js.map +1 -0
  23. package/dist/IntentionalStructure/types.d.ts +34 -0
  24. package/dist/IntentionalStructure/types.d.ts.map +1 -0
  25. package/dist/IntentionalStructure/types.js +8 -0
  26. package/dist/IntentionalStructure/types.js.map +1 -0
  27. package/dist/RepoTypeDetection/applyRepoModeConsistency.d.ts +11 -0
  28. package/dist/RepoTypeDetection/applyRepoModeConsistency.d.ts.map +1 -0
  29. package/dist/RepoTypeDetection/applyRepoModeConsistency.js +53 -0
  30. package/dist/RepoTypeDetection/applyRepoModeConsistency.js.map +1 -0
  31. package/dist/RepoTypeDetection/detectAppArchetype.d.ts +12 -0
  32. package/dist/RepoTypeDetection/detectAppArchetype.d.ts.map +1 -0
  33. package/dist/RepoTypeDetection/detectAppArchetype.js +162 -0
  34. package/dist/RepoTypeDetection/detectAppArchetype.js.map +1 -0
  35. package/dist/RepoTypeDetection/detectPackageArchetype.d.ts +10 -0
  36. package/dist/RepoTypeDetection/detectPackageArchetype.d.ts.map +1 -0
  37. package/dist/RepoTypeDetection/detectPackageArchetype.js +149 -0
  38. package/dist/RepoTypeDetection/detectPackageArchetype.js.map +1 -0
  39. package/dist/RepoTypeDetection/detectRepoCenterSystems.d.ts +11 -0
  40. package/dist/RepoTypeDetection/detectRepoCenterSystems.d.ts.map +1 -0
  41. package/dist/RepoTypeDetection/detectRepoCenterSystems.js +123 -0
  42. package/dist/RepoTypeDetection/detectRepoCenterSystems.js.map +1 -0
  43. package/dist/RepoTypeDetection/detectRepoMode.d.ts +16 -0
  44. package/dist/RepoTypeDetection/detectRepoMode.d.ts.map +1 -0
  45. package/dist/RepoTypeDetection/detectRepoMode.js +338 -0
  46. package/dist/RepoTypeDetection/detectRepoMode.js.map +1 -0
  47. package/dist/RepoTypeDetection/detectRepoSignals.d.ts +13 -0
  48. package/dist/RepoTypeDetection/detectRepoSignals.d.ts.map +1 -0
  49. package/dist/RepoTypeDetection/detectRepoSignals.js +451 -0
  50. package/dist/RepoTypeDetection/detectRepoSignals.js.map +1 -0
  51. package/dist/RepoTypeDetection/inferSupportRole.d.ts +8 -0
  52. package/dist/RepoTypeDetection/inferSupportRole.d.ts.map +1 -0
  53. package/dist/RepoTypeDetection/inferSupportRole.js +177 -0
  54. package/dist/RepoTypeDetection/inferSupportRole.js.map +1 -0
  55. package/dist/RuntimeInference/detectEnvConsumers.d.ts +7 -0
  56. package/dist/RuntimeInference/detectEnvConsumers.d.ts.map +1 -0
  57. package/dist/RuntimeInference/detectEnvConsumers.js +108 -0
  58. package/dist/RuntimeInference/detectEnvConsumers.js.map +1 -0
  59. package/dist/RuntimeInference/detectHttpEdges.d.ts +4 -0
  60. package/dist/RuntimeInference/detectHttpEdges.d.ts.map +1 -0
  61. package/dist/RuntimeInference/detectHttpEdges.js +146 -0
  62. package/dist/RuntimeInference/detectHttpEdges.js.map +1 -0
  63. package/dist/RuntimeInference/detectOrmConsumers.d.ts +5 -0
  64. package/dist/RuntimeInference/detectOrmConsumers.d.ts.map +1 -0
  65. package/dist/RuntimeInference/detectOrmConsumers.js +117 -0
  66. package/dist/RuntimeInference/detectOrmConsumers.js.map +1 -0
  67. package/dist/RuntimeInference/detectProxyRewrites.d.ts +5 -0
  68. package/dist/RuntimeInference/detectProxyRewrites.d.ts.map +1 -0
  69. package/dist/RuntimeInference/detectProxyRewrites.js +137 -0
  70. package/dist/RuntimeInference/detectProxyRewrites.js.map +1 -0
  71. package/dist/RuntimeInference/detectTrpcEdges.d.ts +4 -0
  72. package/dist/RuntimeInference/detectTrpcEdges.d.ts.map +1 -0
  73. package/dist/RuntimeInference/detectTrpcEdges.js +137 -0
  74. package/dist/RuntimeInference/detectTrpcEdges.js.map +1 -0
  75. package/dist/RuntimeInference/index.d.ts +17 -0
  76. package/dist/RuntimeInference/index.d.ts.map +1 -0
  77. package/dist/RuntimeInference/index.js +32 -0
  78. package/dist/RuntimeInference/index.js.map +1 -0
  79. package/dist/RuntimeInference/types.d.ts +8 -0
  80. package/dist/RuntimeInference/types.d.ts.map +1 -0
  81. package/dist/RuntimeInference/types.js +3 -0
  82. package/dist/RuntimeInference/types.js.map +1 -0
  83. package/dist/SystemSynthesis/index.d.ts +27 -0
  84. package/dist/SystemSynthesis/index.d.ts.map +1 -0
  85. package/dist/SystemSynthesis/index.js +31 -0
  86. package/dist/SystemSynthesis/index.js.map +1 -0
  87. package/dist/SystemSynthesis/mergeLayerOutputs.d.ts +13 -0
  88. package/dist/SystemSynthesis/mergeLayerOutputs.d.ts.map +1 -0
  89. package/dist/SystemSynthesis/mergeLayerOutputs.js +220 -0
  90. package/dist/SystemSynthesis/mergeLayerOutputs.js.map +1 -0
  91. package/dist/SystemSynthesis/stampDeterministic.d.ts +11 -0
  92. package/dist/SystemSynthesis/stampDeterministic.d.ts.map +1 -0
  93. package/dist/SystemSynthesis/stampDeterministic.js +177 -0
  94. package/dist/SystemSynthesis/stampDeterministic.js.map +1 -0
  95. package/dist/SystemSynthesis/synthesize.d.ts +15 -0
  96. package/dist/SystemSynthesis/synthesize.d.ts.map +1 -0
  97. package/dist/SystemSynthesis/synthesize.js +258 -0
  98. package/dist/SystemSynthesis/synthesize.js.map +1 -0
  99. package/dist/SystemSynthesis/types.d.ts +110 -0
  100. package/dist/SystemSynthesis/types.d.ts.map +1 -0
  101. package/dist/SystemSynthesis/types.js +12 -0
  102. package/dist/SystemSynthesis/types.js.map +1 -0
  103. package/dist/amGeneration/buildFlowGraph.d.ts +39 -0
  104. package/dist/amGeneration/buildFlowGraph.d.ts.map +1 -0
  105. package/dist/amGeneration/buildFlowGraph.js +643 -0
  106. package/dist/amGeneration/buildFlowGraph.js.map +1 -0
  107. package/dist/amGeneration/enrichAMEdges.d.ts +16 -0
  108. package/dist/amGeneration/enrichAMEdges.d.ts.map +1 -0
  109. package/dist/amGeneration/enrichAMEdges.js +291 -0
  110. package/dist/amGeneration/enrichAMEdges.js.map +1 -0
  111. package/dist/amGeneration/generateAM.d.ts +23 -0
  112. package/dist/amGeneration/generateAM.d.ts.map +1 -0
  113. package/dist/amGeneration/generateAM.js +131 -0
  114. package/dist/amGeneration/generateAM.js.map +1 -0
  115. package/dist/amGeneration/generateAMForRepo.d.ts +6 -0
  116. package/dist/amGeneration/generateAMForRepo.d.ts.map +1 -0
  117. package/dist/amGeneration/generateAMForRepo.js +130 -0
  118. package/dist/amGeneration/generateAMForRepo.js.map +1 -0
  119. package/dist/amGeneration/generateFlows.d.ts +27 -0
  120. package/dist/amGeneration/generateFlows.d.ts.map +1 -0
  121. package/dist/amGeneration/generateFlows.js +320 -0
  122. package/dist/amGeneration/generateFlows.js.map +1 -0
  123. package/dist/amGeneration/promptBuilder.d.ts +24 -0
  124. package/dist/amGeneration/promptBuilder.d.ts.map +1 -0
  125. package/dist/amGeneration/promptBuilder.js +299 -0
  126. package/dist/amGeneration/promptBuilder.js.map +1 -0
  127. package/dist/amGeneration/selectStrategicFiles.d.ts +42 -0
  128. package/dist/amGeneration/selectStrategicFiles.d.ts.map +1 -0
  129. package/dist/amGeneration/selectStrategicFiles.js +672 -0
  130. package/dist/amGeneration/selectStrategicFiles.js.map +1 -0
  131. package/dist/amGeneration/types.d.ts +83 -0
  132. package/dist/amGeneration/types.d.ts.map +1 -0
  133. package/dist/amGeneration/types.js +9 -0
  134. package/dist/amGeneration/types.js.map +1 -0
  135. package/dist/amSections.d.ts +29 -0
  136. package/dist/amSections.d.ts.map +1 -0
  137. package/dist/amSections.js +424 -0
  138. package/dist/amSections.js.map +1 -0
  139. package/dist/analysis/analysisCache.d.ts +4 -0
  140. package/dist/analysis/analysisCache.d.ts.map +1 -0
  141. package/dist/analysis/analysisCache.js +92 -0
  142. package/dist/analysis/analysisCache.js.map +1 -0
  143. package/dist/analysis/buildBranchStory.d.ts +95 -0
  144. package/dist/analysis/buildBranchStory.d.ts.map +1 -0
  145. package/dist/analysis/buildBranchStory.js +1264 -0
  146. package/dist/analysis/buildBranchStory.js.map +1 -0
  147. package/dist/analysis/buildDetailedFileXRay.d.ts +49 -0
  148. package/dist/analysis/buildDetailedFileXRay.d.ts.map +1 -0
  149. package/dist/analysis/buildDetailedFileXRay.js +607 -0
  150. package/dist/analysis/buildDetailedFileXRay.js.map +1 -0
  151. package/dist/analysis/buildFileXRay.d.ts +35 -0
  152. package/dist/analysis/buildFileXRay.d.ts.map +1 -0
  153. package/dist/analysis/buildFileXRay.js +305 -0
  154. package/dist/analysis/buildFileXRay.js.map +1 -0
  155. package/dist/analysis/classifySilentKiller.d.ts +14 -0
  156. package/dist/analysis/classifySilentKiller.d.ts.map +1 -0
  157. package/dist/analysis/classifySilentKiller.js +235 -0
  158. package/dist/analysis/classifySilentKiller.js.map +1 -0
  159. package/dist/analysis/diffChunks.d.ts +21 -0
  160. package/dist/analysis/diffChunks.d.ts.map +1 -0
  161. package/dist/analysis/diffChunks.js +302 -0
  162. package/dist/analysis/diffChunks.js.map +1 -0
  163. package/dist/analysis/extractRouteMap.d.ts +49 -0
  164. package/dist/analysis/extractRouteMap.d.ts.map +1 -0
  165. package/dist/analysis/extractRouteMap.js +354 -0
  166. package/dist/analysis/extractRouteMap.js.map +1 -0
  167. package/dist/analysis/generateFileInsight.d.ts +19 -0
  168. package/dist/analysis/generateFileInsight.d.ts.map +1 -0
  169. package/dist/analysis/generateFileInsight.js +103 -0
  170. package/dist/analysis/generateFileInsight.js.map +1 -0
  171. package/dist/analysis/llmXRay.d.ts +39 -0
  172. package/dist/analysis/llmXRay.d.ts.map +1 -0
  173. package/dist/analysis/llmXRay.js +208 -0
  174. package/dist/analysis/llmXRay.js.map +1 -0
  175. package/dist/analysis/simulateFailure.d.ts +44 -0
  176. package/dist/analysis/simulateFailure.d.ts.map +1 -0
  177. package/dist/analysis/simulateFailure.js +407 -0
  178. package/dist/analysis/simulateFailure.js.map +1 -0
  179. package/dist/anthropic.d.ts +3 -0
  180. package/dist/anthropic.d.ts.map +1 -0
  181. package/dist/anthropic.js +16 -0
  182. package/dist/anthropic.js.map +1 -0
  183. package/dist/app/buildAppPage.d.ts +34 -0
  184. package/dist/app/buildAppPage.d.ts.map +1 -0
  185. package/dist/app/buildAppPage.js +3085 -0
  186. package/dist/app/buildAppPage.js.map +1 -0
  187. package/dist/app-bundle.js +122 -0
  188. package/dist/buildAppData.d.ts +3 -0
  189. package/dist/buildAppData.d.ts.map +1 -0
  190. package/dist/buildAppData.js +207 -0
  191. package/dist/buildAppData.js.map +1 -0
  192. package/dist/builders/analyzeRepo.d.ts +25 -0
  193. package/dist/builders/analyzeRepo.d.ts.map +1 -0
  194. package/dist/builders/analyzeRepo.js +873 -0
  195. package/dist/builders/analyzeRepo.js.map +1 -0
  196. package/dist/builders/buildSystemConnections.d.ts +3 -0
  197. package/dist/builders/buildSystemConnections.d.ts.map +1 -0
  198. package/dist/builders/buildSystemConnections.js +388 -0
  199. package/dist/builders/buildSystemConnections.js.map +1 -0
  200. package/dist/builders/buildTextSummary.d.ts +61 -0
  201. package/dist/builders/buildTextSummary.d.ts.map +1 -0
  202. package/dist/builders/buildTextSummary.js +178 -0
  203. package/dist/builders/buildTextSummary.js.map +1 -0
  204. package/dist/builders/deriveRecommendedStartPath.d.ts +11 -0
  205. package/dist/builders/deriveRecommendedStartPath.d.ts.map +1 -0
  206. package/dist/builders/deriveRecommendedStartPath.js +140 -0
  207. package/dist/builders/deriveRecommendedStartPath.js.map +1 -0
  208. package/dist/builders/deriveRuntimeRole.d.ts +4 -0
  209. package/dist/builders/deriveRuntimeRole.d.ts.map +1 -0
  210. package/dist/builders/deriveRuntimeRole.js +30 -0
  211. package/dist/builders/deriveRuntimeRole.js.map +1 -0
  212. package/dist/builders/detectRunCommands.d.ts +16 -0
  213. package/dist/builders/detectRunCommands.d.ts.map +1 -0
  214. package/dist/builders/detectRunCommands.js +285 -0
  215. package/dist/builders/detectRunCommands.js.map +1 -0
  216. package/dist/builders/generateSystemNarrative.d.ts +12 -0
  217. package/dist/builders/generateSystemNarrative.d.ts.map +1 -0
  218. package/dist/builders/generateSystemNarrative.js +474 -0
  219. package/dist/builders/generateSystemNarrative.js.map +1 -0
  220. package/dist/builders/gitLogParser.d.ts +15 -0
  221. package/dist/builders/gitLogParser.d.ts.map +1 -0
  222. package/dist/builders/gitLogParser.js +116 -0
  223. package/dist/builders/gitLogParser.js.map +1 -0
  224. package/dist/builders/readRepoContext.d.ts +30 -0
  225. package/dist/builders/readRepoContext.d.ts.map +1 -0
  226. package/dist/builders/readRepoContext.js +323 -0
  227. package/dist/builders/readRepoContext.js.map +1 -0
  228. package/dist/builders/readSystemReadme.d.ts +39 -0
  229. package/dist/builders/readSystemReadme.d.ts.map +1 -0
  230. package/dist/builders/readSystemReadme.js +133 -0
  231. package/dist/builders/readSystemReadme.js.map +1 -0
  232. package/dist/builders/systemRanking.d.ts +24 -0
  233. package/dist/builders/systemRanking.d.ts.map +1 -0
  234. package/dist/builders/systemRanking.js +153 -0
  235. package/dist/builders/systemRanking.js.map +1 -0
  236. package/dist/cli.d.ts +3 -0
  237. package/dist/cli.d.ts.map +1 -0
  238. package/dist/cli.js +170 -0
  239. package/dist/cli.js.map +1 -0
  240. package/dist/detectors/applyRunnableConfidenceGate.d.ts +8 -0
  241. package/dist/detectors/applyRunnableConfidenceGate.d.ts.map +1 -0
  242. package/dist/detectors/applyRunnableConfidenceGate.js +166 -0
  243. package/dist/detectors/applyRunnableConfidenceGate.js.map +1 -0
  244. package/dist/detectors/classifySystemType.d.ts +17 -0
  245. package/dist/detectors/classifySystemType.d.ts.map +1 -0
  246. package/dist/detectors/classifySystemType.js +460 -0
  247. package/dist/detectors/classifySystemType.js.map +1 -0
  248. package/dist/detectors/detectAppInternalUnits.d.ts +20 -0
  249. package/dist/detectors/detectAppInternalUnits.d.ts.map +1 -0
  250. package/dist/detectors/detectAppInternalUnits.js +454 -0
  251. package/dist/detectors/detectAppInternalUnits.js.map +1 -0
  252. package/dist/detectors/detectBlocks.d.ts +6 -0
  253. package/dist/detectors/detectBlocks.d.ts.map +1 -0
  254. package/dist/detectors/detectBlocks.js +354 -0
  255. package/dist/detectors/detectBlocks.js.map +1 -0
  256. package/dist/detectors/detectComposeServices.d.ts +23 -0
  257. package/dist/detectors/detectComposeServices.d.ts.map +1 -0
  258. package/dist/detectors/detectComposeServices.js +255 -0
  259. package/dist/detectors/detectComposeServices.js.map +1 -0
  260. package/dist/detectors/detectEntryPoints.d.ts +6 -0
  261. package/dist/detectors/detectEntryPoints.d.ts.map +1 -0
  262. package/dist/detectors/detectEntryPoints.js +376 -0
  263. package/dist/detectors/detectEntryPoints.js.map +1 -0
  264. package/dist/detectors/detectSubsystems.d.ts +6 -0
  265. package/dist/detectors/detectSubsystems.d.ts.map +1 -0
  266. package/dist/detectors/detectSubsystems.js +376 -0
  267. package/dist/detectors/detectSubsystems.js.map +1 -0
  268. package/dist/detectors/detectSystemCandidates.d.ts +3 -0
  269. package/dist/detectors/detectSystemCandidates.d.ts.map +1 -0
  270. package/dist/detectors/detectSystemCandidates.js +577 -0
  271. package/dist/detectors/detectSystemCandidates.js.map +1 -0
  272. package/dist/devWatcher.d.ts +14 -0
  273. package/dist/devWatcher.d.ts.map +1 -0
  274. package/dist/devWatcher.js +96 -0
  275. package/dist/devWatcher.js.map +1 -0
  276. package/dist/graph/buildCodebaseGraph.d.ts +3 -0
  277. package/dist/graph/buildCodebaseGraph.d.ts.map +1 -0
  278. package/dist/graph/buildCodebaseGraph.js +602 -0
  279. package/dist/graph/buildCodebaseGraph.js.map +1 -0
  280. package/dist/graph/buildLLMPayload.d.ts +89 -0
  281. package/dist/graph/buildLLMPayload.d.ts.map +1 -0
  282. package/dist/graph/buildLLMPayload.js +715 -0
  283. package/dist/graph/buildLLMPayload.js.map +1 -0
  284. package/dist/graph/callLLM.d.ts +16 -0
  285. package/dist/graph/callLLM.d.ts.map +1 -0
  286. package/dist/graph/callLLM.js +274 -0
  287. package/dist/graph/callLLM.js.map +1 -0
  288. package/dist/graph/types.d.ts +76 -0
  289. package/dist/graph/types.d.ts.map +1 -0
  290. package/dist/graph/types.js +5 -0
  291. package/dist/graph/types.js.map +1 -0
  292. package/dist/graph/walkExports.d.ts +2 -0
  293. package/dist/graph/walkExports.d.ts.map +1 -0
  294. package/dist/graph/walkExports.js +172 -0
  295. package/dist/graph/walkExports.js.map +1 -0
  296. package/dist/heuristics/file-patterns.json +325 -0
  297. package/dist/heuristics/known-packages.json +1022 -0
  298. package/dist/heuristics/loader.d.ts +121 -0
  299. package/dist/heuristics/loader.d.ts.map +1 -0
  300. package/dist/heuristics/loader.js +196 -0
  301. package/dist/heuristics/loader.js.map +1 -0
  302. package/dist/heuristics/repo-mode-signals.json +248 -0
  303. package/dist/index.d.ts +3 -0
  304. package/dist/index.d.ts.map +1 -0
  305. package/dist/index.js +93 -0
  306. package/dist/index.js.map +1 -0
  307. package/dist/mcp.d.ts +3 -0
  308. package/dist/mcp.d.ts.map +1 -0
  309. package/dist/mcp.js +356 -0
  310. package/dist/mcp.js.map +1 -0
  311. package/dist/scanner/buildImportGraph.d.ts +23 -0
  312. package/dist/scanner/buildImportGraph.d.ts.map +1 -0
  313. package/dist/scanner/buildImportGraph.js +186 -0
  314. package/dist/scanner/buildImportGraph.js.map +1 -0
  315. package/dist/scanner/detectDBOps.d.ts +21 -0
  316. package/dist/scanner/detectDBOps.d.ts.map +1 -0
  317. package/dist/scanner/detectDBOps.js +346 -0
  318. package/dist/scanner/detectDBOps.js.map +1 -0
  319. package/dist/scanner/detectOutbound.d.ts +6 -0
  320. package/dist/scanner/detectOutbound.d.ts.map +1 -0
  321. package/dist/scanner/detectOutbound.js +101 -0
  322. package/dist/scanner/detectOutbound.js.map +1 -0
  323. package/dist/scanner/detectRepoPurpose.d.ts +19 -0
  324. package/dist/scanner/detectRepoPurpose.d.ts.map +1 -0
  325. package/dist/scanner/detectRepoPurpose.js +335 -0
  326. package/dist/scanner/detectRepoPurpose.js.map +1 -0
  327. package/dist/scanner/detectRoutes.d.ts +22 -0
  328. package/dist/scanner/detectRoutes.d.ts.map +1 -0
  329. package/dist/scanner/detectRoutes.js +406 -0
  330. package/dist/scanner/detectRoutes.js.map +1 -0
  331. package/dist/scanner/filterNoise.d.ts +4 -0
  332. package/dist/scanner/filterNoise.d.ts.map +1 -0
  333. package/dist/scanner/filterNoise.js +95 -0
  334. package/dist/scanner/filterNoise.js.map +1 -0
  335. package/dist/scanner/loadTsAliases.d.ts +20 -0
  336. package/dist/scanner/loadTsAliases.d.ts.map +1 -0
  337. package/dist/scanner/loadTsAliases.js +135 -0
  338. package/dist/scanner/loadTsAliases.js.map +1 -0
  339. package/dist/scanner/routeHandlers.d.ts +15 -0
  340. package/dist/scanner/routeHandlers.d.ts.map +1 -0
  341. package/dist/scanner/routeHandlers.js +154 -0
  342. package/dist/scanner/routeHandlers.js.map +1 -0
  343. package/dist/scanner/scanRepo.d.ts +10 -0
  344. package/dist/scanner/scanRepo.d.ts.map +1 -0
  345. package/dist/scanner/scanRepo.js +165 -0
  346. package/dist/scanner/scanRepo.js.map +1 -0
  347. package/dist/scanner/walkImports.d.ts +14 -0
  348. package/dist/scanner/walkImports.d.ts.map +1 -0
  349. package/dist/scanner/walkImports.js +162 -0
  350. package/dist/scanner/walkImports.js.map +1 -0
  351. package/dist/server.d.ts +2 -0
  352. package/dist/server.d.ts.map +1 -0
  353. package/dist/server.js +956 -0
  354. package/dist/server.js.map +1 -0
  355. package/dist/session/diff.d.ts +4 -0
  356. package/dist/session/diff.d.ts.map +1 -0
  357. package/dist/session/diff.js +150 -0
  358. package/dist/session/diff.js.map +1 -0
  359. package/dist/session/snapshot.d.ts +5 -0
  360. package/dist/session/snapshot.d.ts.map +1 -0
  361. package/dist/session/snapshot.js +114 -0
  362. package/dist/session/snapshot.js.map +1 -0
  363. package/dist/session/store.d.ts +8 -0
  364. package/dist/session/store.d.ts.map +1 -0
  365. package/dist/session/store.js +101 -0
  366. package/dist/session/store.js.map +1 -0
  367. package/dist/session/types.d.ts +46 -0
  368. package/dist/session/types.d.ts.map +1 -0
  369. package/dist/session/types.js +4 -0
  370. package/dist/session/types.js.map +1 -0
  371. package/dist/types.d.ts +350 -0
  372. package/dist/types.d.ts.map +1 -0
  373. package/dist/types.js +4 -0
  374. package/dist/types.js.map +1 -0
  375. package/dist/utils/file.d.ts +5 -0
  376. package/dist/utils/file.d.ts.map +1 -0
  377. package/dist/utils/file.js +76 -0
  378. package/dist/utils/file.js.map +1 -0
  379. package/dist/utils/path.d.ts +7 -0
  380. package/dist/utils/path.d.ts.map +1 -0
  381. package/dist/utils/path.js +62 -0
  382. package/dist/utils/path.js.map +1 -0
  383. package/dist/utils/text.d.ts +5 -0
  384. package/dist/utils/text.d.ts.map +1 -0
  385. package/dist/utils/text.js +29 -0
  386. package/dist/utils/text.js.map +1 -0
  387. package/dist/viewBuilders/buildSystemFolders.d.ts +39 -0
  388. package/dist/viewBuilders/buildSystemFolders.d.ts.map +1 -0
  389. package/dist/viewBuilders/buildSystemFolders.js +198 -0
  390. package/dist/viewBuilders/buildSystemFolders.js.map +1 -0
  391. package/dist/watcher/repoWatcher.d.ts +17 -0
  392. package/dist/watcher/repoWatcher.d.ts.map +1 -0
  393. package/dist/watcher/repoWatcher.js +87 -0
  394. package/dist/watcher/repoWatcher.js.map +1 -0
  395. package/package.json +102 -0
  396. package/public/memor_logo.svg +18 -0
  397. package/public/memor_transparent_logo.svg +25 -0
  398. package/public/tIcons/bun.svg +1 -0
  399. package/public/tIcons/css.svg +1 -0
  400. package/public/tIcons/docker.svg +3 -0
  401. package/public/tIcons/expressjs.svg +1 -0
  402. package/public/tIcons/html5.svg +6 -0
  403. package/public/tIcons/javascript.svg +1 -0
  404. package/public/tIcons/jest.svg +4 -0
  405. package/public/tIcons/json.svg +1 -0
  406. package/public/tIcons/markdown-light.svg +1 -0
  407. package/public/tIcons/nestjs.svg +1 -0
  408. package/public/tIcons/nextjs_icon_dark.svg +1 -0
  409. package/public/tIcons/npm.svg +1 -0
  410. package/public/tIcons/pnpm.svg +1 -0
  411. package/public/tIcons/prisma.svg +1 -0
  412. package/public/tIcons/react_dark.svg +11 -0
  413. package/public/tIcons/supabase.svg +15 -0
  414. package/public/tIcons/tailwindcss.svg +1 -0
  415. package/public/tIcons/turborepo-icon-light.svg +1 -0
  416. package/public/tIcons/typescript.svg +1 -0
  417. package/public/tIcons/vite.svg +1 -0
  418. package/public/tIcons/yarn.svg +1 -0
@@ -0,0 +1,602 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildCodebaseGraph = buildCodebaseGraph;
37
+ /**
38
+ * buildCodebaseGraph — deterministic parser that produces a CodebaseGraph
39
+ * from any JS/TS codebase. No LLM. No guessing.
40
+ *
41
+ * Algorithm:
42
+ * 1. Collect all source files across the whole repo
43
+ * 2. Parse imports + exports for every file (parallel, AST-based)
44
+ * 3. Resolve import paths to canonical file paths
45
+ * 4. Group files into clusters (by immediate parent directory)
46
+ * 5. Build cluster-level edges (cross-cluster imports only)
47
+ * 6. Compute centrality, in/out degree, entry points, shared nodes
48
+ * 7. Detect signals (tests, types, config) from naming conventions
49
+ */
50
+ const fs = __importStar(require("fs/promises"));
51
+ const path = __importStar(require("path"));
52
+ const walkImports_1 = require("../scanner/walkImports");
53
+ const loadTsAliases_1 = require("../scanner/loadTsAliases");
54
+ const walkExports_1 = require("./walkExports");
55
+ const path_1 = require("../utils/path");
56
+ // ── Constants ─────────────────────────────────────────────────────────────
57
+ const SKIP_DIRS = new Set([
58
+ "node_modules", ".git", "dist", "build", "out", ".next", ".turbo",
59
+ "coverage", "__pycache__", ".cache", ".vscode", ".idea", ".husky",
60
+ "storybook-static", ".storybook", "dist-electron", "dist-web",
61
+ ".expo", ".svelte-kit", ".astro", ".parcel-cache",
62
+ ]);
63
+ const SOURCE_EXTS = new Set([".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs"]);
64
+ const EXT_CANDIDATES = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"];
65
+ const TEST_DIR_RE = /test|spec|__tests__|__mocks__|fixtures|__fixtures__|e2e|playwright|cypress/i;
66
+ const TYPE_DIR_RE = /^types?$|^interfaces?$|^models?$|^schemas?$/i;
67
+ const CONFIG_DIR_RE = /^config|^settings?|^env|^constants?|^consts?/i;
68
+ // ── File collection ───────────────────────────────────────────────────────
69
+ const MAX_FILES = 50000; // large repos like react/vscode need room
70
+ async function walkDir(dir, collected, cap) {
71
+ if (collected.size >= cap)
72
+ return;
73
+ let entries;
74
+ try {
75
+ entries = await fs.readdir(dir, { withFileTypes: true });
76
+ }
77
+ catch {
78
+ return;
79
+ }
80
+ for (const entry of entries) {
81
+ if (collected.size >= cap)
82
+ break;
83
+ if (entry.name.startsWith("."))
84
+ continue;
85
+ if (entry.isDirectory()) {
86
+ if (SKIP_DIRS.has(entry.name))
87
+ continue;
88
+ await walkDir(path.join(dir, entry.name), collected, cap);
89
+ }
90
+ else {
91
+ const ext = path.extname(entry.name).toLowerCase();
92
+ if (SOURCE_EXTS.has(ext))
93
+ collected.add(path.join(dir, entry.name));
94
+ }
95
+ }
96
+ }
97
+ async function collectSourceFiles(repoRoot, priorityDirs = [], maxFiles = MAX_FILES) {
98
+ const collected = new Set();
99
+ // Phase 1: scan Layer 1 package directories first — guarantees every declared
100
+ // package gets representation regardless of filesystem walk order.
101
+ // Each package gets an equal share of 75% of the total budget.
102
+ if (priorityDirs.length > 0) {
103
+ const priorityBudget = Math.floor(maxFiles * 0.75);
104
+ const perPackageCap = Math.max(200, Math.floor(priorityBudget / priorityDirs.length));
105
+ for (const dir of priorityDirs) {
106
+ if (collected.size >= maxFiles)
107
+ break;
108
+ // Walk into a temporary set so we can cap per-package without affecting global count
109
+ const pkgFiles = new Set();
110
+ await walkDir(dir, pkgFiles, perPackageCap);
111
+ for (const f of pkgFiles) {
112
+ collected.add(f);
113
+ if (collected.size >= maxFiles)
114
+ break;
115
+ }
116
+ }
117
+ }
118
+ // Phase 2: fill remaining budget with everything else in the repo
119
+ if (collected.size < maxFiles) {
120
+ await walkDir(repoRoot, collected, maxFiles);
121
+ }
122
+ return [...collected];
123
+ }
124
+ // ── Import resolution ─────────────────────────────────────────────────────
125
+ /**
126
+ * Build a map from canonical path (no extension, relative to repoRoot) → absolute path.
127
+ * Used for O(1) import resolution without filesystem I/O during the graph build phase.
128
+ */
129
+ function buildCanonicalMap(absolutePaths, repoRoot) {
130
+ const map = new Map();
131
+ for (const abs of absolutePaths) {
132
+ const rel = (0, path_1.toPosix)(path.relative(repoRoot, abs));
133
+ const canonical = rel.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
134
+ map.set(canonical, abs);
135
+ }
136
+ return map;
137
+ }
138
+ /**
139
+ * Resolve a raw import string from a source file into an absolute path.
140
+ * Returns null if unresolvable (external package, not found in repo).
141
+ */
142
+ function resolveImportToAbs(importStr, fromFileDir, repoRoot, canonicalMap) {
143
+ const resolved = path.resolve(fromFileDir, importStr);
144
+ const rel = (0, path_1.toPosix)(path.relative(repoRoot, resolved));
145
+ if (rel.startsWith(".."))
146
+ return null; // outside repo
147
+ // Strip extension if present
148
+ const canonical = rel.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
149
+ // Direct hit
150
+ if (canonicalMap.has(canonical))
151
+ return canonicalMap.get(canonical);
152
+ // Try explicit extensions (import without extension)
153
+ for (const ext of EXT_CANDIDATES) {
154
+ const withExt = canonical + ext;
155
+ // Not needed — canonical already strips extension; look for exact extension variants
156
+ void withExt;
157
+ }
158
+ // Index fallback: import './foo' → './foo/index.ts'
159
+ const indexVariant = `${canonical}/index`;
160
+ if (canonicalMap.has(indexVariant))
161
+ return canonicalMap.get(indexVariant);
162
+ return null;
163
+ }
164
+ // ── Cluster helpers ───────────────────────────────────────────────────────
165
+ function getClusterId(absoluteFilePath, repoRoot) {
166
+ const rel = (0, path_1.toPosix)(path.relative(repoRoot, absoluteFilePath));
167
+ const dir = path.posix.dirname(rel);
168
+ return dir === "." ? "." : dir;
169
+ }
170
+ function getLang(absoluteFilePath) {
171
+ const ext = path.extname(absoluteFilePath).toLowerCase();
172
+ const map = {
173
+ ".ts": "ts", ".tsx": "tsx", ".js": "js",
174
+ ".jsx": "jsx", ".mjs": "mjs", ".cjs": "cjs",
175
+ };
176
+ return map[ext] ?? "other";
177
+ }
178
+ // ── Route + Model detection ───────────────────────────────────────────────
179
+ async function detectFileRoutes(abs, rel) {
180
+ const routes = [];
181
+ // Next.js app router: app/(group)/foo/page.tsx → /foo
182
+ // Checked FIRST — app router files named page.tsx or route.ts take priority over
183
+ // pages router detection (prevents "api/admin/pages/create/route.ts" from being
184
+ // matched as a pages-router file due to the "pages" segment in the path).
185
+ const appPageMatch = rel.match(/(?:^|\/)app\/(.+?)\/(?:page|route)\.[jt]sx?$/);
186
+ if (appPageMatch) {
187
+ const routePath = "/" + appPageMatch[1]
188
+ .replace(/\([^)]+\)\//g, "") // strip route groups like (marketing)/
189
+ .replace(/\([^)]+\)$/, "");
190
+ routes.push(routePath || "/");
191
+ return routes;
192
+ }
193
+ // Next.js app router root: app/page.tsx → /
194
+ if (/(?:^|\/)app\/(?:page|route)\.[jt]sx?$/.test(rel)) {
195
+ routes.push("/");
196
+ return routes;
197
+ }
198
+ // Next.js pages router API: pages/api/foo.tsx → /api/foo
199
+ const pagesApiMatch = rel.match(/(?:^|\/)pages\/api\/(.+?)\.[jt]sx?$/);
200
+ if (pagesApiMatch) {
201
+ routes.push("/api/" + pagesApiMatch[1].replace(/\/index$/, ""));
202
+ return routes;
203
+ }
204
+ // Next.js pages router: pages/foo/bar.tsx → /foo/bar
205
+ const pagesMatch = rel.match(/(?:^|\/)pages\/(?!_)(.+?)\.[jt]sx?$/);
206
+ if (pagesMatch) {
207
+ const p = "/" + pagesMatch[1].replace(/\/index$/, "").replace(/^index$/, "");
208
+ routes.push(p || "/");
209
+ return routes;
210
+ }
211
+ // Express/Fastify/Hono/NestJS — scan content for route definitions.
212
+ // Only scan files that live in a route-like directory (not just named "detectRoutes.ts").
213
+ const isLikelyRouteFile = /\/routes?\//.test(rel) ||
214
+ /\/controllers?\//.test(rel) ||
215
+ /\/handlers?\//.test(rel) ||
216
+ /\/api\//.test(rel) && /\.(router|controller|handler)\.[jt]sx?$/.test(path.basename(abs));
217
+ if (isLikelyRouteFile) {
218
+ try {
219
+ const content = await fs.readFile(abs, "utf-8");
220
+ // Express/Fastify/Hono: router.get('/path', ...) or app.post('/path', ...)
221
+ const routeRe = /(?:router|app|fastify|hono|server)\s*\.\s*(?:get|post|put|patch|delete|all)\s*\(\s*['"`]([^'"`]+)['"`]/g;
222
+ let m;
223
+ while ((m = routeRe.exec(content)) !== null)
224
+ routes.push(m[1]);
225
+ // NestJS decorators: @Get('/path'), @Post('/path')
226
+ const nestRe = /@(?:Get|Post|Put|Patch|Delete|All)\s*\(\s*['"`]([^'"`]*)['"`]/g;
227
+ while ((m = nestRe.exec(content)) !== null)
228
+ routes.push(m[1] || "/");
229
+ }
230
+ catch { }
231
+ }
232
+ return routes;
233
+ }
234
+ async function detectFileModels(abs, rel) {
235
+ const models = [];
236
+ const fname = path.basename(abs);
237
+ // Prisma schema: model Foo { ... }
238
+ if (fname === "schema.prisma") {
239
+ try {
240
+ const content = await fs.readFile(abs, "utf-8");
241
+ const modelRe = /^model\s+(\w+)\s*\{/gm;
242
+ let m;
243
+ while ((m = modelRe.exec(content)) !== null)
244
+ models.push(m[1]);
245
+ }
246
+ catch { }
247
+ return models;
248
+ }
249
+ const isLikelyModelFile = /\.(model|schema|entity)\.[jt]sx?$/.test(fname) ||
250
+ /\/models?\//.test(rel) ||
251
+ /\/entities\//.test(rel) ||
252
+ /\/schemas?\//.test(rel);
253
+ if (isLikelyModelFile) {
254
+ try {
255
+ const content = await fs.readFile(abs, "utf-8");
256
+ // TypeORM @Entity class Foo
257
+ const entityRe = /@Entity[^]*?class\s+(\w+)/g;
258
+ let m;
259
+ while ((m = entityRe.exec(content)) !== null)
260
+ models.push(m[1]);
261
+ // Mongoose: model<T>('ModelName', ...)
262
+ const mongoRe = /model\s*(?:<[^>]*>)?\s*\(\s*['"`](\w+)['"`]/g;
263
+ while ((m = mongoRe.exec(content)) !== null)
264
+ models.push(m[1]);
265
+ }
266
+ catch { }
267
+ }
268
+ return models;
269
+ }
270
+ function detectSignals(clusterId, filePaths, routesByCluster, modelsByCluster) {
271
+ const name = path.posix.basename(clusterId);
272
+ const fileNames = filePaths.map((f) => path.basename(f));
273
+ const hasTests = TEST_DIR_RE.test(name) ||
274
+ fileNames.some((f) => /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(f)) ||
275
+ fileNames.some((f) => /\.stories\.(jsx?|tsx?)$/.test(f));
276
+ const hasTypes = TYPE_DIR_RE.test(name);
277
+ const hasConfig = CONFIG_DIR_RE.test(name);
278
+ const routes = [...new Set(routesByCluster.get(clusterId) ?? [])];
279
+ const models = [...new Set(modelsByCluster.get(clusterId) ?? [])];
280
+ return { hasTests, hasTypes, hasConfig, routes, models };
281
+ }
282
+ // ── Prisma schema scanning ────────────────────────────────────────────────
283
+ async function scanPrismaSchemas(repoRoot) {
284
+ const result = new Map(); // clusterId → model names
285
+ async function walk(dir, depth) {
286
+ if (depth > 8)
287
+ return;
288
+ let entries;
289
+ try {
290
+ entries = await fs.readdir(dir, { withFileTypes: true });
291
+ }
292
+ catch {
293
+ return;
294
+ }
295
+ for (const entry of entries) {
296
+ if (SKIP_DIRS.has(entry.name) || entry.name.startsWith("."))
297
+ continue;
298
+ if (entry.isDirectory()) {
299
+ await walk(path.join(dir, entry.name), depth + 1);
300
+ }
301
+ else if (entry.name === "schema.prisma") {
302
+ const abs = path.join(dir, entry.name);
303
+ try {
304
+ const content = await fs.readFile(abs, "utf-8");
305
+ const models = [];
306
+ const modelRe = /^model\s+(\w+)\s*\{/gm;
307
+ let m;
308
+ while ((m = modelRe.exec(content)) !== null)
309
+ models.push(m[1]);
310
+ if (models.length > 0) {
311
+ const clusterId = (0, path_1.toPosix)(path.relative(repoRoot, dir));
312
+ result.set(clusterId === "" ? "." : clusterId, models);
313
+ }
314
+ }
315
+ catch { }
316
+ }
317
+ }
318
+ }
319
+ await walk(repoRoot, 0);
320
+ return result;
321
+ }
322
+ // ── Package boundary detection ────────────────────────────────────────────
323
+ async function findPackageBoundaries(repoRoot) {
324
+ const results = [];
325
+ async function walk(dir, depth) {
326
+ if (depth > 6)
327
+ return;
328
+ let entries;
329
+ try {
330
+ entries = await fs.readdir(dir, { withFileTypes: true });
331
+ }
332
+ catch {
333
+ return;
334
+ }
335
+ for (const entry of entries) {
336
+ if (SKIP_DIRS.has(entry.name) || entry.name.startsWith("."))
337
+ continue;
338
+ if (!entry.isDirectory() && entry.name === "package.json") {
339
+ results.push((0, path_1.toPosix)(path.relative(repoRoot, path.join(dir, "package.json"))));
340
+ }
341
+ if (entry.isDirectory()) {
342
+ await walk(path.join(dir, entry.name), depth + 1);
343
+ }
344
+ }
345
+ }
346
+ await walk(repoRoot, 0);
347
+ return results;
348
+ }
349
+ // ── Main export ───────────────────────────────────────────────────────────
350
+ // ── Layer 1 boundary lookup ───────────────────────────────────────────────
351
+ function buildPackageLookup(repoRoot, layer1Paths) {
352
+ // Sort deepest first so the most specific boundary wins
353
+ const sorted = layer1Paths
354
+ .filter(Boolean)
355
+ .sort((a, b) => b.split(path.sep).length - a.split(path.sep).length);
356
+ return (clusterAbsPath) => {
357
+ for (const boundary of sorted) {
358
+ const rel = path.relative(boundary, clusterAbsPath);
359
+ if (!rel.startsWith("..") && !path.isAbsolute(rel)) {
360
+ return (0, path_1.toPosix)(path.relative(repoRoot, boundary));
361
+ }
362
+ }
363
+ return undefined;
364
+ };
365
+ }
366
+ async function buildCodebaseGraph(repoRoot, frameworks = [], layer1Paths = []) {
367
+ const t0 = Date.now();
368
+ // Phase 1: collect files + load TS aliases + scan Prisma schemas
369
+ // L1 package dirs are scanned first to guarantee full coverage before the global cap.
370
+ const [sourceFiles, aliasMap, packageBoundaries, prismaModels] = await Promise.all([
371
+ collectSourceFiles(repoRoot, layer1Paths),
372
+ (0, loadTsAliases_1.loadTsAliases)(repoRoot).catch(() => loadTsAliases_1.EMPTY_ALIAS_MAP),
373
+ findPackageBoundaries(repoRoot),
374
+ scanPrismaSchemas(repoRoot),
375
+ ]);
376
+ if (sourceFiles.length === 0) {
377
+ return emptyGraph(repoRoot, frameworks, packageBoundaries, Date.now() - t0);
378
+ }
379
+ // Phase 2: build canonical map for fast import resolution
380
+ const canonicalMap = buildCanonicalMap(sourceFiles, repoRoot);
381
+ // Phase 3: parse imports + exports + routes + models for every file (parallel)
382
+ const fileResults = await Promise.all(sourceFiles.map(async (abs) => {
383
+ const rel = (0, path_1.toPosix)(path.relative(repoRoot, abs));
384
+ const [rawImports, exports, routes, models] = await Promise.all([
385
+ (0, walkImports_1.walkImports)(abs, aliasMap),
386
+ (0, walkExports_1.walkExports)(abs),
387
+ detectFileRoutes(abs, rel),
388
+ detectFileModels(abs, rel),
389
+ ]);
390
+ const fromDir = path.dirname(abs);
391
+ const resolvedImports = rawImports
392
+ .map((imp) => resolveImportToAbs(imp, fromDir, repoRoot, canonicalMap))
393
+ .filter((r) => r !== null);
394
+ return { abs, exports, resolvedImports, routes, models };
395
+ }));
396
+ // Phase 4: build file nodes + reverse import map
397
+ const fileNodeMap = new Map();
398
+ const importedByMap = new Map(); // abs → set of abs files that import it
399
+ for (const { abs } of fileResults) {
400
+ importedByMap.set(abs, new Set());
401
+ }
402
+ for (const { abs, exports, resolvedImports } of fileResults) {
403
+ const clusterId = getClusterId(abs, repoRoot);
404
+ const relPath = (0, path_1.toPosix)(path.relative(repoRoot, abs));
405
+ fileNodeMap.set(abs, {
406
+ path: relPath,
407
+ clusterId,
408
+ lang: getLang(abs),
409
+ exports,
410
+ importedBy: [], // filled below
411
+ });
412
+ for (const imp of resolvedImports) {
413
+ if (!importedByMap.has(imp))
414
+ importedByMap.set(imp, new Set());
415
+ importedByMap.get(imp).add(abs);
416
+ }
417
+ }
418
+ // Fill importedBy on FileNodes
419
+ for (const [abs, importerSet] of importedByMap) {
420
+ const node = fileNodeMap.get(abs);
421
+ if (node) {
422
+ node.importedBy = [...importerSet].map((a) => (0, path_1.toPosix)(path.relative(repoRoot, a)));
423
+ }
424
+ }
425
+ // Phase 5: group files by cluster + aggregate routes/models
426
+ const clusterFilesMap = new Map(); // clusterId → [abs paths]
427
+ const clusterRoutesMap = new Map();
428
+ const clusterModelsMap = new Map();
429
+ for (const { abs, routes, models } of fileResults) {
430
+ const cid = getClusterId(abs, repoRoot);
431
+ if (!clusterFilesMap.has(cid))
432
+ clusterFilesMap.set(cid, []);
433
+ clusterFilesMap.get(cid).push(abs);
434
+ if (routes.length > 0) {
435
+ if (!clusterRoutesMap.has(cid))
436
+ clusterRoutesMap.set(cid, []);
437
+ clusterRoutesMap.get(cid).push(...routes);
438
+ }
439
+ if (models.length > 0) {
440
+ if (!clusterModelsMap.has(cid))
441
+ clusterModelsMap.set(cid, []);
442
+ clusterModelsMap.get(cid).push(...models);
443
+ }
444
+ }
445
+ // Merge Prisma schema models into cluster models map.
446
+ // If the schema's cluster doesn't exist (e.g. cut off by file cap), walk up to the
447
+ // nearest ancestor cluster that does exist.
448
+ for (const [clusterId, models] of prismaModels) {
449
+ let targetId = clusterId;
450
+ while (targetId && !clusterFilesMap.has(targetId)) {
451
+ const lastSlash = targetId.lastIndexOf("/");
452
+ targetId = lastSlash > 0 ? targetId.slice(0, lastSlash) : "";
453
+ }
454
+ if (!targetId)
455
+ continue;
456
+ if (!clusterModelsMap.has(targetId))
457
+ clusterModelsMap.set(targetId, []);
458
+ clusterModelsMap.get(targetId).push(...models);
459
+ }
460
+ const edgeMap = new Map(); // "from→to" → data
461
+ for (const { abs, resolvedImports } of fileResults) {
462
+ const fromCluster = getClusterId(abs, repoRoot);
463
+ for (const imp of resolvedImports) {
464
+ const toCluster = getClusterId(imp, repoRoot);
465
+ if (toCluster === fromCluster)
466
+ continue; // intra-cluster, skip
467
+ // Skip parent↔child directory edges — these are barrel-file re-export patterns
468
+ // (parent/index.ts importing from child/), not real cross-system dependencies.
469
+ if (toCluster.startsWith(fromCluster + "/") || fromCluster.startsWith(toCluster + "/"))
470
+ continue;
471
+ const key = `${fromCluster}→${toCluster}`;
472
+ if (!edgeMap.has(key))
473
+ edgeMap.set(key, { weight: 0, symbols: new Set() });
474
+ const edge = edgeMap.get(key);
475
+ edge.weight++;
476
+ // Add exported symbols from the target file
477
+ const targetNode = fileNodeMap.get(imp);
478
+ if (targetNode) {
479
+ for (const sym of targetNode.exports)
480
+ edge.symbols.add(sym);
481
+ }
482
+ }
483
+ }
484
+ const edges = [];
485
+ for (const [key, acc] of edgeMap) {
486
+ const sep = key.indexOf("→");
487
+ edges.push({
488
+ from: key.slice(0, sep),
489
+ to: key.slice(sep + "→".length),
490
+ weight: acc.weight,
491
+ symbols: [...acc.symbols].slice(0, 15), // cap symbols per edge
492
+ });
493
+ }
494
+ // Phase 7: compute cluster-level metrics
495
+ // in-degree: how many other clusters import this cluster
496
+ const inDegreeMap = new Map();
497
+ const outDegreeMap = new Map();
498
+ for (const cid of clusterFilesMap.keys()) {
499
+ inDegreeMap.set(cid, 0);
500
+ outDegreeMap.set(cid, 0);
501
+ }
502
+ for (const edge of edges) {
503
+ inDegreeMap.set(edge.to, (inDegreeMap.get(edge.to) ?? 0) + 1);
504
+ outDegreeMap.set(edge.from, (outDegreeMap.get(edge.from) ?? 0) + 1);
505
+ }
506
+ const totalClusters = clusterFilesMap.size;
507
+ const maxInDegree = Math.max(...inDegreeMap.values(), 1);
508
+ // Compute topExports per cluster: exports sorted by how many times they're imported
509
+ // Build symbol import frequency map: symbol → total importer count across all files in cluster
510
+ const clusterExportFreq = new Map(); // clusterId → symbol → importerCount
511
+ for (const [abs, node] of fileNodeMap) {
512
+ const cid = getClusterId(abs, repoRoot);
513
+ if (!clusterExportFreq.has(cid))
514
+ clusterExportFreq.set(cid, new Map());
515
+ const freq = clusterExportFreq.get(cid);
516
+ const importerCount = importedByMap.get(abs)?.size ?? 0;
517
+ for (const sym of node.exports) {
518
+ freq.set(sym, (freq.get(sym) ?? 0) + importerCount);
519
+ }
520
+ }
521
+ // Build Layer 1 package lookup (abs cluster path → L1 package id)
522
+ const getPackageId = buildPackageLookup(repoRoot, layer1Paths);
523
+ // Build cluster nodes
524
+ const clusters = [];
525
+ for (const [cid, files] of clusterFilesMap) {
526
+ const name = cid === "." ? path.posix.basename(repoRoot) : path.posix.basename(cid);
527
+ const depth = cid === "." ? 0 : cid.split("/").length;
528
+ const inDeg = inDegreeMap.get(cid) ?? 0;
529
+ const outDeg = outDegreeMap.get(cid) ?? 0;
530
+ const centrality = totalClusters > 1 ? inDeg / (totalClusters - 1) : 0;
531
+ // All exports across files in this cluster
532
+ const allExports = [];
533
+ const freqMap = clusterExportFreq.get(cid) ?? new Map();
534
+ for (const [sym] of freqMap)
535
+ allExports.push(sym);
536
+ // topExports: sorted by frequency, capped at 10
537
+ const topExports = [...freqMap.entries()]
538
+ .sort((a, b) => b[1] - a[1])
539
+ .slice(0, 10)
540
+ .map(([sym]) => sym);
541
+ // Resolve which Layer 1 package owns this cluster (if any)
542
+ const clusterAbsPath = cid === "." ? repoRoot : path.resolve(repoRoot, cid);
543
+ const packageId = getPackageId(clusterAbsPath);
544
+ clusters.push({
545
+ id: cid,
546
+ name,
547
+ depth,
548
+ fileCount: files.length,
549
+ topExports,
550
+ allExports,
551
+ centrality: parseFloat(centrality.toFixed(3)),
552
+ inDegree: inDeg,
553
+ outDegree: outDeg,
554
+ isEntryPoint: inDeg === 0,
555
+ isShared: inDeg >= Math.max(3, totalClusters * 0.3),
556
+ signals: detectSignals(cid, files, clusterRoutesMap, clusterModelsMap),
557
+ packageId,
558
+ });
559
+ }
560
+ // Sort clusters: by centrality desc, then name
561
+ clusters.sort((a, b) => b.centrality - a.centrality || a.name.localeCompare(b.name));
562
+ const hasRoutes = clusters.some((c) => c.signals.routes.length > 0);
563
+ const hasModels = clusters.some((c) => c.signals.models.length > 0);
564
+ // Collect all Prisma model names from the scan (independent of cluster attribution)
565
+ const allPrismaModels = [...new Set([...prismaModels.values()].flat())];
566
+ const meta = {
567
+ repoRoot,
568
+ totalFiles: sourceFiles.length,
569
+ totalClusters: clusters.length,
570
+ frameworks,
571
+ packageBoundaries,
572
+ hasRoutes,
573
+ hasModels: hasModels || allPrismaModels.length > 0,
574
+ prismaModelNames: allPrismaModels,
575
+ analysisMs: Date.now() - t0,
576
+ };
577
+ // Build clusterFiles map: clusterId → relative file paths
578
+ const clusterFiles = {};
579
+ for (const [cid, files] of clusterFilesMap) {
580
+ clusterFiles[cid] = files.map((abs) => (0, path_1.toPosix)(path.relative(repoRoot, abs)));
581
+ }
582
+ return { meta, clusters, edges, clusterFiles };
583
+ }
584
+ function emptyGraph(repoRoot, frameworks, packageBoundaries, analysisMs) {
585
+ return {
586
+ meta: {
587
+ repoRoot,
588
+ totalFiles: 0,
589
+ totalClusters: 0,
590
+ frameworks,
591
+ packageBoundaries,
592
+ hasRoutes: false,
593
+ hasModels: false,
594
+ prismaModelNames: [],
595
+ analysisMs,
596
+ },
597
+ clusters: [],
598
+ edges: [],
599
+ clusterFiles: {},
600
+ };
601
+ }
602
+ //# sourceMappingURL=buildCodebaseGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildCodebaseGraph.js","sourceRoot":"","sources":["../../src/graph/buildCodebaseGraph.ts"],"names":[],"mappings":"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"}