projscan 4.4.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 (611) hide show
  1. package/README.md +36 -12
  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 +17 -6
  22. package/dist/cli/commands/analyze.js.map +1 -1
  23. package/dist/cli/commands/ci.js +15 -3
  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 +16 -4
  28. package/dist/cli/commands/doctor.js.map +1 -1
  29. package/dist/cli/commands/upgrade.js +1 -1
  30. package/dist/cli/commands/upgrade.js.map +1 -1
  31. package/dist/cli/pluginReporter.d.ts +14 -0
  32. package/dist/cli/pluginReporter.js +46 -0
  33. package/dist/cli/pluginReporter.js.map +1 -0
  34. package/dist/cli/projectConfig.d.ts +12 -0
  35. package/dist/cli/projectConfig.js +41 -0
  36. package/dist/cli/projectConfig.js.map +1 -0
  37. package/dist/cli/treeSlice.d.ts +3 -0
  38. package/dist/cli/treeSlice.js +12 -0
  39. package/dist/cli/treeSlice.js.map +1 -0
  40. package/dist/core/ast.d.ts +4 -76
  41. package/dist/core/ast.js +11 -630
  42. package/dist/core/ast.js.map +1 -1
  43. package/dist/core/astBodySignals.d.ts +17 -0
  44. package/dist/core/astBodySignals.js +107 -0
  45. package/dist/core/astBodySignals.js.map +1 -0
  46. package/dist/core/astFunctionCollector.d.ts +11 -0
  47. package/dist/core/astFunctionCollector.js +140 -0
  48. package/dist/core/astFunctionCollector.js.map +1 -0
  49. package/dist/core/astFunctionNames.d.ts +2 -0
  50. package/dist/core/astFunctionNames.js +53 -0
  51. package/dist/core/astFunctionNames.js.map +1 -0
  52. package/dist/core/astFunctionNodes.d.ts +2 -0
  53. package/dist/core/astFunctionNodes.js +12 -0
  54. package/dist/core/astFunctionNodes.js.map +1 -0
  55. package/dist/core/astMembers.d.ts +13 -0
  56. package/dist/core/astMembers.js +116 -0
  57. package/dist/core/astMembers.js.map +1 -0
  58. package/dist/core/astModuleSignals.d.ts +3 -0
  59. package/dist/core/astModuleSignals.js +140 -0
  60. package/dist/core/astModuleSignals.js.map +1 -0
  61. package/dist/core/astParser.d.ts +11 -0
  62. package/dist/core/astParser.js +38 -0
  63. package/dist/core/astParser.js.map +1 -0
  64. package/dist/core/astProgramSignals.d.ts +11 -0
  65. package/dist/core/astProgramSignals.js +97 -0
  66. package/dist/core/astProgramSignals.js.map +1 -0
  67. package/dist/core/astTypes.d.ts +78 -0
  68. package/dist/core/astTypes.js +2 -0
  69. package/dist/core/astTypes.js.map +1 -0
  70. package/dist/core/codeGraph.d.ts +3 -28
  71. package/dist/core/codeGraph.js +3 -231
  72. package/dist/core/codeGraph.js.map +1 -1
  73. package/dist/core/codeGraphFanMetrics.d.ts +17 -0
  74. package/dist/core/codeGraphFanMetrics.js +89 -0
  75. package/dist/core/codeGraphFanMetrics.js.map +1 -0
  76. package/dist/core/codeGraphIndexes.d.ts +23 -0
  77. package/dist/core/codeGraphIndexes.js +57 -0
  78. package/dist/core/codeGraphIndexes.js.map +1 -0
  79. package/dist/core/codeGraphParsing.d.ts +20 -0
  80. package/dist/core/codeGraphParsing.js +104 -0
  81. package/dist/core/codeGraphParsing.js.map +1 -0
  82. package/dist/core/codeGraphTypes.d.ts +28 -0
  83. package/dist/core/codeGraphTypes.js +2 -0
  84. package/dist/core/codeGraphTypes.js.map +1 -0
  85. package/dist/core/collisionDetector.d.ts +2 -0
  86. package/dist/core/collisionDetector.js +17 -12
  87. package/dist/core/collisionDetector.js.map +1 -1
  88. package/dist/core/coordination.d.ts +4 -2
  89. package/dist/core/coordination.js +40 -4
  90. package/dist/core/coordination.js.map +1 -1
  91. package/dist/core/coordinationEvidence.d.ts +32 -0
  92. package/dist/core/coordinationEvidence.js +101 -0
  93. package/dist/core/coordinationEvidence.js.map +1 -0
  94. package/dist/core/dataflow.js +2 -1
  95. package/dist/core/dataflow.js.map +1 -1
  96. package/dist/core/fileAccess.d.ts +16 -0
  97. package/dist/core/fileAccess.js +78 -0
  98. package/dist/core/fileAccess.js.map +1 -0
  99. package/dist/core/fileExportTypes.d.ts +2 -0
  100. package/dist/core/fileExportTypes.js +16 -0
  101. package/dist/core/fileExportTypes.js.map +1 -0
  102. package/dist/core/fileGraphMetrics.d.ts +4 -0
  103. package/dist/core/fileGraphMetrics.js +34 -0
  104. package/dist/core/fileGraphMetrics.js.map +1 -0
  105. package/dist/core/fileInspectionEvidence.d.ts +13 -0
  106. package/dist/core/fileInspectionEvidence.js +14 -0
  107. package/dist/core/fileInspectionEvidence.js.map +1 -0
  108. package/dist/core/fileInspectionGraph.d.ts +5 -0
  109. package/dist/core/fileInspectionGraph.js +29 -0
  110. package/dist/core/fileInspectionGraph.js.map +1 -0
  111. package/dist/core/fileInspector.d.ts +4 -4
  112. package/dist/core/fileInspector.js +28 -215
  113. package/dist/core/fileInspector.js.map +1 -1
  114. package/dist/core/fileIssues.d.ts +1 -0
  115. package/dist/core/fileIssues.js +18 -0
  116. package/dist/core/fileIssues.js.map +1 -0
  117. package/dist/core/filePurpose.d.ts +2 -0
  118. package/dist/core/filePurpose.js +61 -0
  119. package/dist/core/filePurpose.js.map +1 -0
  120. package/dist/core/frameworkExpressSources.d.ts +4 -0
  121. package/dist/core/frameworkExpressSources.js +95 -0
  122. package/dist/core/frameworkExpressSources.js.map +1 -0
  123. package/dist/core/frameworkFastifySources.d.ts +4 -0
  124. package/dist/core/frameworkFastifySources.js +74 -0
  125. package/dist/core/frameworkFastifySources.js.map +1 -0
  126. package/dist/core/frameworkHonoSources.d.ts +4 -0
  127. package/dist/core/frameworkHonoSources.js +73 -0
  128. package/dist/core/frameworkHonoSources.js.map +1 -0
  129. package/dist/core/frameworkKoaSources.d.ts +4 -0
  130. package/dist/core/frameworkKoaSources.js +81 -0
  131. package/dist/core/frameworkKoaSources.js.map +1 -0
  132. package/dist/core/frameworkNextRouteSources.d.ts +2 -0
  133. package/dist/core/frameworkNextRouteSources.js +55 -0
  134. package/dist/core/frameworkNextRouteSources.js.map +1 -0
  135. package/dist/core/frameworkSources.d.ts +1 -1
  136. package/dist/core/frameworkSources.js +16 -125
  137. package/dist/core/frameworkSources.js.map +1 -1
  138. package/dist/core/hotspotAnalyzer.d.ts +2 -18
  139. package/dist/core/hotspotAnalyzer.js +15 -477
  140. package/dist/core/hotspotAnalyzer.js.map +1 -1
  141. package/dist/core/hotspotBuilder.d.ts +14 -0
  142. package/dist/core/hotspotBuilder.js +70 -0
  143. package/dist/core/hotspotBuilder.js.map +1 -0
  144. package/dist/core/hotspotCandidates.d.ts +9 -0
  145. package/dist/core/hotspotCandidates.js +63 -0
  146. package/dist/core/hotspotCandidates.js.map +1 -0
  147. package/dist/core/hotspotGit.d.ts +10 -0
  148. package/dist/core/hotspotGit.js +152 -0
  149. package/dist/core/hotspotGit.js.map +1 -0
  150. package/dist/core/hotspotIssues.d.ts +2 -0
  151. package/dist/core/hotspotIssues.js +83 -0
  152. package/dist/core/hotspotIssues.js.map +1 -0
  153. package/dist/core/hotspotLines.d.ts +2 -0
  154. package/dist/core/hotspotLines.js +24 -0
  155. package/dist/core/hotspotLines.js.map +1 -0
  156. package/dist/core/hotspotMemory.d.ts +2 -0
  157. package/dist/core/hotspotMemory.js +21 -0
  158. package/dist/core/hotspotMemory.js.map +1 -0
  159. package/dist/core/hotspotRanking.d.ts +13 -0
  160. package/dist/core/hotspotRanking.js +44 -0
  161. package/dist/core/hotspotRanking.js.map +1 -0
  162. package/dist/core/hotspotScoring.d.ts +23 -0
  163. package/dist/core/hotspotScoring.js +128 -0
  164. package/dist/core/hotspotScoring.js.map +1 -0
  165. package/dist/core/indexCache.js +4 -1
  166. package/dist/core/indexCache.js.map +1 -1
  167. package/dist/core/intentRouter.d.ts +3 -16
  168. package/dist/core/intentRouter.js +5 -7348
  169. package/dist/core/intentRouter.js.map +1 -1
  170. package/dist/core/intentRouterCatalog.d.ts +16 -0
  171. package/dist/core/intentRouterCatalog.js +1692 -0
  172. package/dist/core/intentRouterCatalog.js.map +1 -0
  173. package/dist/core/intentRouterCoordinationSignals.d.ts +12 -0
  174. package/dist/core/intentRouterCoordinationSignals.js +111 -0
  175. package/dist/core/intentRouterCoordinationSignals.js.map +1 -0
  176. package/dist/core/intentRouterDependencySignals.d.ts +9 -0
  177. package/dist/core/intentRouterDependencySignals.js +226 -0
  178. package/dist/core/intentRouterDependencySignals.js.map +1 -0
  179. package/dist/core/intentRouterKeywordContext.d.ts +14 -0
  180. package/dist/core/intentRouterKeywordContext.js +2 -0
  181. package/dist/core/intentRouterKeywordContext.js.map +1 -0
  182. package/dist/core/intentRouterKeywordEarlyGuards.d.ts +2 -0
  183. package/dist/core/intentRouterKeywordEarlyGuards.js +127 -0
  184. package/dist/core/intentRouterKeywordEarlyGuards.js.map +1 -0
  185. package/dist/core/intentRouterKeywordMatches.d.ts +3 -0
  186. package/dist/core/intentRouterKeywordMatches.js +31 -0
  187. package/dist/core/intentRouterKeywordMatches.js.map +1 -0
  188. package/dist/core/intentRouterKeywordSearchGuards.d.ts +2 -0
  189. package/dist/core/intentRouterKeywordSearchGuards.js +239 -0
  190. package/dist/core/intentRouterKeywordSearchGuards.js.map +1 -0
  191. package/dist/core/intentRouterKeywordTargetGuards.d.ts +2 -0
  192. package/dist/core/intentRouterKeywordTargetGuards.js +191 -0
  193. package/dist/core/intentRouterKeywordTargetGuards.js.map +1 -0
  194. package/dist/core/intentRouterKeywordToolGuards.d.ts +2 -0
  195. package/dist/core/intentRouterKeywordToolGuards.js +133 -0
  196. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -0
  197. package/dist/core/intentRouterKeywordWeights.d.ts +4 -0
  198. package/dist/core/intentRouterKeywordWeights.js +1184 -0
  199. package/dist/core/intentRouterKeywordWeights.js.map +1 -0
  200. package/dist/core/intentRouterPlanningSignals.d.ts +7 -0
  201. package/dist/core/intentRouterPlanningSignals.js +268 -0
  202. package/dist/core/intentRouterPlanningSignals.js.map +1 -0
  203. package/dist/core/intentRouterPrDiffSignals.d.ts +1 -0
  204. package/dist/core/intentRouterPrDiffSignals.js +41 -0
  205. package/dist/core/intentRouterPrDiffSignals.js.map +1 -0
  206. package/dist/core/intentRouterPreflightSignals.d.ts +3 -0
  207. package/dist/core/intentRouterPreflightSignals.js +54 -0
  208. package/dist/core/intentRouterPreflightSignals.js.map +1 -0
  209. package/dist/core/intentRouterRegressionKeywordMatches.d.ts +1 -0
  210. package/dist/core/intentRouterRegressionKeywordMatches.js +176 -0
  211. package/dist/core/intentRouterRegressionKeywordMatches.js.map +1 -0
  212. package/dist/core/intentRouterRegressionSignals.d.ts +10 -0
  213. package/dist/core/intentRouterRegressionSignals.js +207 -0
  214. package/dist/core/intentRouterRegressionSignals.js.map +1 -0
  215. package/dist/core/intentRouterReleaseSignals.d.ts +8 -0
  216. package/dist/core/intentRouterReleaseSignals.js +59 -0
  217. package/dist/core/intentRouterReleaseSignals.js.map +1 -0
  218. package/dist/core/intentRouterRepoSignals.d.ts +8 -0
  219. package/dist/core/intentRouterRepoSignals.js +226 -0
  220. package/dist/core/intentRouterRepoSignals.js.map +1 -0
  221. package/dist/core/intentRouterReviewSignals.d.ts +2 -0
  222. package/dist/core/intentRouterReviewSignals.js +109 -0
  223. package/dist/core/intentRouterReviewSignals.js.map +1 -0
  224. package/dist/core/intentRouterRiskSignals.d.ts +12 -0
  225. package/dist/core/intentRouterRiskSignals.js +242 -0
  226. package/dist/core/intentRouterRiskSignals.js.map +1 -0
  227. package/dist/core/intentRouterScoring.d.ts +9 -0
  228. package/dist/core/intentRouterScoring.js +40 -0
  229. package/dist/core/intentRouterScoring.js.map +1 -0
  230. package/dist/core/intentRouterSearchApiSignals.d.ts +1 -0
  231. package/dist/core/intentRouterSearchApiSignals.js +62 -0
  232. package/dist/core/intentRouterSearchApiSignals.js.map +1 -0
  233. package/dist/core/intentRouterSearchBackgroundSignals.d.ts +1 -0
  234. package/dist/core/intentRouterSearchBackgroundSignals.js +55 -0
  235. package/dist/core/intentRouterSearchBackgroundSignals.js.map +1 -0
  236. package/dist/core/intentRouterSearchCommunicationSignals.d.ts +1 -0
  237. package/dist/core/intentRouterSearchCommunicationSignals.js +74 -0
  238. package/dist/core/intentRouterSearchCommunicationSignals.js.map +1 -0
  239. package/dist/core/intentRouterSearchDataSignals.d.ts +2 -0
  240. package/dist/core/intentRouterSearchDataSignals.js +98 -0
  241. package/dist/core/intentRouterSearchDataSignals.js.map +1 -0
  242. package/dist/core/intentRouterSearchDomainSignals.d.ts +1 -0
  243. package/dist/core/intentRouterSearchDomainSignals.js +71 -0
  244. package/dist/core/intentRouterSearchDomainSignals.js.map +1 -0
  245. package/dist/core/intentRouterSearchInfraSignals.d.ts +1 -0
  246. package/dist/core/intentRouterSearchInfraSignals.js +79 -0
  247. package/dist/core/intentRouterSearchInfraSignals.js.map +1 -0
  248. package/dist/core/intentRouterSearchIntegrationSignals.d.ts +1 -0
  249. package/dist/core/intentRouterSearchIntegrationSignals.js +117 -0
  250. package/dist/core/intentRouterSearchIntegrationSignals.js.map +1 -0
  251. package/dist/core/intentRouterSearchLookupSignals.d.ts +10 -0
  252. package/dist/core/intentRouterSearchLookupSignals.js +310 -0
  253. package/dist/core/intentRouterSearchLookupSignals.js.map +1 -0
  254. package/dist/core/intentRouterSearchNavigationSignals.d.ts +1 -0
  255. package/dist/core/intentRouterSearchNavigationSignals.js +62 -0
  256. package/dist/core/intentRouterSearchNavigationSignals.js.map +1 -0
  257. package/dist/core/intentRouterSearchOwnershipSignals.d.ts +1 -0
  258. package/dist/core/intentRouterSearchOwnershipSignals.js +15 -0
  259. package/dist/core/intentRouterSearchOwnershipSignals.js.map +1 -0
  260. package/dist/core/intentRouterSearchPageSignals.d.ts +1 -0
  261. package/dist/core/intentRouterSearchPageSignals.js +84 -0
  262. package/dist/core/intentRouterSearchPageSignals.js.map +1 -0
  263. package/dist/core/intentRouterSearchReliabilitySignals.d.ts +1 -0
  264. package/dist/core/intentRouterSearchReliabilitySignals.js +94 -0
  265. package/dist/core/intentRouterSearchReliabilitySignals.js.map +1 -0
  266. package/dist/core/intentRouterSearchStateSignals.d.ts +1 -0
  267. package/dist/core/intentRouterSearchStateSignals.js +107 -0
  268. package/dist/core/intentRouterSearchStateSignals.js.map +1 -0
  269. package/dist/core/intentRouterSearchStyleSignals.d.ts +1 -0
  270. package/dist/core/intentRouterSearchStyleSignals.js +99 -0
  271. package/dist/core/intentRouterSearchStyleSignals.js.map +1 -0
  272. package/dist/core/intentRouterSearchTestSignals.d.ts +1 -0
  273. package/dist/core/intentRouterSearchTestSignals.js +34 -0
  274. package/dist/core/intentRouterSearchTestSignals.js.map +1 -0
  275. package/dist/core/intentRouterSearchToolingSignals.d.ts +1 -0
  276. package/dist/core/intentRouterSearchToolingSignals.js +106 -0
  277. package/dist/core/intentRouterSearchToolingSignals.js.map +1 -0
  278. package/dist/core/intentRouterSearchUiSignals.d.ts +1 -0
  279. package/dist/core/intentRouterSearchUiSignals.js +77 -0
  280. package/dist/core/intentRouterSearchUiSignals.js.map +1 -0
  281. package/dist/core/intentRouterSecuritySignals.d.ts +4 -0
  282. package/dist/core/intentRouterSecuritySignals.js +235 -0
  283. package/dist/core/intentRouterSecuritySignals.js.map +1 -0
  284. package/dist/core/intentRouterTargetSignals.d.ts +5 -0
  285. package/dist/core/intentRouterTargetSignals.js +76 -0
  286. package/dist/core/intentRouterTargetSignals.js.map +1 -0
  287. package/dist/core/intentRouterTokens.d.ts +1 -0
  288. package/dist/core/intentRouterTokens.js +36 -0
  289. package/dist/core/intentRouterTokens.js.map +1 -0
  290. package/dist/core/intentRouterUnderstandSignals.d.ts +1 -0
  291. package/dist/core/intentRouterUnderstandSignals.js +171 -0
  292. package/dist/core/intentRouterUnderstandSignals.js.map +1 -0
  293. package/dist/core/intentRouterVerificationSignals.d.ts +8 -0
  294. package/dist/core/intentRouterVerificationSignals.js +119 -0
  295. package/dist/core/intentRouterVerificationSignals.js.map +1 -0
  296. package/dist/core/intentRouterWorkSignals.d.ts +4 -0
  297. package/dist/core/intentRouterWorkSignals.js +157 -0
  298. package/dist/core/intentRouterWorkSignals.js.map +1 -0
  299. package/dist/core/languages/pythonLockfiles.d.ts +11 -0
  300. package/dist/core/languages/pythonLockfiles.js +206 -0
  301. package/dist/core/languages/pythonLockfiles.js.map +1 -0
  302. package/dist/core/languages/pythonManifestText.d.ts +7 -0
  303. package/dist/core/languages/pythonManifestText.js +25 -0
  304. package/dist/core/languages/pythonManifestText.js.map +1 -0
  305. package/dist/core/languages/pythonManifests.d.ts +6 -27
  306. package/dist/core/languages/pythonManifests.js +29 -303
  307. package/dist/core/languages/pythonManifests.js.map +1 -1
  308. package/dist/core/languages/pythonPep508.d.ts +4 -0
  309. package/dist/core/languages/pythonPep508.js +14 -0
  310. package/dist/core/languages/pythonPep508.js.map +1 -0
  311. package/dist/core/languages/pythonProjectEvidence.d.ts +2 -0
  312. package/dist/core/languages/pythonProjectEvidence.js +29 -0
  313. package/dist/core/languages/pythonProjectEvidence.js.map +1 -0
  314. package/dist/core/languages/pythonProjectTypes.d.ts +31 -0
  315. package/dist/core/languages/pythonProjectTypes.js +2 -0
  316. package/dist/core/languages/pythonProjectTypes.js.map +1 -0
  317. package/dist/core/languages/pythonPyproject.d.ts +2 -0
  318. package/dist/core/languages/pythonPyproject.js +160 -0
  319. package/dist/core/languages/pythonPyproject.js.map +1 -0
  320. package/dist/core/languages/pythonRequirements.d.ts +9 -0
  321. package/dist/core/languages/pythonRequirements.js +86 -0
  322. package/dist/core/languages/pythonRequirements.js.map +1 -0
  323. package/dist/core/languages/pythonRoots.d.ts +3 -0
  324. package/dist/core/languages/pythonRoots.js +83 -0
  325. package/dist/core/languages/pythonRoots.js.map +1 -0
  326. package/dist/core/languages/pythonSetuptools.d.ts +6 -0
  327. package/dist/core/languages/pythonSetuptools.js +58 -0
  328. package/dist/core/languages/pythonSetuptools.js.map +1 -0
  329. package/dist/core/prDiff.js +12 -0
  330. package/dist/core/prDiff.js.map +1 -1
  331. package/dist/core/preflight.d.ts +3 -3
  332. package/dist/core/preflight.js +28 -542
  333. package/dist/core/preflight.js.map +1 -1
  334. package/dist/core/preflightChangedFileReasons.d.ts +14 -0
  335. package/dist/core/preflightChangedFileReasons.js +75 -0
  336. package/dist/core/preflightChangedFileReasons.js.map +1 -0
  337. package/dist/core/preflightChangedFiles.d.ts +9 -0
  338. package/dist/core/preflightChangedFiles.js +34 -0
  339. package/dist/core/preflightChangedFiles.js.map +1 -0
  340. package/dist/core/preflightContextReasons.d.ts +17 -0
  341. package/dist/core/preflightContextReasons.js +73 -0
  342. package/dist/core/preflightContextReasons.js.map +1 -0
  343. package/dist/core/preflightEvidence.d.ts +34 -0
  344. package/dist/core/preflightEvidence.js +119 -0
  345. package/dist/core/preflightEvidence.js.map +1 -0
  346. package/dist/core/preflightInputs.d.ts +15 -0
  347. package/dist/core/preflightInputs.js +31 -0
  348. package/dist/core/preflightInputs.js.map +1 -0
  349. package/dist/core/preflightIssueReasons.d.ts +2 -0
  350. package/dist/core/preflightIssueReasons.js +39 -0
  351. package/dist/core/preflightIssueReasons.js.map +1 -0
  352. package/dist/core/preflightLocalEvidence.d.ts +12 -0
  353. package/dist/core/preflightLocalEvidence.js +36 -0
  354. package/dist/core/preflightLocalEvidence.js.map +1 -0
  355. package/dist/core/preflightReleaseScale.d.ts +28 -0
  356. package/dist/core/preflightReleaseScale.js +95 -0
  357. package/dist/core/preflightReleaseScale.js.map +1 -0
  358. package/dist/core/preflightRequiredChecks.d.ts +26 -0
  359. package/dist/core/preflightRequiredChecks.js +96 -0
  360. package/dist/core/preflightRequiredChecks.js.map +1 -0
  361. package/dist/core/preflightReviewEvidence.d.ts +16 -0
  362. package/dist/core/preflightReviewEvidence.js +31 -0
  363. package/dist/core/preflightReviewEvidence.js.map +1 -0
  364. package/dist/core/preflightReviewReasons.d.ts +15 -0
  365. package/dist/core/preflightReviewReasons.js +76 -0
  366. package/dist/core/preflightReviewReasons.js.map +1 -0
  367. package/dist/core/preflightSuggestedActions.d.ts +15 -0
  368. package/dist/core/preflightSuggestedActions.js +84 -0
  369. package/dist/core/preflightSuggestedActions.js.map +1 -0
  370. package/dist/core/preflightTruncation.d.ts +6 -0
  371. package/dist/core/preflightTruncation.js +7 -0
  372. package/dist/core/preflightTruncation.js.map +1 -0
  373. package/dist/core/preflightVerdict.d.ts +3 -0
  374. package/dist/core/preflightVerdict.js +17 -0
  375. package/dist/core/preflightVerdict.js.map +1 -0
  376. package/dist/core/releaseEvidence.d.ts +4 -3
  377. package/dist/core/releaseEvidence.js +12 -263
  378. package/dist/core/releaseEvidence.js.map +1 -1
  379. package/dist/core/releaseEvidenceBaseline.d.ts +2 -0
  380. package/dist/core/releaseEvidenceBaseline.js +28 -0
  381. package/dist/core/releaseEvidenceBaseline.js.map +1 -0
  382. package/dist/core/releaseEvidencePrSummary.d.ts +13 -0
  383. package/dist/core/releaseEvidencePrSummary.js +240 -0
  384. package/dist/core/releaseEvidencePrSummary.js.map +1 -0
  385. package/dist/core/releaseTrain.js +3 -317
  386. package/dist/core/releaseTrain.js.map +1 -1
  387. package/dist/core/releaseTrainFallbacks.d.ts +3 -0
  388. package/dist/core/releaseTrainFallbacks.js +318 -0
  389. package/dist/core/releaseTrainFallbacks.js.map +1 -0
  390. package/dist/core/reportScope.d.ts +24 -0
  391. package/dist/core/reportScope.js +234 -0
  392. package/dist/core/reportScope.js.map +1 -0
  393. package/dist/core/review.d.ts +2 -25
  394. package/dist/core/review.js +34 -1034
  395. package/dist/core/review.js.map +1 -1
  396. package/dist/core/reviewBaseSnapshot.d.ts +14 -0
  397. package/dist/core/reviewBaseSnapshot.js +41 -0
  398. package/dist/core/reviewBaseSnapshot.js.map +1 -0
  399. package/dist/core/reviewChangedFiles.d.ts +8 -0
  400. package/dist/core/reviewChangedFiles.js +63 -0
  401. package/dist/core/reviewChangedFiles.js.map +1 -0
  402. package/dist/core/reviewContractChanges.d.ts +5 -0
  403. package/dist/core/reviewContractChanges.js +114 -0
  404. package/dist/core/reviewContractChanges.js.map +1 -0
  405. package/dist/core/reviewCycles.d.ts +7 -0
  406. package/dist/core/reviewCycles.js +53 -0
  407. package/dist/core/reviewCycles.js.map +1 -0
  408. package/dist/core/reviewFindings.d.ts +17 -0
  409. package/dist/core/reviewFindings.js +49 -0
  410. package/dist/core/reviewFindings.js.map +1 -0
  411. package/dist/core/reviewFlowDiffs.d.ts +4 -0
  412. package/dist/core/reviewFlowDiffs.js +99 -0
  413. package/dist/core/reviewFlowDiffs.js.map +1 -0
  414. package/dist/core/reviewGit.d.ts +7 -0
  415. package/dist/core/reviewGit.js +45 -0
  416. package/dist/core/reviewGit.js.map +1 -0
  417. package/dist/core/reviewGraphEvidence.d.ts +3 -0
  418. package/dist/core/reviewGraphEvidence.js +55 -0
  419. package/dist/core/reviewGraphEvidence.js.map +1 -0
  420. package/dist/core/reviewHeadSnapshot.d.ts +8 -0
  421. package/dist/core/reviewHeadSnapshot.js +15 -0
  422. package/dist/core/reviewHeadSnapshot.js.map +1 -0
  423. package/dist/core/reviewIntent.d.ts +2 -0
  424. package/dist/core/reviewIntent.js +18 -0
  425. package/dist/core/reviewIntent.js.map +1 -0
  426. package/dist/core/reviewManifests.d.ts +12 -0
  427. package/dist/core/reviewManifests.js +124 -0
  428. package/dist/core/reviewManifests.js.map +1 -0
  429. package/dist/core/reviewNoChanges.d.ts +9 -0
  430. package/dist/core/reviewNoChanges.js +26 -0
  431. package/dist/core/reviewNoChanges.js.map +1 -0
  432. package/dist/core/reviewPackageScope.d.ts +4 -0
  433. package/dist/core/reviewPackageScope.js +24 -0
  434. package/dist/core/reviewPackageScope.js.map +1 -0
  435. package/dist/core/reviewRefs.d.ts +4 -0
  436. package/dist/core/reviewRefs.js +65 -0
  437. package/dist/core/reviewRefs.js.map +1 -0
  438. package/dist/core/reviewRiskyFunctions.d.ts +8 -0
  439. package/dist/core/reviewRiskyFunctions.js +83 -0
  440. package/dist/core/reviewRiskyFunctions.js.map +1 -0
  441. package/dist/core/reviewState.d.ts +21 -0
  442. package/dist/core/reviewState.js +96 -0
  443. package/dist/core/reviewState.js.map +1 -0
  444. package/dist/core/reviewTier.d.ts +18 -0
  445. package/dist/core/reviewTier.js +99 -0
  446. package/dist/core/reviewTier.js.map +1 -0
  447. package/dist/core/reviewVerdict.d.ts +9 -0
  448. package/dist/core/reviewVerdict.js +121 -0
  449. package/dist/core/reviewVerdict.js.map +1 -0
  450. package/dist/core/roadmapCatalog.d.ts +1 -0
  451. package/dist/core/roadmapCatalog.js +227 -7
  452. package/dist/core/roadmapCatalog.js.map +1 -1
  453. package/dist/core/start.d.ts +1 -1
  454. package/dist/core/start.js +26 -63
  455. package/dist/core/start.js.map +1 -1
  456. package/dist/core/startAdoptionGaps.d.ts +3 -0
  457. package/dist/core/startAdoptionGaps.js +12 -0
  458. package/dist/core/startAdoptionGaps.js.map +1 -0
  459. package/dist/core/startInputs.d.ts +31 -0
  460. package/dist/core/startInputs.js +27 -0
  461. package/dist/core/startInputs.js.map +1 -0
  462. package/dist/core/startMode.js +7 -1
  463. package/dist/core/startMode.js.map +1 -1
  464. package/dist/core/startNextActions.d.ts +13 -0
  465. package/dist/core/startNextActions.js +19 -0
  466. package/dist/core/startNextActions.js.map +1 -0
  467. package/dist/core/startReportBuilder.d.ts +25 -0
  468. package/dist/core/startReportBuilder.js +44 -0
  469. package/dist/core/startReportBuilder.js.map +1 -0
  470. package/dist/core/taint.js +14 -125
  471. package/dist/core/taint.js.map +1 -1
  472. package/dist/core/taintMatching.d.ts +11 -0
  473. package/dist/core/taintMatching.js +126 -0
  474. package/dist/core/taintMatching.js.map +1 -0
  475. package/dist/core/upgradePreview.d.ts +1 -12
  476. package/dist/core/upgradePreview.js +12 -160
  477. package/dist/core/upgradePreview.js.map +1 -1
  478. package/dist/core/upgradePreviewNpmEvidence.d.ts +19 -0
  479. package/dist/core/upgradePreviewNpmEvidence.js +164 -0
  480. package/dist/core/upgradePreviewNpmEvidence.js.map +1 -0
  481. package/dist/core/upgradePreviewPython.d.ts +2 -0
  482. package/dist/core/upgradePreviewPython.js +71 -0
  483. package/dist/core/upgradePreviewPython.js.map +1 -0
  484. package/dist/index.d.ts +6 -12
  485. package/dist/index.js +2 -3
  486. package/dist/index.js.map +1 -1
  487. package/dist/mcp/server.d.ts +3 -24
  488. package/dist/mcp/server.js +32 -414
  489. package/dist/mcp/server.js.map +1 -1
  490. package/dist/mcp/serverContext.d.ts +6 -0
  491. package/dist/mcp/serverContext.js +55 -0
  492. package/dist/mcp/serverContext.js.map +1 -0
  493. package/dist/mcp/serverDispatch.d.ts +39 -0
  494. package/dist/mcp/serverDispatch.js +74 -0
  495. package/dist/mcp/serverDispatch.js.map +1 -0
  496. package/dist/mcp/serverHandlers.d.ts +15 -0
  497. package/dist/mcp/serverHandlers.js +94 -0
  498. package/dist/mcp/serverHandlers.js.map +1 -0
  499. package/dist/mcp/serverLifecycle.d.ts +14 -0
  500. package/dist/mcp/serverLifecycle.js +65 -0
  501. package/dist/mcp/serverLifecycle.js.map +1 -0
  502. package/dist/mcp/serverMessage.d.ts +11 -0
  503. package/dist/mcp/serverMessage.js +37 -0
  504. package/dist/mcp/serverMessage.js.map +1 -0
  505. package/dist/mcp/serverSession.d.ts +6 -0
  506. package/dist/mcp/serverSession.js +77 -0
  507. package/dist/mcp/serverSession.js.map +1 -0
  508. package/dist/mcp/serverStdio.d.ts +7 -0
  509. package/dist/mcp/serverStdio.js +34 -0
  510. package/dist/mcp/serverStdio.js.map +1 -0
  511. package/dist/mcp/serverTypes.d.ts +18 -0
  512. package/dist/mcp/serverTypes.js +2 -0
  513. package/dist/mcp/serverTypes.js.map +1 -0
  514. package/dist/mcp/serverVersion.d.ts +1 -0
  515. package/dist/mcp/serverVersion.js +17 -0
  516. package/dist/mcp/serverVersion.js.map +1 -0
  517. package/dist/mcp/toolCatalog.d.ts +2 -0
  518. package/dist/mcp/toolCatalog.js +93 -0
  519. package/dist/mcp/toolCatalog.js.map +1 -0
  520. package/dist/mcp/tools/upgrade.d.ts +1 -1
  521. package/dist/mcp/tools/upgrade.js +2 -16
  522. package/dist/mcp/tools/upgrade.js.map +1 -1
  523. package/dist/mcp/tools.d.ts +2 -3
  524. package/dist/mcp/tools.js +5 -97
  525. package/dist/mcp/tools.js.map +1 -1
  526. package/dist/projscan-sbom.cdx.json +6 -6
  527. package/dist/reporters/consoleUpgradeReporter.js +24 -2
  528. package/dist/reporters/consoleUpgradeReporter.js.map +1 -1
  529. package/dist/reporters/htmlReporter.d.ts +3 -2
  530. package/dist/reporters/htmlReporter.js +14 -2
  531. package/dist/reporters/htmlReporter.js.map +1 -1
  532. package/dist/reporters/jsonReporter.d.ts +4 -3
  533. package/dist/reporters/jsonReporter.js +9 -4
  534. package/dist/reporters/jsonReporter.js.map +1 -1
  535. package/dist/reporters/markdownAnalysisReporter.d.ts +2 -1
  536. package/dist/reporters/markdownAnalysisReporter.js +8 -1
  537. package/dist/reporters/markdownAnalysisReporter.js.map +1 -1
  538. package/dist/reporters/markdownArchitectureReporter.d.ts +3 -0
  539. package/dist/reporters/markdownArchitectureReporter.js +33 -0
  540. package/dist/reporters/markdownArchitectureReporter.js.map +1 -0
  541. package/dist/reporters/markdownCouplingReporter.d.ts +2 -0
  542. package/dist/reporters/markdownCouplingReporter.js +43 -0
  543. package/dist/reporters/markdownCouplingReporter.js.map +1 -0
  544. package/dist/reporters/markdownCoverageReporter.d.ts +2 -0
  545. package/dist/reporters/markdownCoverageReporter.js +40 -0
  546. package/dist/reporters/markdownCoverageReporter.js.map +1 -0
  547. package/dist/reporters/markdownExplanationReporter.d.ts +2 -0
  548. package/dist/reporters/markdownExplanationReporter.js +37 -0
  549. package/dist/reporters/markdownExplanationReporter.js.map +1 -0
  550. package/dist/reporters/markdownHealthReporter.d.ts +4 -0
  551. package/dist/reporters/markdownHealthReporter.js +66 -0
  552. package/dist/reporters/markdownHealthReporter.js.map +1 -0
  553. package/dist/reporters/markdownHotspotReporter.d.ts +2 -0
  554. package/dist/reporters/markdownHotspotReporter.js +36 -0
  555. package/dist/reporters/markdownHotspotReporter.js.map +1 -0
  556. package/dist/reporters/markdownOutdatedReporter.d.ts +2 -0
  557. package/dist/reporters/markdownOutdatedReporter.js +31 -0
  558. package/dist/reporters/markdownOutdatedReporter.js.map +1 -0
  559. package/dist/reporters/markdownPrDiffReporter.d.ts +2 -0
  560. package/dist/reporters/markdownPrDiffReporter.js +63 -0
  561. package/dist/reporters/markdownPrDiffReporter.js.map +1 -0
  562. package/dist/reporters/markdownReporter.d.ts +9 -12
  563. package/dist/reporters/markdownReporter.js +9 -288
  564. package/dist/reporters/markdownReporter.js.map +1 -1
  565. package/dist/reporters/markdownUpgradeReporter.js +19 -4
  566. package/dist/reporters/markdownUpgradeReporter.js.map +1 -1
  567. package/dist/reporters/markdownWorkspaceReporter.d.ts +2 -0
  568. package/dist/reporters/markdownWorkspaceReporter.js +25 -0
  569. package/dist/reporters/markdownWorkspaceReporter.js.map +1 -0
  570. package/dist/reporters/sarifReporter.d.ts +6 -4
  571. package/dist/reporters/sarifReporter.js +8 -7
  572. package/dist/reporters/sarifReporter.js.map +1 -1
  573. package/dist/tool-manifest.json +4 -4
  574. package/dist/types/config.d.ts +10 -0
  575. package/dist/types/dependencyHealth.d.ts +12 -0
  576. package/dist/types.d.ts +34 -34
  577. package/dist/utils/config.d.ts +2 -8
  578. package/dist/utils/config.js +14 -180
  579. package/dist/utils/config.js.map +1 -1
  580. package/dist/utils/configBasics.d.ts +5 -0
  581. package/dist/utils/configBasics.js +21 -0
  582. package/dist/utils/configBasics.js.map +1 -0
  583. package/dist/utils/configHotspots.d.ts +2 -0
  584. package/dist/utils/configHotspots.js +15 -0
  585. package/dist/utils/configHotspots.js.map +1 -0
  586. package/dist/utils/configIssueRules.d.ts +8 -0
  587. package/dist/utils/configIssueRules.js +24 -0
  588. package/dist/utils/configIssueRules.js.map +1 -0
  589. package/dist/utils/configMonorepo.d.ts +2 -0
  590. package/dist/utils/configMonorepo.js +38 -0
  591. package/dist/utils/configMonorepo.js.map +1 -0
  592. package/dist/utils/configReportPolicies.d.ts +2 -0
  593. package/dist/utils/configReportPolicies.js +32 -0
  594. package/dist/utils/configReportPolicies.js.map +1 -0
  595. package/dist/utils/configScan.d.ts +2 -0
  596. package/dist/utils/configScan.js +15 -0
  597. package/dist/utils/configScan.js.map +1 -0
  598. package/dist/utils/configSeverity.d.ts +2 -0
  599. package/dist/utils/configSeverity.js +15 -0
  600. package/dist/utils/configSeverity.js.map +1 -0
  601. package/dist/utils/configSources.d.ts +5 -0
  602. package/dist/utils/configSources.js +55 -0
  603. package/dist/utils/configSources.js.map +1 -0
  604. package/dist/utils/configTaint.d.ts +2 -0
  605. package/dist/utils/configTaint.js +15 -0
  606. package/dist/utils/configTaint.js.map +1 -0
  607. package/docs/GUIDE.md +39 -4
  608. package/docs/ROADMAP.md +54 -21
  609. package/docs/examples/adoption-workflows.md +128 -0
  610. package/docs/examples/swarm-coordination.md +120 -0
  611. package/package.json +3 -1
