projscan 4.5.0 → 4.7.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 (703) hide show
  1. package/README.md +30 -16
  2. package/dist/analyzers/pythonDependencyRiskCheck.js +1 -1
  3. package/dist/analyzers/pythonDependencyRiskCheck.js.map +1 -1
  4. package/dist/cli/_shared.d.ts +4 -5
  5. package/dist/cli/_shared.js +34 -213
  6. package/dist/cli/_shared.js.map +1 -1
  7. package/dist/cli/architectureLayers.d.ts +2 -0
  8. package/dist/cli/architectureLayers.js +112 -0
  9. package/dist/cli/architectureLayers.js.map +1 -0
  10. package/dist/cli/bannerDisplay.d.ts +9 -0
  11. package/dist/cli/bannerDisplay.js +18 -0
  12. package/dist/cli/bannerDisplay.js.map +1 -0
  13. package/dist/cli/changedIssueFilter.d.ts +10 -0
  14. package/dist/cli/changedIssueFilter.js +24 -0
  15. package/dist/cli/changedIssueFilter.js.map +1 -0
  16. package/dist/cli/changedOnly.d.ts +16 -0
  17. package/dist/cli/changedOnly.js +28 -0
  18. package/dist/cli/changedOnly.js.map +1 -0
  19. package/dist/cli/commandPath.d.ts +2 -0
  20. package/dist/cli/commandPath.js +12 -0
  21. package/dist/cli/commandPath.js.map +1 -0
  22. package/dist/cli/commands/agentBrief.js +11 -0
  23. package/dist/cli/commands/agentBrief.js.map +1 -1
  24. package/dist/cli/commands/analyze.js +6 -5
  25. package/dist/cli/commands/analyze.js.map +1 -1
  26. package/dist/cli/commands/ci.js +5 -4
  27. package/dist/cli/commands/ci.js.map +1 -1
  28. package/dist/cli/commands/coordinate.js +27 -0
  29. package/dist/cli/commands/coordinate.js.map +1 -1
  30. package/dist/cli/commands/doctor.js +6 -5
  31. package/dist/cli/commands/doctor.js.map +1 -1
  32. package/dist/cli/formatOptions.d.ts +4 -0
  33. package/dist/cli/formatOptions.js +30 -0
  34. package/dist/cli/formatOptions.js.map +1 -0
  35. package/dist/cli/pluginReporter.d.ts +14 -0
  36. package/dist/cli/pluginReporter.js +46 -0
  37. package/dist/cli/pluginReporter.js.map +1 -0
  38. package/dist/cli/projectConfig.d.ts +12 -0
  39. package/dist/cli/projectConfig.js +41 -0
  40. package/dist/cli/projectConfig.js.map +1 -0
  41. package/dist/cli/treeSlice.d.ts +3 -0
  42. package/dist/cli/treeSlice.js +12 -0
  43. package/dist/cli/treeSlice.js.map +1 -0
  44. package/dist/core/agentBrief.js +6 -1
  45. package/dist/core/agentBrief.js.map +1 -1
  46. package/dist/core/ast.d.ts +4 -81
  47. package/dist/core/ast.js +11 -637
  48. package/dist/core/ast.js.map +1 -1
  49. package/dist/core/astBodySignals.d.ts +17 -0
  50. package/dist/core/astBodySignals.js +106 -0
  51. package/dist/core/astBodySignals.js.map +1 -0
  52. package/dist/core/astFunctionCollector.d.ts +11 -0
  53. package/dist/core/astFunctionCollector.js +140 -0
  54. package/dist/core/astFunctionCollector.js.map +1 -0
  55. package/dist/core/astFunctionNames.d.ts +2 -0
  56. package/dist/core/astFunctionNames.js +53 -0
  57. package/dist/core/astFunctionNames.js.map +1 -0
  58. package/dist/core/astFunctionNodes.d.ts +2 -0
  59. package/dist/core/astFunctionNodes.js +12 -0
  60. package/dist/core/astFunctionNodes.js.map +1 -0
  61. package/dist/core/astMembers.d.ts +14 -0
  62. package/dist/core/astMembers.js +145 -0
  63. package/dist/core/astMembers.js.map +1 -0
  64. package/dist/core/astModuleSignals.d.ts +3 -0
  65. package/dist/core/astModuleSignals.js +140 -0
  66. package/dist/core/astModuleSignals.js.map +1 -0
  67. package/dist/core/astParser.d.ts +11 -0
  68. package/dist/core/astParser.js +38 -0
  69. package/dist/core/astParser.js.map +1 -0
  70. package/dist/core/astProgramSignals.d.ts +11 -0
  71. package/dist/core/astProgramSignals.js +97 -0
  72. package/dist/core/astProgramSignals.js.map +1 -0
  73. package/dist/core/astTypes.d.ts +78 -0
  74. package/dist/core/astTypes.js +2 -0
  75. package/dist/core/astTypes.js.map +1 -0
  76. package/dist/core/bugHunt.js +2 -142
  77. package/dist/core/bugHunt.js.map +1 -1
  78. package/dist/core/bugHuntHotspotFindings.d.ts +2 -0
  79. package/dist/core/bugHuntHotspotFindings.js +68 -0
  80. package/dist/core/bugHuntHotspotFindings.js.map +1 -0
  81. package/dist/core/bugHuntPreflightFindings.d.ts +3 -0
  82. package/dist/core/bugHuntPreflightFindings.js +115 -0
  83. package/dist/core/bugHuntPreflightFindings.js.map +1 -0
  84. package/dist/core/codeGraph.d.ts +3 -35
  85. package/dist/core/codeGraph.js +7 -261
  86. package/dist/core/codeGraph.js.map +1 -1
  87. package/dist/core/codeGraphFanMetrics.d.ts +17 -0
  88. package/dist/core/codeGraphFanMetrics.js +89 -0
  89. package/dist/core/codeGraphFanMetrics.js.map +1 -0
  90. package/dist/core/codeGraphFileSelection.d.ts +7 -0
  91. package/dist/core/codeGraphFileSelection.js +19 -0
  92. package/dist/core/codeGraphFileSelection.js.map +1 -0
  93. package/dist/core/codeGraphIndexes.d.ts +23 -0
  94. package/dist/core/codeGraphIndexes.js +57 -0
  95. package/dist/core/codeGraphIndexes.js.map +1 -0
  96. package/dist/core/codeGraphParsing.d.ts +20 -0
  97. package/dist/core/codeGraphParsing.js +104 -0
  98. package/dist/core/codeGraphParsing.js.map +1 -0
  99. package/dist/core/codeGraphQueries.d.ts +9 -0
  100. package/dist/core/codeGraphQueries.js +25 -0
  101. package/dist/core/codeGraphQueries.js.map +1 -0
  102. package/dist/core/codeGraphTypes.d.ts +28 -0
  103. package/dist/core/codeGraphTypes.js +2 -0
  104. package/dist/core/codeGraphTypes.js.map +1 -0
  105. package/dist/core/collisionDetector.d.ts +2 -0
  106. package/dist/core/collisionDetector.js +17 -12
  107. package/dist/core/collisionDetector.js.map +1 -1
  108. package/dist/core/coordination.d.ts +4 -2
  109. package/dist/core/coordination.js +40 -4
  110. package/dist/core/coordination.js.map +1 -1
  111. package/dist/core/coordinationEvidence.d.ts +32 -0
  112. package/dist/core/coordinationEvidence.js +101 -0
  113. package/dist/core/coordinationEvidence.js.map +1 -0
  114. package/dist/core/dataflow.js +3 -338
  115. package/dist/core/dataflow.js.map +1 -1
  116. package/dist/core/dataflowDatabaseSinks.d.ts +8 -0
  117. package/dist/core/dataflowDatabaseSinks.js +78 -0
  118. package/dist/core/dataflowDatabaseSinks.js.map +1 -0
  119. package/dist/core/dataflowRiskAssembly.d.ts +11 -0
  120. package/dist/core/dataflowRiskAssembly.js +117 -0
  121. package/dist/core/dataflowRiskAssembly.js.map +1 -0
  122. package/dist/core/dataflowTraversal.d.ts +25 -0
  123. package/dist/core/dataflowTraversal.js +200 -0
  124. package/dist/core/dataflowTraversal.js.map +1 -0
  125. package/dist/core/fileAccess.d.ts +16 -0
  126. package/dist/core/fileAccess.js +78 -0
  127. package/dist/core/fileAccess.js.map +1 -0
  128. package/dist/core/fileExportTypes.d.ts +2 -0
  129. package/dist/core/fileExportTypes.js +16 -0
  130. package/dist/core/fileExportTypes.js.map +1 -0
  131. package/dist/core/fileGraphMetrics.d.ts +4 -0
  132. package/dist/core/fileGraphMetrics.js +34 -0
  133. package/dist/core/fileGraphMetrics.js.map +1 -0
  134. package/dist/core/fileInspectionEvidence.d.ts +13 -0
  135. package/dist/core/fileInspectionEvidence.js +14 -0
  136. package/dist/core/fileInspectionEvidence.js.map +1 -0
  137. package/dist/core/fileInspectionGraph.d.ts +5 -0
  138. package/dist/core/fileInspectionGraph.js +29 -0
  139. package/dist/core/fileInspectionGraph.js.map +1 -0
  140. package/dist/core/fileInspectionReport.d.ts +13 -0
  141. package/dist/core/fileInspectionReport.js +49 -0
  142. package/dist/core/fileInspectionReport.js.map +1 -0
  143. package/dist/core/fileInspector.d.ts +5 -13
  144. package/dist/core/fileInspector.js +8 -239
  145. package/dist/core/fileInspector.js.map +1 -1
  146. package/dist/core/fileIssues.d.ts +1 -0
  147. package/dist/core/fileIssues.js +18 -0
  148. package/dist/core/fileIssues.js.map +1 -0
  149. package/dist/core/filePurpose.d.ts +2 -0
  150. package/dist/core/filePurpose.js +61 -0
  151. package/dist/core/filePurpose.js.map +1 -0
  152. package/dist/core/fixSuggest.d.ts +1 -9
  153. package/dist/core/fixSuggest.js +2 -58
  154. package/dist/core/fixSuggest.js.map +1 -1
  155. package/dist/core/fixSuggestDependencyNames.d.ts +1 -0
  156. package/dist/core/fixSuggestDependencyNames.js +9 -0
  157. package/dist/core/fixSuggestDependencyNames.js.map +1 -0
  158. package/dist/core/fixSuggestPreview.d.ts +10 -0
  159. package/dist/core/fixSuggestPreview.js +87 -0
  160. package/dist/core/fixSuggestPreview.js.map +1 -0
  161. package/dist/core/frameworkExpressSources.d.ts +4 -0
  162. package/dist/core/frameworkExpressSources.js +95 -0
  163. package/dist/core/frameworkExpressSources.js.map +1 -0
  164. package/dist/core/frameworkFastifySources.d.ts +4 -0
  165. package/dist/core/frameworkFastifySources.js +74 -0
  166. package/dist/core/frameworkFastifySources.js.map +1 -0
  167. package/dist/core/frameworkHonoSources.d.ts +4 -0
  168. package/dist/core/frameworkHonoSources.js +80 -0
  169. package/dist/core/frameworkHonoSources.js.map +1 -0
  170. package/dist/core/frameworkKoaSources.d.ts +4 -0
  171. package/dist/core/frameworkKoaSources.js +81 -0
  172. package/dist/core/frameworkKoaSources.js.map +1 -0
  173. package/dist/core/frameworkNextRouteSources.d.ts +7 -0
  174. package/dist/core/frameworkNextRouteSources.js +85 -0
  175. package/dist/core/frameworkNextRouteSources.js.map +1 -0
  176. package/dist/core/frameworkRemixSources.d.ts +2 -0
  177. package/dist/core/frameworkRemixSources.js +63 -0
  178. package/dist/core/frameworkRemixSources.js.map +1 -0
  179. package/dist/core/frameworkSources.d.ts +15 -3
  180. package/dist/core/frameworkSources.js +42 -210
  181. package/dist/core/frameworkSources.js.map +1 -1
  182. package/dist/core/hotspotAnalyzer.d.ts +2 -18
  183. package/dist/core/hotspotAnalyzer.js +15 -477
  184. package/dist/core/hotspotAnalyzer.js.map +1 -1
  185. package/dist/core/hotspotBuilder.d.ts +14 -0
  186. package/dist/core/hotspotBuilder.js +70 -0
  187. package/dist/core/hotspotBuilder.js.map +1 -0
  188. package/dist/core/hotspotCandidates.d.ts +9 -0
  189. package/dist/core/hotspotCandidates.js +63 -0
  190. package/dist/core/hotspotCandidates.js.map +1 -0
  191. package/dist/core/hotspotGit.d.ts +10 -0
  192. package/dist/core/hotspotGit.js +152 -0
  193. package/dist/core/hotspotGit.js.map +1 -0
  194. package/dist/core/hotspotIssues.d.ts +2 -0
  195. package/dist/core/hotspotIssues.js +83 -0
  196. package/dist/core/hotspotIssues.js.map +1 -0
  197. package/dist/core/hotspotLines.d.ts +2 -0
  198. package/dist/core/hotspotLines.js +24 -0
  199. package/dist/core/hotspotLines.js.map +1 -0
  200. package/dist/core/hotspotMemory.d.ts +2 -0
  201. package/dist/core/hotspotMemory.js +21 -0
  202. package/dist/core/hotspotMemory.js.map +1 -0
  203. package/dist/core/hotspotRanking.d.ts +13 -0
  204. package/dist/core/hotspotRanking.js +44 -0
  205. package/dist/core/hotspotRanking.js.map +1 -0
  206. package/dist/core/hotspotScoring.d.ts +23 -0
  207. package/dist/core/hotspotScoring.js +128 -0
  208. package/dist/core/hotspotScoring.js.map +1 -0
  209. package/dist/core/indexCache.js +3 -1
  210. package/dist/core/indexCache.js.map +1 -1
  211. package/dist/core/intentRouter.d.ts +5 -28
  212. package/dist/core/intentRouter.js +8 -7376
  213. package/dist/core/intentRouter.js.map +1 -1
  214. package/dist/core/intentRouterCatalog.d.ts +16 -0
  215. package/dist/core/intentRouterCatalog.js +1709 -0
  216. package/dist/core/intentRouterCatalog.js.map +1 -0
  217. package/dist/core/intentRouterCoordinationSignals.d.ts +12 -0
  218. package/dist/core/intentRouterCoordinationSignals.js +111 -0
  219. package/dist/core/intentRouterCoordinationSignals.js.map +1 -0
  220. package/dist/core/intentRouterDependencySignals.d.ts +9 -0
  221. package/dist/core/intentRouterDependencySignals.js +226 -0
  222. package/dist/core/intentRouterDependencySignals.js.map +1 -0
  223. package/dist/core/intentRouterKeywordContext.d.ts +14 -0
  224. package/dist/core/intentRouterKeywordContext.js +2 -0
  225. package/dist/core/intentRouterKeywordContext.js.map +1 -0
  226. package/dist/core/intentRouterKeywordEarlyGuards.d.ts +2 -0
  227. package/dist/core/intentRouterKeywordEarlyGuards.js +127 -0
  228. package/dist/core/intentRouterKeywordEarlyGuards.js.map +1 -0
  229. package/dist/core/intentRouterKeywordMatches.d.ts +3 -0
  230. package/dist/core/intentRouterKeywordMatches.js +31 -0
  231. package/dist/core/intentRouterKeywordMatches.js.map +1 -0
  232. package/dist/core/intentRouterKeywordSearchGuards.d.ts +2 -0
  233. package/dist/core/intentRouterKeywordSearchGuards.js +239 -0
  234. package/dist/core/intentRouterKeywordSearchGuards.js.map +1 -0
  235. package/dist/core/intentRouterKeywordTargetGuards.d.ts +2 -0
  236. package/dist/core/intentRouterKeywordTargetGuards.js +191 -0
  237. package/dist/core/intentRouterKeywordTargetGuards.js.map +1 -0
  238. package/dist/core/intentRouterKeywordToolGuards.d.ts +2 -0
  239. package/dist/core/intentRouterKeywordToolGuards.js +133 -0
  240. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -0
  241. package/dist/core/intentRouterKeywordWeights.d.ts +4 -0
  242. package/dist/core/intentRouterKeywordWeights.js +1197 -0
  243. package/dist/core/intentRouterKeywordWeights.js.map +1 -0
  244. package/dist/core/intentRouterPlanningSignals.d.ts +7 -0
  245. package/dist/core/intentRouterPlanningSignals.js +268 -0
  246. package/dist/core/intentRouterPlanningSignals.js.map +1 -0
  247. package/dist/core/intentRouterPrDiffSignals.d.ts +1 -0
  248. package/dist/core/intentRouterPrDiffSignals.js +41 -0
  249. package/dist/core/intentRouterPrDiffSignals.js.map +1 -0
  250. package/dist/core/intentRouterPreflightSignals.d.ts +3 -0
  251. package/dist/core/intentRouterPreflightSignals.js +54 -0
  252. package/dist/core/intentRouterPreflightSignals.js.map +1 -0
  253. package/dist/core/intentRouterRegressionKeywordMatches.d.ts +1 -0
  254. package/dist/core/intentRouterRegressionKeywordMatches.js +176 -0
  255. package/dist/core/intentRouterRegressionKeywordMatches.js.map +1 -0
  256. package/dist/core/intentRouterRegressionSignals.d.ts +10 -0
  257. package/dist/core/intentRouterRegressionSignals.js +207 -0
  258. package/dist/core/intentRouterRegressionSignals.js.map +1 -0
  259. package/dist/core/intentRouterReleaseSignals.d.ts +8 -0
  260. package/dist/core/intentRouterReleaseSignals.js +139 -0
  261. package/dist/core/intentRouterReleaseSignals.js.map +1 -0
  262. package/dist/core/intentRouterRepoSignals.d.ts +8 -0
  263. package/dist/core/intentRouterRepoSignals.js +226 -0
  264. package/dist/core/intentRouterRepoSignals.js.map +1 -0
  265. package/dist/core/intentRouterResult.d.ts +16 -0
  266. package/dist/core/intentRouterResult.js +34 -0
  267. package/dist/core/intentRouterResult.js.map +1 -0
  268. package/dist/core/intentRouterReviewSignals.d.ts +2 -0
  269. package/dist/core/intentRouterReviewSignals.js +109 -0
  270. package/dist/core/intentRouterReviewSignals.js.map +1 -0
  271. package/dist/core/intentRouterRiskSignals.d.ts +12 -0
  272. package/dist/core/intentRouterRiskSignals.js +242 -0
  273. package/dist/core/intentRouterRiskSignals.js.map +1 -0
  274. package/dist/core/intentRouterScoring.d.ts +9 -0
  275. package/dist/core/intentRouterScoring.js +40 -0
  276. package/dist/core/intentRouterScoring.js.map +1 -0
  277. package/dist/core/intentRouterSearchApiSignals.d.ts +1 -0
  278. package/dist/core/intentRouterSearchApiSignals.js +62 -0
  279. package/dist/core/intentRouterSearchApiSignals.js.map +1 -0
  280. package/dist/core/intentRouterSearchBackgroundSignals.d.ts +1 -0
  281. package/dist/core/intentRouterSearchBackgroundSignals.js +55 -0
  282. package/dist/core/intentRouterSearchBackgroundSignals.js.map +1 -0
  283. package/dist/core/intentRouterSearchCommunicationSignals.d.ts +1 -0
  284. package/dist/core/intentRouterSearchCommunicationSignals.js +74 -0
  285. package/dist/core/intentRouterSearchCommunicationSignals.js.map +1 -0
  286. package/dist/core/intentRouterSearchDataSignals.d.ts +2 -0
  287. package/dist/core/intentRouterSearchDataSignals.js +98 -0
  288. package/dist/core/intentRouterSearchDataSignals.js.map +1 -0
  289. package/dist/core/intentRouterSearchDomainSignals.d.ts +1 -0
  290. package/dist/core/intentRouterSearchDomainSignals.js +71 -0
  291. package/dist/core/intentRouterSearchDomainSignals.js.map +1 -0
  292. package/dist/core/intentRouterSearchInfraSignals.d.ts +1 -0
  293. package/dist/core/intentRouterSearchInfraSignals.js +79 -0
  294. package/dist/core/intentRouterSearchInfraSignals.js.map +1 -0
  295. package/dist/core/intentRouterSearchIntegrationSignals.d.ts +1 -0
  296. package/dist/core/intentRouterSearchIntegrationSignals.js +117 -0
  297. package/dist/core/intentRouterSearchIntegrationSignals.js.map +1 -0
  298. package/dist/core/intentRouterSearchLookupSignals.d.ts +10 -0
  299. package/dist/core/intentRouterSearchLookupSignals.js +310 -0
  300. package/dist/core/intentRouterSearchLookupSignals.js.map +1 -0
  301. package/dist/core/intentRouterSearchNavigationSignals.d.ts +1 -0
  302. package/dist/core/intentRouterSearchNavigationSignals.js +62 -0
  303. package/dist/core/intentRouterSearchNavigationSignals.js.map +1 -0
  304. package/dist/core/intentRouterSearchOwnershipSignals.d.ts +1 -0
  305. package/dist/core/intentRouterSearchOwnershipSignals.js +15 -0
  306. package/dist/core/intentRouterSearchOwnershipSignals.js.map +1 -0
  307. package/dist/core/intentRouterSearchPageSignals.d.ts +1 -0
  308. package/dist/core/intentRouterSearchPageSignals.js +84 -0
  309. package/dist/core/intentRouterSearchPageSignals.js.map +1 -0
  310. package/dist/core/intentRouterSearchReliabilitySignals.d.ts +1 -0
  311. package/dist/core/intentRouterSearchReliabilitySignals.js +94 -0
  312. package/dist/core/intentRouterSearchReliabilitySignals.js.map +1 -0
  313. package/dist/core/intentRouterSearchStateSignals.d.ts +1 -0
  314. package/dist/core/intentRouterSearchStateSignals.js +107 -0
  315. package/dist/core/intentRouterSearchStateSignals.js.map +1 -0
  316. package/dist/core/intentRouterSearchStyleSignals.d.ts +1 -0
  317. package/dist/core/intentRouterSearchStyleSignals.js +99 -0
  318. package/dist/core/intentRouterSearchStyleSignals.js.map +1 -0
  319. package/dist/core/intentRouterSearchTestSignals.d.ts +1 -0
  320. package/dist/core/intentRouterSearchTestSignals.js +34 -0
  321. package/dist/core/intentRouterSearchTestSignals.js.map +1 -0
  322. package/dist/core/intentRouterSearchToolingSignals.d.ts +1 -0
  323. package/dist/core/intentRouterSearchToolingSignals.js +106 -0
  324. package/dist/core/intentRouterSearchToolingSignals.js.map +1 -0
  325. package/dist/core/intentRouterSearchUiSignals.d.ts +1 -0
  326. package/dist/core/intentRouterSearchUiSignals.js +77 -0
  327. package/dist/core/intentRouterSearchUiSignals.js.map +1 -0
  328. package/dist/core/intentRouterSecuritySignals.d.ts +4 -0
  329. package/dist/core/intentRouterSecuritySignals.js +235 -0
  330. package/dist/core/intentRouterSecuritySignals.js.map +1 -0
  331. package/dist/core/intentRouterTargetSignals.d.ts +5 -0
  332. package/dist/core/intentRouterTargetSignals.js +76 -0
  333. package/dist/core/intentRouterTargetSignals.js.map +1 -0
  334. package/dist/core/intentRouterTokens.d.ts +1 -0
  335. package/dist/core/intentRouterTokens.js +36 -0
  336. package/dist/core/intentRouterTokens.js.map +1 -0
  337. package/dist/core/intentRouterUnderstandSignals.d.ts +1 -0
  338. package/dist/core/intentRouterUnderstandSignals.js +171 -0
  339. package/dist/core/intentRouterUnderstandSignals.js.map +1 -0
  340. package/dist/core/intentRouterVerificationSignals.d.ts +8 -0
  341. package/dist/core/intentRouterVerificationSignals.js +119 -0
  342. package/dist/core/intentRouterVerificationSignals.js.map +1 -0
  343. package/dist/core/intentRouterWorkSignals.d.ts +4 -0
  344. package/dist/core/intentRouterWorkSignals.js +175 -0
  345. package/dist/core/intentRouterWorkSignals.js.map +1 -0
  346. package/dist/core/languages/pythonLockfiles.d.ts +15 -0
  347. package/dist/core/languages/pythonLockfiles.js +210 -0
  348. package/dist/core/languages/pythonLockfiles.js.map +1 -0
  349. package/dist/core/languages/pythonManifestText.d.ts +7 -0
  350. package/dist/core/languages/pythonManifestText.js +25 -0
  351. package/dist/core/languages/pythonManifestText.js.map +1 -0
  352. package/dist/core/languages/pythonManifests.d.ts +6 -38
  353. package/dist/core/languages/pythonManifests.js +27 -316
  354. package/dist/core/languages/pythonManifests.js.map +1 -1
  355. package/dist/core/languages/pythonPep508.d.ts +4 -0
  356. package/dist/core/languages/pythonPep508.js +14 -0
  357. package/dist/core/languages/pythonPep508.js.map +1 -0
  358. package/dist/core/languages/pythonProjectEvidence.d.ts +2 -0
  359. package/dist/core/languages/pythonProjectEvidence.js +29 -0
  360. package/dist/core/languages/pythonProjectEvidence.js.map +1 -0
  361. package/dist/core/languages/pythonProjectTypes.d.ts +31 -0
  362. package/dist/core/languages/pythonProjectTypes.js +2 -0
  363. package/dist/core/languages/pythonProjectTypes.js.map +1 -0
  364. package/dist/core/languages/pythonPyproject.d.ts +2 -0
  365. package/dist/core/languages/pythonPyproject.js +160 -0
  366. package/dist/core/languages/pythonPyproject.js.map +1 -0
  367. package/dist/core/languages/pythonRequirements.d.ts +9 -0
  368. package/dist/core/languages/pythonRequirements.js +212 -0
  369. package/dist/core/languages/pythonRequirements.js.map +1 -0
  370. package/dist/core/languages/pythonRoots.d.ts +3 -0
  371. package/dist/core/languages/pythonRoots.js +83 -0
  372. package/dist/core/languages/pythonRoots.js.map +1 -0
  373. package/dist/core/languages/pythonSetuptools.d.ts +6 -0
  374. package/dist/core/languages/pythonSetuptools.js +58 -0
  375. package/dist/core/languages/pythonSetuptools.js.map +1 -0
  376. package/dist/core/pluginManifestValidation.d.ts +41 -0
  377. package/dist/core/pluginManifestValidation.js +179 -0
  378. package/dist/core/pluginManifestValidation.js.map +1 -0
  379. package/dist/core/plugins.d.ts +3 -41
  380. package/dist/core/plugins.js +2 -129
  381. package/dist/core/plugins.js.map +1 -1
  382. package/dist/core/prDiff.js +12 -0
  383. package/dist/core/prDiff.js.map +1 -1
  384. package/dist/core/preflight.d.ts +3 -3
  385. package/dist/core/preflight.js +28 -542
  386. package/dist/core/preflight.js.map +1 -1
  387. package/dist/core/preflightChangedFileReasons.d.ts +14 -0
  388. package/dist/core/preflightChangedFileReasons.js +75 -0
  389. package/dist/core/preflightChangedFileReasons.js.map +1 -0
  390. package/dist/core/preflightChangedFiles.d.ts +9 -0
  391. package/dist/core/preflightChangedFiles.js +34 -0
  392. package/dist/core/preflightChangedFiles.js.map +1 -0
  393. package/dist/core/preflightContextReasons.d.ts +17 -0
  394. package/dist/core/preflightContextReasons.js +73 -0
  395. package/dist/core/preflightContextReasons.js.map +1 -0
  396. package/dist/core/preflightEvidence.d.ts +34 -0
  397. package/dist/core/preflightEvidence.js +119 -0
  398. package/dist/core/preflightEvidence.js.map +1 -0
  399. package/dist/core/preflightInputs.d.ts +15 -0
  400. package/dist/core/preflightInputs.js +31 -0
  401. package/dist/core/preflightInputs.js.map +1 -0
  402. package/dist/core/preflightIssueReasons.d.ts +2 -0
  403. package/dist/core/preflightIssueReasons.js +39 -0
  404. package/dist/core/preflightIssueReasons.js.map +1 -0
  405. package/dist/core/preflightLocalEvidence.d.ts +12 -0
  406. package/dist/core/preflightLocalEvidence.js +36 -0
  407. package/dist/core/preflightLocalEvidence.js.map +1 -0
  408. package/dist/core/preflightReleaseScale.d.ts +28 -0
  409. package/dist/core/preflightReleaseScale.js +95 -0
  410. package/dist/core/preflightReleaseScale.js.map +1 -0
  411. package/dist/core/preflightRequiredChecks.d.ts +26 -0
  412. package/dist/core/preflightRequiredChecks.js +96 -0
  413. package/dist/core/preflightRequiredChecks.js.map +1 -0
  414. package/dist/core/preflightReviewEvidence.d.ts +16 -0
  415. package/dist/core/preflightReviewEvidence.js +31 -0
  416. package/dist/core/preflightReviewEvidence.js.map +1 -0
  417. package/dist/core/preflightReviewReasons.d.ts +15 -0
  418. package/dist/core/preflightReviewReasons.js +76 -0
  419. package/dist/core/preflightReviewReasons.js.map +1 -0
  420. package/dist/core/preflightSuggestedActions.d.ts +15 -0
  421. package/dist/core/preflightSuggestedActions.js +84 -0
  422. package/dist/core/preflightSuggestedActions.js.map +1 -0
  423. package/dist/core/preflightTruncation.d.ts +6 -0
  424. package/dist/core/preflightTruncation.js +7 -0
  425. package/dist/core/preflightTruncation.js.map +1 -0
  426. package/dist/core/preflightVerdict.d.ts +3 -0
  427. package/dist/core/preflightVerdict.js +17 -0
  428. package/dist/core/preflightVerdict.js.map +1 -0
  429. package/dist/core/regressionPlan.d.ts +2 -1
  430. package/dist/core/regressionPlan.js +7 -1
  431. package/dist/core/regressionPlan.js.map +1 -1
  432. package/dist/core/releaseEvidence.d.ts +4 -3
  433. package/dist/core/releaseEvidence.js +17 -382
  434. package/dist/core/releaseEvidence.js.map +1 -1
  435. package/dist/core/releaseEvidenceArtifacts.d.ts +3 -0
  436. package/dist/core/releaseEvidenceArtifacts.js +65 -0
  437. package/dist/core/releaseEvidenceArtifacts.js.map +1 -0
  438. package/dist/core/releaseEvidenceBaseline.d.ts +2 -0
  439. package/dist/core/releaseEvidenceBaseline.js +28 -0
  440. package/dist/core/releaseEvidenceBaseline.js.map +1 -0
  441. package/dist/core/releaseEvidencePrSummary.d.ts +13 -0
  442. package/dist/core/releaseEvidencePrSummary.js +240 -0
  443. package/dist/core/releaseEvidencePrSummary.js.map +1 -0
  444. package/dist/core/releaseEvidenceVerdict.d.ts +6 -0
  445. package/dist/core/releaseEvidenceVerdict.js +54 -0
  446. package/dist/core/releaseEvidenceVerdict.js.map +1 -0
  447. package/dist/core/releaseTrain.js +3 -317
  448. package/dist/core/releaseTrain.js.map +1 -1
  449. package/dist/core/releaseTrainFallbacks.d.ts +3 -0
  450. package/dist/core/releaseTrainFallbacks.js +318 -0
  451. package/dist/core/releaseTrainFallbacks.js.map +1 -0
  452. package/dist/core/reportPathRedaction.d.ts +4 -0
  453. package/dist/core/reportPathRedaction.js +64 -0
  454. package/dist/core/reportPathRedaction.js.map +1 -0
  455. package/dist/core/reportScope.d.ts +7 -0
  456. package/dist/core/reportScope.js +16 -86
  457. package/dist/core/reportScope.js.map +1 -1
  458. package/dist/core/reportScopeFiltering.d.ts +9 -0
  459. package/dist/core/reportScopeFiltering.js +102 -0
  460. package/dist/core/reportScopeFiltering.js.map +1 -0
  461. package/dist/core/review.d.ts +2 -25
  462. package/dist/core/review.js +34 -1034
  463. package/dist/core/review.js.map +1 -1
  464. package/dist/core/reviewBaseSnapshot.d.ts +14 -0
  465. package/dist/core/reviewBaseSnapshot.js +41 -0
  466. package/dist/core/reviewBaseSnapshot.js.map +1 -0
  467. package/dist/core/reviewChangedFiles.d.ts +8 -0
  468. package/dist/core/reviewChangedFiles.js +63 -0
  469. package/dist/core/reviewChangedFiles.js.map +1 -0
  470. package/dist/core/reviewContractChanges.d.ts +5 -0
  471. package/dist/core/reviewContractChanges.js +114 -0
  472. package/dist/core/reviewContractChanges.js.map +1 -0
  473. package/dist/core/reviewCycles.d.ts +7 -0
  474. package/dist/core/reviewCycles.js +53 -0
  475. package/dist/core/reviewCycles.js.map +1 -0
  476. package/dist/core/reviewFindings.d.ts +17 -0
  477. package/dist/core/reviewFindings.js +49 -0
  478. package/dist/core/reviewFindings.js.map +1 -0
  479. package/dist/core/reviewFlowDiffs.d.ts +4 -0
  480. package/dist/core/reviewFlowDiffs.js +99 -0
  481. package/dist/core/reviewFlowDiffs.js.map +1 -0
  482. package/dist/core/reviewGit.d.ts +7 -0
  483. package/dist/core/reviewGit.js +45 -0
  484. package/dist/core/reviewGit.js.map +1 -0
  485. package/dist/core/reviewGraphEvidence.d.ts +3 -0
  486. package/dist/core/reviewGraphEvidence.js +55 -0
  487. package/dist/core/reviewGraphEvidence.js.map +1 -0
  488. package/dist/core/reviewHeadSnapshot.d.ts +8 -0
  489. package/dist/core/reviewHeadSnapshot.js +15 -0
  490. package/dist/core/reviewHeadSnapshot.js.map +1 -0
  491. package/dist/core/reviewIntent.d.ts +2 -0
  492. package/dist/core/reviewIntent.js +18 -0
  493. package/dist/core/reviewIntent.js.map +1 -0
  494. package/dist/core/reviewManifests.d.ts +12 -0
  495. package/dist/core/reviewManifests.js +124 -0
  496. package/dist/core/reviewManifests.js.map +1 -0
  497. package/dist/core/reviewNoChanges.d.ts +9 -0
  498. package/dist/core/reviewNoChanges.js +26 -0
  499. package/dist/core/reviewNoChanges.js.map +1 -0
  500. package/dist/core/reviewPackageScope.d.ts +4 -0
  501. package/dist/core/reviewPackageScope.js +24 -0
  502. package/dist/core/reviewPackageScope.js.map +1 -0
  503. package/dist/core/reviewRefs.d.ts +4 -0
  504. package/dist/core/reviewRefs.js +65 -0
  505. package/dist/core/reviewRefs.js.map +1 -0
  506. package/dist/core/reviewRiskyFunctions.d.ts +8 -0
  507. package/dist/core/reviewRiskyFunctions.js +83 -0
  508. package/dist/core/reviewRiskyFunctions.js.map +1 -0
  509. package/dist/core/reviewState.d.ts +21 -0
  510. package/dist/core/reviewState.js +96 -0
  511. package/dist/core/reviewState.js.map +1 -0
  512. package/dist/core/reviewTier.d.ts +18 -0
  513. package/dist/core/reviewTier.js +99 -0
  514. package/dist/core/reviewTier.js.map +1 -0
  515. package/dist/core/reviewVerdict.d.ts +9 -0
  516. package/dist/core/reviewVerdict.js +121 -0
  517. package/dist/core/reviewVerdict.js.map +1 -0
  518. package/dist/core/searchIndex.d.ts +2 -14
  519. package/dist/core/searchIndex.js +4 -227
  520. package/dist/core/searchIndex.js.map +1 -1
  521. package/dist/core/searchIndexFiles.d.ts +1 -0
  522. package/dist/core/searchIndexFiles.js +26 -0
  523. package/dist/core/searchIndexFiles.js.map +1 -0
  524. package/dist/core/searchIndexText.d.ts +15 -0
  525. package/dist/core/searchIndexText.js +204 -0
  526. package/dist/core/searchIndexText.js.map +1 -0
  527. package/dist/core/start.d.ts +1 -1
  528. package/dist/core/start.js +14 -87
  529. package/dist/core/start.js.map +1 -1
  530. package/dist/core/startAdoptionGaps.d.ts +3 -0
  531. package/dist/core/startAdoptionGaps.js +12 -0
  532. package/dist/core/startAdoptionGaps.js.map +1 -0
  533. package/dist/core/startEvidence.d.ts +1 -1
  534. package/dist/core/startEvidence.js +16 -1
  535. package/dist/core/startEvidence.js.map +1 -1
  536. package/dist/core/startInputs.d.ts +32 -0
  537. package/dist/core/startInputs.js +30 -0
  538. package/dist/core/startInputs.js.map +1 -0
  539. package/dist/core/startMissionPolicy.js +10 -0
  540. package/dist/core/startMissionPolicy.js.map +1 -1
  541. package/dist/core/startMode.js +7 -1
  542. package/dist/core/startMode.js.map +1 -1
  543. package/dist/core/startReportBuilder.d.ts +26 -0
  544. package/dist/core/startReportBuilder.js +45 -0
  545. package/dist/core/startReportBuilder.js.map +1 -0
  546. package/dist/core/startReportContext.d.ts +23 -0
  547. package/dist/core/startReportContext.js +51 -0
  548. package/dist/core/startReportContext.js.map +1 -0
  549. package/dist/core/startRoadmapPreview.d.ts +2 -0
  550. package/dist/core/startRoadmapPreview.js +31 -0
  551. package/dist/core/startRoadmapPreview.js.map +1 -0
  552. package/dist/core/taint.d.ts +2 -67
  553. package/dist/core/taint.js +41 -276
  554. package/dist/core/taint.js.map +1 -1
  555. package/dist/core/taintIndex.d.ts +20 -0
  556. package/dist/core/taintIndex.js +81 -0
  557. package/dist/core/taintIndex.js.map +1 -0
  558. package/dist/core/taintMatching.d.ts +11 -0
  559. package/dist/core/taintMatching.js +126 -0
  560. package/dist/core/taintMatching.js.map +1 -0
  561. package/dist/core/taintTraversal.d.ts +8 -0
  562. package/dist/core/taintTraversal.js +113 -0
  563. package/dist/core/taintTraversal.js.map +1 -0
  564. package/dist/core/taintTypes.d.ts +67 -0
  565. package/dist/core/taintTypes.js +2 -0
  566. package/dist/core/taintTypes.js.map +1 -0
  567. package/dist/core/telemetry.js +36 -30
  568. package/dist/core/telemetry.js.map +1 -1
  569. package/dist/core/upgradePreview.d.ts +1 -12
  570. package/dist/core/upgradePreview.js +9 -229
  571. package/dist/core/upgradePreview.js.map +1 -1
  572. package/dist/core/upgradePreviewNpmEvidence.d.ts +19 -0
  573. package/dist/core/upgradePreviewNpmEvidence.js +164 -0
  574. package/dist/core/upgradePreviewNpmEvidence.js.map +1 -0
  575. package/dist/core/upgradePreviewPython.d.ts +2 -0
  576. package/dist/core/upgradePreviewPython.js +71 -0
  577. package/dist/core/upgradePreviewPython.js.map +1 -0
  578. package/dist/index.d.ts +6 -12
  579. package/dist/index.js +2 -3
  580. package/dist/index.js.map +1 -1
  581. package/dist/mcp/server.d.ts +3 -24
  582. package/dist/mcp/server.js +32 -414
  583. package/dist/mcp/server.js.map +1 -1
  584. package/dist/mcp/serverContext.d.ts +6 -0
  585. package/dist/mcp/serverContext.js +55 -0
  586. package/dist/mcp/serverContext.js.map +1 -0
  587. package/dist/mcp/serverDispatch.d.ts +39 -0
  588. package/dist/mcp/serverDispatch.js +74 -0
  589. package/dist/mcp/serverDispatch.js.map +1 -0
  590. package/dist/mcp/serverHandlers.d.ts +15 -0
  591. package/dist/mcp/serverHandlers.js +94 -0
  592. package/dist/mcp/serverHandlers.js.map +1 -0
  593. package/dist/mcp/serverLifecycle.d.ts +14 -0
  594. package/dist/mcp/serverLifecycle.js +65 -0
  595. package/dist/mcp/serverLifecycle.js.map +1 -0
  596. package/dist/mcp/serverMessage.d.ts +11 -0
  597. package/dist/mcp/serverMessage.js +37 -0
  598. package/dist/mcp/serverMessage.js.map +1 -0
  599. package/dist/mcp/serverSession.d.ts +6 -0
  600. package/dist/mcp/serverSession.js +77 -0
  601. package/dist/mcp/serverSession.js.map +1 -0
  602. package/dist/mcp/serverStdio.d.ts +7 -0
  603. package/dist/mcp/serverStdio.js +34 -0
  604. package/dist/mcp/serverStdio.js.map +1 -0
  605. package/dist/mcp/serverTypes.d.ts +18 -0
  606. package/dist/mcp/serverTypes.js +2 -0
  607. package/dist/mcp/serverTypes.js.map +1 -0
  608. package/dist/mcp/serverVersion.d.ts +1 -0
  609. package/dist/mcp/serverVersion.js +17 -0
  610. package/dist/mcp/serverVersion.js.map +1 -0
  611. package/dist/mcp/toolCatalog.d.ts +2 -0
  612. package/dist/mcp/toolCatalog.js +93 -0
  613. package/dist/mcp/toolCatalog.js.map +1 -0
  614. package/dist/mcp/tools.d.ts +2 -3
  615. package/dist/mcp/tools.js +15 -108
  616. package/dist/mcp/tools.js.map +1 -1
  617. package/dist/projscan-sbom.cdx.json +6 -6
  618. package/dist/reporters/consoleFixReporter.d.ts +3 -0
  619. package/dist/reporters/consoleFixReporter.js +41 -0
  620. package/dist/reporters/consoleFixReporter.js.map +1 -0
  621. package/dist/reporters/consoleReporter.d.ts +1 -3
  622. package/dist/reporters/consoleReporter.js +1 -42
  623. package/dist/reporters/consoleReporter.js.map +1 -1
  624. package/dist/reporters/htmlReporter.d.ts +3 -2
  625. package/dist/reporters/htmlReporter.js +14 -2
  626. package/dist/reporters/htmlReporter.js.map +1 -1
  627. package/dist/reporters/jsonReporter.d.ts +4 -3
  628. package/dist/reporters/jsonReporter.js +9 -4
  629. package/dist/reporters/jsonReporter.js.map +1 -1
  630. package/dist/reporters/markdownAnalysisReporter.d.ts +2 -1
  631. package/dist/reporters/markdownAnalysisReporter.js +8 -1
  632. package/dist/reporters/markdownAnalysisReporter.js.map +1 -1
  633. package/dist/reporters/markdownArchitectureReporter.d.ts +3 -0
  634. package/dist/reporters/markdownArchitectureReporter.js +33 -0
  635. package/dist/reporters/markdownArchitectureReporter.js.map +1 -0
  636. package/dist/reporters/markdownCouplingReporter.d.ts +2 -0
  637. package/dist/reporters/markdownCouplingReporter.js +43 -0
  638. package/dist/reporters/markdownCouplingReporter.js.map +1 -0
  639. package/dist/reporters/markdownCoverageReporter.d.ts +2 -0
  640. package/dist/reporters/markdownCoverageReporter.js +40 -0
  641. package/dist/reporters/markdownCoverageReporter.js.map +1 -0
  642. package/dist/reporters/markdownExplanationReporter.d.ts +2 -0
  643. package/dist/reporters/markdownExplanationReporter.js +37 -0
  644. package/dist/reporters/markdownExplanationReporter.js.map +1 -0
  645. package/dist/reporters/markdownHealthReporter.d.ts +4 -0
  646. package/dist/reporters/markdownHealthReporter.js +66 -0
  647. package/dist/reporters/markdownHealthReporter.js.map +1 -0
  648. package/dist/reporters/markdownHotspotReporter.d.ts +2 -0
  649. package/dist/reporters/markdownHotspotReporter.js +36 -0
  650. package/dist/reporters/markdownHotspotReporter.js.map +1 -0
  651. package/dist/reporters/markdownOutdatedReporter.d.ts +2 -0
  652. package/dist/reporters/markdownOutdatedReporter.js +31 -0
  653. package/dist/reporters/markdownOutdatedReporter.js.map +1 -0
  654. package/dist/reporters/markdownPrDiffReporter.d.ts +2 -0
  655. package/dist/reporters/markdownPrDiffReporter.js +63 -0
  656. package/dist/reporters/markdownPrDiffReporter.js.map +1 -0
  657. package/dist/reporters/markdownReporter.d.ts +9 -12
  658. package/dist/reporters/markdownReporter.js +9 -288
  659. package/dist/reporters/markdownReporter.js.map +1 -1
  660. package/dist/reporters/markdownWorkspaceReporter.d.ts +2 -0
  661. package/dist/reporters/markdownWorkspaceReporter.js +25 -0
  662. package/dist/reporters/markdownWorkspaceReporter.js.map +1 -0
  663. package/dist/reporters/sarifReporter.d.ts +6 -4
  664. package/dist/reporters/sarifReporter.js +8 -7
  665. package/dist/reporters/sarifReporter.js.map +1 -1
  666. package/dist/tool-manifest.json +3 -3
  667. package/dist/types/start.d.ts +14 -0
  668. package/dist/types.d.ts +34 -34
  669. package/dist/utils/config.d.ts +2 -8
  670. package/dist/utils/config.js +13 -211
  671. package/dist/utils/config.js.map +1 -1
  672. package/dist/utils/configBasics.d.ts +5 -0
  673. package/dist/utils/configBasics.js +21 -0
  674. package/dist/utils/configBasics.js.map +1 -0
  675. package/dist/utils/configHotspots.d.ts +2 -0
  676. package/dist/utils/configHotspots.js +15 -0
  677. package/dist/utils/configHotspots.js.map +1 -0
  678. package/dist/utils/configIssueRules.d.ts +8 -0
  679. package/dist/utils/configIssueRules.js +24 -0
  680. package/dist/utils/configIssueRules.js.map +1 -0
  681. package/dist/utils/configMonorepo.d.ts +2 -0
  682. package/dist/utils/configMonorepo.js +38 -0
  683. package/dist/utils/configMonorepo.js.map +1 -0
  684. package/dist/utils/configReportPolicies.d.ts +2 -0
  685. package/dist/utils/configReportPolicies.js +32 -0
  686. package/dist/utils/configReportPolicies.js.map +1 -0
  687. package/dist/utils/configScan.d.ts +2 -0
  688. package/dist/utils/configScan.js +15 -0
  689. package/dist/utils/configScan.js.map +1 -0
  690. package/dist/utils/configSeverity.d.ts +2 -0
  691. package/dist/utils/configSeverity.js +15 -0
  692. package/dist/utils/configSeverity.js.map +1 -0
  693. package/dist/utils/configSources.d.ts +5 -0
  694. package/dist/utils/configSources.js +55 -0
  695. package/dist/utils/configSources.js.map +1 -0
  696. package/dist/utils/configTaint.d.ts +2 -0
  697. package/dist/utils/configTaint.js +15 -0
  698. package/dist/utils/configTaint.js.map +1 -0
  699. package/docs/GUIDE.md +22 -11
  700. package/docs/ROADMAP.md +18 -7
  701. package/docs/examples/adoption-workflows.md +2 -2
  702. package/docs/examples/swarm-coordination.md +11 -0
  703. package/package.json +1 -1
