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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Mukur Panchal
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # Memor
2
+
3
+ **Instant codebase understanding for any TS/JS project.**
4
+
5
+ Memor analyzes your repository and generates an interactive architectural briefing — structure, runtime flows, and change impact — all in your browser, in seconds.
6
+
7
+ No cloud. No AI API calls. Everything runs locally on your machine.
8
+
9
+ ## Quick Start
10
+
11
+ ```bash
12
+ npx memor
13
+ ```
14
+
15
+ That's it. Memor analyzes your codebase and opens an interactive app at `http://localhost:4173`.
16
+
17
+ ## Install (optional)
18
+
19
+ ```bash
20
+ npm install -g memor-cli
21
+ ```
22
+
23
+ Then run `memor` from any TS/JS project directory.
24
+
25
+ ### Options
26
+
27
+ ```
28
+ memor # Analyze current directory
29
+ memor /path/to/project # Analyze a specific project
30
+ memor --port 3000 # Use a custom port
31
+ memor --open # Auto-open browser after analysis
32
+ ```
33
+
34
+ ## What You Get
35
+
36
+ ### Overview
37
+ A snapshot of what the project is — identity, tech stack, architecture zones, entry point, and a flow preview. One card, instant context.
38
+
39
+ ### Structure
40
+ An interactive radial map of the codebase architecture. Navigate zones, drill into systems, see connections and relationships. Progressive disclosure — zones first, then systems inside each zone.
41
+
42
+ ### Flow
43
+ Animated storytelling of how the system actually works at runtime. Detects architectural patterns (request pipelines, data flows, dev loops) and presents them as step-by-step timelines with system context, file paths, and fused impact intelligence.
44
+
45
+ ### Impact
46
+ "If I change THIS, what breaks?" Select any system and see a directional ripple graph showing direct and indirect downstream impact, risk levels, blast radius, and affected areas.
47
+
48
+ ## How It Works
49
+
50
+ Memor scans your project structure and source files to detect:
51
+
52
+ - **Systems** — logical modules, packages, or architectural boundaries
53
+ - **Zones** — groups of related systems (e.g., "Core Runtime", "API Layer", "Testing")
54
+ - **Connections** — import relationships, extensions, and coupling between systems
55
+ - **Flows** — runtime behavior patterns based on detected archetypes
56
+ - **Impact** — change propagation paths using the connection graph
57
+
58
+ Everything is deterministic. Same codebase, same result.
59
+
60
+ ## MCP Integration
61
+
62
+ Memor can run as an [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server, letting your AI assistant query the architecture directly from your editor.
63
+
64
+ ### Setup
65
+
66
+ Add to your Cursor/VS Code MCP config:
67
+
68
+ ```json
69
+ {
70
+ "memor": {
71
+ "command": "memor-mcp",
72
+ "args": ["/path/to/your/project"]
73
+ }
74
+ }
75
+ ```
76
+
77
+ ### Available Tools
78
+
79
+ | Tool | Description |
80
+ |------|-------------|
81
+ | `get_architecture` | High-level architecture overview — repo mode, zones, couplings |
82
+ | `list_systems` | All detected systems with type, tier, and description |
83
+ | `get_system_detail` | Deep dive into a specific system — connections, blocks, internal structure |
84
+ | `get_impact` | Change impact analysis — blast radius, risk levels, affected systems |
85
+ | `get_flows` | Runtime flows — how the system actually works step by step |
86
+ | `get_zones` | Architectural zones and their member systems |
87
+ | `search_systems` | Keyword search across system names, types, tech stacks |
88
+ | `get_reading_order` | Recommended order for reading the codebase |
89
+ | `get_couplings` | System coupling relationships ranked by strength |
90
+
91
+ ### Available Prompts
92
+
93
+ | Prompt | Description |
94
+ |--------|-------------|
95
+ | `understand-codebase` | Architecture-aware understanding prompt |
96
+ | `plan-change` | Impact-aware change planning for a specific system |
97
+
98
+ ## Requirements
99
+
100
+ - Node.js >= 18
101
+ - Works on any TS/JS codebase (monorepos, frameworks, libraries, web apps, APIs)
102
+
103
+ ## Contributing
104
+
105
+ Contributions are welcome! Please open an issue first to discuss what you'd like to change.
106
+
107
+ ## License
108
+
109
+ [MIT](LICENSE)
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Layer 1 — Intentional Structure Detection
3
+ *
4
+ * Parses files that developers explicitly wrote to declare their architecture:
5
+ * docker-compose, workspace configs, env files, deploy configs.
6
+ *
7
+ * Output is the highest-authority input to AM building — confidence 1.0 throughout.
8
+ * Later layers (import graph, LLM) supplement but never override these facts.
9
+ */
10
+ import type { IntentionalStructure } from "./types";
11
+ export type { IntentionalStructure, IntentionalSystem, IntentionalEdge, EnvWiring } from "./types";
12
+ export declare function detectIntentionalStructure(repoRoot: string): Promise<IntentionalStructure>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/IntentionalStructure/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAMpD,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEnG,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2ChG"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectIntentionalStructure = detectIntentionalStructure;
4
+ const parseCompose_1 = require("./parseCompose");
5
+ const parseWorkspaces_1 = require("./parseWorkspaces");
6
+ const parseEnvWiring_1 = require("./parseEnvWiring");
7
+ const parseDeployConfigs_1 = require("./parseDeployConfigs");
8
+ async function detectIntentionalStructure(repoRoot) {
9
+ // Run all parsers in parallel — they are independent reads
10
+ const [compose, workspaces, deployConfigs] = await Promise.all([
11
+ (0, parseCompose_1.parseCompose)(repoRoot),
12
+ (0, parseWorkspaces_1.parseWorkspaces)(repoRoot),
13
+ (0, parseDeployConfigs_1.parseDeployConfigs)(repoRoot),
14
+ ]);
15
+ // Merge all declared systems, deduplicated by name
16
+ const allSystems = [...compose.systems, ...workspaces.systems, ...deployConfigs.systems];
17
+ const seenNames = new Set();
18
+ const systems = allSystems.filter((s) => {
19
+ if (seenNames.has(s.name))
20
+ return false;
21
+ seenNames.add(s.name);
22
+ return true;
23
+ });
24
+ // Build the known system name set for env wiring inference
25
+ const knownSystemNames = new Set(systems.map((s) => s.name));
26
+ // Package paths for sub-directory env scanning (monorepos keep .env in sub-packages)
27
+ const packagePaths = workspaces.systems
28
+ .filter((s) => s.path !== null)
29
+ .map((s) => s.path);
30
+ // Env wiring: scan root + all workspace package dirs
31
+ const envResult = await (0, parseEnvWiring_1.parseEnvWiring)(repoRoot, knownSystemNames, packagePaths);
32
+ const edges = [...compose.edges, ...workspaces.edges];
33
+ const sources = [
34
+ ...compose.sources,
35
+ ...workspaces.sources,
36
+ ...deployConfigs.sources,
37
+ ...envResult.sources,
38
+ ];
39
+ return {
40
+ systems,
41
+ edges,
42
+ envWiring: envResult.envWiring,
43
+ sources: [...new Set(sources)],
44
+ };
45
+ }
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/IntentionalStructure/index.ts"],"names":[],"mappings":";;AAiBA,gEA2CC;AAlDD,iDAA8C;AAC9C,uDAAoD;AACpD,qDAAkD;AAClD,6DAA0D;AAInD,KAAK,UAAU,0BAA0B,CAAC,QAAgB;IAC/D,2DAA2D;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7D,IAAA,2BAAY,EAAC,QAAQ,CAAC;QACtB,IAAA,iCAAe,EAAC,QAAQ,CAAC;QACzB,IAAA,uCAAkB,EAAC,QAAQ,CAAC;KAC7B,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACtC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7D,qFAAqF;IACrF,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;IAEhC,qDAAqD;IACrD,MAAM,SAAS,GAAG,MAAM,IAAA,+BAAc,EAAC,QAAQ,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAEjF,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG;QACd,GAAG,OAAO,CAAC,OAAO;QAClB,GAAG,UAAU,CAAC,OAAO;QACrB,GAAG,aAAa,CAAC,OAAO;QACxB,GAAG,SAAS,CAAC,OAAO;KACrB,CAAC;IAEF,OAAO;QACL,OAAO;QACP,KAAK;QACL,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { IntentionalSystem, IntentionalEdge } from "./types";
2
+ export type ComposeParseResult = {
3
+ systems: IntentionalSystem[];
4
+ edges: IntentionalEdge[];
5
+ envVars: Array<{
6
+ serviceName: string;
7
+ key: string;
8
+ value: string;
9
+ }>;
10
+ sources: string[];
11
+ };
12
+ export declare function parseCompose(repoRoot: string): Promise<ComposeParseResult>;
13
+ //# sourceMappingURL=parseCompose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseCompose.d.ts","sourceRoot":"","sources":["../../src/IntentionalStructure/parseCompose.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAkMlE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8BhF"}
@@ -0,0 +1,234 @@
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.parseCompose = parseCompose;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const path = __importStar(require("path"));
39
+ const DB_IMAGES = new Set(["postgres", "postgresql", "mysql", "mariadb", "mongo", "mongodb", "sqlite", "mssql", "cockroachdb"]);
40
+ const CACHE_IMAGES = new Set(["redis", "memcached", "dragonfly", "keydb"]);
41
+ const QUEUE_IMAGES = new Set(["rabbitmq", "kafka", "nats", "activemq", "pulsar", "zookeeper"]);
42
+ const PROXY_IMAGES = new Set(["nginx", "traefik", "haproxy", "caddy", "envoy"]);
43
+ function inferType(buildPath, image) {
44
+ if (buildPath)
45
+ return "app";
46
+ const img = (image ?? "").toLowerCase().split(":")[0].split("/").pop() ?? "";
47
+ if (DB_IMAGES.has(img))
48
+ return "database";
49
+ if (CACHE_IMAGES.has(img))
50
+ return "cache";
51
+ if (QUEUE_IMAGES.has(img))
52
+ return "queue";
53
+ if (PROXY_IMAGES.has(img))
54
+ return "proxy";
55
+ if (img)
56
+ return "infra";
57
+ return "infra";
58
+ }
59
+ function parseSimpleYaml(content) {
60
+ const lines = content.split("\n");
61
+ const root = {};
62
+ const stack = [{ indent: -1, obj: root }];
63
+ for (const rawLine of lines) {
64
+ if (rawLine.trimStart().startsWith("#"))
65
+ continue;
66
+ const trimmed = rawLine.trimEnd();
67
+ if (!trimmed.trim())
68
+ continue;
69
+ const indent = rawLine.length - rawLine.trimStart().length;
70
+ const line = trimmed.trim();
71
+ while (stack.length > 1 && stack[stack.length - 1].indent >= indent)
72
+ stack.pop();
73
+ const parent = stack[stack.length - 1].obj;
74
+ if (line.startsWith("- ")) {
75
+ const val = line.slice(2).trim();
76
+ const key = Object.keys(parent).pop() ?? "";
77
+ if (key && !Array.isArray(parent[key]))
78
+ parent[key] = [];
79
+ if (key && Array.isArray(parent[key]))
80
+ parent[key].push(val);
81
+ }
82
+ else if (line.includes(":")) {
83
+ const colonIdx = line.indexOf(":");
84
+ const key = line.slice(0, colonIdx).trim();
85
+ const rest = line.slice(colonIdx + 1).trim();
86
+ if (rest === "" || rest === "|" || rest === ">") {
87
+ const child = {};
88
+ parent[key] = child;
89
+ stack.push({ indent, obj: child });
90
+ }
91
+ else {
92
+ parent[key] = rest.replace(/#.*$/, "").trim().replace(/^["']|["']$/g, "");
93
+ }
94
+ }
95
+ }
96
+ return root;
97
+ }
98
+ function parseFile(content, filePath, repoRoot) {
99
+ const yaml = parseSimpleYaml(content);
100
+ const servicesBlock = yaml["services"];
101
+ if (!servicesBlock || typeof servicesBlock !== "object") {
102
+ return { systems: [], edges: [], envVars: [] };
103
+ }
104
+ const services = [];
105
+ for (const [name, rawSvc] of Object.entries(servicesBlock)) {
106
+ if (typeof rawSvc !== "object" || !rawSvc)
107
+ continue;
108
+ const svc = rawSvc;
109
+ let buildPath = null;
110
+ const buildVal = svc["build"];
111
+ if (typeof buildVal === "string" && buildVal) {
112
+ buildPath = path.resolve(path.dirname(filePath), buildVal);
113
+ }
114
+ else if (typeof buildVal === "object" && buildVal) {
115
+ const ctx = buildVal["context"];
116
+ if (typeof ctx === "string")
117
+ buildPath = path.resolve(path.dirname(filePath), ctx);
118
+ }
119
+ const image = typeof svc["image"] === "string" ? svc["image"] : null;
120
+ const portsRaw = svc["ports"];
121
+ const ports = Array.isArray(portsRaw) ? portsRaw.map(String) : [];
122
+ const envVars = {};
123
+ const envRaw = svc["environment"];
124
+ if (typeof envRaw === "object" && envRaw && !Array.isArray(envRaw)) {
125
+ for (const [k, v] of Object.entries(envRaw)) {
126
+ if (typeof v === "string")
127
+ envVars[k] = v;
128
+ }
129
+ }
130
+ else if (Array.isArray(envRaw)) {
131
+ for (const entry of envRaw) {
132
+ const str = String(entry);
133
+ const eq = str.indexOf("=");
134
+ if (eq > -1)
135
+ envVars[str.slice(0, eq)] = str.slice(eq + 1);
136
+ }
137
+ }
138
+ const dependsRaw = svc["depends_on"];
139
+ const dependsOn = Array.isArray(dependsRaw)
140
+ ? dependsRaw.map(String)
141
+ : typeof dependsRaw === "object" && dependsRaw
142
+ ? Object.keys(dependsRaw)
143
+ : [];
144
+ services.push({ name, buildPath, image, ports, envVars, dependsOn, inferredType: inferType(buildPath, image) });
145
+ }
146
+ const serviceNames = new Set(services.map((s) => s.name));
147
+ const relFile = path.relative(repoRoot, filePath);
148
+ const systems = services.map((s) => ({
149
+ name: s.name,
150
+ path: s.buildPath,
151
+ type: s.inferredType === "infra" ? "infra" : s.inferredType,
152
+ source: "compose",
153
+ confidence: 1.0,
154
+ }));
155
+ const edges = [];
156
+ for (const svc of services) {
157
+ for (const dep of svc.dependsOn) {
158
+ if (!serviceNames.has(dep))
159
+ continue;
160
+ const target = services.find((s) => s.name === dep);
161
+ const type = target?.inferredType === "database" ? "DB" :
162
+ target?.inferredType === "cache" ? "CACHE" :
163
+ target?.inferredType === "queue" ? "QUEUE" :
164
+ target?.inferredType === "proxy" ? "PROXY" :
165
+ "DEPENDS_ON";
166
+ edges.push({
167
+ from: svc.name, to: dep,
168
+ type: type,
169
+ evidence: `${relFile}: ${svc.name}.depends_on.${dep}`,
170
+ confidence: 1.0,
171
+ });
172
+ }
173
+ for (const [key, val] of Object.entries(svc.envVars)) {
174
+ for (const other of services) {
175
+ if (other.name === svc.name)
176
+ continue;
177
+ if (val.includes(`//${other.name}`) ||
178
+ val.includes(`://${other.name}:`) ||
179
+ val === other.name ||
180
+ val.startsWith(`${other.name}:`)) {
181
+ const already = edges.some((e) => e.from === svc.name && e.to === other.name);
182
+ if (!already) {
183
+ edges.push({
184
+ from: svc.name, to: other.name,
185
+ type: "DEPENDS_ON",
186
+ evidence: `${relFile}: ${svc.name}.environment.${key}=${val}`,
187
+ confidence: 1.0,
188
+ });
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ const envVarsOut = services.flatMap((s) => Object.entries(s.envVars).map(([key, value]) => ({ serviceName: s.name, key, value })));
195
+ return { systems, edges, envVars: envVarsOut };
196
+ }
197
+ const COMPOSE_FILENAMES = [
198
+ "docker-compose.yml", "docker-compose.yaml",
199
+ "docker-compose.override.yml", "docker-compose.override.yaml",
200
+ "docker-compose.dev.yml", "docker-compose.dev.yaml",
201
+ "docker-compose.prod.yml", "docker-compose.prod.yaml",
202
+ "compose.yml", "compose.yaml",
203
+ ];
204
+ async function parseCompose(repoRoot) {
205
+ const result = { systems: [], edges: [], envVars: [], sources: [] };
206
+ const searchDirs = [repoRoot];
207
+ try {
208
+ const entries = await fs.readdir(repoRoot, { withFileTypes: true });
209
+ for (const e of entries) {
210
+ if (e.isDirectory() && !e.name.startsWith(".") && e.name !== "node_modules") {
211
+ searchDirs.push(path.join(repoRoot, e.name));
212
+ }
213
+ }
214
+ }
215
+ catch { }
216
+ for (const dir of searchDirs) {
217
+ for (const filename of COMPOSE_FILENAMES) {
218
+ const filePath = path.join(dir, filename);
219
+ try {
220
+ const content = await fs.readFile(filePath, "utf-8");
221
+ const parsed = parseFile(content, filePath, repoRoot);
222
+ if (parsed.systems.length > 0) {
223
+ result.systems.push(...parsed.systems);
224
+ result.edges.push(...parsed.edges);
225
+ result.envVars.push(...parsed.envVars);
226
+ result.sources.push(path.relative(repoRoot, filePath));
227
+ }
228
+ }
229
+ catch { }
230
+ }
231
+ }
232
+ return result;
233
+ }
234
+ //# sourceMappingURL=parseCompose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseCompose.js","sourceRoot":"","sources":["../../src/IntentionalStructure/parseCompose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { IntentionalSystem } from "./types";
2
+ export type DeployParseResult = {
3
+ systems: IntentionalSystem[];
4
+ sources: string[];
5
+ };
6
+ export declare function parseDeployConfigs(repoRoot: string): Promise<DeployParseResult>;
7
+ //# sourceMappingURL=parseDeployConfigs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseDeployConfigs.d.ts","sourceRoot":"","sources":["../../src/IntentionalStructure/parseDeployConfigs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AA6GF,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsBrF"}
@@ -0,0 +1,168 @@
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.parseDeployConfigs = parseDeployConfigs;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const path = __importStar(require("path"));
39
+ // ── vercel.json ───────────────────────────────────────────────────────────
40
+ async function parseVercel(repoRoot) {
41
+ try {
42
+ const raw = await fs.readFile(path.join(repoRoot, "vercel.json"), "utf-8");
43
+ const json = JSON.parse(raw);
44
+ // vercel.json doesn't have an explicit "name" field — use repo dir name
45
+ const name = typeof json["name"] === "string" ? json["name"] : path.basename(repoRoot);
46
+ return {
47
+ system: { name, path: repoRoot, type: "app", source: "deploy-config", confidence: 1.0 },
48
+ source: "vercel.json",
49
+ };
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ // ── fly.toml ──────────────────────────────────────────────────────────────
56
+ // Only reads "app = ..." — no full TOML parser needed.
57
+ async function parseFly(repoRoot) {
58
+ try {
59
+ const raw = await fs.readFile(path.join(repoRoot, "fly.toml"), "utf-8");
60
+ for (const line of raw.split("\n")) {
61
+ const m = line.match(/^app\s*=\s*["']?([^"'\s]+)["']?/);
62
+ if (m) {
63
+ return {
64
+ system: { name: m[1], path: repoRoot, type: "app", source: "deploy-config", confidence: 1.0 },
65
+ source: "fly.toml",
66
+ };
67
+ }
68
+ }
69
+ return null;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ // ── railway.json / railway.toml ───────────────────────────────────────────
76
+ async function parseRailway(repoRoot) {
77
+ // railway.json
78
+ try {
79
+ const raw = await fs.readFile(path.join(repoRoot, "railway.json"), "utf-8");
80
+ const json = JSON.parse(raw);
81
+ const name = typeof json["name"] === "string"
82
+ ? json["name"]
83
+ : path.basename(repoRoot);
84
+ return {
85
+ system: { name, path: repoRoot, type: "app", source: "deploy-config", confidence: 1.0 },
86
+ source: "railway.json",
87
+ };
88
+ }
89
+ catch { }
90
+ // railway.toml
91
+ try {
92
+ const raw = await fs.readFile(path.join(repoRoot, "railway.toml"), "utf-8");
93
+ for (const line of raw.split("\n")) {
94
+ const m = line.match(/^name\s*=\s*["']?([^"'\s]+)["']?/);
95
+ if (m) {
96
+ return {
97
+ system: { name: m[1], path: repoRoot, type: "app", source: "deploy-config", confidence: 1.0 },
98
+ source: "railway.toml",
99
+ };
100
+ }
101
+ }
102
+ return null;
103
+ }
104
+ catch {
105
+ return null;
106
+ }
107
+ }
108
+ // ── render.yaml ───────────────────────────────────────────────────────────
109
+ // Reads service names from the services: list.
110
+ async function parseRender(repoRoot) {
111
+ try {
112
+ const raw = await fs.readFile(path.join(repoRoot, "render.yaml"), "utf-8");
113
+ const systems = [];
114
+ let inServices = false;
115
+ let currentName = null;
116
+ for (const line of raw.split("\n")) {
117
+ const trimmed = line.trim();
118
+ if (trimmed.startsWith("services:")) {
119
+ inServices = true;
120
+ continue;
121
+ }
122
+ if (!inServices)
123
+ continue;
124
+ if (trimmed.startsWith("- name:") || trimmed.startsWith("- name :")) {
125
+ const m = trimmed.match(/^-\s*name\s*:\s*(.+)/);
126
+ if (m)
127
+ currentName = m[1].trim().replace(/^["']|["']$/g, "");
128
+ }
129
+ else if (trimmed.startsWith("name:") && currentName === null) {
130
+ const m = trimmed.match(/^name\s*:\s*(.+)/);
131
+ if (m)
132
+ currentName = m[1].trim().replace(/^["']|["']$/g, "");
133
+ }
134
+ if (currentName) {
135
+ systems.push({ name: currentName, path: repoRoot, type: "app", source: "deploy-config", confidence: 1.0 });
136
+ currentName = null;
137
+ }
138
+ }
139
+ if (systems.length > 0)
140
+ return { systems, source: "render.yaml" };
141
+ return null;
142
+ }
143
+ catch {
144
+ return null;
145
+ }
146
+ }
147
+ // ── Entry point ───────────────────────────────────────────────────────────
148
+ async function parseDeployConfigs(repoRoot) {
149
+ const result = { systems: [], sources: [] };
150
+ const [vercel, fly, railway, render] = await Promise.all([
151
+ parseVercel(repoRoot),
152
+ parseFly(repoRoot),
153
+ parseRailway(repoRoot),
154
+ parseRender(repoRoot),
155
+ ]);
156
+ for (const r of [vercel, fly, railway]) {
157
+ if (r) {
158
+ result.systems.push(r.system);
159
+ result.sources.push(r.source);
160
+ }
161
+ }
162
+ if (render) {
163
+ result.systems.push(...render.systems);
164
+ result.sources.push(render.source);
165
+ }
166
+ return result;
167
+ }
168
+ //# sourceMappingURL=parseDeployConfigs.js.map