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 @@
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
 
@@ -434,6 +434,12 @@ graph. Bridge risks are graph-backed dataflow additions: a wrapper that calls a
434
434
  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
+ Framework request-source detection covers narrow tested patterns for Next.js, Hono,
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.
437
443
 
438
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.
439
445
 
@@ -688,7 +694,7 @@ Each finding becomes a SARIF result with `ruleId: audit-<pkg>`, severity mapped
688
694
  projscan upgrade <package>
689
695
  ```
690
696
 
691
- Preview the impact of upgrading a package. The default path is fully offline; pass `--check-registry` when you explicitly want npm registry lookup for the current latest version.
697
+ Preview the impact of upgrading a package. The default path is fully offline; pass `--check-registry` when you explicitly want npm registry lookup for the current latest npm version.
692
698
 
693
699
  **What you get:**
694
700
 
@@ -696,6 +702,8 @@ Preview the impact of upgrading a package. The default path is fully offline; pa
696
702
  - Breaking-change markers found in the CHANGELOG: scans for `BREAKING CHANGE`, `deprecated`, `removed support`, `no longer supported`, and section headers containing "breaking"
697
703
  - CHANGELOG excerpt sliced to the relevant version range (read from `node_modules/<pkg>/CHANGELOG.md`)
698
704
  - Importer list - every file in your source tree that imports the package (direct or sub-path)
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
699
707
 
700
708
  **Example:**
701
709
 
@@ -717,6 +725,7 @@ $ projscan upgrade react --format markdown
717
725
 
718
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."
719
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`.
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.
720
729
 
721
730
  ### coverage
722
731
 
@@ -882,6 +891,8 @@ Machine-readable output. Useful for piping into other tools, storing results, or
882
891
  ```bash
883
892
  projscan analyze --format json | jq '.issues[] | select(.severity == "error")'
884
893
  projscan analyze --format json > analysis.json
894
+ projscan analyze --report-scope src/api --redact-paths --format json > scoped-analysis.json
895
+ projscan analyze --report-policy apiEvidence --format json > scoped-analysis.json
885
896
  ```
886
897
 
887
898
  ### Markdown