package/README.md CHANGED
@@ -35,16 +35,29 @@ npx projscan
35
35
 
36
36
  <img src="docs/projscan-mission-control.gif" alt="projscan Mission Control turning a plain-language goal into shortcut commands, proof commands, and review gates" width="760">
37
37
 
38
- ## What's New in 4.5.0
39
-
40
- 4.5.0 packages the post-4.4 intelligence train: current roadmap planning, shareable evidence controls, Python upgrade previews, framework dataflow precision, and concrete adoption workflows.
41
-
42
- - **Current release train.** `projscan release-train` now defaults 4.4.x and newer projects to the current 4.5.x through 4.9.x product lines instead of stale shipped 3.x/4.0 work.
43
- - **Shareable evidence controls.** `analyze`, `doctor`, and `ci` accept `--report-policy`, `--report-scope`, and `--redact-paths`; `.projscanrc` can define reusable `reportPolicies` presets.
44
- - **Python upgrade previews.** `projscan upgrade requests` and MCP `projscan_upgrade` now read Python manifests, Poetry lockfiles, pinned requirements, and importers offline.
45
- - **Framework dataflow precision.** Fastify and Koa request sources are framework-gated and fixture-backed, including Koa body/query/params/header patterns without flagging response-body writes.
46
- - **Adoption proof recipes.** New docs cover agent orchestration, package ownership, policy plugins, swarm coordination, and scoped evidence workflows teams can copy into real reviews.
47
- - **Readiness cleanup.** The release packet documents the broad bug pass, review-risk sign-off, rollback plan, and verification evidence for the train.
38
+ ## What's New in 4.7.0
39
+
40
+ 4.7.0 turns the post-4.6 validation train into release-ready evidence: broader
41
+ framework dataflow precision, offline Python requirement include support,
42
+ release-train roadmap routing, and lower-risk internal hotspots.
43
+
44
+ - **Remix dataflow coverage.** Remix route actions and loaders now classify
45
+ request body readers, headers, URL, signal, and params through
46
+ framework-gated source patterns.
47
+ - **Python requirements includes.** Upgrade previews follow local `-r`
48
+ requirements and `-c` constraints without reading outside the scan or adding
49
+ network access.
50
+ - **Roadmap routing.** Build-next product-planning prompts now route to
51
+ release-train roadmap evidence with a read-only roadmap preview.
52
+ - **Hotspot cleanup.** Dataflow risk assembly, plugin manifest validation,
53
+ telemetry flushing, search index helpers, release evidence, and bug-hunt
54
+ findings have been split into focused modules.
55
+ - **Focused coverage.** Python lockfile, framework dataflow, intent router,
56
+ preflight, MCP, and start suites now carry smaller regression tests plus
57
+ architecture guards for high-risk entrypoints.
58
+ - **Release readiness.** Large-train preflight warnings are now separated from
59
+ concrete taint, dataflow, health, plugin, and supply-chain defects so release
60
+ review can focus on scale sign-off.
48
61
 
