projscan 4.5.0 → 4.6.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 (591) hide show
  1. package/README.md +14 -13
  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 +41 -188
  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/commandPath.d.ts +2 -0
  17. package/dist/cli/commandPath.js +12 -0
  18. package/dist/cli/commandPath.js.map +1 -0
  19. package/dist/cli/commands/agentBrief.js +11 -0
  20. package/dist/cli/commands/agentBrief.js.map +1 -1
  21. package/dist/cli/commands/analyze.js +6 -5
  22. package/dist/cli/commands/analyze.js.map +1 -1
  23. package/dist/cli/commands/ci.js +5 -4
  24. package/dist/cli/commands/ci.js.map +1 -1
  25. package/dist/cli/commands/coordinate.js +27 -0
  26. package/dist/cli/commands/coordinate.js.map +1 -1
  27. package/dist/cli/commands/doctor.js +6 -5
  28. package/dist/cli/commands/doctor.js.map +1 -1
  29. package/dist/cli/pluginReporter.d.ts +14 -0
  30. package/dist/cli/pluginReporter.js +46 -0
  31. package/dist/cli/pluginReporter.js.map +1 -0
  32. package/dist/cli/projectConfig.d.ts +12 -0
  33. package/dist/cli/projectConfig.js +41 -0
  34. package/dist/cli/projectConfig.js.map +1 -0
  35. package/dist/cli/treeSlice.d.ts +3 -0
  36. package/dist/cli/treeSlice.js +12 -0
  37. package/dist/cli/treeSlice.js.map +1 -0
  38. package/dist/core/ast.d.ts +4 -81
  39. package/dist/core/ast.js +11 -637
  40. package/dist/core/ast.js.map +1 -1
  41. package/dist/core/astBodySignals.d.ts +17 -0
  42. package/dist/core/astBodySignals.js +107 -0
  43. package/dist/core/astBodySignals.js.map +1 -0
  44. package/dist/core/astFunctionCollector.d.ts +11 -0
  45. package/dist/core/astFunctionCollector.js +140 -0
  46. package/dist/core/astFunctionCollector.js.map +1 -0
  47. package/dist/core/astFunctionNames.d.ts +2 -0
  48. package/dist/core/astFunctionNames.js +53 -0
  49. package/dist/core/astFunctionNames.js.map +1 -0
  50. package/dist/core/astFunctionNodes.d.ts +2 -0
  51. package/dist/core/astFunctionNodes.js +12 -0
  52. package/dist/core/astFunctionNodes.js.map +1 -0
  53. package/dist/core/astMembers.d.ts +13 -0
  54. package/dist/core/astMembers.js +116 -0
  55. package/dist/core/astMembers.js.map +1 -0
  56. package/dist/core/astModuleSignals.d.ts +3 -0
  57. package/dist/core/astModuleSignals.js +140 -0
  58. package/dist/core/astModuleSignals.js.map +1 -0
  59. package/dist/core/astParser.d.ts +11 -0
  60. package/dist/core/astParser.js +38 -0
  61. package/dist/core/astParser.js.map +1 -0
  62. package/dist/core/astProgramSignals.d.ts +11 -0
  63. package/dist/core/astProgramSignals.js +97 -0
  64. package/dist/core/astProgramSignals.js.map +1 -0
  65. package/dist/core/astTypes.d.ts +78 -0
  66. package/dist/core/astTypes.js +2 -0
  67. package/dist/core/astTypes.js.map +1 -0
  68. package/dist/core/codeGraph.d.ts +3 -28
  69. package/dist/core/codeGraph.js +3 -231
  70. package/dist/core/codeGraph.js.map +1 -1
  71. package/dist/core/codeGraphFanMetrics.d.ts +17 -0
  72. package/dist/core/codeGraphFanMetrics.js +89 -0
  73. package/dist/core/codeGraphFanMetrics.js.map +1 -0
  74. package/dist/core/codeGraphIndexes.d.ts +23 -0
  75. package/dist/core/codeGraphIndexes.js +57 -0
  76. package/dist/core/codeGraphIndexes.js.map +1 -0
  77. package/dist/core/codeGraphParsing.d.ts +20 -0
  78. package/dist/core/codeGraphParsing.js +104 -0
  79. package/dist/core/codeGraphParsing.js.map +1 -0
  80. package/dist/core/codeGraphTypes.d.ts +28 -0
  81. package/dist/core/codeGraphTypes.js +2 -0
  82. package/dist/core/codeGraphTypes.js.map +1 -0
  83. package/dist/core/collisionDetector.d.ts +2 -0
  84. package/dist/core/collisionDetector.js +17 -12
  85. package/dist/core/collisionDetector.js.map +1 -1
  86. package/dist/core/coordination.d.ts +4 -2
  87. package/dist/core/coordination.js +40 -4
  88. package/dist/core/coordination.js.map +1 -1
  89. package/dist/core/coordinationEvidence.d.ts +32 -0
  90. package/dist/core/coordinationEvidence.js +101 -0
  91. package/dist/core/coordinationEvidence.js.map +1 -0
  92. package/dist/core/fileAccess.d.ts +16 -0
  93. package/dist/core/fileAccess.js +78 -0
  94. package/dist/core/fileAccess.js.map +1 -0
  95. package/dist/core/fileExportTypes.d.ts +2 -0
  96. package/dist/core/fileExportTypes.js +16 -0
  97. package/dist/core/fileExportTypes.js.map +1 -0
  98. package/dist/core/fileGraphMetrics.d.ts +4 -0
  99. package/dist/core/fileGraphMetrics.js +34 -0
  100. package/dist/core/fileGraphMetrics.js.map +1 -0
  101. package/dist/core/fileInspectionEvidence.d.ts +13 -0
  102. package/dist/core/fileInspectionEvidence.js +14 -0
  103. package/dist/core/fileInspectionEvidence.js.map +1 -0
  104. package/dist/core/fileInspectionGraph.d.ts +5 -0
  105. package/dist/core/fileInspectionGraph.js +29 -0
  106. package/dist/core/fileInspectionGraph.js.map +1 -0
  107. package/dist/core/fileInspector.d.ts +4 -4
  108. package/dist/core/fileInspector.js +28 -215
  109. package/dist/core/fileInspector.js.map +1 -1
  110. package/dist/core/fileIssues.d.ts +1 -0
  111. package/dist/core/fileIssues.js +18 -0
  112. package/dist/core/fileIssues.js.map +1 -0
  113. package/dist/core/filePurpose.d.ts +2 -0
  114. package/dist/core/filePurpose.js +61 -0
  115. package/dist/core/filePurpose.js.map +1 -0
  116. package/dist/core/frameworkExpressSources.d.ts +4 -0
  117. package/dist/core/frameworkExpressSources.js +95 -0
  118. package/dist/core/frameworkExpressSources.js.map +1 -0
  119. package/dist/core/frameworkFastifySources.d.ts +4 -0
  120. package/dist/core/frameworkFastifySources.js +74 -0
  121. package/dist/core/frameworkFastifySources.js.map +1 -0
  122. package/dist/core/frameworkHonoSources.d.ts +4 -0
  123. package/dist/core/frameworkHonoSources.js +73 -0
  124. package/dist/core/frameworkHonoSources.js.map +1 -0
  125. package/dist/core/frameworkKoaSources.d.ts +4 -0
  126. package/dist/core/frameworkKoaSources.js +81 -0
  127. package/dist/core/frameworkKoaSources.js.map +1 -0
  128. package/dist/core/frameworkNextRouteSources.d.ts +2 -0
  129. package/dist/core/frameworkNextRouteSources.js +55 -0
  130. package/dist/core/frameworkNextRouteSources.js.map +1 -0
  131. package/dist/core/frameworkSources.js +15 -214
  132. package/dist/core/frameworkSources.js.map +1 -1
  133. package/dist/core/hotspotAnalyzer.d.ts +2 -18
  134. package/dist/core/hotspotAnalyzer.js +15 -477
  135. package/dist/core/hotspotAnalyzer.js.map +1 -1
  136. package/dist/core/hotspotBuilder.d.ts +14 -0
  137. package/dist/core/hotspotBuilder.js +70 -0
  138. package/dist/core/hotspotBuilder.js.map +1 -0
  139. package/dist/core/hotspotCandidates.d.ts +9 -0
  140. package/dist/core/hotspotCandidates.js +63 -0
  141. package/dist/core/hotspotCandidates.js.map +1 -0
  142. package/dist/core/hotspotGit.d.ts +10 -0
  143. package/dist/core/hotspotGit.js +152 -0
  144. package/dist/core/hotspotGit.js.map +1 -0
  145. package/dist/core/hotspotIssues.d.ts +2 -0
  146. package/dist/core/hotspotIssues.js +83 -0
  147. package/dist/core/hotspotIssues.js.map +1 -0
  148. package/dist/core/hotspotLines.d.ts +2 -0
  149. package/dist/core/hotspotLines.js +24 -0
  150. package/dist/core/hotspotLines.js.map +1 -0
  151. package/dist/core/hotspotMemory.d.ts +2 -0
  152. package/dist/core/hotspotMemory.js +21 -0
  153. package/dist/core/hotspotMemory.js.map +1 -0
  154. package/dist/core/hotspotRanking.d.ts +13 -0
  155. package/dist/core/hotspotRanking.js +44 -0
  156. package/dist/core/hotspotRanking.js.map +1 -0
  157. package/dist/core/hotspotScoring.d.ts +23 -0
  158. package/dist/core/hotspotScoring.js +128 -0
  159. package/dist/core/hotspotScoring.js.map +1 -0
  160. package/dist/core/indexCache.js +3 -1
  161. package/dist/core/indexCache.js.map +1 -1
  162. package/dist/core/intentRouter.d.ts +3 -16
  163. package/dist/core/intentRouter.js +5 -7348
  164. package/dist/core/intentRouter.js.map +1 -1
  165. package/dist/core/intentRouterCatalog.d.ts +16 -0
  166. package/dist/core/intentRouterCatalog.js +1692 -0
  167. package/dist/core/intentRouterCatalog.js.map +1 -0
  168. package/dist/core/intentRouterCoordinationSignals.d.ts +12 -0
  169. package/dist/core/intentRouterCoordinationSignals.js +111 -0
  170. package/dist/core/intentRouterCoordinationSignals.js.map +1 -0
  171. package/dist/core/intentRouterDependencySignals.d.ts +9 -0
  172. package/dist/core/intentRouterDependencySignals.js +226 -0
  173. package/dist/core/intentRouterDependencySignals.js.map +1 -0
  174. package/dist/core/intentRouterKeywordContext.d.ts +14 -0
  175. package/dist/core/intentRouterKeywordContext.js +2 -0
  176. package/dist/core/intentRouterKeywordContext.js.map +1 -0
  177. package/dist/core/intentRouterKeywordEarlyGuards.d.ts +2 -0
  178. package/dist/core/intentRouterKeywordEarlyGuards.js +127 -0
  179. package/dist/core/intentRouterKeywordEarlyGuards.js.map +1 -0
  180. package/dist/core/intentRouterKeywordMatches.d.ts +3 -0
  181. package/dist/core/intentRouterKeywordMatches.js +31 -0
  182. package/dist/core/intentRouterKeywordMatches.js.map +1 -0
  183. package/dist/core/intentRouterKeywordSearchGuards.d.ts +2 -0
  184. package/dist/core/intentRouterKeywordSearchGuards.js +239 -0
  185. package/dist/core/intentRouterKeywordSearchGuards.js.map +1 -0
  186. package/dist/core/intentRouterKeywordTargetGuards.d.ts +2 -0
  187. package/dist/core/intentRouterKeywordTargetGuards.js +191 -0
  188. package/dist/core/intentRouterKeywordTargetGuards.js.map +1 -0
  189. package/dist/core/intentRouterKeywordToolGuards.d.ts +2 -0
  190. package/dist/core/intentRouterKeywordToolGuards.js +133 -0
  191. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -0
  192. package/dist/core/intentRouterKeywordWeights.d.ts +4 -0
  193. package/dist/core/intentRouterKeywordWeights.js +1184 -0
  194. package/dist/core/intentRouterKeywordWeights.js.map +1 -0
  195. package/dist/core/intentRouterPlanningSignals.d.ts +7 -0
  196. package/dist/core/intentRouterPlanningSignals.js +268 -0
  197. package/dist/core/intentRouterPlanningSignals.js.map +1 -0
  198. package/dist/core/intentRouterPrDiffSignals.d.ts +1 -0
  199. package/dist/core/intentRouterPrDiffSignals.js +41 -0
  200. package/dist/core/intentRouterPrDiffSignals.js.map +1 -0
  201. package/dist/core/intentRouterPreflightSignals.d.ts +3 -0
  202. package/dist/core/intentRouterPreflightSignals.js +54 -0
  203. package/dist/core/intentRouterPreflightSignals.js.map +1 -0
  204. package/dist/core/intentRouterRegressionKeywordMatches.d.ts +1 -0
  205. package/dist/core/intentRouterRegressionKeywordMatches.js +176 -0
  206. package/dist/core/intentRouterRegressionKeywordMatches.js.map +1 -0
  207. package/dist/core/intentRouterRegressionSignals.d.ts +10 -0
  208. package/dist/core/intentRouterRegressionSignals.js +207 -0
  209. package/dist/core/intentRouterRegressionSignals.js.map +1 -0
  210. package/dist/core/intentRouterReleaseSignals.d.ts +8 -0
  211. package/dist/core/intentRouterReleaseSignals.js +59 -0
  212. package/dist/core/intentRouterReleaseSignals.js.map +1 -0
  213. package/dist/core/intentRouterRepoSignals.d.ts +8 -0
  214. package/dist/core/intentRouterRepoSignals.js +226 -0
  215. package/dist/core/intentRouterRepoSignals.js.map +1 -0
  216. package/dist/core/intentRouterReviewSignals.d.ts +2 -0
  217. package/dist/core/intentRouterReviewSignals.js +109 -0
  218. package/dist/core/intentRouterReviewSignals.js.map +1 -0
  219. package/dist/core/intentRouterRiskSignals.d.ts +12 -0
  220. package/dist/core/intentRouterRiskSignals.js +242 -0
  221. package/dist/core/intentRouterRiskSignals.js.map +1 -0
  222. package/dist/core/intentRouterScoring.d.ts +9 -0
  223. package/dist/core/intentRouterScoring.js +40 -0
  224. package/dist/core/intentRouterScoring.js.map +1 -0
  225. package/dist/core/intentRouterSearchApiSignals.d.ts +1 -0
  226. package/dist/core/intentRouterSearchApiSignals.js +62 -0
  227. package/dist/core/intentRouterSearchApiSignals.js.map +1 -0
  228. package/dist/core/intentRouterSearchBackgroundSignals.d.ts +1 -0
  229. package/dist/core/intentRouterSearchBackgroundSignals.js +55 -0
  230. package/dist/core/intentRouterSearchBackgroundSignals.js.map +1 -0
  231. package/dist/core/intentRouterSearchCommunicationSignals.d.ts +1 -0
  232. package/dist/core/intentRouterSearchCommunicationSignals.js +74 -0
  233. package/dist/core/intentRouterSearchCommunicationSignals.js.map +1 -0
  234. package/dist/core/intentRouterSearchDataSignals.d.ts +2 -0
  235. package/dist/core/intentRouterSearchDataSignals.js +98 -0
  236. package/dist/core/intentRouterSearchDataSignals.js.map +1 -0
  237. package/dist/core/intentRouterSearchDomainSignals.d.ts +1 -0
  238. package/dist/core/intentRouterSearchDomainSignals.js +71 -0
  239. package/dist/core/intentRouterSearchDomainSignals.js.map +1 -0
  240. package/dist/core/intentRouterSearchInfraSignals.d.ts +1 -0
  241. package/dist/core/intentRouterSearchInfraSignals.js +79 -0
  242. package/dist/core/intentRouterSearchInfraSignals.js.map +1 -0
  243. package/dist/core/intentRouterSearchIntegrationSignals.d.ts +1 -0
  244. package/dist/core/intentRouterSearchIntegrationSignals.js +117 -0
  245. package/dist/core/intentRouterSearchIntegrationSignals.js.map +1 -0
  246. package/dist/core/intentRouterSearchLookupSignals.d.ts +10 -0
  247. package/dist/core/intentRouterSearchLookupSignals.js +310 -0
  248. package/dist/core/intentRouterSearchLookupSignals.js.map +1 -0
  249. package/dist/core/intentRouterSearchNavigationSignals.d.ts +1 -0
  250. package/dist/core/intentRouterSearchNavigationSignals.js +62 -0
  251. package/dist/core/intentRouterSearchNavigationSignals.js.map +1 -0
  252. package/dist/core/intentRouterSearchOwnershipSignals.d.ts +1 -0
  253. package/dist/core/intentRouterSearchOwnershipSignals.js +15 -0
  254. package/dist/core/intentRouterSearchOwnershipSignals.js.map +1 -0
  255. package/dist/core/intentRouterSearchPageSignals.d.ts +1 -0
  256. package/dist/core/intentRouterSearchPageSignals.js +84 -0
  257. package/dist/core/intentRouterSearchPageSignals.js.map +1 -0
  258. package/dist/core/intentRouterSearchReliabilitySignals.d.ts +1 -0
  259. package/dist/core/intentRouterSearchReliabilitySignals.js +94 -0
  260. package/dist/core/intentRouterSearchReliabilitySignals.js.map +1 -0
  261. package/dist/core/intentRouterSearchStateSignals.d.ts +1 -0
  262. package/dist/core/intentRouterSearchStateSignals.js +107 -0
  263. package/dist/core/intentRouterSearchStateSignals.js.map +1 -0
  264. package/dist/core/intentRouterSearchStyleSignals.d.ts +1 -0
  265. package/dist/core/intentRouterSearchStyleSignals.js +99 -0
  266. package/dist/core/intentRouterSearchStyleSignals.js.map +1 -0
  267. package/dist/core/intentRouterSearchTestSignals.d.ts +1 -0
  268. package/dist/core/intentRouterSearchTestSignals.js +34 -0
  269. package/dist/core/intentRouterSearchTestSignals.js.map +1 -0
  270. package/dist/core/intentRouterSearchToolingSignals.d.ts +1 -0
  271. package/dist/core/intentRouterSearchToolingSignals.js +106 -0
  272. package/dist/core/intentRouterSearchToolingSignals.js.map +1 -0
  273. package/dist/core/intentRouterSearchUiSignals.d.ts +1 -0
  274. package/dist/core/intentRouterSearchUiSignals.js +77 -0
  275. package/dist/core/intentRouterSearchUiSignals.js.map +1 -0
  276. package/dist/core/intentRouterSecuritySignals.d.ts +4 -0
  277. package/dist/core/intentRouterSecuritySignals.js +235 -0
  278. package/dist/core/intentRouterSecuritySignals.js.map +1 -0
  279. package/dist/core/intentRouterTargetSignals.d.ts +5 -0
  280. package/dist/core/intentRouterTargetSignals.js +76 -0
  281. package/dist/core/intentRouterTargetSignals.js.map +1 -0
  282. package/dist/core/intentRouterTokens.d.ts +1 -0
  283. package/dist/core/intentRouterTokens.js +36 -0
  284. package/dist/core/intentRouterTokens.js.map +1 -0
  285. package/dist/core/intentRouterUnderstandSignals.d.ts +1 -0
  286. package/dist/core/intentRouterUnderstandSignals.js +171 -0
  287. package/dist/core/intentRouterUnderstandSignals.js.map +1 -0
  288. package/dist/core/intentRouterVerificationSignals.d.ts +8 -0
  289. package/dist/core/intentRouterVerificationSignals.js +119 -0
  290. package/dist/core/intentRouterVerificationSignals.js.map +1 -0
  291. package/dist/core/intentRouterWorkSignals.d.ts +4 -0
  292. package/dist/core/intentRouterWorkSignals.js +157 -0
  293. package/dist/core/intentRouterWorkSignals.js.map +1 -0
  294. package/dist/core/languages/pythonLockfiles.d.ts +11 -0
  295. package/dist/core/languages/pythonLockfiles.js +206 -0
  296. package/dist/core/languages/pythonLockfiles.js.map +1 -0
  297. package/dist/core/languages/pythonManifestText.d.ts +7 -0
  298. package/dist/core/languages/pythonManifestText.js +25 -0
  299. package/dist/core/languages/pythonManifestText.js.map +1 -0
  300. package/dist/core/languages/pythonManifests.d.ts +6 -38
  301. package/dist/core/languages/pythonManifests.js +27 -316
  302. package/dist/core/languages/pythonManifests.js.map +1 -1
  303. package/dist/core/languages/pythonPep508.d.ts +4 -0
  304. package/dist/core/languages/pythonPep508.js +14 -0
  305. package/dist/core/languages/pythonPep508.js.map +1 -0
  306. package/dist/core/languages/pythonProjectEvidence.d.ts +2 -0
  307. package/dist/core/languages/pythonProjectEvidence.js +29 -0
  308. package/dist/core/languages/pythonProjectEvidence.js.map +1 -0
  309. package/dist/core/languages/pythonProjectTypes.d.ts +31 -0
  310. package/dist/core/languages/pythonProjectTypes.js +2 -0
  311. package/dist/core/languages/pythonProjectTypes.js.map +1 -0
  312. package/dist/core/languages/pythonPyproject.d.ts +2 -0
  313. package/dist/core/languages/pythonPyproject.js +160 -0
  314. package/dist/core/languages/pythonPyproject.js.map +1 -0
  315. package/dist/core/languages/pythonRequirements.d.ts +9 -0
  316. package/dist/core/languages/pythonRequirements.js +86 -0
  317. package/dist/core/languages/pythonRequirements.js.map +1 -0
  318. package/dist/core/languages/pythonRoots.d.ts +3 -0
  319. package/dist/core/languages/pythonRoots.js +83 -0
  320. package/dist/core/languages/pythonRoots.js.map +1 -0
  321. package/dist/core/languages/pythonSetuptools.d.ts +6 -0
  322. package/dist/core/languages/pythonSetuptools.js +58 -0
  323. package/dist/core/languages/pythonSetuptools.js.map +1 -0
  324. package/dist/core/prDiff.js +12 -0
  325. package/dist/core/prDiff.js.map +1 -1
  326. package/dist/core/preflight.d.ts +3 -3
  327. package/dist/core/preflight.js +28 -542
  328. package/dist/core/preflight.js.map +1 -1
  329. package/dist/core/preflightChangedFileReasons.d.ts +14 -0
  330. package/dist/core/preflightChangedFileReasons.js +75 -0
  331. package/dist/core/preflightChangedFileReasons.js.map +1 -0
  332. package/dist/core/preflightChangedFiles.d.ts +9 -0
  333. package/dist/core/preflightChangedFiles.js +34 -0
  334. package/dist/core/preflightChangedFiles.js.map +1 -0
  335. package/dist/core/preflightContextReasons.d.ts +17 -0
  336. package/dist/core/preflightContextReasons.js +73 -0
  337. package/dist/core/preflightContextReasons.js.map +1 -0
  338. package/dist/core/preflightEvidence.d.ts +34 -0
  339. package/dist/core/preflightEvidence.js +119 -0
  340. package/dist/core/preflightEvidence.js.map +1 -0
  341. package/dist/core/preflightInputs.d.ts +15 -0
  342. package/dist/core/preflightInputs.js +31 -0
  343. package/dist/core/preflightInputs.js.map +1 -0
  344. package/dist/core/preflightIssueReasons.d.ts +2 -0
  345. package/dist/core/preflightIssueReasons.js +39 -0
  346. package/dist/core/preflightIssueReasons.js.map +1 -0
  347. package/dist/core/preflightLocalEvidence.d.ts +12 -0
  348. package/dist/core/preflightLocalEvidence.js +36 -0
  349. package/dist/core/preflightLocalEvidence.js.map +1 -0
  350. package/dist/core/preflightReleaseScale.d.ts +28 -0
  351. package/dist/core/preflightReleaseScale.js +95 -0
  352. package/dist/core/preflightReleaseScale.js.map +1 -0
  353. package/dist/core/preflightRequiredChecks.d.ts +26 -0
  354. package/dist/core/preflightRequiredChecks.js +96 -0
  355. package/dist/core/preflightRequiredChecks.js.map +1 -0
  356. package/dist/core/preflightReviewEvidence.d.ts +16 -0
  357. package/dist/core/preflightReviewEvidence.js +31 -0
  358. package/dist/core/preflightReviewEvidence.js.map +1 -0
  359. package/dist/core/preflightReviewReasons.d.ts +15 -0
  360. package/dist/core/preflightReviewReasons.js +76 -0
  361. package/dist/core/preflightReviewReasons.js.map +1 -0
  362. package/dist/core/preflightSuggestedActions.d.ts +15 -0
  363. package/dist/core/preflightSuggestedActions.js +84 -0
  364. package/dist/core/preflightSuggestedActions.js.map +1 -0
  365. package/dist/core/preflightTruncation.d.ts +6 -0
  366. package/dist/core/preflightTruncation.js +7 -0
  367. package/dist/core/preflightTruncation.js.map +1 -0
  368. package/dist/core/preflightVerdict.d.ts +3 -0
  369. package/dist/core/preflightVerdict.js +17 -0
  370. package/dist/core/preflightVerdict.js.map +1 -0
  371. package/dist/core/releaseEvidence.d.ts +4 -3
  372. package/dist/core/releaseEvidence.js +12 -263
  373. package/dist/core/releaseEvidence.js.map +1 -1
  374. package/dist/core/releaseEvidenceBaseline.d.ts +2 -0
  375. package/dist/core/releaseEvidenceBaseline.js +28 -0
  376. package/dist/core/releaseEvidenceBaseline.js.map +1 -0
  377. package/dist/core/releaseEvidencePrSummary.d.ts +13 -0
  378. package/dist/core/releaseEvidencePrSummary.js +240 -0
  379. package/dist/core/releaseEvidencePrSummary.js.map +1 -0
  380. package/dist/core/releaseTrain.js +3 -317
  381. package/dist/core/releaseTrain.js.map +1 -1
  382. package/dist/core/releaseTrainFallbacks.d.ts +3 -0
  383. package/dist/core/releaseTrainFallbacks.js +318 -0
  384. package/dist/core/releaseTrainFallbacks.js.map +1 -0
  385. package/dist/core/reportScope.d.ts +7 -0
  386. package/dist/core/reportScope.js +97 -6
  387. package/dist/core/reportScope.js.map +1 -1
  388. package/dist/core/review.d.ts +2 -25
  389. package/dist/core/review.js +34 -1034
  390. package/dist/core/review.js.map +1 -1
  391. package/dist/core/reviewBaseSnapshot.d.ts +14 -0
  392. package/dist/core/reviewBaseSnapshot.js +41 -0
  393. package/dist/core/reviewBaseSnapshot.js.map +1 -0
  394. package/dist/core/reviewChangedFiles.d.ts +8 -0
  395. package/dist/core/reviewChangedFiles.js +63 -0
  396. package/dist/core/reviewChangedFiles.js.map +1 -0
  397. package/dist/core/reviewContractChanges.d.ts +5 -0
  398. package/dist/core/reviewContractChanges.js +114 -0
  399. package/dist/core/reviewContractChanges.js.map +1 -0
  400. package/dist/core/reviewCycles.d.ts +7 -0
  401. package/dist/core/reviewCycles.js +53 -0
  402. package/dist/core/reviewCycles.js.map +1 -0
  403. package/dist/core/reviewFindings.d.ts +17 -0
  404. package/dist/core/reviewFindings.js +49 -0
  405. package/dist/core/reviewFindings.js.map +1 -0
  406. package/dist/core/reviewFlowDiffs.d.ts +4 -0
  407. package/dist/core/reviewFlowDiffs.js +99 -0
  408. package/dist/core/reviewFlowDiffs.js.map +1 -0
  409. package/dist/core/reviewGit.d.ts +7 -0
  410. package/dist/core/reviewGit.js +45 -0
  411. package/dist/core/reviewGit.js.map +1 -0
  412. package/dist/core/reviewGraphEvidence.d.ts +3 -0
  413. package/dist/core/reviewGraphEvidence.js +55 -0
  414. package/dist/core/reviewGraphEvidence.js.map +1 -0
  415. package/dist/core/reviewHeadSnapshot.d.ts +8 -0
  416. package/dist/core/reviewHeadSnapshot.js +15 -0
  417. package/dist/core/reviewHeadSnapshot.js.map +1 -0
  418. package/dist/core/reviewIntent.d.ts +2 -0
  419. package/dist/core/reviewIntent.js +18 -0
  420. package/dist/core/reviewIntent.js.map +1 -0
  421. package/dist/core/reviewManifests.d.ts +12 -0
  422. package/dist/core/reviewManifests.js +124 -0
  423. package/dist/core/reviewManifests.js.map +1 -0
  424. package/dist/core/reviewNoChanges.d.ts +9 -0
  425. package/dist/core/reviewNoChanges.js +26 -0
  426. package/dist/core/reviewNoChanges.js.map +1 -0
  427. package/dist/core/reviewPackageScope.d.ts +4 -0
  428. package/dist/core/reviewPackageScope.js +24 -0
  429. package/dist/core/reviewPackageScope.js.map +1 -0
  430. package/dist/core/reviewRefs.d.ts +4 -0
  431. package/dist/core/reviewRefs.js +65 -0
  432. package/dist/core/reviewRefs.js.map +1 -0
  433. package/dist/core/reviewRiskyFunctions.d.ts +8 -0
  434. package/dist/core/reviewRiskyFunctions.js +83 -0
  435. package/dist/core/reviewRiskyFunctions.js.map +1 -0
  436. package/dist/core/reviewState.d.ts +21 -0
  437. package/dist/core/reviewState.js +96 -0
  438. package/dist/core/reviewState.js.map +1 -0
  439. package/dist/core/reviewTier.d.ts +18 -0
  440. package/dist/core/reviewTier.js +99 -0
  441. package/dist/core/reviewTier.js.map +1 -0
  442. package/dist/core/reviewVerdict.d.ts +9 -0
  443. package/dist/core/reviewVerdict.js +121 -0
  444. package/dist/core/reviewVerdict.js.map +1 -0
  445. package/dist/core/start.d.ts +1 -1
  446. package/dist/core/start.js +17 -49
  447. package/dist/core/start.js.map +1 -1
  448. package/dist/core/startAdoptionGaps.d.ts +3 -0
  449. package/dist/core/startAdoptionGaps.js +12 -0
  450. package/dist/core/startAdoptionGaps.js.map +1 -0
  451. package/dist/core/startInputs.d.ts +31 -0
  452. package/dist/core/startInputs.js +27 -0
  453. package/dist/core/startInputs.js.map +1 -0
  454. package/dist/core/startMode.js +7 -1
  455. package/dist/core/startMode.js.map +1 -1
  456. package/dist/core/startReportBuilder.d.ts +25 -0
  457. package/dist/core/startReportBuilder.js +44 -0
  458. package/dist/core/startReportBuilder.js.map +1 -0
  459. package/dist/core/taint.js +4 -116
  460. package/dist/core/taint.js.map +1 -1
  461. package/dist/core/taintMatching.d.ts +11 -0
  462. package/dist/core/taintMatching.js +126 -0
  463. package/dist/core/taintMatching.js.map +1 -0
  464. package/dist/core/upgradePreview.d.ts +1 -12
  465. package/dist/core/upgradePreview.js +9 -229
  466. package/dist/core/upgradePreview.js.map +1 -1
  467. package/dist/core/upgradePreviewNpmEvidence.d.ts +19 -0
  468. package/dist/core/upgradePreviewNpmEvidence.js +164 -0
  469. package/dist/core/upgradePreviewNpmEvidence.js.map +1 -0
  470. package/dist/core/upgradePreviewPython.d.ts +2 -0
  471. package/dist/core/upgradePreviewPython.js +71 -0
  472. package/dist/core/upgradePreviewPython.js.map +1 -0
  473. package/dist/index.d.ts +6 -12
  474. package/dist/index.js +2 -3
  475. package/dist/index.js.map +1 -1
  476. package/dist/mcp/server.d.ts +3 -24
  477. package/dist/mcp/server.js +32 -414
  478. package/dist/mcp/server.js.map +1 -1
  479. package/dist/mcp/serverContext.d.ts +6 -0
  480. package/dist/mcp/serverContext.js +55 -0
  481. package/dist/mcp/serverContext.js.map +1 -0
  482. package/dist/mcp/serverDispatch.d.ts +39 -0
  483. package/dist/mcp/serverDispatch.js +74 -0
  484. package/dist/mcp/serverDispatch.js.map +1 -0
  485. package/dist/mcp/serverHandlers.d.ts +15 -0
  486. package/dist/mcp/serverHandlers.js +94 -0
  487. package/dist/mcp/serverHandlers.js.map +1 -0
  488. package/dist/mcp/serverLifecycle.d.ts +14 -0
  489. package/dist/mcp/serverLifecycle.js +65 -0
  490. package/dist/mcp/serverLifecycle.js.map +1 -0
  491. package/dist/mcp/serverMessage.d.ts +11 -0
  492. package/dist/mcp/serverMessage.js +37 -0
  493. package/dist/mcp/serverMessage.js.map +1 -0
  494. package/dist/mcp/serverSession.d.ts +6 -0
  495. package/dist/mcp/serverSession.js +77 -0
  496. package/dist/mcp/serverSession.js.map +1 -0
  497. package/dist/mcp/serverStdio.d.ts +7 -0
  498. package/dist/mcp/serverStdio.js +34 -0
  499. package/dist/mcp/serverStdio.js.map +1 -0
  500. package/dist/mcp/serverTypes.d.ts +18 -0
  501. package/dist/mcp/serverTypes.js +2 -0
  502. package/dist/mcp/serverTypes.js.map +1 -0
  503. package/dist/mcp/serverVersion.d.ts +1 -0
  504. package/dist/mcp/serverVersion.js +17 -0
  505. package/dist/mcp/serverVersion.js.map +1 -0
  506. package/dist/mcp/toolCatalog.d.ts +2 -0
  507. package/dist/mcp/toolCatalog.js +93 -0
  508. package/dist/mcp/toolCatalog.js.map +1 -0
  509. package/dist/mcp/tools.d.ts +2 -3
  510. package/dist/mcp/tools.js +5 -97
  511. package/dist/mcp/tools.js.map +1 -1
  512. package/dist/projscan-sbom.cdx.json +6 -6
  513. package/dist/reporters/htmlReporter.d.ts +3 -2
  514. package/dist/reporters/htmlReporter.js +14 -2
  515. package/dist/reporters/htmlReporter.js.map +1 -1
  516. package/dist/reporters/jsonReporter.d.ts +4 -3
  517. package/dist/reporters/jsonReporter.js +9 -4
  518. package/dist/reporters/jsonReporter.js.map +1 -1
  519. package/dist/reporters/markdownAnalysisReporter.d.ts +2 -1
  520. package/dist/reporters/markdownAnalysisReporter.js +8 -1
  521. package/dist/reporters/markdownAnalysisReporter.js.map +1 -1
  522. package/dist/reporters/markdownArchitectureReporter.d.ts +3 -0
  523. package/dist/reporters/markdownArchitectureReporter.js +33 -0
  524. package/dist/reporters/markdownArchitectureReporter.js.map +1 -0
  525. package/dist/reporters/markdownCouplingReporter.d.ts +2 -0
  526. package/dist/reporters/markdownCouplingReporter.js +43 -0
  527. package/dist/reporters/markdownCouplingReporter.js.map +1 -0
  528. package/dist/reporters/markdownCoverageReporter.d.ts +2 -0
  529. package/dist/reporters/markdownCoverageReporter.js +40 -0
  530. package/dist/reporters/markdownCoverageReporter.js.map +1 -0
  531. package/dist/reporters/markdownExplanationReporter.d.ts +2 -0
  532. package/dist/reporters/markdownExplanationReporter.js +37 -0
  533. package/dist/reporters/markdownExplanationReporter.js.map +1 -0
  534. package/dist/reporters/markdownHealthReporter.d.ts +4 -0
  535. package/dist/reporters/markdownHealthReporter.js +66 -0
  536. package/dist/reporters/markdownHealthReporter.js.map +1 -0
  537. package/dist/reporters/markdownHotspotReporter.d.ts +2 -0
  538. package/dist/reporters/markdownHotspotReporter.js +36 -0
  539. package/dist/reporters/markdownHotspotReporter.js.map +1 -0
  540. package/dist/reporters/markdownOutdatedReporter.d.ts +2 -0
  541. package/dist/reporters/markdownOutdatedReporter.js +31 -0
  542. package/dist/reporters/markdownOutdatedReporter.js.map +1 -0
  543. package/dist/reporters/markdownPrDiffReporter.d.ts +2 -0
  544. package/dist/reporters/markdownPrDiffReporter.js +63 -0
  545. package/dist/reporters/markdownPrDiffReporter.js.map +1 -0
  546. package/dist/reporters/markdownReporter.d.ts +9 -12
  547. package/dist/reporters/markdownReporter.js +9 -288
  548. package/dist/reporters/markdownReporter.js.map +1 -1
  549. package/dist/reporters/markdownWorkspaceReporter.d.ts +2 -0
  550. package/dist/reporters/markdownWorkspaceReporter.js +25 -0
  551. package/dist/reporters/markdownWorkspaceReporter.js.map +1 -0
  552. package/dist/reporters/sarifReporter.d.ts +6 -4
  553. package/dist/reporters/sarifReporter.js +8 -7
  554. package/dist/reporters/sarifReporter.js.map +1 -1
  555. package/dist/tool-manifest.json +3 -3
  556. package/dist/types.d.ts +34 -34
  557. package/dist/utils/config.d.ts +2 -8
  558. package/dist/utils/config.js +13 -211
  559. package/dist/utils/config.js.map +1 -1
  560. package/dist/utils/configBasics.d.ts +5 -0
  561. package/dist/utils/configBasics.js +21 -0
  562. package/dist/utils/configBasics.js.map +1 -0
  563. package/dist/utils/configHotspots.d.ts +2 -0
  564. package/dist/utils/configHotspots.js +15 -0
  565. package/dist/utils/configHotspots.js.map +1 -0
  566. package/dist/utils/configIssueRules.d.ts +8 -0
  567. package/dist/utils/configIssueRules.js +24 -0
  568. package/dist/utils/configIssueRules.js.map +1 -0
  569. package/dist/utils/configMonorepo.d.ts +2 -0
  570. package/dist/utils/configMonorepo.js +38 -0
  571. package/dist/utils/configMonorepo.js.map +1 -0
  572. package/dist/utils/configReportPolicies.d.ts +2 -0
  573. package/dist/utils/configReportPolicies.js +32 -0
  574. package/dist/utils/configReportPolicies.js.map +1 -0
  575. package/dist/utils/configScan.d.ts +2 -0
  576. package/dist/utils/configScan.js +15 -0
  577. package/dist/utils/configScan.js.map +1 -0
  578. package/dist/utils/configSeverity.d.ts +2 -0
  579. package/dist/utils/configSeverity.js +15 -0
  580. package/dist/utils/configSeverity.js.map +1 -0
  581. package/dist/utils/configSources.d.ts +5 -0
  582. package/dist/utils/configSources.js +55 -0
  583. package/dist/utils/configSources.js.map +1 -0
  584. package/dist/utils/configTaint.d.ts +2 -0
  585. package/dist/utils/configTaint.js +15 -0
  586. package/dist/utils/configTaint.js.map +1 -0
  587. package/docs/GUIDE.md +21 -10
  588. package/docs/ROADMAP.md +2 -2
  589. package/docs/examples/adoption-workflows.md +2 -2
  590. package/docs/examples/swarm-coordination.md +11 -0
  591. package/package.json +1 -1