@@ -0,0 +1,96 @@
1
+ import { buildNoChangeReviewReport } from './reviewNoChanges.js';
2
+ import { isGitRepository, isWorktreeClean, pickDefaultBase, resolveSha } from './reviewRefs.js';
3
+ export async function resolveReviewState(rootPath, options = {}) {
4
+ const unavailable = await repositoryUnavailableState(rootPath, options);
5
+ if (unavailable)
6
+ return unavailable;
7
+ const refs = await resolveReviewRefs(rootPath, options);
8
+ const ready = requireResolvedRefs(refs, options);
9
+ if (ready.kind !== 'ready')
10
+ return ready;
11
+ const noChange = await noChangeReviewState(rootPath, ready);
12
+ if (noChange)
13
+ return noChange;
14
+ return ready;
15
+ }
16
+ async function repositoryUnavailableState(rootPath, options) {
17
+ if (await isGitRepository(rootPath))
18
+ return undefined;
19
+ return {
20
+ kind: 'unavailable',
21
+ report: unavailableReviewReport('Not a git repository - PR review requires git history.', options),
22
+ };
23
+ }
24
+ async function resolveReviewRefs(rootPath, options) {
25
+ const headRef = options.head ?? 'HEAD';
26
+ const baseRef = options.base ?? (await pickDefaultBase(rootPath));
27
+ return {
28
+ headRef,
29
+ baseRef,
30
+ headSha: await resolveSha(rootPath, headRef),
31
+ baseSha: await resolveSha(rootPath, baseRef),
32
+ };
33
+ }
34
+ function requireResolvedRefs(refs, options) {
35
+ if (!refs.baseSha) {
36
+ return {
37
+ kind: 'unavailable',
38
+ report: unavailableReviewReport(`Could not resolve base ref "${refs.baseRef}".`, options, refs.baseRef, refs.headRef, refs.headSha),
39
+ };
40
+ }
41
+ if (!refs.headSha) {
42
+ return {
43
+ kind: 'unavailable',
44
+ report: unavailableReviewReport(`Could not resolve head ref "${refs.headRef}".`, options, refs.baseRef, refs.headRef, null, refs.baseSha),
45
+ };
46
+ }
47
+ return {
48
+ kind: 'ready',
49
+ baseRef: refs.baseRef,
50
+ baseSha: refs.baseSha,
51
+ headRef: refs.headRef,
52
+ headSha: refs.headSha,
53
+ };
54
+ }
55
+ async function noChangeReviewState(rootPath, refs) {
56
+ if (refs.headSha !== refs.baseSha)
57
+ return undefined;
58
+ if (!(await isWorktreeClean(rootPath)))
59
+ return undefined;
60
+ return {
61
+ kind: 'no-change',
62
+ report: buildNoChangeReviewReport({
63
+ baseRef: refs.baseRef,
64
+ baseSha: refs.baseSha,
65
+ headRef: refs.headRef,
66
+ headSha: refs.headSha,
67
+ }),
68
+ };
69
+ }
70
+ export function unavailableReviewReport(reason, options, baseRef = options.base ?? '', headRef = options.head ?? 'HEAD', headSha = null, baseSha = null) {
71
+ return {
72
+ available: false,
73
+ reason,
74
+ base: { ref: baseRef, resolvedSha: baseSha },
75
+ head: { ref: headRef, resolvedSha: headSha },
76
+ prDiff: {
77
+ available: false,
78
+ reason,
79
+ base: { ref: baseRef, resolvedSha: baseSha },
80
+ head: { ref: headRef, resolvedSha: headSha },
81
+ filesAdded: [],
82
+ filesRemoved: [],
83
+ filesModified: [],
84
+ totalFilesChanged: 0,
85
+ },
86
+ changedFiles: [],
87
+ newCycles: [],
88
+ riskyFunctions: [],
89
+ dependencyChanges: [],
90
+ newTaintFlows: [],
91
+ newDataflowRisks: [],
92
+ verdict: 'ok',
93
+ summary: [reason],
94
+ };
95
+ }
96
+ //# sourceMappingURL=reviewState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewState.js","sourceRoot":"","sources":["../../src/core/reviewState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ReviewReport, ReviewTier } from '../types/review.js';
2
+ /**
3
+ * 1.5+ - pick a review tier based on the caller's token budget.
4
+ *
5
+ * <3000 -> 'verdict-only' (verdict + summary + totals)
6
+ * <7000 -> 'summary' (verdict + summary + top files / top cycles / etc.)
7
+ * else -> 'full' (everything)
8
+ *
9
+ * `0`, `undefined`, and any non-positive value all mean "no budget given"
10
+ * - the caller wants the full report. The tier names are stable.
11
+ */
12
+ export declare function selectReviewTier(maxCostTokens: number | undefined): ReviewTier;
13
+ /**
14
+ * Reshape a full ReviewReport for the chosen tier. The caller passes a
15
+ * fully populated report from `computeReview`; this returns a plain object
16
+ * sized for the tier.
17
+ */
18
+ export declare function shapeReviewForTier(report: ReviewReport, tier: ReviewTier): Record<string, unknown>;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * 1.5+ - pick a review tier based on the caller's token budget.
3
+ *
4
+ * <3000 -> 'verdict-only' (verdict + summary + totals)
5
+ * <7000 -> 'summary' (verdict + summary + top files / top cycles / etc.)
6
+ * else -> 'full' (everything)
7
+ *
8
+ * `0`, `undefined`, and any non-positive value all mean "no budget given"
9
+ * - the caller wants the full report. The tier names are stable.
10
+ */
11
+ export function selectReviewTier(maxCostTokens) {
12
+ if (maxCostTokens === undefined)
13
+ return 'full';
14
+ if (hasInvalidReviewBudget(maxCostTokens))
15
+ return 'full';
16
+ if (maxCostTokens < 3000)
17
+ return 'verdict-only';
18
+ if (maxCostTokens < 7000)
19
+ return 'summary';
20
+ return 'full';
21
+ }
22
+ function hasInvalidReviewBudget(maxCostTokens) {
23
+ return !Number.isFinite(maxCostTokens) || maxCostTokens <= 0;
24
+ }
25
+ /**
26
+ * Reshape a full ReviewReport for the chosen tier. The caller passes a
27
+ * fully populated report from `computeReview`; this returns a plain object
28
+ * sized for the tier.
29
+ */
30
+ export function shapeReviewForTier(report, tier) {
31
+ if (!report.available || tier === 'full') {
32
+ return { ...report, tier };
33
+ }
34
+ const totals = reviewTierTotals(report);
35
+ if (tier === 'verdict-only') {
36
+ return verdictOnlyReview(report, totals, tier);
37
+ }
38
+ return summaryReview(report, totals, tier);
39
+ }
40
+ function reviewTierTotals(report) {
41
+ return {
42
+ filesChanged: report.changedFiles.length,
43
+ cyclesAdded: report.newCycles.length,
44
+ riskyFunctionsAdded: report.riskyFunctions.length,
45
+ depsChanged: report.dependencyChanges.length,
46
+ taintFlowsAdded: report.newTaintFlows?.length ?? 0,
47
+ dataflowRisksAdded: report.newDataflowRisks?.length ?? 0,
48
+ contractChanges: report.contractChanges?.length ?? 0,
49
+ };
50
+ }
51
+ function verdictOnlyReview(report, totals, tier) {
52
+ return {
53
+ available: report.available,
54
+ base: report.base,
55
+ head: report.head,
56
+ verdict: report.verdict,
57
+ summary: report.summary,
58
+ totals,
59
+ graphEvidence: report.graphEvidence,
60
+ tier,
61
+ };
62
+ }
63
+ function summaryReview(report, totals, tier) {
64
+ const top = 5;
65
+ return {
66
+ available: report.available,
67
+ base: report.base,
68
+ head: report.head,
69
+ prDiff: trimmedPrDiff(report, top),
70
+ changedFiles: report.changedFiles.slice(0, top),
71
+ newCycles: report.newCycles.slice(0, 3),
72
+ riskyFunctions: report.riskyFunctions.slice(0, 3),
73
+ dependencyChanges: report.dependencyChanges.slice(0, 3),
74
+ contractChanges: report.contractChanges?.slice(0, top) ?? [],
75
+ newTaintFlows: report.newTaintFlows?.slice(0, 5) ?? [],
76
+ newDataflowRisks: report.newDataflowRisks?.slice(0, 5) ?? [],
77
+ graphEvidence: report.graphEvidence,
78
+ verdict: report.verdict,
79
+ summary: report.summary,
80
+ totals,
81
+ tier,
82
+ };
83
+ }
84
+ function trimmedPrDiff(report, top) {
85
+ return {
86
+ available: report.prDiff.available,
87
+ base: report.prDiff.base,
88
+ head: report.prDiff.head,
89
+ totalFilesChanged: report.prDiff.totalFilesChanged,
90
+ filesAdded: report.prDiff.filesAdded.slice(0, top),
91
+ filesRemoved: report.prDiff.filesRemoved.slice(0, top),
92
+ filesModified: report.prDiff.filesModified.slice(0, top).map((file) => ({
93
+ relativePath: file.relativePath,
94
+ cyclomaticDelta: file.cyclomaticDelta,
95
+ fanInDelta: file.fanInDelta,
96
+ })),
97
+ };
98
+ }
99
+ //# sourceMappingURL=reviewTier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewTier.js","sourceRoot":"","sources":["../../src/core/reviewTier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ReviewContractChange } from '../types/reviewContract.js';
2
+ import type { ReviewCycle, ReviewDataflowRisk, ReviewDependencyChange, ReviewFile, ReviewFunction, ReviewReport, ReviewTaintFlow } from '../types/review.js';
3
+ type ReviewVerdict = ReviewReport['verdict'];
4
+ interface VerdictDecision {
5
+ verdict: ReviewVerdict;
6
+ summary: string[];
7
+ }
8
+ export declare function decideVerdict(changedFiles: ReviewFile[], newCycles: ReviewCycle[], riskyFunctions: ReviewFunction[], depChanges: ReviewDependencyChange[], contractChanges: ReviewContractChange[], newTaintFlows: ReviewTaintFlow[], newDataflowRisks: ReviewDataflowRisk[]): VerdictDecision;
9
+ export {};
@@ -0,0 +1,121 @@
1
+ const RISK_VERDICT_BLOCK_SCORE = 80;
2
+ const RISK_VERDICT_REVIEW_SCORE = 40;
3
+ export function decideVerdict(changedFiles, newCycles, riskyFunctions, depChanges, contractChanges, newTaintFlows, newDataflowRisks) {
4
+ const decision = { verdict: 'ok', summary: [] };
5
+ const maxRisk = maxChangedFileRisk(changedFiles);
6
+ applyRiskScoreSignal(decision, maxRisk);
7
+ applyCycleSignal(decision, newCycles);
8
+ applyRiskyFunctionSignal(decision, riskyFunctions);
9
+ applyTaintFlowSignal(decision, newTaintFlows);
10
+ applyDataflowRiskSignal(decision, newDataflowRisks);
11
+ appendDependencySummary(decision.summary, depChanges);
12
+ appendManualReleaseSignOff(decision, {
13
+ maxRisk,
14
+ newCycles,
15
+ riskyFunctions,
16
+ contractChanges,
17
+ newTaintFlows,
18
+ newDataflowRisks,
19
+ });
20
+ appendFallbackSummary(decision, changedFiles.length);
21
+ return decision;
22
+ }
23
+ function maxChangedFileRisk(changedFiles) {
24
+ return Math.max(0, ...changedFiles.map((file) => file.riskScore ?? 0));
25
+ }
26
+ function applyRiskScoreSignal(decision, maxRisk) {
27
+ if (maxRisk >= RISK_VERDICT_BLOCK_SCORE) {
28
+ decision.verdict = 'block';
29
+ decision.summary.push(`Maximum changed-file risk score is ${maxRisk.toFixed(1)} (>= ${RISK_VERDICT_BLOCK_SCORE}).`);
30
+ return;
31
+ }
32
+ if (maxRisk >= RISK_VERDICT_REVIEW_SCORE) {
33
+ decision.verdict = bumpTo(decision.verdict, 'review');
34
+ decision.summary.push(`Maximum changed-file risk score is ${maxRisk.toFixed(1)} (>= ${RISK_VERDICT_REVIEW_SCORE}).`);
35
+ }
36
+ }
37
+ function applyCycleSignal(decision, newCycles) {
38
+ if (newCycles.length === 0)
39
+ return;
40
+ const newOnly = newCycles.filter((cycle) => cycle.classification === 'new');
41
+ if (newOnly.length > 0) {
42
+ decision.verdict = 'block';
43
+ decision.summary.push(`${newOnly.length} new import cycle(s) introduced.`);
44
+ return;
45
+ }
46
+ decision.verdict = bumpTo(decision.verdict, 'review');
47
+ decision.summary.push(`${newCycles.length} cycle(s) expanded.`);
48
+ }
49
+ function applyRiskyFunctionSignal(decision, riskyFunctions) {
50
+ if (riskyFunctions.length === 0)
51
+ return;
52
+ decision.verdict = bumpTo(decision.verdict, 'review');
53
+ decision.summary.push(`${riskyFunctions.length} function(s) flagged: high CC added or jumped.`);
54
+ }
55
+ function applyTaintFlowSignal(decision, newTaintFlows) {
56
+ if (newTaintFlows.length === 0)
57
+ return;
58
+ decision.verdict = 'block';
59
+ const sample = newTaintFlows
60
+ .slice(0, 3)
61
+ .map((flow) => `${flow.source}→${flow.sink} (${flow.sourceFn}${flow.pathLength > 1 ? '…' : ''})`)
62
+ .join(', ');
63
+ decision.summary.push(`${newTaintFlows.length} new taint flow(s) detected: ${sample}${newTaintFlows.length > 3 ? ', …' : ''}.`);
64
+ }
65
+ function applyDataflowRiskSignal(decision, newDataflowRisks) {
66
+ if (newDataflowRisks.length === 0)
67
+ return;
68
+ decision.verdict = 'block';
69
+ const sample = newDataflowRisks
70
+ .slice(0, 3)
71
+ .map((risk) => `${risk.source}→${risk.sink} (${risk.bridgeFn ?? risk.sourceFn})`)
72
+ .join(', ');
73
+ decision.summary.push(`${newDataflowRisks.length} new dataflow risk(s) detected: ${sample}${newDataflowRisks.length > 3 ? ', …' : ''}.`);
74
+ }
75
+ function appendDependencySummary(summary, depChanges) {
76
+ if (depChanges.length === 0)
77
+ return;
78
+ const totals = dependencyTotals(depChanges);
79
+ if (totals.added + totals.removed + totals.bumped === 0)
80
+ return;
81
+ summary.push(`Dependency changes: +${totals.added} -${totals.removed} ~${totals.bumped}.`);
82
+ }
83
+ function dependencyTotals(depChanges) {
84
+ return depChanges.reduce((acc, change) => {
85
+ acc.added += change.added.length;
86
+ acc.removed += change.removed.length;
87
+ acc.bumped += change.bumped.length;
88
+ return acc;
89
+ }, { added: 0, removed: 0, bumped: 0 });
90
+ }
91
+ function appendManualReleaseSignOff(decision, signals) {
92
+ if (!isManualReleaseSignOffBlock(decision.verdict, signals))
93
+ return;
94
+ decision.summary.push('Manual release sign-off required: review blocks on release-scale risk signals, not concrete cycle, risky-function, contract, taint, or dataflow defects.');
95
+ }
96
+ function isManualReleaseSignOffBlock(verdict, signals) {
97
+ const concreteSignals = [
98
+ signals.newCycles,
99
+ signals.riskyFunctions,
100
+ signals.contractChanges,
101
+ signals.newTaintFlows,
102
+ signals.newDataflowRisks,
103
+ ];
104
+ return (verdict === 'block' &&
105
+ signals.maxRisk >= RISK_VERDICT_BLOCK_SCORE &&
106
+ concreteSignals.every((entries) => entries.length === 0));
107
+ }
108
+ function appendFallbackSummary(decision, changedFileCount) {
109
+ if (changedFileCount === 0 && decision.summary.length === 0) {
110
+ decision.summary.push('No structural changes detected between base and head.');
111
+ return;
112
+ }
113
+ if (decision.verdict === 'ok' && decision.summary.length === 0) {
114
+ decision.summary.push(`${changedFileCount} file(s) changed; no risk signals.`);
115
+ }
116
+ }
117
+ function bumpTo(current, target) {
118
+ const order = { ok: 0, review: 1, block: 2 };
119
+ return order[target] > order[current] ? target : current;
120
+ }
121
+ //# sourceMappingURL=reviewVerdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewVerdict.js","sourceRoot":"","sources":["../../src/core/reviewVerdict.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { ReleaseTrainTask, ReleaseTrainTrack } from '../types.js';
2
2
  export declare const ROADMAP_3_2_LINES: readonly ["3.2.x", "3.3.x", "3.4.x", "3.5.x", "3.6.x", "3.7.x", "3.8.x", "3.9.x"];