49
62
  <img src="docs/projscan-proof-router.png" alt="projscan intent router and proof workflow showing impact routing, setup discovery, dependency intelligence, and stable-surface guardrails" width="760">
50
63
 
@@ -487,7 +500,7 @@ projscan start --intent "what should an intern work on?" # Routes to bug-hunt pr
487
500
  projscan start --intent "what is a low risk improvement?" # Routes to bug-hunt prioritization
488
501
  projscan start --intent "pick a small safe task" # Routes to bug-hunt prioritization
489
502
  projscan start --intent "what should I do next?" # Routes to an ordered before-edit workplan
490
- projscan start --intent "what should we build next?" # Routes to a bug-hunt product-planning workplan
503
+ projscan start --intent "what should we build next?" # Routes to release-train roadmap planning
491
504
  projscan start --intent "explain issue missing-test-framework" # Routes to deep issue context
492
505
  projscan start --intent "fix issue missing-test-framework" # Routes to a concrete fix suggestion
493
506
  projscan start --intent "is user input reaching SQL sinks?" # Routes to hardening dataflow analysis
@@ -710,8 +723,9 @@ Formats: `console` (default), `json`, `markdown`, `sarif`, `html`
710
723
  `analyze`, `doctor`, and `ci` also accept `--report-policy <name>`,