package/README.md CHANGED
@@ -35,16 +35,16 @@ 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
38
+ ## What's New in 4.6.0
39
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.
40
+ 4.6.0 hardens the agent workflow loop: broader framework dataflow precision, coordination evidence for multi-agent work, public code graph types, and a smaller, easier-to-review routing test surface.
41
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.
42
+ - **More framework dataflow coverage.** Next `nextUrl`, Hono URL reads, Express URL reads, Koa URL reads, and Fastify URL reads are now framework-gated request sources.
43
+ - **Coordination evidence.** Agent hints include concrete local coordination evidence so teams can see which command answered the collision or handoff question.
44
+ - **Public code graph types.** Code graph result types are exported for package consumers that build on projscan results.
45
+ - **Routing hardening.** Mission Control start, intent router, review, CLI, and MCP coverage has been split into focused suites while preserving public behavior.
46
+ - **Release cleanup.** The high-churn `tests/core/start.test.ts` matrix has been reduced to a small default/workspace/ownership/coupling suite with focused companion files.
47
+ - **Bug fixes.** MCP watch IDs, request notifications, no-release continuation routing, agent harness proof routing, Python upgrade evidence, scoped dependency redaction, path-safe file links, unresolved review refs, and inspector purpose detection were tightened.
48
48
 