3
3
  export declare const ROADMAP_3_4_LINES: readonly ["3.4.x"];
4
+ export declare const ROADMAP_POST_4_4_LINES: readonly ["4.5.x", "4.6.x", "4.7.x", "4.8.x", "4.9.x"];
4
5
  export declare function defaultRoadmapLinesForVersion(version: string | null): string[] | undefined;
5
6
  export declare function roadmapTrackForLine(line: string): ReleaseTrainTrack | undefined;
6
7
  export declare function roadmapTasksForLine(line: string): ReleaseTrainTask[];
@@ -9,6 +9,18 @@ export const ROADMAP_3_2_LINES = [
9
9
  '3.9.x',
10
10
  ];
11
11
  export const ROADMAP_3_4_LINES = ['3.4.x'];
12
+ export const ROADMAP_POST_4_4_LINES = [
13
+ '4.5.x',
14
+ '4.6.x',
15
+ '4.7.x',
16
+ '4.8.x',
17
+ '4.9.x',
18
+ ];
19
+ const DEFAULT_ROADMAP_LINE_RULES = [
20
+ { minimumMajor: 4, minimumMinor: 4, lines: ROADMAP_POST_4_4_LINES },
21
+ { minimumMajor: 3, minimumMinor: 4, lines: ROADMAP_3_4_LINES },
22
+ { minimumMajor: 3, minimumMinor: 1, lines: ROADMAP_3_2_LINES },
23
+ ];
12
24
  const ROADMAP_3_2_CATALOG = {
13
25
  '3.2.x': {
14
26
  line: '3.2.x',
@@ -288,18 +300,226 @@ const ROADMAP_3_2_CATALOG = {
288
300
  },
289
301
  ],
290
302
  },