@@ -902,6 +913,10 @@ projscan doctor --format html > HEALTH.html
902
913
  ```
903
914
 
904
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.
905
920
 
906
921
  ### SARIF
907
922
 
@@ -918,6 +933,15 @@ Supported on `analyze`, `audit`, `ci`, `doctor`, and `outdated`. Each issue is e
918
933
  - `message.text` - the issue description
919
934
  - `locations` - real file + line/column when the analyzer can supply them (security findings include line numbers); project-level issues anchor to repo root
920
935
  - `properties.category` - the analyzer category (`security`, `formatting`, `architecture`, …)
936
+
937
+ For shareable evidence artifacts, `analyze`, `doctor`, and `ci` accept
938
+ `--report-policy <name>`, `--report-scope <paths>`, and `--redact-paths`. Scope
939
+ is comma-separated and repo-relative. Redaction replaces file paths with stable
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.
921
945
  - `properties.fixAvailable` - whether `projscan fix` can remediate it
922
946
 
923
947
  When uploaded to GitHub Code Scanning, findings appear in the **Security → Code scanning** tab and (for PRs) as inline annotations on changed lines.
@@ -951,6 +975,12 @@ ProjScan loads a project-wide config from one of:
951
975
  "severityOverrides": {
952
976
  "missing-prettier": "info"
953
977
  },
978
+ "reportPolicies": {
979
+ "apiEvidence": {
980
+ "reportScope": ["src/api", "packages/backend"],
981
+ "redactPaths": true
982
+ }
983
+ },
954
984
  "hotspots": {
955
985
  "limit": 20,
956
986
  "since": "6 months ago"
@@ -970,6 +1000,7 @@ ProjScan loads a project-wide config from one of:
970
1000
  | `scan.offline` | boolean | Block projscan network-capable features: telemetry sending, `audit`, registry checks, and optional semantic model loading. Default `false`. |
971
1001
  | `disableRules` | string[] | Silence rules by id. Exact match (`missing-prettier`) or wildcard prefix (`large-*`). |
972
1002
  | `severityOverrides` | `Record<string, 'info' \| 'warning' \| 'error'>` | Remap a rule's severity. Useful for downgrading project-specific false positives without disabling them. |
1003
+ | `reportPolicies` | `Record<string, { reportScope?: string[]; redactPaths?: boolean }>` | Named evidence export presets selected with `--report-policy <name>` on `analyze`, `doctor`, and `ci`. |
973
1004
  | `hotspots.limit` | number (1–100) | Default limit for `projscan hotspots`. |
974
1005
  | `hotspots.since` | string | Default git history window for `projscan hotspots`. |
975
1006
 
@@ -1059,6 +1090,9 @@ Example GitHub Actions snippet:
1059
1090
  | `--offline` | Block projscan network-capable features for this run |
1060
1091
  | `--changed-only` | Scope to files changed vs base ref (applies to `analyze`, `doctor`, `ci`) |
1061
1092
  | `--base-ref <ref>` | Git base ref for `--changed-only` (default: origin/main) |
1093
+ | `--report-policy <name>` | Use a named report policy preset from config (`analyze`, `doctor`, `ci`) |
1094
+ | `--report-scope <paths>` | Comma-separated repo-relative paths to include in exported evidence (`analyze`, `doctor`, `ci`) |
1095
+ | `--redact-paths` | Replace file paths in exported evidence with stable labels (`analyze`, `doctor`, `ci`) |
1062
1096
  | `--verbose` | Show debug-level logging - useful for diagnosing scan issues |
1063
1097
  | `--quiet` | Suppress all non-essential output (spinners, status messages) |
1064
1098
  | `-V, --version` | Print the version number |
@@ -1598,7 +1632,8 @@ src/
1598
1632
  │ ├── markdownReporter.ts # Markdown output
1599
1633
  │ └── sarifReporter.ts # SARIF 2.1.0 output
1600
1634
  ├── mcp/
1601
- │ ├── 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
1602
1637
  │ ├── tools.ts # 41 MCP tools (barrel; per-tool files under tools/)
1603
1638
  │ ├── tokenBudget.ts # Record-aware response truncator
1604
1639
  │ ├── pagination.ts # Cursor-based pagination (opaque base64 + checksum)
package/docs/ROADMAP.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ProjScan Roadmap
2
2
 
3
- Last reviewed 2026-06-05.
3
+ Last reviewed 2026-06-16.
4
4
 
5
5
  ---
6
6
 
@@ -44,7 +44,8 @@ Four plays, in order:
44
44
  2. **Lean into multi-agent** — make projscan the _shared substrate_ for agent swarms. This is where the market is moving and where our context-budget design pays off. ✅ Largely shipped (1.4 Session, 1.5 Budgeted by default + Project Memory).
45
45
  3. **Become the operator, not the advisor** — stop suggesting and start acting (cross-repo, apply, security gate). ✅ Shipped in the 1.6 arc.
46
46
  4. **Expand the moat** — depth where it matters (CFG / dataflow on hot paths, more languages, sub-file embeddings, cost analytics, live PR review, plugin extensibility). Not everywhere; we're not trying to be Cody. ✅ The 1.7 → 2.0 arc turns this into a platform contract.
47
- 5. **Coordinate the swarm** — the Swarm Coordination arc. Plays 1–4 made projscan the best _single-agent_ code-intelligence server; the market has moved to multi-agent orchestration, where the unsolved pain is concurrent-change arbitration across parallel agents. Turn the graph + impact + session primitives into a local-first coordination layer (collision detection, claims/leases, merge-risk preflight, intent router, one-call coordinate). Shipped additively in 3.6.0. The remaining piece consolidating the tool surface agents pay for is breaking, so it's reserved for **4.0**.
47
+ 5. **Coordinate the swarm** — collision detection, claims/leases, merge-risk preflight, intent routing, one-call coordination, and live coordinate watch shipped across the 3.6 through 3.7 arc, with the 4.0 tool-surface consolidation now complete. The next work is evidence: prove which commands agents reach for in real multi-worktree sessions, then deepen only the paths that prevent integration failures.
48
+ 6. **Make agent proof release-ready** — 4.1 through 4.5 turned Mission Control into a goal → mission → proof → review harness and packaged the post-4.4 implementation train: current planning surfaces, adoption examples, precise framework dataflow, scoped/redacted evidence exports, Python upgrade previews, and hotspot maintainability cleanup.
48
49
 
49
50
  We are _not_ trying to be:
50
51
 
@@ -55,29 +56,61 @@ We are _not_ trying to be:
55
56
 
56
57
  ## Now / Next / Later
57
58
 
58
- ### Now — Validate the Swarm Coordination arc; prepare the 4.0 surface break
59
+ ### Now — Post-4.5 Validation
59
60
 
60
- The **Swarm Coordination arc shipped in 3.6.0** (see Recently Completed). It was additive — five new tools, nothing removed — so it shipped as a minor release, not a major one. ("4.x" was an earlier label for the _theme_; the version is 3.6.0. The name **4.0** is reserved strictly for the one _breaking_ change below.)
61
+ 4.5.0 "Review-Ready Intelligence Train" packages the post-4.4 implementation train. The next work is validation and selective hardening from real use, not another broad feature push.
61
62
 
62
- What's now:
63
+ The active validation lines are:
63
64
 
64
- - **Validate it in real swarm usage.** The arc is built on an unvalidated bet that concurrent-change arbitration is the pain. Before deepening it, find out which of `collision` / `claim` / `merge-risk` / `coordinate` agents actually reach for, and harden from there (transitive collision recall, live `--watch` coordination, integration into `preflight` / `agent_brief`).
65
- - **`4.0` tool-surface consolidation (the first breaking release since 1.0).** In progress on the `next` branch (publish held for a real deprecation window). 4.0 removes the two tools deprecated in 3.8.0 — `projscan_explain` (use `projscan_file`) and `projscan_graph` (use `projscan_semantic_graph`, which gains a targeted `query` mode that subsumes it) — taking the surface from 47 → 45. Both have drop-in replacements (see [MIGRATION-4.0.md](MIGRATION-4.0.md)). The _broader_ consolidation (routing the long tail behind `projscan_route`) is deliberately deferred until real usage signal justifies which tools to fold — same deprecate-before-remove discipline.
65
+ - **Swarm coordination evidence.** Validate how real agents use `collisions`, `claim`, `merge-risk`, `coordinate`, and `coordinate --watch`; deepen only the coordination paths that prevent integration failures.
66
+ - **Evidence export adoption.** Prove scoped/redacted report controls work for partner, security, and release-review handoffs without leaking unnecessary repo structure.
67
+ - **Python upgrade coverage.** Extend lockfile support only after Poetry and pinned-requirement evidence prove useful in real repos.
68
+ - **Framework dataflow precision.** Add more framework patterns only when each has a narrow request source, sink, and false-positive fixture.
69
+ - **Hotspot maintainability.** Continue extracting and covering high-churn start/review/type surfaces when they show concrete review or defect risk.
66
70
 
67
- Strictly **local-first** throughout: same-repo / same-machine swarms via the shared store, never a daemon, cloud, or cross-machine server (that would be a SaaS non-goal).
71
+ Strictly **local-first** throughout: same-repo / same-machine evidence, no daemon, no cloud, no hidden network calls, no new telemetry, and no secret-value reads.
68
72
 
69
- Success signals: collisions prevented pre-merge, integration-failure-rate reduction, tokens saved per turn via the router, first external swarm adopter.
73
+ Success signals: teams copy the adoption examples into real reviews, scoped/redacted artifacts are accepted by reviewers, Python upgrade previews identify useful local evidence, dataflow additions stay quiet on lookalikes, and release bug-hunts remain free of concrete defects.
70
74
 
71
- ### Recently Completed — 3.6.0 (2026)
75
+ ### Recently Completed — 4.5.0 (2026)
72
76
 
73
- **3.6.0 "Swarm Coordination"** turned projscan into the local-first coordination substrate for parallel agents working one repo across git worktrees:
77
+ **4.5.0 "Review-Ready Intelligence Train"** shipped the post-4.4 implementation train:
74
78
 
75
- - `projscan collisions` / `projscan_collision` — same-file and dependency overlaps across in-flight worktrees, surfaced before the branches merge (reuses the import graph for blast radius).
76
- - `projscan claim` / `projscan_claim` — advisory claims/leases over files, dirs, or symbols, shared across worktrees, with `--ttl` expiry (so a crashed agent's claim auto-expires), contention warnings, and `prune`.
77
- - `projscan merge-risk` / `projscan_merge_risk` safe integration order (merge the least-entangled branch first) plus conflict hotspots.
78
- - `projscan route` / `projscan_route` map a stated goal to the right tool (additive discovery entry over the surface; deterministic, no LLM).
79
- - `projscan coordinate` / `projscan_coordinate` one-call read folding it all into a `clear` / `caution` / `conflicted` readiness verdict.
80
- - Also: semantic search degrades to BM25 when the embedding model can't load instead of crashing. 41 → 47 MCP tools.
79
+ - Roadmap and release-train planning now default to the current post-4.4 product lines instead of stale shipped work.
80
+ - Adoption examples cover agent orchestration, package ownership, custom policy plugins, swarm coordination, and scoped evidence exports.
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/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
+ - Start next-action assembly and taint function identity were tightened during release readiness cleanup.
85
+
86
+ ### Recently Completed — 4.4.0 (2026)
87
+
88
+ **4.4.0 "Agent Release Harness"** turned Mission Control into a release-ready agent harness:
89
+
90
+ - Repo-local AgentLoopKit and AgentFlight harness commands are surfaced as proof hints when harness files exist.
91
+ - Product-planning intents route to verifiable bug-hunt/action planning instead of generic orientation.
92
+ - Bug-hunt, release-train, evidence-pack, and review wording distinguish concrete fix targets from manual release sign-off actions.
93
+ - Public type contracts are split into focused modules with a dedicated `typecheck:public-types` gate.
94
+ - Same-SHA dirty-worktree review and directory-only verification guidance were fixed.
95
+ - The dev dependency chain cleared the release audit gate without adding runtime dependencies.
96
+
97
+ ### Recently Completed — 4.0.0 through 4.3.1 (2026)
98
+
99
+ - **4.0.0 "Surface Consolidation"** removed the deprecated MCP tools `projscan_explain` and `projscan_graph` after a documented deprecation cycle. CLI commands were not removed. `projscan_file` and `projscan_semantic_graph` query mode are the replacements.
100
+ - **4.1.0 through 4.2.0 "Mission Control Handoffs"** added execution plans, cursors, runbooks, task cards, review gates, shortcut commands, and saved mission bundles.
101
+ - **4.3.0 "Mission Outcome Loop"** added `projscan start --mission <dir>` and Mission Proof outcome summaries.
102
+ - **4.3.1 "Mission Proof Polish"** added Markdown proof reports, saved proof output, newest/all-bundle selection, attention filters, one-line CI summaries, and reproducible demo media.
103
+
104
+ ### Recently Completed — 3.6.0 and 3.7.x Coordination (2026)
105
+
106
+ The **Swarm Coordination arc** turned projscan into the local-first coordination substrate for parallel agents working one repo across git worktrees:
107
+
108
+ - `projscan collisions` / `projscan_collision` — same-file and dependency overlaps across in-flight worktrees, surfaced before branches merge.
109
+ - `projscan claim` / `projscan_claim` — advisory claims/leases over files, dirs, or symbols, shared across worktrees, with `--ttl` expiry, contention warnings, and `prune`.
110
+ - `projscan merge-risk` / `projscan_merge_risk` — safe integration order plus conflict hotspots.
111
+ - `projscan route` / `projscan_route` — deterministic goal-to-tool routing.
112
+ - `projscan coordinate` / `projscan_coordinate` — one-call readiness verdict over collisions, claims, and merge risk.
113
+ - `projscan coordinate --watch` / `projscan_coordinate_watch` — local polling with MCP coordination-change notifications.
81
114
 
82
115
  ### Recently Completed — 3.5.0 (2026)
83
116
 
@@ -133,11 +166,11 @@ Success signals: collisions prevented pre-merge, integration-failure-rate reduct
133
166
 
134
167
  ### Later
135
168
 
136
- Later work should expand the moat after 3.4.0 repo-understanding output is verified in real engineering workflows:
169
+ Later work should deepen proven surfaces rather than add broad categories:
137
170
 
138
- - Broaden framework dataflow precision from narrow, tested source patterns rather than broad source-name matching.
139
- - Add adoption examples from real agent orchestration, package ownership, and custom policy plugin workflows.
140
- - Explore stronger report-export controls for teams that want path redaction or scoped evidence artifacts.
171
+ - Add stronger sub-file and symbol-level coordination once real swarm examples show which conflicts matter.
172
+ - Extend Python upgrade intelligence toward broader lockfile formats after Poetry and pinned-requirement evidence are proven useful.
173
+ - Add more framework dataflow patterns only when each has a clear request source, sink, and false-positive fixture.
141
174
 
142
175
  ## Non-goals
143
176
 
@@ -0,0 +1,128 @@
1
+ # Adoption Workflows
2
+
3
+ These examples turn projscan from a one-off scanner into a repeatable team
4
+ habit. They are written around the personas in `docs/PERSONAS.md`: skeptical
5
+ senior reviewer, platform lead, product engineer, release owner, and security
6
+ reviewer.
7
+
8
+ ## 1. Agent Orchestration
9
+
10
+ Use this when a team is standardizing how agents start work, prove changes, and
11
+ hand off safely.
12
+
13
+ ```bash
14
+ projscan privacy-check --offline
15
+ projscan start --intent "add billing webhook support" --format json
16
+ projscan preflight --mode before_edit --format json
17
+ projscan workplan --mode before_edit --format json
18
+ projscan agent-brief --intent "handoff billing webhook work" --format json
19
+ ```
20
+
21
+ Decision loop:
22
+
23
+ | Persona | Reads | Decision |
24
+ | --- | --- | --- |
25
+ | Product engineer | `start.missionControl.readyActions` | What can I run now? |
26
+ | Platform lead | `preflight.verdict`, coordination hints | Is parallel work safe? |
27
+ | Senior reviewer | proof commands and done criteria | Is the handoff reviewable? |
28
+
29
+ If the repo uses AgentLoopKit or AgentFlight, `projscan start` surfaces the
30
+ local harness proof commands when their config files exist. Run those commands
31
+ as part of the handoff proof:
32
+
33
+ ```bash
34
+ npm exec agentloop -- status
35
+ npm exec agentflight -- verify
36
+ ```
37
+
38
+ ## 2. Package Ownership
39
+
40
+ Use this when a monorepo or platform team needs to know who owns a dependency,
41
+ route review, or plan an upgrade.
42
+
43
+ ```bash
44
+ projscan dependencies --format json
45
+ projscan semantic-graph --query package_importers --symbol fastapi --format json
46
+ projscan upgrade fastapi --format json
47
+ projscan agent-brief --intent "handoff package ownership for fastapi" --format json
48
+ ```
49
+
50
+ For Node packages, `upgrade` reads local `package.json`, `node_modules`, local
51
+ CHANGELOG files, and importer evidence. For Python packages, it reads
52
+ `pyproject.toml`, `setup.cfg`, `setup.py`, root `requirements*.txt` files,
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
+
56
+ Decision loop:
57
+
58
+ | Persona | Reads | Decision |
59
+ | --- | --- | --- |
60
+ | Package owner | importer list | Which app or package needs review? |
61
+ | Release owner | drift and importer count | Is this safe for the current train? |
62
+ | Security reviewer | audit/dependencies plus importer evidence | Is a forced update justified? |
63
+
64
+ ## 3. Custom Policy Plugin
65
+
66
+ Use this when team-specific rules matter more than generic static analysis,
67
+ such as service ownership, route policy, or security-sensitive directories.
68
+
69
+ ```bash
70
+ projscan plugin init --kind analyzer --name team-policy
71
+ projscan plugin validate .projscan-plugins/team-policy.projscan-plugin.json
72
+ projscan plugin test .projscan-plugins/team-policy.projscan-plugin.json
73
+ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --format json
74
+ ```
75
+
76
+ Start from packaged examples:
77
+
78
+ - `docs/examples/plugins/policy.projscan-plugin.json`
79
+ - `docs/examples/plugins/api-route-ownership.projscan-plugin.json`
80
+ - `docs/examples/plugins/security-sensitive-files.projscan-plugin.json`
81
+ - `docs/examples/plugins/team-radar.projscan-plugin.json`
82
+
83
+ Decision loop:
84
+
85
+ | Persona | Reads | Decision |
86
+ | --- | --- | --- |
87
+ | Platform lead | plugin diagnostics | Is the rule trusted enough for CI? |
88
+ | Security reviewer | emitted issues | Does the policy catch the right risky paths? |
89
+ | Product engineer | suggested action | Can this be fixed without tribal context? |
90
+
91
+ ## 4. Shareable Evidence With Path Controls
92
+
93
+ Use this when a team wants to share a health or CI artifact without exposing
94
+ repo layout or sensitive paths.
95
+
96
+ ```bash
97
+ projscan analyze --report-scope src/api --redact-paths --format json > reports/api-analysis.json
98
+ projscan doctor --report-scope src/api --redact-paths --format markdown > reports/api-health.md
99
+ projscan ci --report-scope src/api --redact-paths --format sarif > reports/api.sarif
100
+ ```
101
+
102
+ `--report-scope` keeps only issues and files under the listed repo-relative
103
+ paths. `--redact-paths` replaces file paths with stable labels such as
104
+ `redacted-path-1`, so reviewers can correlate evidence without seeing the
105
+ original repo structure.
106
+
107
+ When the same evidence shape is reused by a partner review, security check, or
108
+ release train, put it in config and select it by name:
109
+
110
+ ```json
111
+ {
112
+ "reportPolicies": {
113
+ "apiEvidence": {
114
+ "reportScope": ["src/api"],
115
+ "redactPaths": true
116
+ }
117
+ }
118
+ }
119
+ ```
120
+
121
+ ```bash
122
+ projscan analyze --report-policy apiEvidence --format json > reports/api-analysis.json
123
+ projscan doctor --report-policy apiEvidence --format markdown > reports/api-health.md
124
+ projscan ci --report-policy apiEvidence --format sarif > reports/api.sarif
125
+ ```
126
+
127
+ Use direct `--report-scope` or `--redact-paths` flags with `--report-policy` for
128
+ one-off overrides without changing the shared config preset.
@@ -0,0 +1,120 @@
1
+ # Swarm Coordination Workflow
2
+
3
+ Use this recipe when two or more agents, worktrees, or developers are changing
4
+ the same repo. The goal is not to prevent parallel work; it is to make overlap,
5
+ claim contention, and merge order visible before code lands.
6
+
7
+ ## Personas
8
+
9
+ - Platform lead: wants low merge conflict rate and clear ownership when several
10
+ agents are active.
11
+ - Product engineer: wants to keep moving without reading every sibling branch.
12
+ - Release owner: wants a merge order and proof that high-risk overlaps were
13
+ reviewed before sign-off.
14
+
15
+ ## Start of Work
16
+
17
+ Run this before the first edit in each worktree:
18
+
19
+ ```bash
20
+ projscan start --intent "show coordination status for parallel agents" --format json
21
+ projscan coordinate --format json
22
+ projscan claim list --format json
23
+ ```
24
+
25
+ If the work has a known file, claim it with a short lease:
26
+
27
+ ```bash
28
+ projscan claim add src/core/start.ts --agent api-agent --ttl 2700 --format json
29
+ ```
30
+
31
+ Treat a claim conflict as a routing signal. Either choose another task, split
32
+ the file, or ask the owner to release the claim.
33
+
34
+ ## During Work
35
+
36
+ Use the dedicated coordination tools for specific questions:
37
+
38
+ ```bash
39
+ projscan collisions --format json
40
+ projscan merge-risk --format json
41
+ projscan coordinate --format json
42
+ ```
43
+
44
+ Read the outputs this way:
45
+
46
+ | Tool | Question answered | Action |
47
+ | --- | --- | --- |
48
+ | `collisions` | Which worktrees touch the same files or dependent files? | Move one branch first, split work, or ask for review. |
49
+ | `claim list` | Who says they own a file, directory, or symbol right now? | Avoid edits under active leases unless agreed. |
50
+ | `merge-risk` | Which branch should merge first? | Integrate the least-entangled branch before larger branches. |
51
+ | `coordinate` | Is the current swarm clear, cautious, or conflicted? | Use this as the one-line status in handoffs. |
52
+ | `agent-brief` | What should the next agent know? | Include coordination hints in the next-agent packet. |
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
+
65
+ For MCP clients that support long-running notifications, use the watch tool:
66
+
67
+ ```text
68
+ projscan_coordinate_watch { "action": "start" }
69
+ projscan_coordinate_watch { "action": "list" }
70
+ projscan_coordinate_watch { "action": "stop" }
71
+ ```
72
+
73
+ For CLI users, `coordinate` also supports polling:
74
+
75
+ ```bash
76
+ projscan coordinate --watch --interval 5 --format json
77
+ ```
78
+
79
+ The watch loop should be treated as advisory evidence. A changed notification
80
+ or emitted watch row means rerun `projscan coordinate` before editing or merging.
81
+
82
+ ## Before Handoff
83
+
84
+ Capture a compact handoff with coordination evidence:
85
+
86
+ ```bash
87
+ projscan agent-brief --intent "handoff current parallel-agent work" --format json
88
+ projscan preflight --mode before_commit --format json
89
+ projscan coordinate --format json
90
+ ```
91
+
92
+ Handoff text should include:
93
+
94
+ - active claims you hold
95
+ - collision count and readiness verdict
96
+ - merge-risk order when multiple worktrees exist
97
+ - exact proof commands already run
98
+ - claim release command if the next agent owns the follow-up
99
+
100
+ ## Before Merge
101
+
102
+ ```bash
103
+ projscan preflight --mode before_merge --format json
104
+ projscan merge-risk --format json
105
+ projscan coordinate --format json
106
+ ```
107
+
108
+ Merge only when the coordination verdict is `clear` or when the release owner
109
+ has reviewed the listed conflicts. If the verdict is `conflicted`, resolve or
110
+ split the overlap before merging.
111
+
112
+ ## Evidence Gaps To Track
113
+
114
+ These are the next hardening targets for real swarm usage:
115
+
116
+ - transitive collision recall: prove dependent-file conflicts are caught, not
117
+ only same-file conflicts
118
+ - live watch adoption: prove agents notice and act on coordination changes
119
+ - preflight and agent-brief integration: prove the same coordination facts show
120
+ up where agents already look before editing or handing off
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "projscan",
3
3
  "mcpName": "io.github.abhiyoheswaran1/projscan",
4
- "version": "4.4.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",
@@ -21,6 +21,8 @@
21
21
  "docs/demos/projscan-mission-control.tape",
22
22
  "docs/demos/projscan-mission-proof.tape",
23
23
  "docs/plugin.schema.json",
24
+ "docs/examples/adoption-workflows.md",
25
+ "docs/examples/swarm-coordination.md",
24
26
  "docs/projscan-mission-control.png",
25
27
  "docs/projscan-mission-control.gif",
26
28
  "docs/projscan-proof-router.png",