49
49
  <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
50
 
@@ -710,8 +710,9 @@ Formats: `console` (default), `json`, `markdown`, `sarif`, `html`
710
710
  `analyze`, `doctor`, and `ci` also accept `--report-policy <name>`,
711
711
  `--report-scope <paths>`, and `--redact-paths` for shareable evidence artifacts.
712
712
  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.
713
+ stable labels. JSON/SARIF include path-safe `reportControls` metadata, and
714
+ Markdown/HTML print path-safe controls banners. Direct `--report-scope` and
715
+ `--redact-paths` flags override the selected preset for a single run.
715
716
 
716
717
  Run `projscan help` for the generated command-by-command support matrix.
717
718
 
@@ -821,12 +822,12 @@ Python repos now get the same treatment JS/TS has had since 0.6:
821
822
 
822
823
  - **AST-accurate import graph.** `from pkg.mod import x`, relative imports, `__init__.py` packages, `__all__`. Parsed via tree-sitter-python (wasm, offline).
823
824
  - **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.
825
+ - **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
826
  - **Code search.** BM25 and semantic modes work on `.py` files out of the box.
826
827
  - **Hotspots + dead code.** Same scoring as JS/TS, with `__init__.py` and pytest test-file conventions understood.
827
828
  - **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
829
 
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`.
830
+ `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
831
 