303
+ '4.5.x': {
304
+ line: '4.5.x',
305
+ track: {
306
+ theme: 'Roadmap And Release-Train Reliability',
307
+ outcome: 'Planning surfaces describe the current post-4.4 product direction instead of stale shipped 3.x/4.0 work.',
308
+ includedInPlan: true,
309
+ scope: [
310
+ 'post-4.4 roadmap refresh',
311
+ 'release-train default-line refresh',
312
+ 'product-planning route verification',
313
+ ],
314
+ successCriteria: [
315
+ 'release-train defaults to post-4.4 lines on 4.4.x and newer',
316
+ 'docs/ROADMAP.md names already-shipped 4.0 through 4.4 work as completed',
317
+ 'planning output remains read-only and does not bump versions',
318
+ ],
319
+ },
320
+ tasks: [
321
+ {
322
+ id: 'rt-4-5-roadmap-release-train-refresh',
323
+ priority: 'p0',
324
+ title: 'Refresh roadmap and release-train surfaces',
325
+ why: 'Maintainers and agents should see the real next product bets after 4.4.0 instead of a completed 3.4/3.6/4.0 plan.',
326
+ track: '4.5.x',
327
+ files: [
328
+ 'src/core/roadmapCatalog.ts',
329
+ 'src/core/releaseTrain.ts',
330
+ 'docs/ROADMAP.md',
331
+ 'docs/GUIDE.md',
332
+ ],
333
+ verification: {
334
+ commands: [
335
+ 'projscan release-train --format json',
336
+ 'projscan start --intent "what should we build next?" --format json',
337
+ ],
338
+ expected: 'Planning output names post-4.4 workstreams and stays read-only without package version changes.',
339
+ },
340
+ },
341
+ ],
342
+ },
343
+ '4.6.x': {
344
+ line: '4.6.x',
345
+ track: {
346
+ theme: 'Swarm Coordination Evidence',
347
+ outcome: 'Teams can validate which coordination commands agents actually use before investing in deeper swarm automation.',
348
+ includedInPlan: true,
349
+ scope: [
350
+ 'coordination workflow examples',
351
+ 'claims and collision evidence recipes',
352
+ 'coordinate-watch adoption proof',
353
+ ],
354
+ successCriteria: [
355
+ 'docs show a real local workflow for collisions, claims, merge-risk, coordinate, and coordinate --watch',
356
+ 'agent-brief and preflight coordination evidence stay separated from remembered session context',
357
+ 'validation examples stay local-first and require no daemon or cloud service',
358
+ ],
359
+ },
360
+ tasks: [
361
+ {
362
+ id: 'rt-4-6-swarm-coordination-validation',
363
+ priority: 'p0',
364
+ title: 'Validate swarm coordination in real agent workflows',
365
+ why: 'The coordination surface is only valuable if teams can see where it prevents collisions and which command answered the coordination question.',
366
+ track: '4.6.x',
367
+ files: [
368
+ 'docs/GUIDE.md',
369
+ 'README.md',
370
+ 'docs/examples/swarm-coordination.md',
371
+ 'src/core/agentBrief.ts',
372
+ 'src/core/preflight.ts',
373
+ ],
374
+ verification: {
375
+ commands: [
376
+ 'projscan collisions --format json',
377
+ 'projscan coordinate --format json',
378
+ 'projscan agent-brief --format json',
379
+ ],
380
+ expected: 'Coordination evidence names the active command path, current worktree state, and local-only validation workflow.',
381
+ },
382
+ },
383
+ ],
384
+ },
385
+ '4.7.x': {
386
+ line: '4.7.x',
387
+ track: {
388
+ theme: 'Framework Dataflow Precision',
389
+ outcome: 'Framework-specific request sources continue to expand through narrow, tested source patterns instead of broad name matching.',
390
+ includedInPlan: true,
391
+ scope: [
392
+ 'Fastify and Koa request source coverage',
393
+ 'receiver-sensitive database sink checks',
394
+ 'regression fixtures for false-positive suppression',
395
+ ],
396
+ successCriteria: [
397
+ 'dataflow detects tested framework request sources into database sinks',
398
+ 'ordinary helper functions with similar names stay quiet',
399
+ 'custom source and sink configuration still overrides defaults',
400
+ ],
401
+ },
402
+ tasks: [
403
+ {
404
+ id: 'rt-4-7-framework-dataflow-precision',
405
+ priority: 'p1',
406
+ title: 'Broaden framework dataflow precision',
407
+ why: 'Deeper framework precision is the right static-analysis moat when it is added as small tested patterns.',
408
+ track: '4.7.x',
409
+ files: ['src/core/frameworkSources.ts', 'src/core/dataflow.ts', 'tests/core/dataflow.test.ts'],
410
+ verification: {
411
+ commands: ['npm run test -- tests/core/dataflow.test.ts', 'projscan dataflow --format json'],
412
+ expected: 'New framework request-source fixtures report real source-to-sink paths and suppress lookalike helpers.',
413
+ },
414
+ },
415
+ ],
416
+ },
417
+ '4.8.x': {
418
+ line: '4.8.x',
419
+ track: {
420
+ theme: 'Scoped Evidence Exports',
421
+ outcome: 'Teams can share report artifacts with scoped or redacted paths without exposing broader repository structure.',
422
+ includedInPlan: true,
423
+ scope: [
424
+ 'path-scope filtering',
425
+ 'stable path redaction labels',
426
+ 'SARIF and JSON evidence shaping',
427
+ ],
428
+ successCriteria: [
429
+ 'issue reports can be filtered to a requested path scope',
430
+ 'redacted reports replace file paths with stable labels',
431
+ 'redaction never reads .env values or adds network calls',
432
+ ],
433
+ },
434
+ tasks: [
435
+ {
436
+ id: 'rt-4-8-scoped-redacted-evidence',
437
+ priority: 'p1',
438
+ title: 'Add scoped and redacted report export controls',
439
+ why: 'Security reviewers need useful artifacts they can share without leaking paths outside the reviewed area.',
440
+ track: '4.8.x',
441
+ files: [
442
+ 'src/core/reportScope.ts',
443
+ 'src/cli/commands/analyze.ts',
444
+ 'src/cli/commands/doctor.ts',
445
+ 'src/cli/commands/ci.ts',
446
+ 'src/reporters/sarifReporter.ts',
447
+ ],
448
+ verification: {
449
+ commands: [
450
+ 'projscan doctor --report-scope src --redact-paths --format json',
451
+ 'projscan analyze --report-scope src --redact-paths --format sarif',
452
+ ],
453
+ expected: 'Reports include only scoped issue evidence and expose redacted path labels instead of raw file paths.',
454
+ },
455
+ },
456
+ ],
457
+ },
458
+ '4.9.x': {
459
+ line: '4.9.x',
460
+ track: {
461
+ theme: 'Python Upgrade Intelligence And Hotspot Maintainability',
462
+ outcome: 'Python dependency upgrade previews become useful offline, while the highest-churn projscan surfaces keep shrinking through focused tests and extraction.',
463
+ includedInPlan: true,
464
+ scope: [
465
+ 'requirements.txt and Poetry dependency lookup',
466
+ 'Python importers for upgrade preview',
467
+ 'start/types/test hotspot coverage and extraction',
468
+ 'real adoption examples for orchestration, ownership, and plugins',
469
+ ],
470
+ successCriteria: [
471
+ 'projscan_upgrade can preview Python dependencies from local manifests',
472
+ 'README and guide no longer describe Python upgrade support as only planned',
473
+ 'hotspot work adds focused coverage or extraction without unrelated refactors',
474
+ 'docs include concrete adoption examples for agent orchestration, package ownership, and policy plugins',
475
+ ],
476
+ },
477
+ tasks: [
478
+ {
479
+ id: 'rt-4-9-python-upgrade-and-hotspot-maintainability',
480
+ priority: 'p1',
481
+ title: 'Ship Python upgrade intelligence and keep reducing hotspots',
482
+ why: 'Python repos should get the same offline upgrade impact preview as Node repos, and the repo should keep paying down known high-churn surfaces.',
483
+ track: '4.9.x',
484
+ files: [
485
+ 'src/core/upgradePreview.ts',
486
+ 'src/core/languages/pythonManifests.ts',
487
+ 'src/types/dependencyHealth.ts',
488
+ 'tests/core/upgradePreview.test.ts',
489
+ 'src/core/start.ts',
490
+ 'src/types.ts',
491
+ 'tests/core/start.test.ts',
492
+ ],
493
+ verification: {
494
+ commands: [
495
+ 'npm run test -- tests/core/upgradePreview.test.ts tests/mcp/pythonUpgradeFallback.test.ts',
496
+ 'npm run typecheck:public-types',
497
+ 'projscan hotspots --format json',
498
+ ],
499
+ expected: 'Python upgrade previews return declared versions and importers, public types compile, and hotspot risk is covered or explicitly deferred.',
500
+ },
501
+ },
502
+ ],
503
+ },
291
504
  };