711
724
  `--report-scope <paths>`, and `--redact-paths` for shareable evidence artifacts.
712
725
  Scope is comma-separated and repo-relative; redaction replaces file paths with
713
- stable labels. Direct `--report-scope` and `--redact-paths` flags override the
714
- selected preset for a single run.
726
+ stable labels. JSON/SARIF include path-safe `reportControls` metadata, and
727
+ Markdown/HTML print path-safe controls banners. Direct `--report-scope` and
728
+ `--redact-paths` flags override the selected preset for a single run.
715
729
 
716
730
  Run `projscan help` for the generated command-by-command support matrix.
717
731
 
@@ -821,12 +835,12 @@ Python repos now get the same treatment JS/TS has had since 0.6:
821
835
 
822
836
  - **AST-accurate import graph.** `from pkg.mod import x`, relative imports, `__init__.py` packages, `__all__`. Parsed via tree-sitter-python (wasm, offline).
823
837
  - **Python-aware analyzers.** Missing pytest / ruff / black config. Deprecated packages (nose, simplejson, pycrypto). Unused `pyproject.toml` / `requirements.txt` deps. Missing lockfile.
824
- - **Python upgrade preview.** `projscan upgrade requests` reads `pyproject.toml`, `setup.cfg`, `setup.py`, root `requirements*.txt`, Poetry lockfiles, and pinned root requirements, then reports declared scope, current-version source, drift, and importers offline.
838
+ - **Python upgrade preview.** `projscan upgrade requests` reads `pyproject.toml` (including dependency groups), `setup.cfg`, `setup.py`, root `requirements*.txt`, Poetry/Pipfile/uv/PDM/Conda lockfiles, and pinned root requirements/constraints, then reports declared scope, current-version source, drift, and importers offline. A root Python manifest is enough evidence even before `.py` files exist.
825
839
  - **Code search.** BM25 and semantic modes work on `.py` files out of the box.
