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
@@ -0,0 +1,32 @@
1
+ export function applyReportPolicies(obj, out) {
2
+ if (!obj.reportPolicies ||
3
+ typeof obj.reportPolicies !== 'object' ||
4
+ Array.isArray(obj.reportPolicies)) {
5
+ return;
6
+ }
7
+ const raw = obj.reportPolicies;
8
+ const policies = {};
9
+ for (const [rawName, rawPolicy] of Object.entries(raw)) {
10
+ const name = rawName.trim();
11
+ const policy = name ? normalizeReportPolicy(rawPolicy) : null;
12
+ if (policy)
13
+ policies[name] = policy;
14
+ }
15
+ if (Object.keys(policies).length > 0)
16
+ out.reportPolicies = policies;
17
+ }
18
+ function normalizeReportPolicy(rawPolicy) {
19
+ if (!rawPolicy || typeof rawPolicy !== 'object' || Array.isArray(rawPolicy))
20
+ return null;
21
+ const entry = rawPolicy;
22
+ const policy = {};
23
+ if (Array.isArray(entry.reportScope)) {
24
+ const scopes = entry.reportScope.filter((v) => typeof v === 'string' && v.length > 0);
25
+ if (scopes.length > 0)
26
+ policy.reportScope = scopes;
27
+ }
28
+ if (typeof entry.redactPaths === 'boolean')
29
+ policy.redactPaths = entry.redactPaths;
30
+ return Object.keys(policy).length > 0 ? policy : null;
31
+ }
32
+ //# sourceMappingURL=configReportPolicies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configReportPolicies.js","sourceRoot":"","sources":["../../src/utils/configReportPolicies.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,GAA4B,EAAE,GAAmB;IACnF,IACE,CAAC,GAAG,CAAC,cAAc;QACnB,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;QACtC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EACjC,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,cAAyC,CAAC;IAC1D,MAAM,QAAQ,GAAuC,EAAE,CAAC;IAExD,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,IAAI,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACtC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC;AACtE,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAkB;IAC/C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzF,MAAM,KAAK,GAAG,SAAoC,CAAC;IACnD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CACrC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1D,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACnF,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ProjscanConfig } from '../types/config.js';
2
+ export declare function applyScan(obj: Record<string, unknown>, out: ProjscanConfig): void;
@@ -0,0 +1,15 @@
1
+ export function applyScan(obj, out) {
2
+ if (!obj.scan || typeof obj.scan !== 'object')
3
+ return;
4
+ const raw = obj.scan;
5
+ const scan = {};
6
+ if (typeof raw.includeIgnored === 'boolean')
7
+ scan.includeIgnored = raw.includeIgnored;
8
+ if (typeof raw.scanEnvValues === 'boolean')
9
+ scan.scanEnvValues = raw.scanEnvValues;
10
+ if (typeof raw.offline === 'boolean')
11
+ scan.offline = raw.offline;
12
+ if (Object.keys(scan).length)
13
+ out.scan = scan;
14
+ }
15
+ //# sourceMappingURL=configScan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configScan.js","sourceRoot":"","sources":["../../src/utils/configScan.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,GAA4B,EAAE,GAAmB;IACzE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,IAA+B,CAAC;IAChD,MAAM,IAAI,GAAwC,EAAE,CAAC;IACrD,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,SAAS;QAAE,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IACtF,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,SAAS;QAAE,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;IACnF,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACjE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAChD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ProjscanConfig } from '../types/config.js';
2
+ export declare function applySeverityOverrides(obj: Record<string, unknown>, out: ProjscanConfig): void;
@@ -0,0 +1,15 @@
1
+ const VALID_SEVERITIES = ['info', 'warning', 'error'];
2
+ export function applySeverityOverrides(obj, out) {
3
+ if (!obj.severityOverrides || typeof obj.severityOverrides !== 'object')
4
+ return;
5
+ const raw = obj.severityOverrides;
6
+ const overrides = {};
7
+ for (const [key, val] of Object.entries(raw)) {
8
+ if (typeof val === 'string' && VALID_SEVERITIES.includes(val)) {
9
+ overrides[key] = val;
10
+ }
11
+ }
12
+ if (Object.keys(overrides).length)
13
+ out.severityOverrides = overrides;
14
+ }
15
+ //# sourceMappingURL=configSeverity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSeverity.js","sourceRoot":"","sources":["../../src/utils/configSeverity.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAEvE,MAAM,UAAU,sBAAsB,CACpC,GAA4B,EAC5B,GAAmB;IAEnB,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;QAAE,OAAO;IAChF,MAAM,GAAG,GAAG,GAAG,CAAC,iBAA4C,CAAC;IAC7D,MAAM,SAAS,GAAkC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAK,gBAA6B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5E,SAAS,CAAC,GAAG,CAAC,GAAG,GAAoB,CAAC;QACxC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACvE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface ConfigSource {
2
+ value: unknown;
3
+ source: string;
4
+ }
5
+ export declare function loadConfigSource(rootPath: string, explicitPath?: string): Promise<ConfigSource | null>;
@@ -0,0 +1,55 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ const CONFIG_CANDIDATES = ['.projscanrc.json', '.projscanrc'];
4
+ const PKG_KEY = 'projscan';
5
+ export async function loadConfigSource(rootPath, explicitPath) {
6
+ if (explicitPath)
7
+ return await loadExplicitConfigSource(rootPath, explicitPath);
8
+ const candidateSource = await loadCandidateConfigSource(rootPath);
9
+ if (candidateSource)
10
+ return candidateSource;
11
+ return await loadPackageConfigSource(rootPath);
12
+ }
13
+ async function loadExplicitConfigSource(rootPath, explicitPath) {
14
+ const resolved = path.isAbsolute(explicitPath) ? explicitPath : path.join(rootPath, explicitPath);
15
+ return { value: safeParse(await fs.readFile(resolved, 'utf-8'), resolved), source: resolved };
16
+ }
17
+ async function loadCandidateConfigSource(rootPath) {
18
+ for (const name of CONFIG_CANDIDATES) {
19
+ const candidate = path.join(rootPath, name);
20
+ let raw;
21
+ try {
22
+ raw = await fs.readFile(candidate, 'utf-8');
23
+ }
24
+ catch {
25
+ continue;
26
+ }
27
+ return { value: safeParse(raw, candidate), source: candidate };
28
+ }
29
+ return null;
30
+ }
31
+ async function loadPackageConfigSource(rootPath) {
32
+ const pkgPath = path.join(rootPath, 'package.json');
33
+ try {
34
+ const raw = await fs.readFile(pkgPath, 'utf-8');
35
+ const pkg = JSON.parse(raw);
36
+ const embedded = pkg[PKG_KEY];
37
+ if (embedded && typeof embedded === 'object') {
38
+ return { value: embedded, source: `${pkgPath}#${PKG_KEY}` };
39
+ }
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ return null;
45
+ }
46
+ function safeParse(raw, filePath) {
47
+ try {
48
+ return JSON.parse(raw);
49
+ }
50
+ catch (err) {
51
+ const msg = err instanceof Error ? err.message : String(err);
52
+ throw new Error(`Invalid JSON in ${filePath}: ${msg}`, { cause: err });
53
+ }
54
+ }
55
+ //# sourceMappingURL=configSources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSources.js","sourceRoot":"","sources":["../../src/utils/configSources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,iBAAiB,GAAG,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,UAAU,CAAC;AAO3B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,YAAqB;IAErB,IAAI,YAAY;QAAE,OAAO,MAAM,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEhF,MAAM,eAAe,GAAG,MAAM,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAE5C,OAAO,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,QAAgB,EAChB,YAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClG,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAChG,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,QAAgB;IACvD,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,QAAgB;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI,OAAO,EAAE,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,QAAgB;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ProjscanConfig } from '../types/config.js';
2
+ export declare function applyTaint(obj: Record<string, unknown>, out: ProjscanConfig): void;
@@ -0,0 +1,15 @@
1
+ export function applyTaint(obj, out) {
2
+ if (!obj.taint || typeof obj.taint !== 'object')
3
+ return;
4
+ const t = obj.taint;
5
+ const taint = {};
6
+ if (Array.isArray(t.sources)) {
7
+ taint.sources = t.sources.filter((v) => typeof v === 'string' && v.length > 0);
8
+ }
9
+ if (Array.isArray(t.sinks)) {
10
+ taint.sinks = t.sinks.filter((v) => typeof v === 'string' && v.length > 0);
11
+ }
12
+ if (Object.keys(taint).length)
13
+ out.taint = taint;
14
+ }
15
+ //# sourceMappingURL=configTaint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configTaint.js","sourceRoot":"","sources":["../../src/utils/configTaint.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,GAA4B,EAAE,GAAmB;IAC1E,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO;IACxD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAgC,CAAC;IAC/C,MAAM,KAAK,GAAyC,EAAE,CAAC;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;AACnD,CAAC"}
package/docs/GUIDE.md CHANGED
@@ -187,7 +187,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
187
187
  For branch-diff, PR-size, and commit-message questions, such as `projscan start --intent "what did I change since main?"`, `projscan start --intent "is this PR too large?"`, `projscan start --intent "how big is this change?"`, `projscan start --intent "write a commit message for these changes"`, or `projscan start --intent "summarize my changes for a commit"`, it routes to `projscan_pr_diff` so changed exports, imports, call sites, complexity, and fan-in are reviewed before full review.
188
188
  For branch freshness and comparison questions, such as `projscan start --intent "is my branch stale?"` or `projscan start --intent "compare my branch with main"`, it also routes to `projscan_pr_diff` so the developer checks the structural diff before rebasing or asking for review. For rebase and merge-conflict recovery, such as `projscan start --intent "rebase went wrong"` or `projscan start --intent "resolve merge conflicts"`, it routes to `projscan_preflight --mode before_merge`; post-conflict test-plan wording such as `projscan start --intent "what should I test after resolving conflicts?"` stays on `projscan_regression_plan`.
189
189
  For resume questions, such as `projscan start --intent "where did I leave off?"`, `projscan start --intent "what changed while I was away?"`, `projscan start --intent "what changed while I was offline?"`, `projscan start --intent "what changed while I was asleep?"`, `projscan start --intent "what did the last agent touch?"`, or `projscan start --intent "what did the last agent do?"`, it routes to `projscan_session { action: "touched" }` so remembered touched files are reviewed before live preflight evidence gates the next edit.
190
- For parallel-agent coordination questions, such as `projscan start --intent "show coordination status for parallel agents"`, `projscan start --intent "who else is working on this?"`, `projscan start --intent "am I going to collide with another agent?"`, or `projscan start --intent "what worktrees are active?"`, it routes to `projscan_coordinate` so collisions, claims, and merge order are reviewed through one readiness verdict before editing continues. For merge-order wording, such as `projscan start --intent "what should merge first?"`, it routes to `projscan_merge_risk`; for overlap wording, such as `projscan start --intent "show me overlapping changes"`, it routes to `projscan_collision`.
190
+ For parallel-agent coordination questions, such as `projscan start --intent "show coordination status for parallel agents"`, `projscan start --intent "who else is working on this?"`, `projscan start --intent "am I going to collide with another agent?"`, or `projscan start --intent "what worktrees are active?"`, it routes to `projscan_coordinate` so collisions, claims, merge order, and the current-worktree-versus-remembered-session evidence boundary are reviewed through one readiness verdict before editing continues. For merge-order wording, such as `projscan start --intent "what should merge first?"`, it routes to `projscan_merge_risk`; for overlap wording, such as `projscan start --intent "show me overlapping changes"`, it routes to `projscan_collision`.
191
191
  For active-claim questions, such as `projscan start --intent "show active claims"`, it routes to `projscan_claim { action: "list" }` so owners, leases, and contention warnings are reviewed before parallel work continues.
192
192
  For file-claim requests, such as `projscan start --intent "claim src/core/start.ts for me"`, it routes to `projscan_claim`, lists active claims first, then adds the requested target only after a real agent name replaces `Needs Input`.
193
193
  For architecture-coupling questions, such as `projscan start --intent "show circular dependencies"` or `projscan start --intent "find dependency cycles"`, it routes to `projscan_coupling` with `direction: "cycles_only"` / `projscan coupling --cycles-only --format json`; broader wording such as `projscan start --intent "what modules are tightly coupled"` routes to the full fan-in, fan-out, instability, cross-package-edge, and cycle report.
@@ -204,7 +204,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
204
204
  - **`projscan_preflight` / `projscan preflight`** — agent safety gate. Returns `proceed`, `caution`, or `block` with health, changed-file, review, remembered session, hotspot, plugin-policy, supply-chain, and release-scale evidence. `evidence.riskSources.currentWorktree` is current Git/worktree evidence; `evidence.riskSources.sessionMemory` is remembered handoff context. Use `--mode before_edit` at the start of work and `--mode before_commit` / `--mode before_merge` before handing off or merging; scale-only commit blocks are cautions, while merge gates still require manual release sign-off.
205
205
  - **`projscan_hotspots` / `projscan hotspots`** — files ranked by `git churn × AST cyclomatic complexity × open issues × ownership × coverage`. Pass `view: "functions"` for top-N risky individual functions across the repo (0.13+).
206
206
  - **`projscan_semantic_graph` / `projscan semantic-graph`** — stable v3 graph contract with file, function, package, and symbol nodes plus imports, exports, definitions, and calls edges. Use it when an agent needs one normalized graph shape instead of several targeted queries.
207
- - **`projscan_dataflow` / `projscan dataflow`** — direct, propagated, and bridge source-to-sink dataflow risks. Use it for a focused safety pass before touching command execution, raw SQL, filesystem writes, or DOM sinks.
207
+ - **`projscan_dataflow` / `projscan dataflow`** — direct, propagated, and bridge source-to-sink dataflow risks, including framework-aware Next.js route request body and URL sources. Use it for a focused safety pass before touching command execution, raw SQL, filesystem writes, or DOM sinks.
208
208
  - **`projscan_coupling` / `projscan coupling`** — per-file fan-in / fan-out / instability plus circular-import cycles (Tarjan SCC). Use `direction: cycles_only` or `projscan coupling --cycles-only` to surface architectural debt directly.
209
209
  - **`projscan_analyze` / `projscan analyze`** — the everything report; useful at session start but verbose.
210
210
 
@@ -435,7 +435,11 @@ and a sink wrapper is surfaced even when legacy taint reachability cannot see a
435
435
  downstream call path from source to sink. By default, dataflow suppresses test-file paths,
436
436
  broad readFile/writeFile-style noise, and JavaScript RegExp.exec false positives.
437
437
  Framework request-source detection covers narrow tested patterns for Next.js, Hono,
438
- Express, Fastify, and Koa handlers while keeping lookalike helpers quiet.
438
+ Express, Fastify, and Koa handlers, including Hono validator output,
439
+ Express/Fastify/Koa request IP metadata, Fastify host/hostname and raw
440
+ URL/header evidence, and Express/Koa header accessors plus Express
441
+ `req.param(...)` and `req.originalUrl`, while
442
+ keeping lookalike helpers quiet.
439
443
 
440
444
  For release hardening, `npm run check:graph-corpus` compares bundled fixture metrics against `docs/graph-corpus-baseline.json`. The gate fails only when graph coverage drops below the baseline or dataflow risks rise above it.
441
445
 
@@ -698,8 +702,8 @@ Preview the impact of upgrading a package. The default path is fully offline; pa
698
702
  - Breaking-change markers found in the CHANGELOG: scans for `BREAKING CHANGE`, `deprecated`, `removed support`, `no longer supported`, and section headers containing "breaking"
699
703
  - CHANGELOG excerpt sliced to the relevant version range (read from `node_modules/<pkg>/CHANGELOG.md`)
700
704
  - Importer list - every file in your source tree that imports the package (direct or sub-path)
701
- - Python manifest evidence for packages declared in `pyproject.toml`, `setup.cfg`, `setup.py`, or root `requirements*.txt`
702
- - Python current-version evidence from `poetry.lock` package blocks or pinned root `requirements*.txt` entries
705
+ - Python manifest evidence for packages declared in `pyproject.toml` (including PEP 735 `dependency-groups`, Poetry dependency groups, and legacy `tool.poetry.dev-dependencies`), `setup.cfg`, `setup.py`, or root `requirements*.txt`. Root Python manifests are sufficient local evidence even before `.py` files exist.
706
+ - Python current-version evidence from `poetry.lock` / `uv.lock` / `pdm.lock` package blocks, `conda-lock.yml` / `conda-lock.yaml` package entries, `Pipfile.lock` exact versions, pinned root `requirements*.txt`, or pinned root `constraints*.txt` entries
703
707
 
704
708
  **Example:**
705
709
 
@@ -721,7 +725,7 @@ $ projscan upgrade react --format markdown
721
725
 
722
726
  - Reads the CHANGELOG that npm already placed in `node_modules/`. If the package author doesn't ship one, you'll see "No local CHANGELOG found."
723
727
  - Without `--check-registry`, works with what's **installed** and reports `latestSource: "installed"`. With `--check-registry`, npm registry lookup is attempted and failures fall back to the installed version with `registryError`.
724
- - Python previews stay offline. They do not query PyPI; current-version evidence comes from supported local lockfiles or pinned root requirements.
728
+ - Python previews stay offline. They do not query PyPI; current-version evidence comes from supported local lockfiles, pinned root requirements, or pinned root constraints.
725
729
 
726
730
  ### coverage
727
731
 
@@ -909,6 +913,10 @@ projscan doctor --format html > HEALTH.html
909
913
  ```
910
914
 
911
915
  Supported on `analyze`, `doctor`, `hotspots`, `coupling`, `pr-diff`, `review`, `impact`, and `coverage`.
916
+ For `analyze` and `doctor`, scoped/redacted report controls also appear as a
917
+ path-safe controls card when active.
918
+ Path redaction keeps HTTP(S) documentation links readable while redacting
919
+ standalone file-like path tokens from issue text.
912
920
 
913
921
  ### SARIF
914
922
 
@@ -929,9 +937,11 @@ Supported on `analyze`, `audit`, `ci`, `doctor`, and `outdated`. Each issue is e
929
937
  For shareable evidence artifacts, `analyze`, `doctor`, and `ci` accept
930
938
  `--report-policy <name>`, `--report-scope <paths>`, and `--redact-paths`. Scope
931
939
  is comma-separated and repo-relative. Redaction replaces file paths with stable
932
- labels while preserving correlation across issues and files in the same report.
933
- Direct `--report-scope` and `--redact-paths` flags override the selected preset
934
- for a single run.
940
+ labels while preserving correlation across issues and files in the same report,
941
+ including file-like path tokens in issue text that has no location anchor.
942
+ JSON/SARIF include path-safe `reportControls` metadata, and Markdown/HTML print
943
+ path-safe controls banners. Direct `--report-scope` and `--redact-paths` flags
944
+ override the selected preset for a single run.
935
945
  - `properties.fixAvailable` - whether `projscan fix` can remediate it
936
946
 
937
947
  When uploaded to GitHub Code Scanning, findings appear in the **Security → Code scanning** tab and (for PRs) as inline annotations on changed lines.
@@ -1622,7 +1632,8 @@ src/
1622
1632
  │ ├── markdownReporter.ts # Markdown output
1623
1633
  │ └── sarifReporter.ts # SARIF 2.1.0 output
1624
1634
  ├── mcp/
1625
- │ ├── server.ts # JSON-RPC 2.0 dispatcher, stdio transport, negotiation
1635
+ │ ├── server.ts # MCP server factory and JSON-RPC request orchestration
1636
+ │ ├── serverStdio.ts # stdio transport loop for the CLI entry point
1626
1637
  │ ├── tools.ts # 41 MCP tools (barrel; per-tool files under tools/)
1627
1638
  │ ├── tokenBudget.ts # Record-aware response truncator
1628
1639
  │ ├── pagination.ts # Cursor-based pagination (opaque base64 + checksum)
package/docs/ROADMAP.md CHANGED
@@ -79,8 +79,8 @@ Success signals: teams copy the adoption examples into real reviews, scoped/reda
79
79
  - Roadmap and release-train planning now default to the current post-4.4 product lines instead of stale shipped work.
80
80
  - Adoption examples cover agent orchestration, package ownership, custom policy plugins, swarm coordination, and scoped evidence exports.
81
81
  - `analyze`, `doctor`, and `ci` can scope and redact shareable evidence with direct flags or named `reportPolicies` presets.
82
- - `projscan upgrade` and MCP `projscan_upgrade` support offline Python previews from manifests, Poetry lockfiles, pinned requirements, and Python importers.
83
- - Dataflow detects narrow Fastify and Koa request-source patterns while suppressing lookalike helpers and Koa response-body writes.
82
+ - `projscan upgrade` and MCP `projscan_upgrade` support offline Python previews from manifests, Poetry/Pipfile/uv/PDM/Conda lockfiles, pinned requirements/constraints, and Python importers.
83
+ - Dataflow detects narrow Fastify and Koa request-source patterns, including Fastify raw URL/header and Koa IP evidence, while suppressing lookalike helpers and Koa response-body writes.
84
84
  - Start next-action assembly and taint function identity were tightened during release readiness cleanup.
85
85
 
86
86
  ### Recently Completed — 4.4.0 (2026)
@@ -50,8 +50,8 @@ projscan agent-brief --intent "handoff package ownership for fastapi" --format j
50
50
  For Node packages, `upgrade` reads local `package.json`, `node_modules`, local
51
51
  CHANGELOG files, and importer evidence. For Python packages, it reads
52
52
  `pyproject.toml`, `setup.cfg`, `setup.py`, root `requirements*.txt` files,
53
- Poetry lockfiles, and pinned root requirements, then returns declared scope,
54
- current-version source, drift, and Python importers.
53
+ Poetry/Pipfile/uv/PDM/Conda lockfiles, and pinned root requirements/constraints, then
54
+ returns declared scope, current-version source, drift, and Python importers.
55
55
 
56
56
  Decision loop:
57
57
 
@@ -51,6 +51,17 @@ Read the outputs this way:
51
51
  | `coordinate` | Is the current swarm clear, cautious, or conflicted? | Use this as the one-line status in handoffs. |
52
52
  | `agent-brief` | What should the next agent know? | Include coordination hints in the next-agent packet. |
53
53
 
54
+ The JSON reports for `collisions` and `coordinate` include an `evidence` block
55
+ with the active command path, current worktree state, local-only source signals,
56
+ the validation workflow above, and a reminder that session memory is separate
57
+ from current Git/worktree evidence. The default `coordinate` console view prints
58
+ the same session-boundary reminder inside its `Evidence` section.
59
+ When multiple worktrees are present, `agent-brief` also carries a
60
+ `context.coordinationHints` entry even for a clear swarm, so the next agent knows
61
+ to validate locally with `projscan coordinate --format json`,
62
+ `projscan coordinate --watch --interval 5 --format json`, and
63
+ `projscan agent-brief --format json` before continuing parallel edits.
64
+
54
65
  For MCP clients that support long-running notifications, use the watch tool:
55
66
 
56
67
  ```text
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "projscan",
3
3
  "mcpName": "io.github.abhiyoheswaran1/projscan",
4
- "version": "4.5.0",
4
+ "version": "4.6.0",
5
5
  "description": "Agent-first code intelligence. MCP server (2025-03-26) with 11 AST adapters covering 12 named languages: JavaScript, TypeScript, Python, Go, Java, Ruby, Rust, PHP, C#, Kotlin, Swift, and C++; repo understanding maps (projscan_understand), stable v3 semantic graph (projscan_semantic_graph), dataflow risk engine with bridge-helper detection (projscan_dataflow), code graph, file + per-function AST cyclomatic complexity, per-function fan-in + fan-out, coupling + cycle detection, structural PR diff with HTML reporter, coverage report with HTML reporter, intent-grounded one-call PR review (projscan_review with optional `intent` arg, new taint flows, contract changes, and newDataflowRisks) and long-running PR-watch mode with structured per-bucket deltas (projscan_review_watch), first-60-seconds workflow orientation (projscan_start), agent workplans (projscan_workplan), bug-hunt queues (projscan_bug_hunt), product-line planning (projscan_release_train), evidence packs (projscan_evidence_pack), regression planning (projscan_regression_plan), agent briefs (projscan_agent_brief), quality scorecards (projscan_quality_scorecard), and preflight with supply-chain IOC evidence, rule-driven fix suggestions + mechanical apply layer with rollback (projscan_apply_fix, projscan_fix_suggest, projscan_explain_issue), source-to-sink taint analysis (projscan_taint) with truncation reporting, transitive blast-radius analysis with cross-repo mode (projscan_impact for files and symbols), cross-repo workspace registration + intelligence (projscan_workspace_graph), per-function semantic search chunks (sub-file embeddings), per-rule confidence + severity drift + cost-summary analytics with live streaming (projscan_cost_summary), stable local analyzer + reporter plugin API (projscan_plugin, CLI --reporter, opt-in via PROJSCAN_PLUGINS_PREVIEW=1), monorepo workspace awareness with cross-package import policy + per-package dependencies / outdated / audit, BM25 + optional semantic search, cursor pagination, progress notifications, context-budgeted output, and a stable-surface CI guard. CLI on the side.",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",