292
505
  export function defaultRoadmapLinesForVersion(version) {
293
506
  if (!version)
294
507
  return undefined;
295
- const [major = 0, minor = 0] = version.split('.').map((part) => Number.parseInt(part, 10));
296
- if (!Number.isFinite(major) || !Number.isFinite(minor))
508
+ const roadmapVersion = roadmapVersionParts(version);
509
+ if (!roadmapVersion)
297
510
  return undefined;
298
- if (major > 3 || (major === 3 && minor >= 4))
299
- return [...ROADMAP_3_4_LINES];
300
- if (major === 3 && minor >= 1)
301
- return [...ROADMAP_3_2_LINES];
302
- return undefined;
511
+ const rule = DEFAULT_ROADMAP_LINE_RULES.find((candidate) => isAtLeastRoadmapVersion(roadmapVersion, candidate));
512
+ return rule ? [...rule.lines] : undefined;
513
+ }
514
+ function roadmapVersionParts(version) {
515
+ const [majorPart, minorPart = '0'] = version.split('.');
516
+ const major = Number.parseInt(majorPart ?? '', 10);
517
+ const minor = Number.parseInt(minorPart, 10);
518
+ return Number.isFinite(major) && Number.isFinite(minor) ? { major, minor } : null;
519
+ }
520
+ function isAtLeastRoadmapVersion(version, rule) {
521
+ return (version.major > rule.minimumMajor ||
522
+ (version.major === rule.minimumMajor && version.minor >= rule.minimumMinor));
303
523
  }
304
524
  export function roadmapTrackForLine(line) {
305
525
  const entry = ROADMAP_3_2_CATALOG[line];