826
840
  - **Hotspots + dead code.** Same scoring as JS/TS, with `__init__.py` and pytest test-file conventions understood.
827
841
  - **MCP tools work unchanged.** `projscan_semantic_graph`, `projscan_search`, `projscan_doctor`, `projscan_hotspots`, etc. all accept Python projects. Agents can ask "which files import `pkg.core`?" and get an answer in milliseconds.
828
842
 
829
- `projscan_upgrade` supports Node and Python offline previews. Python current-version evidence comes from Poetry lockfiles or pinned root requirements when present. Registry lookup remains npm-only behind `--check-registry`.
843
+ `projscan_upgrade` supports Node and Python offline previews. Python current-version evidence comes from Poetry, Pipfile, uv, PDM, Conda lockfiles, pinned root requirements, or pinned root constraints when present. Registry lookup remains npm-only behind `--check-registry`.
830
844
 
831
845
  ### Go (0.11)
832
846
 
@@ -1333,7 +1347,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
1333
1347
  - **`projscan_start`** _(3.0.4)_ - first-60-seconds repo orientation. Composes setup diagnostics, `firstTenMinutes`, workflow recipes, workplan, quality scorecard, top risks, adoption gaps, next commands, and optional handoff payload.
1334
1348
  - **`projscan_understand`** _(3.4)_ - cited repo-comprehension report with `map`, `flow`, `contracts`, `change`, and `verify` views, read-first files, unknowns, change readiness, verification tiers, and exact next commands.