831
832
  ### Go (0.11)
832
833
 
@@ -1333,7 +1334,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
1333
1334
  - **`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
1335
  - **`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
1336
  - **`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.
1337
+ - **`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
1338
  - **`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
1339
  - **`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
1340
  - **`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>;
@@ -7,12 +7,17 @@ import { fileURLToPath } from 'node:url';
7
7
  import { explainFile as explainProjectFile } from '../core/fileInspector.js';
8
8
  import { setLogLevel } from '../utils/logger.js';
9
9
  import { showBanner, showCompactBanner } from '../utils/banner.js';
10
- import { loadConfig } from '../utils/config.js';
11
10
  import { recordCommandTelemetry } from '../core/telemetry.js';
12
11
  import { enableOfflineMode } from '../core/privacy.js';
13
12
  import { getChangedFiles } from '../utils/changedFiles.js';
14
13
  import { OUTPUT_FORMATS, formatList, getCommandFormatSupport } from '../utils/formatSupport.js';
15
- import { resolveReporterPlugin, renderReporterPlugin, } from '../core/plugins.js';
14
+ import { changedFilesAvailableMessage, changedFilesUnavailableMessage, changedIssueFilterMessage, filterIssuesToChangedFiles, } from './changedIssueFilter.js';
15
+ import { loadCliProjectConfig } from './projectConfig.js';
16
+ import { renderCliPluginReporterIfRequested } from './pluginReporter.js';
17
+ import { cliCommandPath } from './commandPath.js';
18
+ import { renderCliBanner } from './bannerDisplay.js';
19
+ export { buildArchitectureLayers } from './architectureLayers.js';
20
+ export { sliceCliTree } from './treeSlice.js';
16
21
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
17
22
  export const pkg = JSON.parse(readFileSync(path.resolve(__dirname, '../../package.json'), 'utf-8'));
18
23
  export const program = new Command();
@@ -36,11 +41,11 @@ program.hook('preAction', (_thisCommand, actionCommand) => {
36
41
  process.env.PROJSCAN_INCLUDE_IGNORED = '1';
37
42
  if (opts.scanEnvValues)
38
43
  process.env.PROJSCAN_SCAN_ENV_VALUES = '1';
39
- activeTelemetryRun = { commandName: commandPath(actionCommand), startedAt: Date.now() };
44
+ activeTelemetryRun = { commandName: cliCommandPath(actionCommand), startedAt: Date.now() };
40
45
  });
41
46
  program.hook('postAction', async (_thisCommand, actionCommand) => {
42
47
  const run = activeTelemetryRun ?? {
43
- commandName: commandPath(actionCommand),
48
+ commandName: cliCommandPath(actionCommand),
44
49
  startedAt: Date.now(),
45
50
  };
46
51
  activeTelemetryRun = null;
@@ -52,17 +57,6 @@ program.hook('postAction', async (_thisCommand, actionCommand) => {
52
57
  version: pkg.version,
53
58
  }).catch(() => undefined);
54
59
  });
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
60
  export function getFormat() {
67
61
  const opts = program.opts();
68
62
  const f = opts.format;
@@ -90,57 +84,36 @@ export function getRootPath() {
90
84
  }
91
85
  export async function loadProjectConfig() {
92
86
  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
- }
87
+ return await loadCliProjectConfig({
88
+ rootPath: getRootPath(),
89
+ configOption: opts.config,
90
+ quiet: Boolean(opts.quiet),
91
+ format: getFormat(),
92
+ });
112
93
  }
113
94
  export async function filterIssuesByChangedFiles(issues, rootPath, baseRef) {
114
95
  const result = await getChangedFiles(rootPath, baseRef);
96
+ const format = getFormat();
97
+ const quiet = Boolean(program.opts().quiet);
115
98
  if (!result.available) {
116
- if (getFormat() === 'console' && !program.opts().quiet) {
117
- console.error(chalk.yellow(` [--changed-only: ${result.reason ?? 'unavailable'} - reporting all issues]`));
118
- }
99
+ writeChangedOnlyNotice(changedFilesUnavailableMessage(result.reason), format, quiet, 'warning');
119
100
  return issues;
120
101
  }
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));
129
- });
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
- }
102
+ writeChangedOnlyNotice(changedFilesAvailableMessage(result.baseRef, result.files.length), format, quiet, 'dim');
103
+ const filtered = filterIssuesToChangedFiles(issues, result.files);
104
+ const filterMessage = changedIssueFilterMessage(filtered);
105
+ if (filterMessage)
106
+ writeChangedOnlyNotice(filterMessage, format, quiet, 'dim');
107
+ return filtered.issues;
108
+ }
109
+ function writeChangedOnlyNotice(message, format, quiet, style) {
110
+ if (quiet)
111
+ return;
112
+ if (format !== 'console') {
113
+ console.error(message.trim());
114
+ return;
142
115
  }
143
- return filtered;
116
+ console.error(style === 'warning' ? chalk.yellow(message) : chalk.dim(message));
144
117
  }
145
118
  export function setupLogLevel() {
146
119
  const opts = program.opts();
@@ -150,148 +123,28 @@ export function setupLogLevel() {
150
123
  setLogLevel('quiet');
151
124
  }
152
125
  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
- }
126
+ renderCliBanner(currentBannerOptions(), showBanner);
162
127
  }
163
128
  export function maybeCompactBanner() {
129
+ renderCliBanner(currentBannerOptions(), showCompactBanner);
130
+ }
131
+ function currentBannerOptions() {
164
132
  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
- }
133
+ return { quiet: Boolean(opts.quiet), format: getFormat() };
173
134
  }
174
135
  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, {
136
+ return await renderCliPluginReporterIfRequested({
189
137
  command,
190
- rootPath,
191
- manifest: resolved.plugin.manifest,
138
+ reporterName,
192
139
  payload,
140
+ format: getFormat(),
141
+ rootPath: getRootPath(),
193
142
  });
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
143
  }
217
144
  export async function analyzeFile(filePath) {
218
145
  const rootPath = process.cwd();
219
146
  return await explainProjectFile(rootPath, path.relative(rootPath, filePath));
220
147
  }
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
148
  export function promptYesNo(question) {
296
149
  return new Promise((resolve) => {
297
150
  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":"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"}
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 {};
@@ -0,0 +1,18 @@
1
+ import chalk from 'chalk';
2
+ export function shouldRenderCliBanner(options) {
3
+ return !options.quiet && options.format === 'console';
4
+ }
5
+ export function renderCliBanner(options, render, writeError = console.error) {
6
+ if (!shouldRenderCliBanner(options))
7
+ return;
8
+ try {
9
+ render();
10
+ }
11
+ catch (err) {
12
+ writeError(chalk.dim(bannerErrorMessage(err)));
13
+ }
14
+ }
15
+ export function bannerErrorMessage(err) {
16
+ return ` [banner error: ${err instanceof Error ? err.message : String(err)}]`;
17
+ }
18
+ //# sourceMappingURL=bannerDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bannerDisplay.js","sourceRoot":"","sources":["../../src/cli/bannerDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,UAAU,qBAAqB,CAAC,OAAgC;IACpE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAgC,EAChC,MAAkB,EAClB,aAAwC,OAAO,CAAC,KAAK;IAErD,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAAE,OAAO;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACjF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Issue } from '../types.js';
2
+ export interface ChangedIssueFilterResult {
3
+ issues: Issue[];
4
+ dropped: number;
5
+ unlocated: number;
6
+ }
7
+ export declare function filterIssuesToChangedFiles(issues: Issue[], changedFiles: string[]): ChangedIssueFilterResult;
8
+ export declare function changedFilesUnavailableMessage(reason?: string): string;
9
+ export declare function changedFilesAvailableMessage(baseRef: string | null, fileCount: number): string;
10
+ export declare function changedIssueFilterMessage(result: ChangedIssueFilterResult): string | null;