1335
1349
  - **`projscan_semantic_graph`** _(3.0; query mode 4.0)_ - the code graph, two ways. With no `query`: the stable v3 semantic graph contract (file, function, package, and symbol nodes plus `defines`, `imports`, `imports_package`, `exports`, and `calls` edges). With `query: { direction, file?, symbol? }`: one cheap targeted lookup — `imports`, `exports`, `importers`, `symbol_defs`, `package_importers` — with millisecond responses on a warm cache. (Subsumes the former `projscan_graph`, removed in 4.0.)
1336
- - **`projscan_dataflow`** _(3.0)_ - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js, Hono, Express, Fastify, and Koa request sources are framework-aware, DB/write sinks are receiver-sensitive, and defaults suppress test-file paths, broad readFile/writeFile noise, JavaScript RegExp.exec false positives, and generated-code anxiety; opt into broader scans with `include_tests` / `include_broad_file_io` / `include_generated` or the matching CLI flags.
1350
+ - **`projscan_dataflow`** _(3.0)_ - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js route body readers and URL reads plus Hono, Express, Fastify, and Koa request sources are framework-aware, DB/write sinks are receiver-sensitive, and defaults suppress test-file paths, broad readFile/writeFile noise, JavaScript RegExp.exec false positives, and generated-code anxiety; opt into broader scans with `include_tests` / `include_broad_file_io` / `include_generated` or the matching CLI flags.
1337
1351
  - **`projscan_search`** - fast search across `symbols` (exported names), `files` (path substring), or `content` (source substring with line + excerpt). Sub-file mode (`sub_file: true`) embeds per-function for sharper semantic results _(0.15)_.
1338
1352
  - **`projscan_coupling`** _(0.11)_ - per-file fan-in / fan-out / instability + circular-import cycles (Tarjan SCC). Filter by `direction: cycles_only | high_fan_in | high_fan_out`.
1339
1353
  - **`projscan_pr_diff`** _(0.11)_ - structural diff between two git refs. Returns added/removed/modified files with explicit lists of exports, imports, and call sites that changed, plus ΔCC and Δfan-in.
@@ -89,7 +89,7 @@ export async function check(rootPath, files) {
89
89
  issues.push({
90
90
  id: 'dep-risk-no-python-lockfile',
91
91
  title: 'No Python lockfile detected',
92
- description: 'No lockfile (poetry.lock / Pipfile.lock / pdm.lock / uv.lock / conda-lock.yml) or pinned requirements.txt found. Builds may resolve different versions over time.',
92
+ description: 'No lockfile (poetry.lock / Pipfile.lock / pdm.lock / uv.lock / conda-lock.yml), pinned requirements.txt, or pinned constraints.txt found. Builds may resolve different versions over time.',
93
93
  severity,
94
94
  category: 'dependencies',
95
95
  fixAvailable: false,
@@ -1 +1 @@
1
- {"version":3,"file":"pythonDependencyRiskCheck.js","sourceRoot":"","sources":["../../src/analyzers/pythonDependencyRiskCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pythonDependencyRiskCheck.js","sourceRoot":"","sources":["../../src/analyzers/pythonDependencyRiskCheck.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { Command } from 'commander';
2
- import { type PluginReporterCommand } from '../core/plugins.js';
2
+ import type { PluginReporterCommand } from '../core/plugins.js';
3
3
  import type { ProjscanConfig, ReportFormat } from '../types/config.js';
4
- import type { ArchitectureLayer, FileExplanation, Issue, FileEntry, DirectoryNode } from '../types.js';
4
+ import type { FileExplanation, Issue } from '../types.js';
5
+ export { buildArchitectureLayers } from './architectureLayers.js';
6
+ export { sliceCliTree } from './treeSlice.js';
5
7
  export declare const pkg: any;
6
8
  export declare const program: Command;
7
9
  export declare function getFormat(): ReportFormat;
@@ -13,8 +15,5 @@ export declare function setupLogLevel(): void;
13
15
  export declare function maybeBanner(): void;
14
16
  export declare function maybeCompactBanner(): void;
15
17
  export declare function renderPluginReporterIfRequested(command: PluginReporterCommand, reporterName: unknown, payload: unknown): Promise<boolean>;
16
- /** Walk a DirectoryNode to find the node whose `path` matches targetPath. */
17
- export declare function sliceCliTree(node: DirectoryNode, targetPath: string): DirectoryNode | null;
18
18
  export declare function analyzeFile(filePath: string): Promise<FileExplanation>;
19
- export declare function buildArchitectureLayers(files: FileEntry[], frameworkNames: string[]): ArchitectureLayer[];
20
19
  export declare function promptYesNo(question: string): Promise<boolean>;
@@ -1,5 +1,4 @@
1
1
  import { Command } from 'commander';
2
- import chalk from 'chalk';
3
2
  import path from 'node:path';
4
3
  import readline from 'node:readline';
5
4
  import { readFileSync } from 'node:fs';
@@ -7,12 +6,17 @@ import { fileURLToPath } from 'node:url';
7
6
  import { explainFile as explainProjectFile } from '../core/fileInspector.js';
8
7
  import { setLogLevel } from '../utils/logger.js';
9
8
  import { showBanner, showCompactBanner } from '../utils/banner.js';
10
- import { loadConfig } from '../utils/config.js';
11
9
  import { recordCommandTelemetry } from '../core/telemetry.js';
12
10
  import { enableOfflineMode } from '../core/privacy.js';
13
- import { getChangedFiles } from '../utils/changedFiles.js';
14
- import { OUTPUT_FORMATS, formatList, getCommandFormatSupport } from '../utils/formatSupport.js';
15
- import { resolveReporterPlugin, renderReporterPlugin, } from '../core/plugins.js';
11
+ import { formatList } from '../utils/formatSupport.js';
12
+ import { filterIssuesByChangedFilesForCli } from './changedOnly.js';
13
+ import { loadCliProjectConfig } from './projectConfig.js';
14
+ import { renderCliPluginReporterIfRequested } from './pluginReporter.js';
15
+ import { cliCommandPath } from './commandPath.js';
16
+ import { renderCliBanner } from './bannerDisplay.js';
17
+ import { assertCliFormatSupported, resolveCliFormat } from './formatOptions.js';
18
+ export { buildArchitectureLayers } from './architectureLayers.js';
19
+ export { sliceCliTree } from './treeSlice.js';
16
20
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
17
21
  export const pkg = JSON.parse(readFileSync(path.resolve(__dirname, '../../package.json'), 'utf-8'));
18
22
  export const program = new Command();
@@ -36,11 +40,11 @@ program.hook('preAction', (_thisCommand, actionCommand) => {
36
40
  process.env.PROJSCAN_INCLUDE_IGNORED = '1';
37
41
  if (opts.scanEnvValues)
38
42
  process.env.PROJSCAN_SCAN_ENV_VALUES = '1';
39
- activeTelemetryRun = { commandName: commandPath(actionCommand), startedAt: Date.now() };
43
+ activeTelemetryRun = { commandName: cliCommandPath(actionCommand), startedAt: Date.now() };
40
44
  });
41
45
  program.hook('postAction', async (_thisCommand, actionCommand) => {
42
46
  const run = activeTelemetryRun ?? {
43
- commandName: commandPath(actionCommand),
47
+ commandName: cliCommandPath(actionCommand),
44
48
  startedAt: Date.now(),
45
49
  };
46
50
  activeTelemetryRun = null;
@@ -52,95 +56,32 @@ program.hook('postAction', async (_thisCommand, actionCommand) => {
52
56
  version: pkg.version,
53
57
  }).catch(() => undefined);
54
58
  });
55
- function commandPath(actionCommand) {
56
- const parts = [];
57
- let current = actionCommand;
58
- while (current && current.name() !== 'projscan') {
59
- const name = current.name();
60
- if (name)
61
- parts.unshift(name);
62
- current = current.parent ?? null;
63
- }
64
- return parts.join(' ') || actionCommand.name() || 'unknown';
65
- }
66
59
  export function getFormat() {
67
- const opts = program.opts();
68
- const f = opts.format;
69
- if (OUTPUT_FORMATS.includes(f))
70
- return f;
71
- console.error(chalk.red(`Unsupported --format ${f}.`));
72
- console.error(chalk.dim(`Supported formats: ${formatList()}`));
73
- process.exit(1);
60
+ return resolveCliFormat(program.opts().format);
74
61
  }
75
62
  export function assertFormatSupported(commandName) {
76
- const format = getFormat();
77
- const supported = getCommandFormatSupport(commandName);
78
- if (!supported) {
79
- console.error(chalk.red(`Internal error: no --format support metadata for projscan ${commandName}.`));
80
- process.exit(1);
81
- }
82
- if (supported.includes(format))
83
- return format;
84
- console.error(chalk.red(`projscan ${commandName} does not support --format ${format}.`));
85
- console.error(chalk.dim(`Supported formats: ${formatList(supported)}`));
86
- process.exit(1);
63
+ return assertCliFormatSupported(commandName, program.opts().format);
87
64
  }
88
65
  export function getRootPath() {
89
66
  return process.cwd();
90
67
  }
91
68
  export async function loadProjectConfig() {
92
69
  const opts = program.opts();
93
- const explicit = typeof opts.config === 'string' ? opts.config : undefined;
94
- try {
95
- const { config, source } = await loadConfig(getRootPath(), explicit);
96
- if (config.scan?.offline)
97
- enableOfflineMode();
98
- if (config.scan?.includeIgnored)
99
- process.env.PROJSCAN_INCLUDE_IGNORED = '1';
100
- if (config.scan?.scanEnvValues)
101
- process.env.PROJSCAN_SCAN_ENV_VALUES = '1';
102
- if (source && !opts.quiet && getFormat() === 'console') {
103
- console.error(chalk.dim(` [config: ${path.relative(getRootPath(), source) || source}]`));
104
- }
105
- return config;
106
- }
107
- catch (err) {
108
- const msg = err instanceof Error ? err.message : String(err);
109
- console.error(chalk.red(` Config error: ${msg}`));
110
- process.exit(1);
111
- }
70
+ return await loadCliProjectConfig({
71
+ rootPath: getRootPath(),
72
+ configOption: opts.config,
73
+ quiet: Boolean(opts.quiet),
74
+ format: getFormat(),
75
+ });
112
76
  }
113
77
  export async function filterIssuesByChangedFiles(issues, rootPath, baseRef) {
114
- const result = await getChangedFiles(rootPath, baseRef);
115
- if (!result.available) {
116
- if (getFormat() === 'console' && !program.opts().quiet) {
117
- console.error(chalk.yellow(` [--changed-only: ${result.reason ?? 'unavailable'} - reporting all issues]`));
118
- }
119
- return issues;
120
- }
121
- if (getFormat() === 'console' && !program.opts().quiet) {
122
- console.error(chalk.dim(` [--changed-only: base=${result.baseRef}, ${result.files.length} file(s)]`));
123
- }
124
- const set = new Set(result.files);
125
- const filtered = issues.filter((issue) => {
126
- if (!issue.locations || issue.locations.length === 0)
127
- return false;
128
- return issue.locations.some((loc) => set.has(loc.file));
78
+ return await filterIssuesByChangedFilesForCli({
79
+ issues,
80
+ rootPath,
81
+ baseRef,
82
+ format: getFormat(),
83
+ quiet: Boolean(program.opts().quiet),
129
84
  });
130
- const dropped = issues.length - filtered.length;
131
- if (dropped > 0 && !program.opts().quiet) {
132
- const unlocated = issues.filter((i) => !i.locations || i.locations.length === 0).length;
133
- const message = unlocated > 0
134
- ? ` [--changed-only: ${dropped} issue(s) filtered out; ${unlocated} had no file location]`
135
- : ` [--changed-only: ${dropped} issue(s) outside the changed-file set]`;
136
- if (getFormat() === 'console') {
137
- console.error(chalk.dim(message));
138
- }
139
- else {
140
- console.error(message.trim());
141
- }
142
- }
143
- return filtered;
144
85
  }
145
86
  export function setupLogLevel() {
146
87
  const opts = program.opts();
@@ -150,148 +91,28 @@ export function setupLogLevel() {
150
91
  setLogLevel('quiet');
151
92
  }
152
93
  export function maybeBanner() {
153
- const opts = program.opts();
154
- if (!opts.quiet && getFormat() === 'console') {
155
- try {
156
- showBanner();
157
- }
158
- catch (err) {
159
- console.error(chalk.dim(` [banner error: ${err instanceof Error ? err.message : String(err)}]`));
160
- }
161
- }
94
+ renderCliBanner(currentBannerOptions(), showBanner);
162
95
  }
163
96
  export function maybeCompactBanner() {
97
+ renderCliBanner(currentBannerOptions(), showCompactBanner);
98
+ }
99
+ function currentBannerOptions() {
164
100
  const opts = program.opts();
165
- if (!opts.quiet && getFormat() === 'console') {
166
- try {
167
- showCompactBanner();
168
- }
169
- catch (err) {
170
- console.error(chalk.dim(` [banner error: ${err instanceof Error ? err.message : String(err)}]`));
171
- }
172
- }
101
+ return { quiet: Boolean(opts.quiet), format: getFormat() };
173
102
  }
174
103
  export async function renderPluginReporterIfRequested(command, reporterName, payload) {
175
- if (typeof reporterName !== 'string' || reporterName.length === 0)
176
- return false;
177
- const format = getFormat();
178
- if (format !== 'console') {
179
- console.error(chalk.red(`--reporter cannot be combined with --format ${format}`));
180
- process.exit(1);
181
- }
182
- const rootPath = getRootPath();
183
- const resolved = await resolveReporterPlugin(rootPath, reporterName, command);
184
- if (!resolved.ok) {
185
- printPluginReporterDiagnostic(resolved.diagnostic);
186
- process.exit(1);
187
- }
188
- const rendered = await renderReporterPlugin(resolved.plugin, {
104
+ return await renderCliPluginReporterIfRequested({
189
105
  command,
190
- rootPath,
191
- manifest: resolved.plugin.manifest,
106
+ reporterName,
192
107
  payload,
108
+ format: getFormat(),
109
+ rootPath: getRootPath(),
193
110
  });
194
- if (!rendered.ok) {
195
- printPluginReporterDiagnostic(rendered.diagnostic);
196
- process.exit(1);
197
- }
198
- console.log(rendered.output);
199
- return true;
200
- }
201
- function printPluginReporterDiagnostic(diagnostic) {
202
- console.error(chalk.red(`[${diagnostic.code}] ${diagnostic.message}`));
203
- if (diagnostic.hint)
204
- console.error(chalk.dim(`hint: ${diagnostic.hint}`));
205
- }
206
- /** Walk a DirectoryNode to find the node whose `path` matches targetPath. */
207
- export function sliceCliTree(node, targetPath) {
208
- if (node.path === targetPath)
209
- return node;
210
- for (const child of node.children) {
211
- const hit = sliceCliTree(child, targetPath);
212
- if (hit)
213
- return hit;
214
- }
215
- return null;
216
111
  }
217
112
  export async function analyzeFile(filePath) {
218
113
  const rootPath = process.cwd();
219
114
  return await explainProjectFile(rootPath, path.relative(rootPath, filePath));
220
115
  }
221
- export function buildArchitectureLayers(files, frameworkNames) {
222
- const layers = [];
223
- const dirs = new Set(files.map((f) => f.directory.split(path.sep)[0]).filter(Boolean));
224
- const frontendDirs = ['pages', 'components', 'views', 'layouts', 'public', 'app', 'styles'];
225
- const frontendMatches = frontendDirs.filter((d) => dirs.has(d) || dirs.has(`src/${d}`));
226
- const frontendFrameworks = frameworkNames.filter((f) => [
227
- 'React',
228
- 'Next.js',
229
- 'Vue.js',
230
- 'Nuxt.js',
231
- 'Svelte',
232
- 'SvelteKit',
233
- 'Angular',
234
- 'Solid.js',
235
- ].includes(f));
236
- if (frontendMatches.length > 0 || frontendFrameworks.length > 0) {
237
- layers.push({
238
- name: 'Frontend',
239
- technologies: frontendFrameworks.length > 0 ? frontendFrameworks : ['Static'],
240
- directories: frontendMatches,
241
- });
242
- }
243
- const apiDirs = ['api', 'routes', 'controllers', 'endpoints'];
244
- const apiMatches = apiDirs.filter((d) => dirs.has(d) || dirs.has(`src/${d}`));
245
- const apiFrameworks = frameworkNames.filter((f) => ['Express', 'Fastify', 'NestJS', 'Hono', 'Koa', 'Apollo Server', 'tRPC'].includes(f));
246
- if (apiMatches.length > 0 || apiFrameworks.length > 0) {
247
- layers.push({
248
- name: 'API Layer',
249
- technologies: apiFrameworks.length > 0 ? apiFrameworks : ['HTTP'],
250
- directories: apiMatches,
251
- });
252
- }
253
- const serviceDirs = ['services', 'lib', 'core', 'domain', 'modules'];
254
- const serviceMatches = serviceDirs.filter((d) => dirs.has(d) || dirs.has(`src/${d}`));
255
- if (serviceMatches.length > 0) {
256
- layers.push({
257
- name: 'Services',
258
- technologies: inferServiceTech(files, serviceMatches),
259
- directories: serviceMatches,
260
- });
261
- }
262
- const dbDirs = ['db', 'database', 'prisma', 'migrations', 'models', 'entities'];
263
- const dbMatches = dbDirs.filter((d) => dirs.has(d) || dirs.has(`src/${d}`));
264
- const dbFrameworks = frameworkNames.filter((f) => ['Prisma', 'Drizzle ORM', 'Mongoose', 'TypeORM', 'Sequelize'].includes(f));
265
- if (dbMatches.length > 0 || dbFrameworks.length > 0) {
266
- layers.push({
267
- name: 'Database',
268
- technologies: dbFrameworks.length > 0 ? dbFrameworks : ['Database'],
269
- directories: dbMatches,
270
- });
271
- }
272
- if (layers.length === 0) {
273
- const topDirs = [...dirs].slice(0, 5);
274
- layers.push({
275
- name: 'Application',
276
- technologies: frameworkNames.length > 0 ? frameworkNames : ['Unknown'],
277
- directories: topDirs,
278
- });
279
- }
280
- return layers;
281
- }
282
- function inferServiceTech(files, serviceDirs) {
283
- const techs = [];
284
- const serviceFiles = files.filter((f) => serviceDirs.some((d) => f.directory.startsWith(d)));
285
- const hasTsFiles = serviceFiles.some((f) => f.extension === '.ts' || f.extension === '.tsx');
286
- const hasJsFiles = serviceFiles.some((f) => f.extension === '.js' || f.extension === '.jsx');
287
- if (hasTsFiles)
288
- techs.push('TypeScript');
289
- else if (hasJsFiles)
290
- techs.push('JavaScript');
291
- if (techs.length === 0)
292
- techs.push('Mixed');
293
- return techs;
294
- }
295
116
  export function promptYesNo(question) {
296
117
  return new Promise((resolve) => {
297
118
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
@@ -1 +1 @@
1
- {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../src/cli/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAGrB,MAAM,oBAAoB,CAAC;AAU5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,oFAAoF,CAAC;KACjG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,UAAU,EAAE,sBAAsB,EAAE,SAAS,CAAC;KAC1F,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;KAC7E,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;KACvF,MAAM,CAAC,WAAW,EAAE,0DAA0D,CAAC;KAC/E,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;AAEtD,IAAI,kBAAkB,GAAsD,IAAI,CAAC;AAEjF,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,OAAO;QAAE,iBAAiB,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,GAAG,CAAC;IACpE,IAAI,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,GAAG,CAAC;IACnE,kBAAkB,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAC1F,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE;IAC/D,MAAM,GAAG,GAAG,kBAAkB,IAAI;QAChC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC;QACvC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IACF,kBAAkB,GAAG,IAAI,CAAC;IAC1B,MAAM,sBAAsB,CAAC;QAC3B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS;QACtC,QAAQ,EAAE,WAAW,EAAE;QACvB,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,aAAsB;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAmB,aAAa,CAAC;IAC5C,OAAO,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI;YAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAgB,CAAC;IAChC,IAAK,cAAoC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAiB,CAAC;IAChF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,6DAA6D,WAAW,GAAG,CAAC,CACvF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,WAAW,8BAA8B,MAAM,GAAG,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,MAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO;YAAE,iBAAiB,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,EAAE,cAAc;YAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,GAAG,CAAC;QAC5E,IAAI,MAAM,CAAC,IAAI,EAAE,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,GAAG,CAAC;QAC3E,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAe,EACf,QAAgB,EAChB,OAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,SAAS,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,MAAM,CACV,sBAAsB,MAAM,CAAC,MAAM,IAAI,aAAa,0BAA0B,CAC/E,CACF,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,SAAS,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QACvD,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,CACxF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACvC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChD,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACxF,MAAM,OAAO,GACX,SAAS,GAAG,CAAC;YACX,CAAC,CAAC,sBAAsB,OAAO,2BAA2B,SAAS,wBAAwB;YAC3F,CAAC,CAAC,sBAAsB,OAAO,yCAAyC,CAAC;QAC7E,IAAI,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,OAAO;QAAE,WAAW,CAAC,OAAO,CAAC,CAAC;SAClC,IAAI,IAAI,CAAC,KAAK;QAAE,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,iBAAiB,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAA8B,EAC9B,YAAqB,EACrB,OAAgB;IAEhB,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,MAAM,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,6BAA6B,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC3D,OAAO;QACP,QAAQ;QACR,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;QAClC,OAAO;KACR,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,6BAA6B,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CAAC,UAA4B;IACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvE,IAAI,UAAU,CAAC,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,IAAmB,EAAE,UAAkB;IAClE,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,OAAO,MAAM,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAkB,EAClB,cAAwB;IAExB,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAEvF,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5F,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD;QACE,OAAO;QACP,SAAS;QACT,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,WAAW;QACX,SAAS;QACT,UAAU;KACX,CAAC,QAAQ,CAAC,CAAC,CAAC,CACd,CAAC;IACF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC7E,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAChD,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrF,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACjE,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC;YACrD,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/C,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC1E,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YACnE,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,aAAa;YACnB,YAAY,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,WAAW,EAAE,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAkB,EAAE,WAAqB;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;IAC7F,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC,IAAI,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../src/cli/_shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ArchitectureLayer, FileEntry } from '../types.js';
2
+ export declare function buildArchitectureLayers(files: FileEntry[], frameworkNames: string[]): ArchitectureLayer[];
@@ -0,0 +1,112 @@
1
+ import path from 'node:path';
2
+ const FRONTEND_DIRS = ['pages', 'components', 'views', 'layouts', 'public', 'app', 'styles'];
3
+ const FRONTEND_FRAMEWORKS = [
4
+ 'React',
5
+ 'Next.js',
6
+ 'Vue.js',
7
+ 'Nuxt.js',
8
+ 'Svelte',
9
+ 'SvelteKit',
10
+ 'Angular',
11
+ 'Solid.js',
12
+ ];
13
+ const API_DIRS = ['api', 'routes', 'controllers', 'endpoints'];
14
+ const API_FRAMEWORKS = ['Express', 'Fastify', 'NestJS', 'Hono', 'Koa', 'Apollo Server', 'tRPC'];
15
+ const SERVICE_DIRS = ['services', 'lib', 'core', 'domain', 'modules'];
16
+ const DB_DIRS = ['db', 'database', 'prisma', 'migrations', 'models', 'entities'];
17
+ const DB_FRAMEWORKS = ['Prisma', 'Drizzle ORM', 'Mongoose', 'TypeORM', 'Sequelize'];
18
+ export function buildArchitectureLayers(files, frameworkNames) {
19
+ const layers = [];
20
+ const dirs = collectDirectorySignals(files);
21
+ pushLayer(layers, {
22
+ name: 'Frontend',
23
+ directories: matchingDirs(dirs, FRONTEND_DIRS),
24
+ frameworks: matchingFrameworks(frameworkNames, FRONTEND_FRAMEWORKS),
25
+ fallbackTechnology: 'Static',
26
+ });
27
+ pushLayer(layers, {
28
+ name: 'API Layer',
29
+ directories: matchingDirs(dirs, API_DIRS),
30
+ frameworks: matchingFrameworks(frameworkNames, API_FRAMEWORKS),
31
+ fallbackTechnology: 'HTTP',
32
+ });
33
+ const serviceMatches = matchingDirs(dirs, SERVICE_DIRS);
34
+ if (serviceMatches.length > 0) {
35
+ layers.push({
36
+ name: 'Services',
37
+ technologies: inferServiceTech(files, serviceMatches),
38
+ directories: serviceMatches,
39
+ });
40
+ }
41
+ pushLayer(layers, {
42
+ name: 'Database',
43
+ directories: matchingDirs(dirs, DB_DIRS),
44
+ frameworks: matchingFrameworks(frameworkNames, DB_FRAMEWORKS),
45
+ fallbackTechnology: 'Database',
46
+ });
47
+ if (layers.length === 0) {
48
+ const topDirs = [...collectTopLevelDirs(files)].slice(0, 5);
49
+ layers.push({
50
+ name: 'Application',
51
+ technologies: frameworkNames.length > 0 ? frameworkNames : ['Unknown'],
52
+ directories: topDirs,
53
+ });
54
+ }
55
+ return layers;
56
+ }
57
+ function collectDirectorySignals(files) {
58
+ const dirs = new Set();
59
+ for (const file of files) {
60
+ if (!file.directory || file.directory === '.')
61
+ continue;
62
+ dirs.add(file.directory);
63
+ const topDir = file.directory.split(path.sep)[0];
64
+ if (topDir)
65
+ dirs.add(topDir);
66
+ }
67
+ return dirs;
68
+ }
69
+ function collectTopLevelDirs(files) {
70
+ const dirs = new Set();
71
+ for (const file of files) {
72
+ const topDir = file.directory.split(path.sep)[0];
73
+ if (topDir)
74
+ dirs.add(topDir);
75
+ }
76
+ return dirs;
77
+ }
78
+ function pushLayer(layers, input) {
79
+ if (input.directories.length === 0 && input.frameworks.length === 0)
80
+ return;
81
+ layers.push({
82
+ name: input.name,
83
+ technologies: input.frameworks.length > 0 ? input.frameworks : [input.fallbackTechnology],
84
+ directories: input.directories,
85
+ });
86
+ }
87
+ function matchingDirs(dirs, candidates) {
88
+ return candidates.filter((dir) => dirs.has(dir) || dirs.has(`src/${dir}`));
89
+ }
90
+ function matchingFrameworks(frameworkNames, candidates) {
91
+ return frameworkNames.filter((framework) => candidates.includes(framework));
92
+ }
93
+ function inferServiceTech(files, serviceDirs) {
94
+ const techs = [];
95
+ const serviceFiles = files.filter((f) => serviceDirs.some((d) => isInLayerDir(f.directory, d)));
96
+ const hasTsFiles = serviceFiles.some((f) => f.extension === '.ts' || f.extension === '.tsx');
97
+ const hasJsFiles = serviceFiles.some((f) => f.extension === '.js' || f.extension === '.jsx');
98
+ if (hasTsFiles)
99
+ techs.push('TypeScript');
100
+ else if (hasJsFiles)
101
+ techs.push('JavaScript');
102
+ if (techs.length === 0)
103
+ techs.push('Mixed');
104
+ return techs;
105
+ }
106
+ function isInLayerDir(directory, layerDir) {
107
+ return (directory === layerDir ||
108
+ directory.startsWith(`${layerDir}${path.sep}`) ||
109
+ directory === `src${path.sep}${layerDir}` ||
110
+ directory.startsWith(`src${path.sep}${layerDir}${path.sep}`));
111
+ }
112
+ //# sourceMappingURL=architectureLayers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architectureLayers.js","sourceRoot":"","sources":["../../src/cli/architectureLayers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ReportFormat } from '../types/config.js';
2
+ interface CliBannerDisplayOptions {
3
+ quiet: boolean;
4
+ format: ReportFormat;
5
+ }
6
+ export declare function shouldRenderCliBanner(options: CliBannerDisplayOptions): boolean;
7
+ export declare function renderCliBanner(options: CliBannerDisplayOptions, render: () => void, writeError?: (message: string) => void): void;
8
+ export declare function bannerErrorMessage(err: unknown): string;
9
+ export {};