projscan 4.3.1 → 4.4.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 (677) hide show
  1. package/CONTRIBUTING.md +5 -1
  2. package/PRIVACY.md +1 -0
  3. package/README.md +253 -229
  4. package/THIRD-PARTY-NOTICES.md +31 -31
  5. package/dist/analyzers/architectureCheck.js.map +1 -1
  6. package/dist/analyzers/crossPackageImportCheck.js +3 -2
  7. package/dist/analyzers/crossPackageImportCheck.js.map +1 -1
  8. package/dist/analyzers/deadCodeCheck.js +10 -2
  9. package/dist/analyzers/deadCodeCheck.js.map +1 -1
  10. package/dist/analyzers/dependencyRiskCheck.js +1 -5
  11. package/dist/analyzers/dependencyRiskCheck.js.map +1 -1
  12. package/dist/analyzers/eslintCheck.js +3 -1
  13. package/dist/analyzers/eslintCheck.js.map +1 -1
  14. package/dist/analyzers/prettierCheck.js +16 -3
  15. package/dist/analyzers/prettierCheck.js.map +1 -1
  16. package/dist/analyzers/pythonDependencyRiskCheck.js +4 -17
  17. package/dist/analyzers/pythonDependencyRiskCheck.js.map +1 -1
  18. package/dist/analyzers/pythonLinterCheck.js +2 -12
  19. package/dist/analyzers/pythonLinterCheck.js.map +1 -1
  20. package/dist/analyzers/securityCheck.js +26 -9
  21. package/dist/analyzers/securityCheck.js.map +1 -1
  22. package/dist/analyzers/supplyChainCheck.js +6 -2
  23. package/dist/analyzers/supplyChainCheck.js.map +1 -1
  24. package/dist/analyzers/testCheck.js +10 -1
  25. package/dist/analyzers/testCheck.js.map +1 -1
  26. package/dist/analyzers/unusedDependencyCheck.js +8 -8
  27. package/dist/analyzers/unusedDependencyCheck.js.map +1 -1
  28. package/dist/cli/_shared.d.ts +2 -1
  29. package/dist/cli/_shared.js +14 -2
  30. package/dist/cli/_shared.js.map +1 -1
  31. package/dist/cli/commands/agentBrief.js +7 -1
  32. package/dist/cli/commands/agentBrief.js.map +1 -1
  33. package/dist/cli/commands/analyze.js.map +1 -1
  34. package/dist/cli/commands/applyFix.js +1 -1
  35. package/dist/cli/commands/applyFix.js.map +1 -1
  36. package/dist/cli/commands/audit.js +4 -2
  37. package/dist/cli/commands/audit.js.map +1 -1
  38. package/dist/cli/commands/badge.js.map +1 -1
  39. package/dist/cli/commands/bugHunt.js +2 -2
  40. package/dist/cli/commands/bugHunt.js.map +1 -1
  41. package/dist/cli/commands/ci.js.map +1 -1
  42. package/dist/cli/commands/claim.js +3 -3
  43. package/dist/cli/commands/claim.js.map +1 -1
  44. package/dist/cli/commands/collision.js +4 -2
  45. package/dist/cli/commands/collision.js.map +1 -1
  46. package/dist/cli/commands/coordinate.js +4 -2
  47. package/dist/cli/commands/coordinate.js.map +1 -1
  48. package/dist/cli/commands/coupling.js.map +1 -1
  49. package/dist/cli/commands/coverage.js.map +1 -1
  50. package/dist/cli/commands/dataflow.js.map +1 -1
  51. package/dist/cli/commands/dependencies.js +1 -1
  52. package/dist/cli/commands/dependencies.js.map +1 -1
  53. package/dist/cli/commands/diff.js.map +1 -1
  54. package/dist/cli/commands/doctor.js.map +1 -1
  55. package/dist/cli/commands/dogfood.js +30 -5
  56. package/dist/cli/commands/dogfood.js.map +1 -1
  57. package/dist/cli/commands/evidencePack.js.map +1 -1
  58. package/dist/cli/commands/explainIssue.js +1 -1
  59. package/dist/cli/commands/explainIssue.js.map +1 -1
  60. package/dist/cli/commands/feedback.js +19 -5
  61. package/dist/cli/commands/feedback.js.map +1 -1
  62. package/dist/cli/commands/file.js +1 -1
  63. package/dist/cli/commands/file.js.map +1 -1
  64. package/dist/cli/commands/fix.js.map +1 -1
  65. package/dist/cli/commands/fixSuggest.js +12 -4
  66. package/dist/cli/commands/fixSuggest.js.map +1 -1
  67. package/dist/cli/commands/hotspots.js.map +1 -1
  68. package/dist/cli/commands/impact.js +1 -1
  69. package/dist/cli/commands/impact.js.map +1 -1
  70. package/dist/cli/commands/init.js +13 -5
  71. package/dist/cli/commands/init.js.map +1 -1
  72. package/dist/cli/commands/installHook.js +2 -2
  73. package/dist/cli/commands/installHook.js.map +1 -1
  74. package/dist/cli/commands/mcp.js.map +1 -1
  75. package/dist/cli/commands/memory.js +5 -2
  76. package/dist/cli/commands/memory.js.map +1 -1
  77. package/dist/cli/commands/mergeRisk.js +1 -1
  78. package/dist/cli/commands/mergeRisk.js.map +1 -1
  79. package/dist/cli/commands/missionProof.js +13 -12
  80. package/dist/cli/commands/missionProof.js.map +1 -1
  81. package/dist/cli/commands/outdated.js +1 -1
  82. package/dist/cli/commands/outdated.js.map +1 -1
  83. package/dist/cli/commands/plugin.js +10 -6
  84. package/dist/cli/commands/plugin.js.map +1 -1
  85. package/dist/cli/commands/prDiff.js +1 -1
  86. package/dist/cli/commands/prDiff.js.map +1 -1
  87. package/dist/cli/commands/preflight.js +1 -5
  88. package/dist/cli/commands/preflight.js.map +1 -1
  89. package/dist/cli/commands/privacyCheck.js +3 -1
  90. package/dist/cli/commands/privacyCheck.js.map +1 -1
  91. package/dist/cli/commands/qualityScorecard.js.map +1 -1
  92. package/dist/cli/commands/recipes.js.map +1 -1
  93. package/dist/cli/commands/regressionPlan.js.map +1 -1
  94. package/dist/cli/commands/releaseTrain.js.map +1 -1
  95. package/dist/cli/commands/review.js +1 -1
  96. package/dist/cli/commands/review.js.map +1 -1
  97. package/dist/cli/commands/route.js.map +1 -1
  98. package/dist/cli/commands/search.js +5 -2
  99. package/dist/cli/commands/search.js.map +1 -1
  100. package/dist/cli/commands/semanticGraph.js.map +1 -1
  101. package/dist/cli/commands/session.js +2 -2
  102. package/dist/cli/commands/session.js.map +1 -1
  103. package/dist/cli/commands/start.js +3 -1177
  104. package/dist/cli/commands/start.js.map +1 -1
  105. package/dist/cli/commands/startAction.d.ts +36 -0
  106. package/dist/cli/commands/startAction.js +70 -0
  107. package/dist/cli/commands/startAction.js.map +1 -0
  108. package/dist/cli/commands/startConsole.d.ts +7 -0
  109. package/dist/cli/commands/startConsole.js +309 -0
  110. package/dist/cli/commands/startConsole.js.map +1 -0
  111. package/dist/cli/commands/startMissionBundle.d.ts +41 -0
  112. package/dist/cli/commands/startMissionBundle.js +645 -0
  113. package/dist/cli/commands/startMissionBundle.js.map +1 -0
  114. package/dist/cli/commands/startOutput.d.ts +31 -0
  115. package/dist/cli/commands/startOutput.js +232 -0
  116. package/dist/cli/commands/startOutput.js.map +1 -0
  117. package/dist/cli/commands/startShortcuts.d.ts +26 -0
  118. package/dist/cli/commands/startShortcuts.js +117 -0
  119. package/dist/cli/commands/startShortcuts.js.map +1 -0
  120. package/dist/cli/commands/telemetry.js +2 -1
  121. package/dist/cli/commands/telemetry.js.map +1 -1
  122. package/dist/cli/commands/trial.js +19 -4
  123. package/dist/cli/commands/trial.js.map +1 -1
  124. package/dist/cli/commands/understand.js +3 -1
  125. package/dist/cli/commands/understand.js.map +1 -1
  126. package/dist/cli/commands/upgrade.js.map +1 -1
  127. package/dist/cli/commands/watch.js +1 -1
  128. package/dist/cli/commands/watch.js.map +1 -1
  129. package/dist/cli/commands/workplan.js.map +1 -1
  130. package/dist/cli/commands/workspace.js +1 -1
  131. package/dist/cli/commands/workspace.js.map +1 -1
  132. package/dist/cli/commands/workspaces.js +1 -1
  133. package/dist/cli/commands/workspaces.js.map +1 -1
  134. package/dist/cli/index.js +2 -117
  135. package/dist/cli/index.js.map +1 -1
  136. package/dist/cli/registerCommands.d.ts +4 -0
  137. package/dist/cli/registerCommands.js +125 -0
  138. package/dist/cli/registerCommands.js.map +1 -0
  139. package/dist/core/adoption.d.ts +2 -1
  140. package/dist/core/adoption.js +40 -13
  141. package/dist/core/adoption.js.map +1 -1
  142. package/dist/core/agentBrief.js +19 -6
  143. package/dist/core/agentBrief.js.map +1 -1
  144. package/dist/core/applyFix.js.map +1 -1
  145. package/dist/core/ast.js +30 -19
  146. package/dist/core/ast.js.map +1 -1
  147. package/dist/core/auditRunner.js.map +1 -1
  148. package/dist/core/bugHunt.js +119 -17
  149. package/dist/core/bugHunt.js.map +1 -1
  150. package/dist/core/claims.js +5 -2
  151. package/dist/core/claims.js.map +1 -1
  152. package/dist/core/codeGraph.js +10 -0
  153. package/dist/core/codeGraph.js.map +1 -1
  154. package/dist/core/codeGraphReexports.d.ts +9 -0
  155. package/dist/core/codeGraphReexports.js +59 -0
  156. package/dist/core/codeGraphReexports.js.map +1 -0
  157. package/dist/core/collisionDetector.js +14 -4
  158. package/dist/core/collisionDetector.js.map +1 -1
  159. package/dist/core/coordination.js +4 -6
  160. package/dist/core/coordination.js.map +1 -1
  161. package/dist/core/couplingAnalyzer.d.ts +2 -1
  162. package/dist/core/couplingAnalyzer.js.map +1 -1
  163. package/dist/core/coverageParser.js.map +1 -1
  164. package/dist/core/dataflow.js +11 -2
  165. package/dist/core/dataflow.js.map +1 -1
  166. package/dist/core/dataflowFilters.js +8 -3
  167. package/dist/core/dataflowFilters.js.map +1 -1
  168. package/dist/core/dependencyAnalyzer.js +4 -1
  169. package/dist/core/dependencyAnalyzer.js.map +1 -1
  170. package/dist/core/dogfood.d.ts +1 -1
  171. package/dist/core/dogfood.js +39 -5
  172. package/dist/core/dogfood.js.map +1 -1
  173. package/dist/core/embeddings.js.map +1 -1
  174. package/dist/core/evidenceComment.js +34 -12
  175. package/dist/core/evidenceComment.js.map +1 -1
  176. package/dist/core/explainIssue.js +1 -2
  177. package/dist/core/explainIssue.js.map +1 -1
  178. package/dist/core/feedback.d.ts +1 -1
  179. package/dist/core/feedback.js +15 -4
  180. package/dist/core/feedback.js.map +1 -1
  181. package/dist/core/fileInspector.js +8 -2
  182. package/dist/core/fileInspector.js.map +1 -1
  183. package/dist/core/fixFirst.d.ts +3 -1
  184. package/dist/core/fixFirst.js +17 -4
  185. package/dist/core/fixFirst.js.map +1 -1
  186. package/dist/core/fixSuggest.js +20 -12
  187. package/dist/core/fixSuggest.js.map +1 -1
  188. package/dist/core/frameworkDetector.js +5 -3
  189. package/dist/core/frameworkDetector.js.map +1 -1
  190. package/dist/core/frameworkSources.js +22 -2
  191. package/dist/core/frameworkSources.js.map +1 -1
  192. package/dist/core/graphCorpus.d.ts +1 -1
  193. package/dist/core/graphCorpus.js +9 -1
  194. package/dist/core/graphCorpus.js.map +1 -1
  195. package/dist/core/graphQuery.js.map +1 -1
  196. package/dist/core/hotspotAnalyzer.js +26 -6
  197. package/dist/core/hotspotAnalyzer.js.map +1 -1
  198. package/dist/core/impact.d.ts +1 -1
  199. package/dist/core/impact.js.map +1 -1
  200. package/dist/core/importGraph.js.map +1 -1
  201. package/dist/core/indexCache.js.map +1 -1
  202. package/dist/core/intent.d.ts +1 -1
  203. package/dist/core/intent.js +143 -46
  204. package/dist/core/intent.js.map +1 -1
  205. package/dist/core/intentRouter.js +5467 -445
  206. package/dist/core/intentRouter.js.map +1 -1
  207. package/dist/core/issueEngine.js +1 -1
  208. package/dist/core/issueEngine.js.map +1 -1
  209. package/dist/core/languageDetector.js +1 -9
  210. package/dist/core/languageDetector.js.map +1 -1
  211. package/dist/core/languages/cppAdapter.js +3 -1
  212. package/dist/core/languages/cppAdapter.js.map +1 -1
  213. package/dist/core/languages/cppExports.js +6 -1
  214. package/dist/core/languages/cppExports.js.map +1 -1
  215. package/dist/core/languages/cppFunctions.js +3 -1
  216. package/dist/core/languages/cppFunctions.js.map +1 -1
  217. package/dist/core/languages/csharpAdapter.js.map +1 -1
  218. package/dist/core/languages/csharpFunctions.js +3 -1
  219. package/dist/core/languages/csharpFunctions.js.map +1 -1
  220. package/dist/core/languages/csharpImports.js +2 -1
  221. package/dist/core/languages/csharpImports.js.map +1 -1
  222. package/dist/core/languages/goAdapter.js.map +1 -1
  223. package/dist/core/languages/goExports.js.map +1 -1
  224. package/dist/core/languages/goFunctions.js +9 -3
  225. package/dist/core/languages/goFunctions.js.map +1 -1
  226. package/dist/core/languages/javaAdapter.js +1 -2
  227. package/dist/core/languages/javaAdapter.js.map +1 -1
  228. package/dist/core/languages/javaFunctions.js +6 -2
  229. package/dist/core/languages/javaFunctions.js.map +1 -1
  230. package/dist/core/languages/javascriptAdapter.js +43 -8
  231. package/dist/core/languages/javascriptAdapter.js.map +1 -1
  232. package/dist/core/languages/kotlinAdapter.js +5 -2
  233. package/dist/core/languages/kotlinAdapter.js.map +1 -1
  234. package/dist/core/languages/kotlinFunctions.js +5 -6
  235. package/dist/core/languages/kotlinFunctions.js.map +1 -1
  236. package/dist/core/languages/kotlinImports.js +3 -1
  237. package/dist/core/languages/kotlinImports.js.map +1 -1
  238. package/dist/core/languages/kotlinManifests.js +7 -1
  239. package/dist/core/languages/kotlinManifests.js.map +1 -1
  240. package/dist/core/languages/phpAdapter.js +4 -1
  241. package/dist/core/languages/phpAdapter.js.map +1 -1
  242. package/dist/core/languages/phpExports.js.map +1 -1
  243. package/dist/core/languages/phpFunctions.js +18 -6
  244. package/dist/core/languages/phpFunctions.js.map +1 -1
  245. package/dist/core/languages/phpManifests.js.map +1 -1
  246. package/dist/core/languages/pythonAdapter.js.map +1 -1
  247. package/dist/core/languages/pythonFunctions.js +9 -3
  248. package/dist/core/languages/pythonFunctions.js.map +1 -1
  249. package/dist/core/languages/pythonManifests.js.map +1 -1
  250. package/dist/core/languages/rubyAdapter.js.map +1 -1
  251. package/dist/core/languages/rubyFunctions.js +6 -2
  252. package/dist/core/languages/rubyFunctions.js.map +1 -1
  253. package/dist/core/languages/rustAdapter.js.map +1 -1
  254. package/dist/core/languages/rustFunctions.js +6 -2
  255. package/dist/core/languages/rustFunctions.js.map +1 -1
  256. package/dist/core/languages/swiftAdapter.js +3 -1
  257. package/dist/core/languages/swiftAdapter.js.map +1 -1
  258. package/dist/core/languages/swiftCyclomatic.js.map +1 -1
  259. package/dist/core/languages/swiftFunctions.js +3 -1
  260. package/dist/core/languages/swiftFunctions.js.map +1 -1
  261. package/dist/core/languages/swiftImports.js.map +1 -1
  262. package/dist/core/mergeRisk.js +5 -1
  263. package/dist/core/mergeRisk.js.map +1 -1
  264. package/dist/core/missionOutcome.d.ts +1 -1
  265. package/dist/core/missionOutcome.js +9 -4
  266. package/dist/core/missionOutcome.js.map +1 -1
  267. package/dist/core/missionProof.d.ts +1 -1
  268. package/dist/core/missionProof.js +8 -6
  269. package/dist/core/missionProof.js.map +1 -1
  270. package/dist/core/missionProofBaseline.d.ts +1 -1
  271. package/dist/core/missionProofBaseline.js +8 -2
  272. package/dist/core/missionProofBaseline.js.map +1 -1
  273. package/dist/core/missionProofMarkdown.d.ts +1 -1
  274. package/dist/core/missionProofMarkdown.js +4 -1
  275. package/dist/core/missionProofMarkdown.js.map +1 -1
  276. package/dist/core/missionProofSummary.d.ts +1 -1
  277. package/dist/core/monorepo.d.ts +1 -1
  278. package/dist/core/monorepo.js +4 -2
  279. package/dist/core/monorepo.js.map +1 -1
  280. package/dist/core/onboarding.d.ts +2 -1
  281. package/dist/core/onboarding.js.map +1 -1
  282. package/dist/core/outdatedDetector.js +5 -1
  283. package/dist/core/outdatedDetector.js.map +1 -1
  284. package/dist/core/ownership.js +3 -1
  285. package/dist/core/ownership.js.map +1 -1
  286. package/dist/core/pathClassifiers.js.map +1 -1
  287. package/dist/core/pluginDx.js +2 -1
  288. package/dist/core/pluginDx.js.map +1 -1
  289. package/dist/core/pluginTrust.js +1 -3
  290. package/dist/core/pluginTrust.js.map +1 -1
  291. package/dist/core/plugins.js +5 -5
  292. package/dist/core/plugins.js.map +1 -1
  293. package/dist/core/prDiff.d.ts +1 -2
  294. package/dist/core/prDiff.js +5 -1
  295. package/dist/core/prDiff.js.map +1 -1
  296. package/dist/core/preflight.js +15 -6
  297. package/dist/core/preflight.js.map +1 -1
  298. package/dist/core/privacy.js.map +1 -1
  299. package/dist/core/qualityScorecard.d.ts +1 -1
  300. package/dist/core/qualityScorecard.js +43 -11
  301. package/dist/core/qualityScorecard.js.map +1 -1
  302. package/dist/core/regressionPlan.js +25 -7
  303. package/dist/core/regressionPlan.js.map +1 -1
  304. package/dist/core/releaseEvidence.js +41 -17
  305. package/dist/core/releaseEvidence.js.map +1 -1
  306. package/dist/core/releaseTrain.js +66 -38
  307. package/dist/core/releaseTrain.js.map +1 -1
  308. package/dist/core/repositoryScanner.js +1 -3
  309. package/dist/core/repositoryScanner.js.map +1 -1
  310. package/dist/core/review.d.ts +1 -1
  311. package/dist/core/review.js +72 -10
  312. package/dist/core/review.js.map +1 -1
  313. package/dist/core/reviewDataflow.js +7 -1
  314. package/dist/core/reviewDataflow.js.map +1 -1
  315. package/dist/core/reviewPublicSurface.d.ts +13 -0
  316. package/dist/core/reviewPublicSurface.js +134 -0
  317. package/dist/core/reviewPublicSurface.js.map +1 -0
  318. package/dist/core/roadmapCatalog.js +122 -23
  319. package/dist/core/roadmapCatalog.js.map +1 -1
  320. package/dist/core/searchIndex.js +124 -17
  321. package/dist/core/searchIndex.js.map +1 -1
  322. package/dist/core/semanticGraph.js.map +1 -1
  323. package/dist/core/semanticSearch.js +20 -4
  324. package/dist/core/semanticSearch.js.map +1 -1
  325. package/dist/core/session.js +1 -2
  326. package/dist/core/session.js.map +1 -1
  327. package/dist/core/sessionResources.js +6 -2
  328. package/dist/core/sessionResources.js.map +1 -1
  329. package/dist/core/start.d.ts +3 -9
  330. package/dist/core/start.js +22 -3231
  331. package/dist/core/start.js.map +1 -1
  332. package/dist/core/startAdoptionLoop.d.ts +2 -0
  333. package/dist/core/startAdoptionLoop.js +41 -0
  334. package/dist/core/startAdoptionLoop.js.map +1 -0
  335. package/dist/core/startEvidence.d.ts +5 -0
  336. package/dist/core/startEvidence.js +62 -0
  337. package/dist/core/startEvidence.js.map +1 -0
  338. package/dist/core/startExecutionPlan.d.ts +16 -0
  339. package/dist/core/startExecutionPlan.js +185 -0
  340. package/dist/core/startExecutionPlan.js.map +1 -0
  341. package/dist/core/startHarness.d.ts +3 -0
  342. package/dist/core/startHarness.js +47 -0
  343. package/dist/core/startHarness.js.map +1 -0
  344. package/dist/core/startIntentTargets.d.ts +24 -0
  345. package/dist/core/startIntentTargets.js +1106 -0
  346. package/dist/core/startIntentTargets.js.map +1 -0
  347. package/dist/core/startMissionControl.d.ts +16 -0
  348. package/dist/core/startMissionControl.js +145 -0
  349. package/dist/core/startMissionControl.js.map +1 -0
  350. package/dist/core/startMissionPolicy.d.ts +19 -0
  351. package/dist/core/startMissionPolicy.js +246 -0
  352. package/dist/core/startMissionPolicy.js.map +1 -0
  353. package/dist/core/startMode.d.ts +11 -0
  354. package/dist/core/startMode.js +139 -0
  355. package/dist/core/startMode.js.map +1 -0
  356. package/dist/core/startOptions.d.ts +18 -0
  357. package/dist/core/startOptions.js +29 -0
  358. package/dist/core/startOptions.js.map +1 -0
  359. package/dist/core/startResume.d.ts +7 -0
  360. package/dist/core/startResume.js +468 -0
  361. package/dist/core/startResume.js.map +1 -0
  362. package/dist/core/startReviewGate.d.ts +11 -0
  363. package/dist/core/startReviewGate.js +200 -0
  364. package/dist/core/startReviewGate.js.map +1 -0
  365. package/dist/core/startRouteActions.d.ts +7 -0
  366. package/dist/core/startRouteActions.js +497 -0
  367. package/dist/core/startRouteActions.js.map +1 -0
  368. package/dist/core/startRunbook.d.ts +24 -0
  369. package/dist/core/startRunbook.js +271 -0
  370. package/dist/core/startRunbook.js.map +1 -0
  371. package/dist/core/startSuccessCriteria.d.ts +14 -0
  372. package/dist/core/startSuccessCriteria.js +497 -0
  373. package/dist/core/startSuccessCriteria.js.map +1 -0
  374. package/dist/core/taint.js +12 -3
  375. package/dist/core/taint.js.map +1 -1
  376. package/dist/core/telemetry.js +19 -5
  377. package/dist/core/telemetry.js.map +1 -1
  378. package/dist/core/trial.d.ts +1 -1
  379. package/dist/core/trial.js +15 -6
  380. package/dist/core/trial.js.map +1 -1
  381. package/dist/core/understand.d.ts +1 -1
  382. package/dist/core/understand.js +165 -51
  383. package/dist/core/understand.js.map +1 -1
  384. package/dist/core/upgradePreview.js +1 -1
  385. package/dist/core/upgradePreview.js.map +1 -1
  386. package/dist/core/watcher.js +18 -3
  387. package/dist/core/watcher.js.map +1 -1
  388. package/dist/core/workplan.js +87 -17
  389. package/dist/core/workplan.js.map +1 -1
  390. package/dist/core/workspace.js.map +1 -1
  391. package/dist/index.d.ts +9 -9
  392. package/dist/index.js +7 -7
  393. package/dist/index.js.map +1 -1
  394. package/dist/mcp/pagination.js.map +1 -1
  395. package/dist/mcp/prompts.js +28 -20
  396. package/dist/mcp/prompts.js.map +1 -1
  397. package/dist/mcp/server.js +6 -74
  398. package/dist/mcp/server.js.map +1 -1
  399. package/dist/mcp/serverPayload.d.ts +13 -0
  400. package/dist/mcp/serverPayload.js +61 -0
  401. package/dist/mcp/serverPayload.js.map +1 -0
  402. package/dist/mcp/tokenBudget.js.map +1 -1
  403. package/dist/mcp/tools/_shared.js.map +1 -1
  404. package/dist/mcp/tools/agentBrief.js +7 -1
  405. package/dist/mcp/tools/agentBrief.js.map +1 -1
  406. package/dist/mcp/tools/applyFix.js +1 -1
  407. package/dist/mcp/tools/applyFix.js.map +1 -1
  408. package/dist/mcp/tools/audit.js.map +1 -1
  409. package/dist/mcp/tools/bugHunt.js +2 -2
  410. package/dist/mcp/tools/bugHunt.js.map +1 -1
  411. package/dist/mcp/tools/claim.js +8 -3
  412. package/dist/mcp/tools/claim.js.map +1 -1
  413. package/dist/mcp/tools/collision.js +3 -1
  414. package/dist/mcp/tools/collision.js.map +1 -1
  415. package/dist/mcp/tools/coordinate.js.map +1 -1
  416. package/dist/mcp/tools/coordinateWatch.js +5 -2
  417. package/dist/mcp/tools/coordinateWatch.js.map +1 -1
  418. package/dist/mcp/tools/costSummary.js.map +1 -1
  419. package/dist/mcp/tools/coupling.js.map +1 -1
  420. package/dist/mcp/tools/coverage.js.map +1 -1
  421. package/dist/mcp/tools/dataflow.js.map +1 -1
  422. package/dist/mcp/tools/dependencies.js +4 -1
  423. package/dist/mcp/tools/dependencies.js.map +1 -1
  424. package/dist/mcp/tools/doctor.js.map +1 -1
  425. package/dist/mcp/tools/explainIssue.js +4 -1
  426. package/dist/mcp/tools/explainIssue.js.map +1 -1
  427. package/dist/mcp/tools/fixSuggest.js +5 -2
  428. package/dist/mcp/tools/fixSuggest.js.map +1 -1
  429. package/dist/mcp/tools/hotspots.js +4 -1
  430. package/dist/mcp/tools/hotspots.js.map +1 -1
  431. package/dist/mcp/tools/impact.js +10 -3
  432. package/dist/mcp/tools/impact.js.map +1 -1
  433. package/dist/mcp/tools/mergeRisk.js.map +1 -1
  434. package/dist/mcp/tools/plugin.js +6 -1
  435. package/dist/mcp/tools/plugin.js.map +1 -1
  436. package/dist/mcp/tools/prDiff.js.map +1 -1
  437. package/dist/mcp/tools/preflight.js +1 -5
  438. package/dist/mcp/tools/preflight.js.map +1 -1
  439. package/dist/mcp/tools/review.js.map +1 -1
  440. package/dist/mcp/tools/reviewWatch.d.ts +1 -1
  441. package/dist/mcp/tools/reviewWatch.js +9 -9
  442. package/dist/mcp/tools/reviewWatch.js.map +1 -1
  443. package/dist/mcp/tools/route.js +1 -1
  444. package/dist/mcp/tools/route.js.map +1 -1
  445. package/dist/mcp/tools/search.js.map +1 -1
  446. package/dist/mcp/tools/semanticGraph.js +8 -2
  447. package/dist/mcp/tools/semanticGraph.js.map +1 -1
  448. package/dist/mcp/tools/start.js.map +1 -1
  449. package/dist/mcp/tools/structure.js +7 -1
  450. package/dist/mcp/tools/structure.js.map +1 -1
  451. package/dist/mcp/tools/understand.js.map +1 -1
  452. package/dist/mcp/tools/workspaceGraph.js +10 -1
  453. package/dist/mcp/tools/workspaceGraph.js.map +1 -1
  454. package/dist/mcp/tools.js +3 -1
  455. package/dist/mcp/tools.js.map +1 -1
  456. package/dist/projscan-sbom.cdx.json +2136 -904
  457. package/dist/reporters/consoleAnalysisReporter.d.ts +2 -0
  458. package/dist/reporters/consoleAnalysisReporter.js +89 -0
  459. package/dist/reporters/consoleAnalysisReporter.js.map +1 -0
  460. package/dist/reporters/consoleArchitectureReporter.d.ts +3 -0
  461. package/dist/reporters/consoleArchitectureReporter.js +47 -0
  462. package/dist/reporters/consoleArchitectureReporter.js.map +1 -0
  463. package/dist/reporters/consoleAuditReporter.d.ts +2 -0
  464. package/dist/reporters/consoleAuditReporter.js +46 -0
  465. package/dist/reporters/consoleAuditReporter.js.map +1 -0
  466. package/dist/reporters/consoleCiReporter.d.ts +2 -0
  467. package/dist/reporters/consoleCiReporter.js +27 -0
  468. package/dist/reporters/consoleCiReporter.js.map +1 -0
  469. package/dist/reporters/consoleCouplingReporter.d.ts +2 -0
  470. package/dist/reporters/consoleCouplingReporter.js +53 -0
  471. package/dist/reporters/consoleCouplingReporter.js.map +1 -0
  472. package/dist/reporters/consoleCoverageReporter.d.ts +2 -0
  473. package/dist/reporters/consoleCoverageReporter.js +62 -0
  474. package/dist/reporters/consoleCoverageReporter.js.map +1 -0
  475. package/dist/reporters/consoleDependencyReporter.d.ts +2 -0
  476. package/dist/reporters/consoleDependencyReporter.js +64 -0
  477. package/dist/reporters/consoleDependencyReporter.js.map +1 -0
  478. package/dist/reporters/consoleDiffReporter.d.ts +2 -0
  479. package/dist/reporters/consoleDiffReporter.js +80 -0
  480. package/dist/reporters/consoleDiffReporter.js.map +1 -0
  481. package/dist/reporters/consoleExplanationReporter.d.ts +2 -0
  482. package/dist/reporters/consoleExplanationReporter.js +33 -0
  483. package/dist/reporters/consoleExplanationReporter.js.map +1 -0
  484. package/dist/reporters/consoleFileReporter.d.ts +2 -0
  485. package/dist/reporters/consoleFileReporter.js +133 -0
  486. package/dist/reporters/consoleFileReporter.js.map +1 -0
  487. package/dist/reporters/consoleFixGuidanceReporter.d.ts +8 -0
  488. package/dist/reporters/consoleFixGuidanceReporter.js +135 -0
  489. package/dist/reporters/consoleFixGuidanceReporter.js.map +1 -0
  490. package/dist/reporters/consoleHealthReporter.d.ts +13 -0
  491. package/dist/reporters/consoleHealthReporter.js +111 -0
  492. package/dist/reporters/consoleHealthReporter.js.map +1 -0
  493. package/dist/reporters/consoleHotspotReporter.d.ts +2 -0
  494. package/dist/reporters/consoleHotspotReporter.js +68 -0
  495. package/dist/reporters/consoleHotspotReporter.js.map +1 -0
  496. package/dist/reporters/consoleImpactReporter.d.ts +2 -0
  497. package/dist/reporters/consoleImpactReporter.js +65 -0
  498. package/dist/reporters/consoleImpactReporter.js.map +1 -0
  499. package/dist/reporters/consoleOutdatedReporter.d.ts +2 -0
  500. package/dist/reporters/consoleOutdatedReporter.js +54 -0
  501. package/dist/reporters/consoleOutdatedReporter.js.map +1 -0
  502. package/dist/reporters/consolePrDiffReporter.d.ts +2 -0
  503. package/dist/reporters/consolePrDiffReporter.js +75 -0
  504. package/dist/reporters/consolePrDiffReporter.js.map +1 -0
  505. package/dist/reporters/consoleReporter.d.ts +21 -38
  506. package/dist/reporters/consoleReporter.js +19 -1000
  507. package/dist/reporters/consoleReporter.js.map +1 -1
  508. package/dist/reporters/consoleReviewReporter.d.ts +2 -0
  509. package/dist/reporters/consoleReviewReporter.js +101 -0
  510. package/dist/reporters/consoleReviewReporter.js.map +1 -0
  511. package/dist/reporters/consoleUpgradeReporter.d.ts +2 -0
  512. package/dist/reporters/consoleUpgradeReporter.js +67 -0
  513. package/dist/reporters/consoleUpgradeReporter.js.map +1 -0
  514. package/dist/reporters/consoleWorkspaceReporter.d.ts +2 -0
  515. package/dist/reporters/consoleWorkspaceReporter.js +24 -0
  516. package/dist/reporters/consoleWorkspaceReporter.js.map +1 -0
  517. package/dist/reporters/htmlReporter.d.ts +2 -1
  518. package/dist/reporters/htmlReporter.js +9 -3
  519. package/dist/reporters/htmlReporter.js.map +1 -1
  520. package/dist/reporters/jsonReporter.d.ts +2 -1
  521. package/dist/reporters/jsonReporter.js.map +1 -1
  522. package/dist/reporters/markdownAnalysisReporter.d.ts +2 -0
  523. package/dist/reporters/markdownAnalysisReporter.js +40 -0
  524. package/dist/reporters/markdownAnalysisReporter.js.map +1 -0
  525. package/dist/reporters/markdownAuditReporter.d.ts +2 -0
  526. package/dist/reporters/markdownAuditReporter.js +27 -0
  527. package/dist/reporters/markdownAuditReporter.js.map +1 -0
  528. package/dist/reporters/markdownDependencyReporter.d.ts +2 -0
  529. package/dist/reporters/markdownDependencyReporter.js +33 -0
  530. package/dist/reporters/markdownDependencyReporter.js.map +1 -0
  531. package/dist/reporters/markdownDiffReporter.d.ts +2 -0
  532. package/dist/reporters/markdownDiffReporter.js +65 -0
  533. package/dist/reporters/markdownDiffReporter.js.map +1 -0
  534. package/dist/reporters/markdownFileReporter.d.ts +2 -0
  535. package/dist/reporters/markdownFileReporter.js +92 -0
  536. package/dist/reporters/markdownFileReporter.js.map +1 -0
  537. package/dist/reporters/markdownFixGuidanceReporter.d.ts +8 -0
  538. package/dist/reporters/markdownFixGuidanceReporter.js +95 -0
  539. package/dist/reporters/markdownFixGuidanceReporter.js.map +1 -0
  540. package/dist/reporters/markdownImpactReporter.d.ts +2 -0
  541. package/dist/reporters/markdownImpactReporter.js +52 -0
  542. package/dist/reporters/markdownImpactReporter.js.map +1 -0
  543. package/dist/reporters/markdownReporter.d.ts +10 -16
  544. package/dist/reporters/markdownReporter.js +9 -452
  545. package/dist/reporters/markdownReporter.js.map +1 -1
  546. package/dist/reporters/markdownReviewReporter.d.ts +2 -0
  547. package/dist/reporters/markdownReviewReporter.js +84 -0
  548. package/dist/reporters/markdownReviewReporter.js.map +1 -0
  549. package/dist/reporters/markdownUpgradeReporter.d.ts +2 -0
  550. package/dist/reporters/markdownUpgradeReporter.js +47 -0
  551. package/dist/reporters/markdownUpgradeReporter.js.map +1 -0
  552. package/dist/reporters/sarifReporter.js.map +1 -1
  553. package/dist/tool-manifest.json +4 -4
  554. package/dist/types/agentBrief.d.ts +48 -0
  555. package/dist/types/agentBrief.js +2 -0
  556. package/dist/types/agentBrief.js.map +1 -0
  557. package/dist/types/analysis.d.ts +32 -0
  558. package/dist/types/analysis.js +2 -0
  559. package/dist/types/analysis.js.map +1 -0
  560. package/dist/types/baseline.d.ts +59 -0
  561. package/dist/types/baseline.js +2 -0
  562. package/dist/types/baseline.js.map +1 -0
  563. package/dist/types/bugHunt.d.ts +41 -0
  564. package/dist/types/bugHunt.js +2 -0
  565. package/dist/types/bugHunt.js.map +1 -0
  566. package/dist/types/common.d.ts +34 -0
  567. package/dist/types/common.js +2 -0
  568. package/dist/types/common.js.map +1 -0
  569. package/dist/types/config.d.ts +56 -0
  570. package/dist/types/config.js +2 -0
  571. package/dist/types/config.js.map +1 -0
  572. package/dist/types/coupling.d.ts +40 -0
  573. package/dist/types/coupling.js +2 -0
  574. package/dist/types/coupling.js.map +1 -0
  575. package/dist/types/coverage.d.ts +32 -0
  576. package/dist/types/coverage.js +2 -0
  577. package/dist/types/coverage.js.map +1 -0
  578. package/dist/types/dependencyHealth.d.ts +61 -0
  579. package/dist/types/dependencyHealth.js +2 -0
  580. package/dist/types/dependencyHealth.js.map +1 -0
  581. package/dist/types/dogfood.d.ts +185 -0
  582. package/dist/types/dogfood.js +2 -0
  583. package/dist/types/dogfood.js.map +1 -0
  584. package/dist/types/evidencePack.d.ts +76 -0
  585. package/dist/types/evidencePack.js +2 -0
  586. package/dist/types/evidencePack.js.map +1 -0
  587. package/dist/types/fixes.d.ts +77 -0
  588. package/dist/types/fixes.js +2 -0
  589. package/dist/types/fixes.js.map +1 -0
  590. package/dist/types/graph.d.ts +80 -0
  591. package/dist/types/graph.js +2 -0
  592. package/dist/types/graph.js.map +1 -0
  593. package/dist/types/graphCorpus.d.ts +16 -0
  594. package/dist/types/graphCorpus.js +2 -0
  595. package/dist/types/graphCorpus.js.map +1 -0
  596. package/dist/types/hotspots.d.ts +42 -0
  597. package/dist/types/hotspots.js +2 -0
  598. package/dist/types/hotspots.js.map +1 -0
  599. package/dist/types/impact.d.ts +62 -0
  600. package/dist/types/impact.js +2 -0
  601. package/dist/types/impact.js.map +1 -0
  602. package/dist/types/inspection.d.ts +47 -0
  603. package/dist/types/inspection.js +2 -0
  604. package/dist/types/inspection.js.map +1 -0
  605. package/dist/types/mcp.d.ts +39 -0
  606. package/dist/types/mcp.js +2 -0
  607. package/dist/types/mcp.js.map +1 -0
  608. package/dist/types/pluginDx.d.ts +42 -0
  609. package/dist/types/pluginDx.js +2 -0
  610. package/dist/types/pluginDx.js.map +1 -0
  611. package/dist/types/prDiff.d.ts +41 -0
  612. package/dist/types/prDiff.js +2 -0
  613. package/dist/types/prDiff.js.map +1 -0
  614. package/dist/types/preflight.d.ts +122 -0
  615. package/dist/types/preflight.js +2 -0
  616. package/dist/types/preflight.js.map +1 -0
  617. package/dist/types/qualityScorecard.d.ts +34 -0
  618. package/dist/types/qualityScorecard.js +2 -0
  619. package/dist/types/qualityScorecard.js.map +1 -0
  620. package/dist/types/regressionPlan.d.ts +32 -0
  621. package/dist/types/regressionPlan.js +2 -0
  622. package/dist/types/regressionPlan.js.map +1 -0
  623. package/dist/types/releaseTrain.d.ts +37 -0
  624. package/dist/types/releaseTrain.js +2 -0
  625. package/dist/types/releaseTrain.js.map +1 -0
  626. package/dist/types/review.d.ts +203 -0
  627. package/dist/types/review.js +2 -0
  628. package/dist/types/review.js.map +1 -0
  629. package/dist/types/reviewContract.d.ts +9 -0
  630. package/dist/types/reviewContract.js +2 -0
  631. package/dist/types/reviewContract.js.map +1 -0
  632. package/dist/types/scanning.d.ts +111 -0
  633. package/dist/types/scanning.js +2 -0
  634. package/dist/types/scanning.js.map +1 -0
  635. package/dist/types/session.d.ts +42 -0
  636. package/dist/types/session.js +2 -0
  637. package/dist/types/session.js.map +1 -0
  638. package/dist/types/start.d.ts +437 -0
  639. package/dist/types/start.js +2 -0
  640. package/dist/types/start.js.map +1 -0
  641. package/dist/types/trial.d.ts +27 -0
  642. package/dist/types/trial.js +2 -0
  643. package/dist/types/trial.js.map +1 -0
  644. package/dist/types/understand.d.ts +153 -0
  645. package/dist/types/understand.js +2 -0
  646. package/dist/types/understand.js.map +1 -0
  647. package/dist/types/workplan.d.ts +67 -0
  648. package/dist/types/workplan.js +2 -0
  649. package/dist/types/workplan.js.map +1 -0
  650. package/dist/types/workplanHandoff.d.ts +11 -0
  651. package/dist/types/workplanHandoff.js +2 -0
  652. package/dist/types/workplanHandoff.js.map +1 -0
  653. package/dist/types/workspace.d.ts +18 -0
  654. package/dist/types/workspace.js +2 -0
  655. package/dist/types/workspace.js.map +1 -0
  656. package/dist/types.d.ts +34 -2348
  657. package/dist/types.js +0 -1
  658. package/dist/types.js.map +1 -1
  659. package/dist/utils/banner.js +15 -6
  660. package/dist/utils/banner.js.map +1 -1
  661. package/dist/utils/baseline.js +11 -9
  662. package/dist/utils/baseline.js.map +1 -1
  663. package/dist/utils/changedFiles.js +1 -1
  664. package/dist/utils/changedFiles.js.map +1 -1
  665. package/dist/utils/config.d.ts +2 -1
  666. package/dist/utils/config.js.map +1 -1
  667. package/dist/utils/formatSupport.d.ts +1 -1
  668. package/dist/utils/formatSupport.js +7 -1
  669. package/dist/utils/formatSupport.js.map +1 -1
  670. package/dist/utils/packageJsonLocator.js.map +1 -1
  671. package/docs/GUIDE.md +186 -146
  672. package/docs/PLUGIN-GALLERY.md +9 -1
  673. package/docs/ROADMAP.md +69 -68
  674. package/docs/demos/projscan-4-1-demo.html +46 -79
  675. package/docs/examples/plugins/graph-context.mjs +1 -2
  676. package/docs/examples/plugins/security-sensitive-files.mjs +2 -1
  677. package/package.json +10 -5
package/README.md CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  ## Why?
21
21
 
22
- AI coding agents are becoming the primary interface to code. When you ask an agent *"which files implement auth?"* or *"what breaks if I bump React from 18 to 19?"*, it needs structured repo context, not raw grep output.
22
+ AI coding agents are becoming the primary interface to code. When you ask an agent _"which files implement auth?"_ or _"what breaks if I bump React from 18 to 19?"_, it needs structured repo context, not raw grep output.
23
23
 
24
24
  **projscan is code intelligence built for agents.** MCP clients get a fast, AST-backed, context-budget-aware view of your codebase: cited repo understanding, semantic graph, dataflow risks, review verdicts, hotspots, ownership, preflight gates, fix prompts, impact analysis, and durable session context. Everything is local and offline.
25
25
 
@@ -35,16 +35,16 @@ npx projscan
35
35
 
36
36
  <img src="docs/projscan-mission-control.gif" alt="projscan Mission Control turning a plain-language goal into shortcut commands, proof commands, and review gates" width="760">
37
37
 
38
- ## What's New in 4.3.1
38
+ ## What's New in 4.4.0
39
39
 
40
- 4.3.1 polishes the Mission Control loop. Agents can save a mission, run proof, resume from the saved proof state, report whether the work is ready for version review, and share the workflow with reproducible terminal demos.
40
+ 4.4.0 turns the Mission Control loop into a release-ready agent harness. Agents get repo-local AgentLoopKit task contracts, AgentFlight verification, explicit personas for decisions, clearer release sign-off queues, and tighter public-surface checks.
41
41
 
42
- - **Mission outcome resume.** `projscan start --mission <dir>` reads a saved Mission Control bundle, includes the latest proof status from `proof-logs/summary.json`, and adds a resume prompt that starts from real pass/fail evidence.
43
- - **Proof-to-review summary.** The start report now includes `missionControl.outcome`: what changed, what remains, failed command details, reviewer decisions, reruns, and a version-candidate recommendation.
44
- - **Local adoption proof.** `projscan mission-proof --mission <dir> --format markdown` prints a paste-ready proof report. Use `--format json` for scripts. Both formats can compare one or more mission bundles with an optional manual baseline to estimate reruns avoided, failed gates caught, and developer time saved.
45
- - **Mission Proof triage.** `--latest`, `--all`, `--list`, `--needs-attention`, `--mission-status`, `--summary`, `--require-passed`, and `--write` turn saved mission bundles into local release-review artifacts.
46
- - **Reproducible demo media.** `npm run docs:demos` renders checked-in VHS demos for Mission Control and Mission Proof; `npm run docs:assets` refreshes screenshots and GIFs together.
47
- - **Clear public language count.** projscan now describes language support as 11 AST adapters covering 12 named languages, matching README, website prompt, and MCP Registry copy.
42
+ - **Agent harness proof.** `projscan start` now surfaces `npm exec agentloop -- status` and `npm exec agentflight -- verify` when this repo's harness files exist, so handoffs include the local task and verification loop without executing it.
43
+ - **Release-owner bug pass.** `projscan bug-hunt`, release-train, evidence-pack, and review wording now distinguish concrete fix targets from manual release sign-off actions, with review-useful files ranked first.
44
+ - **Product planning routes.** Broad prompts like `what should we build next?` and `what should we improve next?` now route to bug-hunt/action planning instead of generic orientation.
45
+ - **Public surface discipline.** Public type contracts move into focused modules with dedicated typecheck coverage, while review contract detection follows package entrypoints and re-exports instead of treating internal helper exports as public API.
46
+ - **Audit-clean dev chain.** The release gate now clears npm audit after moving the dev test infrastructure to Vite 8 and refreshing protobuf transitive packages.
47
+ - **Persona-backed decisions.** `docs/PERSONAS.md` records the team and user personas used for agent prioritization, review safety, and adoption tradeoffs.
48
48
 
49
49
  <img src="docs/projscan-proof-router.png" alt="projscan intent router and proof workflow showing impact routing, setup discovery, dependency intelligence, and stable-surface guardrails" width="760">
50
50
 
@@ -64,6 +64,8 @@ npm run docs:demos
64
64
 
65
65
  Projscan also returns a Markdown runbook, a task card, a review gate, and a resume object. A resumed agent gets the current command, the MCP tool call, placeholder bindings, follow-up templates, the ordered checklist, and the remaining proof queue without walking the full plan. MCP and JSON clients can read `missionControl.taskCard.markdown`, the same Markdown printed by `--task-card` and written to `task-card.md`. They can also read `missionControl.reviewGate.markdown` to know when to stop, report proof, and wait for approval before starting another slice, release, publish, or deploy. `missionControl.reviewGate.worktree` adds the current worktree evidence summary and visible changed files, so review handoffs keep the state projscan computed for the start report. `missionControl.reviewGate.proof` carries the remaining proof queue with commands, MCP calls, and structured proof items for review-only handoffs. `missionControl.reviewGate.doneWhen` mirrors the mission success criteria, so review-only handoffs show the approval target beside proof and worktree evidence. `missionControl.reviewGate.policy` lists the actions blocked until explicit reviewer approval: another slice, release, publish, deploy, push, merge, and version bump. `--review-gate-json` and saved `review-gate.json` expose the full review packet without requiring callers to parse the full handoff. `--review-policy` and saved `review-policy.json` expose only the approval boundary. `missionControl.reviewGate.decisions` gives the reviewer the allowed next choices and copyable reply text: approve another slice, request changes, or review a version candidate without publishing; the same menu appears in default console output, saved bundle README files, task cards, handoff prompts, and runbook Markdown. `--review-replies` and saved `review-replies.txt` print only those reply lines when a reviewer wants the smallest approval surface. The complete handoff object carries the same gate at `missionControl.handoff.reviewGate`, so `--handoff-json` and saved `handoff.json` include the stop boundary.
66
66
 
67
+ Repo-local agent harnesses are surfaced in the same proof queue. When `AGENTLOOP.md` or `agentloop.config.json` exists, `projscan start` adds `npm exec agentloop -- status` as a coordination/proof command; when `.agentflight/config.json` exists, it adds `npm exec agentflight -- verify`. These commands are reported for copy/paste, saved mission bundles, and JSON clients; `projscan start` does not execute them.
68
+
67
69
  Use the index when you want the menu, or call one shortcut directly:
68
70
 
69
71
  ```bash
@@ -170,7 +172,7 @@ Proof Queue
170
172
 
171
173
  Runbook handoff example:
172
174
 
173
- ```text
175
+ ````text
174
176
  Agent Runbook
175
177
  # Mission Runbook
176
178
  Intent: what breaks if I rename the auth token loader
@@ -187,37 +189,41 @@ Current phase: ready_now
187
189
  Run now:
188
190
  ```sh
189
191
  projscan search "auth token loader" --format json
190
- ```
192
+ ````
193
+
191
194
  MCP call: projscan_search {"query":"auth token loader"}
192
195
  After running, resolve:
196
+
193
197
  - input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
194
198
  - input-2 (file): Replace <file-from-search> with a file path returned by the search step.
195
- Template inputs:
199
+ Template inputs:
196
200
  - <symbol-from-search> -> input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
197
201
  - <file-from-search> -> input-2 (file): Replace <file-from-search> with a file path returned by the search step.
198
- Resume checklist:
202
+ Resume checklist:
199
203
  - [ready] run_current ready-1: projscan search "auth token loader" --format json (MCP: projscan_search {"query":"auth token loader"})
200
204
  - [blocked] resolve_input input-1: <symbol-from-search> -> Replace <symbol-from-search> with an exported symbol returned by the search step.
201
205
  - [ready] run_proof proof-2: projscan preflight --mode before_edit --format json (MCP: projscan_preflight {"mode":"before_edit"})
202
206
  - [pending] confirm_done criterion-1: An exact symbol or file path is selected from search results before impact analysis continues.
203
- Proof queue:
207
+ Proof queue:
204
208
  - proof-2: `projscan preflight --mode before_edit --format json` (MCP: projscan_preflight {"mode":"before_edit"})
205
209
  - proof-3: `projscan understand --view verify --format json` (MCP: projscan_understand {"view":"verify"})
206
- Remaining proof:
210
+ Remaining proof:
207
211
  - `projscan preflight --mode before_edit --format json`
208
212
  - `projscan understand --view verify --format json`
209
- MCP proof calls:
213
+ MCP proof calls:
210
214
  - proof-2: projscan_preflight {"mode":"before_edit"}
211
215
  - proof-3: projscan_understand {"view":"verify"}
212
- Then use:
216
+ Then use:
213
217
  - follow-up-1 (If search returns an exported symbol): projscan impact --symbol <symbol-from-search> --format json
214
218
  - follow-up-2 (If search returns a file path): projscan impact <file-from-search> --format json
215
- Prompt: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file).
219
+ Prompt: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file).
216
220
 
217
221
  ## Handoff Prompt
222
+
218
223
  Resume: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file). Done when: An exact symbol or file path is selected from search results before impact analysis continues. Needs input: symbol=<symbol-from-search>, file=<file-from-search>. Ready proof: Ready-to-run proof commands; placeholder follow-ups are excluded until Needs Input is resolved. projscan preflight --mode before_edit --format json && projscan understand --view verify --format json.
219
224
 
220
225
  ## Review Gate
226
+
221
227
  - [ ] Complete this task card and remaining proof.
222
228
  - [ ] Capture `git status --short`.
223
229
  - [ ] Capture `git diff --stat`.
@@ -226,17 +232,20 @@ Resume: Resume at ready-1 in ready_now: run `projscan search "auth token loader"
226
232
  Review the completed mission, proof output, and working-tree summary before approving another slice, release, publish, or deploy.
227
233
 
228
234
  ## Ready Commands
235
+
229
236
  - `projscan search "auth token loader" --format json`
230
237
 
231
238
  ## Blocked Inputs
239
+
232
240
  - symbol: Replace <symbol-from-search> with an exported symbol returned by the search step.
233
- ```
241
+
242
+ ````
234
243
 
235
244
  Run `projscan doctor` for a focused health check:
236
245
 
237
246
  ```bash
238
247
  npx projscan doctor
239
- ```
248
+ ````
240
249
 
241
250
  <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
242
251
 
@@ -478,6 +487,7 @@ projscan start --intent "what should an intern work on?" # Routes to bug-hunt pr
478
487
  projscan start --intent "what is a low risk improvement?" # Routes to bug-hunt prioritization
479
488
  projscan start --intent "pick a small safe task" # Routes to bug-hunt prioritization
480
489
  projscan start --intent "what should I do next?" # Routes to an ordered before-edit workplan
490
+ projscan start --intent "what should we build next?" # Routes to a bug-hunt product-planning workplan
481
491
  projscan start --intent "explain issue missing-test-framework" # Routes to deep issue context
482
492
  projscan start --intent "fix issue missing-test-framework" # Routes to a concrete fix suggestion
483
493
  projscan start --intent "is user input reaching SQL sinks?" # Routes to hardening dataflow analysis
@@ -591,58 +601,58 @@ The report includes file/symbol-backed `claims`, `readFirst` files, entrypoints,
591
601
 
592
602
  ## Commands
593
603
 
594
- | Command | Description |
595
- |---------|-------------|
596
- | `projscan analyze` | Full analysis - languages, frameworks, dependencies, issues |
597
- | `projscan route` | Map a plain-language goal to the best projscan tool with weighted confidence and matched keywords |
598
- | `projscan start` | First-60-seconds workflow orientation with setup diagnostics, Mission Control, top risks, and next commands. Add `--intent "<goal>"` to route a plain-language goal to route confidence, phased execution plan, ready actions, done criteria, and proof commands |
599
- | `projscan mission-proof` | Summarize saved Mission Control proof, reviewer decisions, reruns, failed gates, and optional manual-baseline comparison |
600
- | `projscan first-run` | First-run setup diagnostics plus the shared `firstTenMinutes` command path |
601
- | `projscan init mcp` | Ready-to-paste MCP client configs for popular agent clients |
602
- | `projscan mcp doctor` | Verify MCP setup and print paste-ready client config with checks |
603
- | `projscan init policy` | Team policy starter kits for frontend, platform, security, and monorepo teams |
604
- | `projscan init team` | Bootstrap policy, PR workflow, CODEOWNERS starter, baseline memory, start report, and first-PR onboarding checklist |
605
- | `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks |
606
- | `projscan recipes` | Agent workflow recipes for team bootstrap, PR automation, before edit, bug hunt, approval, handoff, and pre-merge |
607
- | `projscan workplan` | Agent execution plan - prioritized tasks with evidence, tools, verification, and handoff text |
608
- | `projscan bug-hunt` | Prioritized bug-hunt fix queue from doctor, preflight, and session evidence, with hotspot-only churn kept as a watchlist signal |
609
- | `projscan agent-brief` | Compact next-agent context packet with focus items, coordination hints, guardrails, repo context, and next actions |
610
- | `projscan quality-scorecard` | Dimensioned quality view with health, security, tests, maintainability, coordination, and top risks |
611
- | `projscan understand` | Cited repo map, runtime flows, public contracts, change readiness, verification tiers, unknowns, and next commands |
612
- | `projscan release-train` | Plan upcoming product lines with readiness evidence |
613
- | `projscan evidence-pack` | Assemble approval evidence from planning, bug-hunt, workplan, preflight, trust calibration, First Fix, owner routing, and baseline trend memory |
614
- | `projscan trial` | Produce one adoption-readiness report from onboarding, dogfood, feedback, trust signals, and website proof |
615
- | `projscan feedback` | Capture measured reviewer feedback: minutes saved, prevented bad edits, false positives, and repeat PR use |
616
- | `projscan privacy-check` | Verify the local trust boundary: telemetry, offline mode, scan root, .gitignore handling, ignored-file count, .env content scanning, and network-capable endpoints |
617
- | `projscan telemetry` | Explicit default-off telemetry controls: status, enable, disable, and explain |
618
- | `projscan dogfood` | Evaluate 1+ real repos for PR-comment readiness, repeat-use readiness, MCP readiness, and reviewer feedback prompts |
619
- | `projscan regression-plan` | Build a smoke, focused, or full regression matrix from product risk signals |
620
- | `projscan handoff` | Concise next-agent handoff from the current workplan |
621
- | `projscan doctor` | Health check - missing tooling, architecture smells, security and supply-chain risks |
622
- | `projscan preflight` | Agent safety gate - `proceed`, `caution`, or `block` with health, change, plugin, and supply-chain evidence |
623
- | `projscan hotspots` | Rank files by risk - churn × complexity × issues × ownership |
624
- | `projscan semantic-graph` | Stable v3 graph contract, plus targeted `--query importers/imports/exports/...` lookups |
625
- | `projscan dataflow` | Focused direct, propagated, and bridge source-to-sink dataflow risks |
626
- | `projscan search <query>` | **BM25-ranked search** - content + symbols + path, with excerpts |
627
- | `projscan file <path>` | Drill into a file - purpose, risk, ownership, related issues |
628
- | `projscan fix` | Auto-fix issues (ESLint, Prettier, Vitest, .editorconfig) |
629
- | `projscan ci` | CI health gate - SARIF output, `--changed-only` PR-diff mode, exits 1 if score below threshold |
630
- | `projscan diff` | Compare current health **and hotspot trends** against a baseline |
631
- | `projscan diagram` | ASCII architecture diagram of your project |
632
- | `projscan structure` | Directory tree with file counts |
633
- | `projscan dependencies` | Dependency analysis - counts, license summary, risks, recommendations |
634
- | `projscan outdated` | Declared-vs-installed drift check (offline) |
635
- | `projscan audit` | `npm audit`-powered vulnerability report - SARIF-ready for Code Scanning |
636
- | `projscan upgrade <pkg>` | Preview upgrade impact - local CHANGELOG + importer list, offline |
637
- | `projscan coverage` | **Coverage × hotspots - rank the scariest untested files** (`--changed-only` for diff mode) |
638
- | `projscan badge` | Generate a health score badge for your README |
639
- | `projscan init` | *(1.6)* Scaffold `.projscanrc.json` with sensible defaults |
640
- | `projscan install-hook` | *(1.6)* Install a `pre-commit` hook running `projscan ci --changed-only` |
641
- | `projscan workspace` | *(1.6)* Register sibling repos for cross-repo intelligence (`add` / `list` / `remove`) |
642
- | `projscan apply-fix <id>` | *(1.6)* Mechanically execute the safe fix templates with rollback (default dry-run) |
643
- | `projscan taint` | *(1.6)* Source-to-sink reachability over the call graph |
644
- | `projscan plugin` | Discover, scaffold, validate, and test local analyzer/reporter plugins |
645
- | `projscan mcp` | Run as an MCP server for AI coding agents (Claude Code, Codex, Cursor, Gemini, Windsurf, …) |
604
+ | Command | Description |
605
+ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
606
+ | `projscan analyze` | Full analysis - languages, frameworks, dependencies, issues |
607
+ | `projscan route` | Map a plain-language goal to the best projscan tool with weighted confidence and matched keywords |
608
+ | `projscan start` | First-60-seconds workflow orientation with setup diagnostics, Mission Control, top risks, and next commands. Add `--intent "<goal>"` to route a plain-language goal to route confidence, phased execution plan, ready actions, done criteria, and proof commands |
609
+ | `projscan mission-proof` | Summarize saved Mission Control proof, reviewer decisions, reruns, failed gates, and optional manual-baseline comparison |
610
+ | `projscan first-run` | First-run setup diagnostics plus the shared `firstTenMinutes` command path |
611
+ | `projscan init mcp` | Ready-to-paste MCP client configs for popular agent clients |
612
+ | `projscan mcp doctor` | Verify MCP setup and print paste-ready client config with checks |
613
+ | `projscan init policy` | Team policy starter kits for frontend, platform, security, and monorepo teams |
614
+ | `projscan init team` | Bootstrap policy, PR workflow, CODEOWNERS starter, baseline memory, start report, and first-PR onboarding checklist |
615
+ | `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks |
616
+ | `projscan recipes` | Agent workflow recipes for team bootstrap, PR automation, before edit, bug hunt, approval, handoff, and pre-merge |
617
+ | `projscan workplan` | Agent execution plan - prioritized tasks with evidence, tools, verification, and handoff text |
618
+ | `projscan bug-hunt` | Prioritized bug-hunt action queue from doctor, preflight, and session evidence, with hotspot-only churn kept as a watchlist signal |
619
+ | `projscan agent-brief` | Compact next-agent context packet with focus items, coordination hints, guardrails, repo context, and next actions |
620
+ | `projscan quality-scorecard` | Dimensioned quality view with health, security, tests, maintainability, coordination, and top risks |
621
+ | `projscan understand` | Cited repo map, runtime flows, public contracts, change readiness, verification tiers, unknowns, and next commands |
622
+ | `projscan release-train` | Plan upcoming product lines with readiness evidence |
623
+ | `projscan evidence-pack` | Assemble approval evidence from planning, bug-hunt, workplan, preflight, trust calibration, First Fix, owner routing, and baseline trend memory |
624
+ | `projscan trial` | Produce one adoption-readiness report from onboarding, dogfood, feedback, trust signals, and website proof |
625
+ | `projscan feedback` | Capture measured reviewer feedback: minutes saved, prevented bad edits, false positives, and repeat PR use |
626
+ | `projscan privacy-check` | Verify the local trust boundary: telemetry, offline mode, scan root, .gitignore handling, ignored-file count, .env content scanning, and network-capable endpoints |
627
+ | `projscan telemetry` | Explicit default-off telemetry controls: status, enable, disable, and explain |
628
+ | `projscan dogfood` | Evaluate 1+ real repos for PR-comment readiness, repeat-use readiness, MCP readiness, and reviewer feedback prompts |
629
+ | `projscan regression-plan` | Build a smoke, focused, or full regression matrix from product risk signals |
630
+ | `projscan handoff` | Concise next-agent handoff from the current workplan |
631
+ | `projscan doctor` | Health check - missing tooling, architecture smells, security and supply-chain risks |
632
+ | `projscan preflight` | Agent safety gate - `proceed`, `caution`, or `block` with health, change, plugin, and supply-chain evidence |
633
+ | `projscan hotspots` | Rank files by risk - churn × complexity × issues × ownership |
634
+ | `projscan semantic-graph` | Stable v3 graph contract, plus targeted `--query importers/imports/exports/...` lookups |
635
+ | `projscan dataflow` | Focused direct, propagated, and bridge source-to-sink dataflow risks |
636
+ | `projscan search <query>` | **BM25-ranked search** - content + symbols + path, with excerpts |
637
+ | `projscan file <path>` | Drill into a file - purpose, risk, ownership, related issues |
638
+ | `projscan fix` | Auto-fix issues (ESLint, Prettier, Vitest, .editorconfig) |
639
+ | `projscan ci` | CI health gate - SARIF output, `--changed-only` PR-diff mode, exits 1 if score below threshold |
640
+ | `projscan diff` | Compare current health **and hotspot trends** against a baseline |
641
+ | `projscan diagram` | ASCII architecture diagram of your project |
642
+ | `projscan structure` | Directory tree with file counts |
643
+ | `projscan dependencies` | Dependency analysis - counts, license summary, risks, recommendations |
644
+ | `projscan outdated` | Declared-vs-installed drift check (offline) |
645
+ | `projscan audit` | `npm audit`-powered vulnerability report - SARIF-ready for Code Scanning |
646
+ | `projscan upgrade <pkg>` | Preview upgrade impact - local CHANGELOG + importer list, offline |
647
+ | `projscan coverage` | **Coverage × hotspots - rank the scariest untested files** (`--changed-only` for diff mode) |
648
+ | `projscan badge` | Generate a health score badge for your README |
649
+ | `projscan init` | _(1.6)_ Scaffold `.projscanrc.json` with sensible defaults |
650
+ | `projscan install-hook` | _(1.6)_ Install a `pre-commit` hook running `projscan ci --changed-only` |
651
+ | `projscan workspace` | _(1.6)_ Register sibling repos for cross-repo intelligence (`add` / `list` / `remove`) |
652
+ | `projscan apply-fix <id>` | _(1.6)_ Mechanically execute the safe fix templates with rollback (default dry-run) |
653
+ | `projscan taint` | _(1.6)_ Source-to-sink reachability over the call graph |
654
+ | `projscan plugin` | Discover, scaffold, validate, and test local analyzer/reporter plugins |
655
+ | `projscan mcp` | Run as an MCP server for AI coding agents (Claude Code, Codex, Cursor, Gemini, Windsurf, …) |
646
656
 
647
657
  To see all commands and options, run:
648
658
 
@@ -714,65 +724,65 @@ Reporter plugins are intentionally CLI-only. MCP tools keep returning structured
714
724
 
715
725
  ### Options
716
726
 
717
- | Flag | Description |
718
- |------|-------------|
719
- | `--format <type>` | Output format: console, json, markdown, sarif, html (command-dependent) |
720
- | `--config <path>` | Path to a `.projscanrc` config file |
721
- | `--include-ignored` | Explicitly include files hidden by Git ignore rules |
722
- | `--scan-env-values` | Explicitly read `.env*` contents during secret checks |
723
- | `--offline` | Block projscan network-capable features for this run |
724
- | `--shortcuts` | Print the Mission Control shortcut command index (`start`) |
725
- | `--shortcuts-json` | Print the Mission Control shortcut command index as JSON (`start`) |
726
- | `--handoff-prompt` | Print only the concise Mission Control handoff prompt (`start`) |
727
- | `--next-command` | Print only the current Mission Control cursor command (`start`) |
728
- | `--next-tool-call` | Print only the current Mission Control cursor MCP tool call as JSON (`start`) |
729
- | `--ready-tool-calls` | Print the current cursor and remaining MCP-callable proof queue as JSON (`start`) |
730
- | `--proof-commands` | Print only ready Mission Control proof commands (`start`) |
731
- | `--checklist` | Print only the Mission Control resume checklist (`start`) |
732
- | `--resume-json` | Print only the Mission Control resume object as JSON (`start`) |
733
- | `--handoff-json` | Print only the Mission Control handoff object as JSON (`start`) |
734
- | `--mission-script` | Print the Mission Control shell script (`start`) |
735
- | `--save-mission <dir>` | Write the Mission Control bundle to a directory (`start`) |
736
- | `--mission <dir>` | Read a saved Mission Control bundle and include proof outcome in `start`; repeatable mission selector for `mission-proof` |
737
- | `--list` | List saved Mission Control bundles with status and update time (`mission-proof`) |
738
- | `--needs-attention` | Filter `mission-proof --list` to bundles that are not passed |
739
- | `--mission-status <status>` | Filter `mission-proof --list` by `passed`, `failed`, `running`, `not_run`, or `unknown` |
740
- | `--latest` | Select the saved Mission Control bundle with the newest `proof-logs/summary.json` (`mission-proof`) |
741
- | `--all` | Discover `.projscan/mission` and direct child bundles under `.projscan/missions/` (`mission-proof`) |
742
- | `--baseline <path>` | Compare `mission-proof` with a local manual-run baseline JSON file |
743
- | `--init-baseline <file>` | Write a local manual-run baseline JSON template (`mission-proof`) |
744
- | `--add-baseline-run <file>` | Append one measured manual run to a local baseline JSON file (`mission-proof`) |
745
- | `--check-baseline <file>` | Validate a local manual-run baseline JSON file (`mission-proof`) |
746
- | `--id <id>` / `--status <status>` | Identify a run added with `--add-baseline-run` (`mission-proof`) |
747
- | `--minutes-spent`, `--reruns`, `--failed-gates`, `--reviewer-approvals` | Numeric fields for `--add-baseline-run` (`mission-proof`) |
748
- | `--write <file>` | Write a Markdown or JSON artifact (`mission-proof`, `handoff`) |
749
- | `--require-passed` | Exit nonzero unless every selected mission bundle passed proof (`mission-proof`) |
750
- | `--summary` | Print one compact Mission Proof status line (`mission-proof`) |
751
- | `--task-card` | Print only the Mission Control Markdown task card (`start`) |
752
- | `--review-gate` | Print only the Mission Control stop-and-review gate (`start`) |
753
- | `--review-gate-json` | Print only the Mission Control review gate as JSON (`start`) |
754
- | `--review-policy` | Print only the Mission Control review policy as JSON (`start`) |
755
- | `--review-replies` | Print only copyable Mission Control reviewer replies (`start`) |
756
- | `--runbook` | Print only the Mission Control Markdown runbook (`start`) |
757
- | `--changed-only` | Scope to files changed vs base ref (ci/analyze/doctor) |
758
- | `--base-ref <ref>` | Git base ref for `--changed-only` (default: origin/main) |
759
- | `--reporter <name>` | Render `doctor`, `analyze`, or `ci` with a local reporter plugin |
760
- | `--verbose` | Enable debug output |
761
- | `--quiet` | Suppress non-essential output |
762
- | `-V, --version` | Show version |
763
- | `-h, --help` | Show help |
727
+ | Flag | Description |
728
+ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
729
+ | `--format <type>` | Output format: console, json, markdown, sarif, html (command-dependent) |
730
+ | `--config <path>` | Path to a `.projscanrc` config file |
731
+ | `--include-ignored` | Explicitly include files hidden by Git ignore rules |
732
+ | `--scan-env-values` | Explicitly read `.env*` contents during secret checks |
733
+ | `--offline` | Block projscan network-capable features for this run |
734
+ | `--shortcuts` | Print the Mission Control shortcut command index (`start`) |
735
+ | `--shortcuts-json` | Print the Mission Control shortcut command index as JSON (`start`) |
736
+ | `--handoff-prompt` | Print only the concise Mission Control handoff prompt (`start`) |
737
+ | `--next-command` | Print only the current Mission Control cursor command (`start`) |
738
+ | `--next-tool-call` | Print only the current Mission Control cursor MCP tool call as JSON (`start`) |
739
+ | `--ready-tool-calls` | Print the current cursor and remaining MCP-callable proof queue as JSON (`start`) |
740
+ | `--proof-commands` | Print only ready Mission Control proof commands (`start`) |
741
+ | `--checklist` | Print only the Mission Control resume checklist (`start`) |
742
+ | `--resume-json` | Print only the Mission Control resume object as JSON (`start`) |
743
+ | `--handoff-json` | Print only the Mission Control handoff object as JSON (`start`) |
744
+ | `--mission-script` | Print the Mission Control shell script (`start`) |
745
+ | `--save-mission <dir>` | Write the Mission Control bundle to a directory (`start`) |
746
+ | `--mission <dir>` | Read a saved Mission Control bundle and include proof outcome in `start`; repeatable mission selector for `mission-proof` |
747
+ | `--list` | List saved Mission Control bundles with status and update time (`mission-proof`) |
748
+ | `--needs-attention` | Filter `mission-proof --list` to bundles that are not passed |
749
+ | `--mission-status <status>` | Filter `mission-proof --list` by `passed`, `failed`, `running`, `not_run`, or `unknown` |
750
+ | `--latest` | Select the saved Mission Control bundle with the newest `proof-logs/summary.json` (`mission-proof`) |
751
+ | `--all` | Discover `.projscan/mission` and direct child bundles under `.projscan/missions/` (`mission-proof`) |
752
+ | `--baseline <path>` | Compare `mission-proof` with a local manual-run baseline JSON file |
753
+ | `--init-baseline <file>` | Write a local manual-run baseline JSON template (`mission-proof`) |
754
+ | `--add-baseline-run <file>` | Append one measured manual run to a local baseline JSON file (`mission-proof`) |
755
+ | `--check-baseline <file>` | Validate a local manual-run baseline JSON file (`mission-proof`) |
756
+ | `--id <id>` / `--status <status>` | Identify a run added with `--add-baseline-run` (`mission-proof`) |
757
+ | `--minutes-spent`, `--reruns`, `--failed-gates`, `--reviewer-approvals` | Numeric fields for `--add-baseline-run` (`mission-proof`) |
758
+ | `--write <file>` | Write a Markdown or JSON artifact (`mission-proof`, `handoff`) |
759
+ | `--require-passed` | Exit nonzero unless every selected mission bundle passed proof (`mission-proof`) |
760
+ | `--summary` | Print one compact Mission Proof status line (`mission-proof`) |
761
+ | `--task-card` | Print only the Mission Control Markdown task card (`start`) |
762
+ | `--review-gate` | Print only the Mission Control stop-and-review gate (`start`) |
763
+ | `--review-gate-json` | Print only the Mission Control review gate as JSON (`start`) |
764
+ | `--review-policy` | Print only the Mission Control review policy as JSON (`start`) |
765
+ | `--review-replies` | Print only copyable Mission Control reviewer replies (`start`) |
766
+ | `--runbook` | Print only the Mission Control Markdown runbook (`start`) |
767
+ | `--changed-only` | Scope to files changed vs base ref (ci/analyze/doctor) |
768
+ | `--base-ref <ref>` | Git base ref for `--changed-only` (default: origin/main) |
769
+ | `--reporter <name>` | Render `doctor`, `analyze`, or `ci` with a local reporter plugin |
770
+ | `--verbose` | Enable debug output |
771
+ | `--quiet` | Suppress non-essential output |
772
+ | `-V, --version` | Show version |
773
+ | `-h, --help` | Show help |
764
774
 
765
775
  ## Health Score
766
776
 
767
777
  Every `projscan doctor` run calculates a health score (0–100) and letter grade:
768
778
 
769
- | Grade | Score | Meaning |
770
- |-------|-------|---------|
771
- | A | 90–100 | Excellent - project follows best practices |
772
- | B | 80–89 | Good - minor improvements possible |
773
- | C | 70–79 | Fair - several issues to address |
774
- | D | 60–69 | Poor - significant issues found |
775
- | F | < 60 | Critical - major issues need attention |
779
+ | Grade | Score | Meaning |
780
+ | ----- | ------ | ------------------------------------------ |
781
+ | A | 90–100 | Excellent - project follows best practices |
782
+ | B | 80–89 | Good - minor improvements possible |
783
+ | C | 70–79 | Fair - several issues to address |
784
+ | D | 60–69 | Poor - significant issues found |
785
+ | F | < 60 | Critical - major issues need attention |
776
786
 
777
787
  Generate a badge for your README:
778
788
 
@@ -831,10 +841,10 @@ Cache version bumped 2 → 3 in 0.11 (CC stored per file). Existing v2 caches ar
831
841
 
832
842
  Reference numbers from `npm run bench` on an Apple M3 Pro running Node 25 (cold / warm cache, milliseconds), refreshed for 1.5.0:
833
843
 
834
- | Repo | Files | analyze | doctor | hotspots | coupling | search |
835
- |------|-------|---------|--------|----------|----------|--------|
836
- | projscan itself | ~120 | 650 / 576 | 659 / 574 | 794 / 622 | 405 / 186 | 485 / 277 |
837
- | Synthetic medium | 500 | 284 / 257 | 277 / 255 | 300 / 278 | 224 / 177 | 239 / 196 |
844
+ | Repo | Files | analyze | doctor | hotspots | coupling | search |
845
+ | ---------------- | ----- | --------- | --------- | --------- | --------- | --------- |
846
+ | projscan itself | ~120 | 650 / 576 | 659 / 574 | 794 / 622 | 405 / 186 | 485 / 277 |
847
+ | Synthetic medium | 500 | 284 / 257 | 277 / 255 | 300 / 278 | 224 / 177 | 239 / 196 |
838
848
 
839
849
  For real-world numbers against larger codebases, `npm run bench:references` shallow-clones TypeScript, Django, and kubernetes/client-go into `.bench-cache/` (gitignored) and runs the same suite. First run is network-bound; later runs reuse the cache. Restrict to one target with `-- --only ts|django|k8s-client-go`.
840
850
 
@@ -844,19 +854,19 @@ Run `npm run bench` against your own machine to recalibrate.
844
854
  - **14 runtime dependencies** — still minimal
845
855
  - **~21 MB of vendored tree-sitter grammars**, broken down:
846
856
 
847
- | Grammar | Size | Languages |
848
- |---|---:|---|
849
- | `web-tree-sitter` | ~190 KB | runtime, all tree-sitter languages |
850
- | `tree-sitter-python` | ~450 KB | Python |
851
- | `tree-sitter-go` | ~210 KB | Go |
852
- | `tree-sitter-java` | ~405 KB | Java |
853
- | `tree-sitter-ruby` | ~2.0 MB | Ruby |
854
- | `tree-sitter-rust` | ~1.1 MB | Rust |
855
- | `tree-sitter-php` | ~785 KB | PHP |
856
- | `tree-sitter-c-sharp` | ~5.2 MB | C# |
857
- | `tree-sitter-cpp` | ~3.3 MB | C, C++ |
858
- | `tree-sitter-kotlin` | ~3.9 MB | Kotlin |
859
- | `tree-sitter-swift` | ~3.6 MB | Swift |
857
+ | Grammar | Size | Languages |
858
+ | --------------------- | ------: | ---------------------------------- |
859
+ | `web-tree-sitter` | ~190 KB | runtime, all tree-sitter languages |
860
+ | `tree-sitter-python` | ~450 KB | Python |
861
+ | `tree-sitter-go` | ~210 KB | Go |
862
+ | `tree-sitter-java` | ~405 KB | Java |
863
+ | `tree-sitter-ruby` | ~2.0 MB | Ruby |
864
+ | `tree-sitter-rust` | ~1.1 MB | Rust |
865
+ | `tree-sitter-php` | ~785 KB | PHP |
866
+ | `tree-sitter-c-sharp` | ~5.2 MB | C# |
867
+ | `tree-sitter-cpp` | ~3.3 MB | C, C++ |
868
+ | `tree-sitter-kotlin` | ~3.9 MB | Kotlin |
869
+ | `tree-sitter-swift` | ~3.6 MB | Swift |
860
870
 
861
871
  JavaScript and TypeScript use the bundled `@babel/parser` instead of a tree-sitter grammar, so they don't appear in this table.
862
872
 
@@ -887,16 +897,16 @@ projscan reads your source code so it can be useful; it does not send your sourc
887
897
 
888
898
  ### What projscan DOES do, and what it costs
889
899
 
890
- | Action | When | Network? | Notes |
891
- |---|---|---|---|
892
- | Read source files | every command | no | parses with tree-sitter / Babel; results cached at `.projscan-cache/` |
893
- | Spawn `git` | `hotspots`, `pr-diff`, `review`, `diff` | git itself may fetch if you run `git fetch` separately; **projscan never invokes `git fetch`** | `env: process.env` is passed so `git` can find its config |
894
- | Spawn `npm audit` | `audit` only | yes — by `npm`, not by projscan | runs against your local lockfile |
895
- | Scan supply-chain IOCs | `doctor`, `preflight`, release validation | no | checks manifests, lockfiles, hidden editor hooks, and suspicious install-time payloads against bundled indicators |
896
- | Anonymous telemetry | only after `projscan telemetry enable` or accepting the `projscan init team` prompt | yes — projscan-owned, default off | sends product-health buckets only; see [TELEMETRY.md](TELEMETRY.md) |
897
- | Load local plugins | only with `PROJSCAN_PLUGINS_PREVIEW=1` and an execution path such as `--execute`, `doctor`, `ci`, or `analyze` | no | imports local JS modules declared in `.projscan-plugins/`; only enable plugins you trust |
898
- | Load wasm grammars | first parse of a non-JS file | no | served from `dist/grammars/` inside the package; no fetch |
899
- | Build embeddings | semantic search opt-in only | yes — by `@xenova/transformers`, on first use | model cached locally after first download; remove the peer dep to remove this code path entirely |
900
+ | Action | When | Network? | Notes |
901
+ | ---------------------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
902
+ | Read source files | every command | no | parses with tree-sitter / Babel; results cached at `.projscan-cache/` |
903
+ | Spawn `git` | `hotspots`, `pr-diff`, `review`, `diff` | git itself may fetch if you run `git fetch` separately; **projscan never invokes `git fetch`** | `env: process.env` is passed so `git` can find its config |
904
+ | Spawn `npm audit` | `audit` only | yes — by `npm`, not by projscan | runs against your local lockfile |
905
+ | Scan supply-chain IOCs | `doctor`, `preflight`, release validation | no | checks manifests, lockfiles, hidden editor hooks, and suspicious install-time payloads against bundled indicators |
906
+ | Anonymous telemetry | only after `projscan telemetry enable` or accepting the `projscan init team` prompt | yes — projscan-owned, default off | sends product-health buckets only; see [TELEMETRY.md](TELEMETRY.md) |
907
+ | Load local plugins | only with `PROJSCAN_PLUGINS_PREVIEW=1` and an execution path such as `--execute`, `doctor`, `ci`, or `analyze` | no | imports local JS modules declared in `.projscan-plugins/`; only enable plugins you trust |
908
+ | Load wasm grammars | first parse of a non-JS file | no | served from `dist/grammars/` inside the package; no fetch |
909
+ | Build embeddings | semantic search opt-in only | yes — by `@xenova/transformers`, on first use | model cached locally after first download; remove the peer dep to remove this code path entirely |
900
910
 
901
911
  ### Patterns supply-chain scanners flag, and why they're benign here
902
912
 
@@ -925,13 +935,13 @@ projscan runs against itself in CI on every PR. The dogfood loop is the most dir
925
935
 
926
936
  Current state of the projscan codebase as scored by projscan itself:
927
937
 
928
- | Metric | Value |
929
- |---|---|
930
- | Health score | **A (100 / 100)** |
931
- | Open issues | 0 errors, 0 warnings, 0 info |
932
- | Circular imports | 0 |
933
- | Top hotspot | `src/reporters/consoleReporter.ts` (CC 288, 1108 lines) — known refactor candidate, not a defect |
934
- | Dogfood threshold | `--min-score 90` (CI fails below this) |
938
+ | Metric | Value |
939
+ | ----------------- | ------------------------------------------------------------------------------------------------ |
940
+ | Health score | **A (100 / 100)** |
941
+ | Open issues | 0 errors, 0 warnings, 0 info |
942
+ | Circular imports | 0 |
943
+ | Top hotspot | `src/reporters/consoleReporter.ts` (CC 288, 1108 lines) — known refactor candidate, not a defect |
944
+ | Dogfood threshold | `--min-score 90` (CI fails below this) |
935
945
 
936
946
  The `--min-score 90` threshold is deliberately tight: a regression that drops the score by more than ten points fails the build. The current ten-point margin (90 → 100) is for room to breathe, not slack.
937
947
 
@@ -976,14 +986,14 @@ on:
976
986
 
977
987
  permissions:
978
988
  contents: read
979
- security-events: write # required for SARIF upload
989
+ security-events: write # required for SARIF upload
980
990
 
981
991
  jobs:
982
992
  scan:
983
993
  runs-on: ubuntu-latest
984
994
  steps:
985
995
  - uses: actions/checkout@v4
986
- with: { fetch-depth: 0 } # needed for --changed-only
996
+ with: { fetch-depth: 0 } # needed for --changed-only
987
997
  - uses: actions/setup-node@v4
988
998
  with: { node-version: 20 }
989
999
  - uses: abhiyoheswaran1/projscan@v1
@@ -1036,7 +1046,7 @@ Fields:
1036
1046
  - `disableRules` - silence rules by id; supports wildcard `prefix-*`
1037
1047
  - `severityOverrides` - remap a rule's severity (`info` / `warning` / `error`)
1038
1048
  - `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
1039
- - `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos *(0.14+)*
1049
+ - `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos _(0.14+)_
1040
1050
 
1041
1051
  See [`docs/GUIDE.md` -> Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
1042
1052
 
@@ -1142,7 +1152,7 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
1142
1152
 
1143
1153
  <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/projscan-agent-demo.gif" alt="projscan answering two agent questions: what breaks if I rename buildCodeGraph (impact analysis with definitions, direct callers, transitive reach), and where should I fix first (ranked hotspots with cyclomatic complexity)" width="700">
1144
1154
 
1145
- Two questions an agent asks; structural answers in milliseconds. *"What breaks if I rename `buildCodeGraph`?"* → 31 direct callers, 97 files reachable. *"Where should I fix first?"* → ranked hotspots with AST cyclomatic complexity, churn, and ownership signals.
1155
+ Two questions an agent asks; structural answers in milliseconds. _"What breaks if I rename `buildCodeGraph`?"_ → 31 direct callers, 97 files reachable. _"Where should I fix first?"_ → ranked hotspots with AST cyclomatic complexity, churn, and ownership signals.
1146
1156
 
1147
1157
  ### Claude Code
1148
1158
 
@@ -1267,88 +1277,95 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
1267
1277
 
1268
1278
  ### What agents can ask
1269
1279
 
1270
- - *"Who imports `src/auth/jwt.ts`?"* → `projscan_semantic_graph { query: { direction: "importers", file: "src/auth/jwt.ts" } }` or `projscan semantic-graph --query importers --file src/auth/jwt.ts --format json`
1271
- - *"Which files import `chalk`?"* or *"Which files import package `chalk`?"* → `projscan_semantic_graph { query: { direction: "package_importers", symbol: "chalk" } }` or `projscan semantic-graph --query package_importers --symbol chalk --format json`
1272
- - *"Give me the whole agent-safe graph contract."* → `projscan_semantic_graph`
1273
- - *"Did this wrapper connect a source reader to a dangerous sink?"* → `projscan_dataflow`
1274
- - *"Explain issue `missing-test-framework`."* → `projscan_explain_issue { issue_id: "missing-test-framework" }`
1275
- - *"Where is `runAudit` defined?"* → `projscan_semantic_graph { query: { direction: "symbol_defs", symbol: "runAudit" } }` or `projscan semantic-graph --query symbol_defs --symbol runAudit --format json`
1276
- - *"Which files implement auth?"* → `projscan_search { query: "auth", scope: "content" }`
1277
- - *"Who should I ask about auth?"* → `projscan_search { query: "auth" }`
1278
- - *"Which tests cover auth?"* → `projscan_search { query: "tests for auth" }`
1279
- - *"What are the scariest untested files?"* → `projscan_coverage`
1280
- - *"Which files have no tests?"* → `projscan_coverage`
1281
- - *"What breaks if I bump chalk to 6?"* → `projscan_upgrade { package: "chalk" }`
1282
- - *"Show circular dependencies."* → `projscan_coupling { direction: "cycles_only" }` or `projscan coupling --cycles-only --format json`
1283
- - *"What modules are tightly coupled?"* → `projscan_coupling` or `projscan coupling --format json`
1284
- - *"Where should I refactor first?"* → `projscan_hotspots`
1285
- - *"What should my agent do first in this repo?"* → `projscan_start { mode: "before_edit" }`
1286
- - *"How do I understand the repo before editing?"* → `projscan_understand { view: "map" }`
1287
- - *"What should my agent do next?"* → `projscan_workplan { mode: "bug_hunt" }`
1288
- - *"Give the next agent a compact brief."* → `projscan_agent_brief { intent: "bug_hunt" }`
1289
- - *"Show the product quality picture."* → `projscan_quality_scorecard`
1290
- - *"What should I fix before a big release?"* → `projscan_bug_hunt`
1291
- - *"What evidence do I need before approval?"* → `projscan_evidence_pack { website_prompt: true }`
1292
- - *"Which checks prove this bigger product update?"* → `projscan_regression_plan { level: "full" }`
1293
- - *"How do I plan the next six product lines?"* → `projscan_release_train`
1294
- - *"How do I wire projscan into this MCP client?"* → `projscan_adoption { action: "mcp_config", client: "codex" }`
1280
+ - _"Who imports `src/auth/jwt.ts`?"_ → `projscan_semantic_graph { query: { direction: "importers", file: "src/auth/jwt.ts" } }` or `projscan semantic-graph --query importers --file src/auth/jwt.ts --format json`
1281
+ - _"Which files import `chalk`?"_ or _"Which files import package `chalk`?"_ → `projscan_semantic_graph { query: { direction: "package_importers", symbol: "chalk" } }` or `projscan semantic-graph --query package_importers --symbol chalk --format json`
1282
+ - _"Give me the whole agent-safe graph contract."_ → `projscan_semantic_graph`
1283
+ - _"Did this wrapper connect a source reader to a dangerous sink?"_ → `projscan_dataflow`
1284
+ - _"Explain issue `missing-test-framework`."_ → `projscan_explain_issue { issue_id: "missing-test-framework" }`
1285
+ - _"Where is `runAudit` defined?"_ → `projscan_semantic_graph { query: { direction: "symbol_defs", symbol: "runAudit" } }` or `projscan semantic-graph --query symbol_defs --symbol runAudit --format json`
1286
+ - _"Which files implement auth?"_ → `projscan_search { query: "auth", scope: "content" }`
1287
+ - _"Who should I ask about auth?"_ → `projscan_search { query: "auth" }`
1288
+ - _"Which tests cover auth?"_ → `projscan_search { query: "tests for auth" }`
1289
+ - _"What are the scariest untested files?"_ → `projscan_coverage`
1290
+ - _"Which files have no tests?"_ → `projscan_coverage`
1291
+ - _"What breaks if I bump chalk to 6?"_ → `projscan_upgrade { package: "chalk" }`
1292
+ - _"Show circular dependencies."_ → `projscan_coupling { direction: "cycles_only" }` or `projscan coupling --cycles-only --format json`
1293
+ - _"What modules are tightly coupled?"_ → `projscan_coupling` or `projscan coupling --format json`
1294
+ - _"Where should I refactor first?"_ → `projscan_hotspots`
1295
+ - _"What should my agent do first in this repo?"_ → `projscan_start { mode: "before_edit" }`
1296
+ - _"How do I understand the repo before editing?"_ → `projscan_understand { view: "map" }`
1297
+ - _"What should my agent do next?"_ → `projscan_workplan { mode: "bug_hunt" }`
1298
+ - _"Give the next agent a compact brief."_ → `projscan_agent_brief { intent: "bug_hunt" }`
1299
+ - _"Show the product quality picture."_ → `projscan_quality_scorecard`
1300
+ - _"What should I fix before a big release?"_ → `projscan_bug_hunt`
1301
+ - _"What evidence do I need before approval?"_ → `projscan_evidence_pack { website_prompt: true }`
1302
+ - _"Which checks prove this bigger product update?"_ → `projscan_regression_plan { level: "full" }`
1303
+ - _"How do I plan the next six product lines?"_ → `projscan_release_train`
1304
+ - _"How do I wire projscan into this MCP client?"_ → `projscan_adoption { action: "mcp_config", client: "codex" }`
1295
1305
 
1296
1306
  ### The 45 MCP tools
1297
1307
 
1298
1308
  **Structural (0.6.0 / 0.11 / 0.13 / 0.14 / 0.15 - agent-native):**
1299
- - **`projscan_start`** *(3.0.4)* - first-60-seconds repo orientation. Composes setup diagnostics, `firstTenMinutes`, workflow recipes, workplan, quality scorecard, top risks, adoption gaps, next commands, and optional handoff payload.
1300
- - **`projscan_understand`** *(3.4)* - cited repo-comprehension report with `map`, `flow`, `contracts`, `change`, and `verify` views, read-first files, unknowns, change readiness, verification tiers, and exact next commands.
1301
- - **`projscan_semantic_graph`** *(3.0; query mode 4.0)* - the code graph, two ways. With no `query`: the stable v3 semantic graph contract (file, function, package, and symbol nodes plus `defines`, `imports`, `imports_package`, `exports`, and `calls` edges). With `query: { direction, file?, symbol? }`: one cheap targeted lookup — `imports`, `exports`, `importers`, `symbol_defs`, `package_importers` — with millisecond responses on a warm cache. (Subsumes the former `projscan_graph`, removed in 4.0.)
1302
- - **`projscan_dataflow`** *(3.0)* - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js and Express request sources are framework-aware, DB/write sinks are receiver-sensitive, and defaults suppress test-file paths, broad readFile/writeFile noise, JavaScript RegExp.exec false positives, and generated-code anxiety; opt into broader scans with `include_tests` / `include_broad_file_io` / `include_generated` or the matching CLI flags.
1303
- - **`projscan_search`** - fast search across `symbols` (exported names), `files` (path substring), or `content` (source substring with line + excerpt). Sub-file mode (`sub_file: true`) embeds per-function for sharper semantic results *(0.15)*.
1304
- - **`projscan_coupling`** *(0.11)* - per-file fan-in / fan-out / instability + circular-import cycles (Tarjan SCC). Filter by `direction: cycles_only | high_fan_in | high_fan_out`.
1305
- - **`projscan_pr_diff`** *(0.11)* - structural diff between two git refs. Returns added/removed/modified files with explicit lists of exports, imports, and call sites that changed, plus ΔCC and Δfan-in.
1306
- - **`projscan_review`** *(0.13)* - one-call PR review. Composes `pr_diff` + per-changed-file risk + new/expanded import cycles + risky function additions + dependency changes + a verdict (`ok` / `review` / `block`).
1307
- - **`projscan_workplan`** *(2.3)* - agent mission-control plan. Composes preflight, review, session, hotspot, plugin, and supply-chain evidence into prioritized tasks with verification commands and handoff text.
1308
- - **`projscan_bug_hunt`** *(2.3)* - ranked bug-hunt queue. Composes doctor issues, preflight, hotspots, and session coordination into fix targets with verification commands.
1309
- - **`projscan_release_train`** *(2.3)* - product-line readiness planner. Reads version, scope, readiness evidence, and next actions.
1310
- - **`projscan_evidence_pack`** *(2.3)* - approval packet. Composes planning, bug-hunt, workplan, preflight, changelog, optional website prompt evidence, and PR comments with trust calibration, First Fix, owner routing, baseline trend memory, and exact next commands.
1311
- - **`projscan_regression_plan`** *(2.3)* - smoke/focused/full regression matrix. Turns bug-hunt, preflight, and product risk into deduplicated verification commands.
1312
- - **`projscan_agent_brief`** *(2.3)* - compact next-agent context packet with focus items, repo context, coordination hints, guardrails, and suggested next actions.
1313
- - **`projscan_quality_scorecard`** *(2.3)* - dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
1314
- - **`projscan_adoption`** *(2.9)* - adoption helper for MCP config snippets, workflow recipes, and first-run diagnostics with the shared `firstTenMinutes` path.
1315
- - **`projscan_fix_suggest`** *(0.14)* - structured action prompt for any open issue: headline, why it matters, where, one-paragraph instruction, optional suggested test. Closes the diagnose fix loop.
1316
- - **`projscan_explain_issue`** *(0.14)* - deep dive on one issue: code excerpt, related issues in the same file, similar past commits via `git log --grep`, plus the structured FixSuggestion.
1317
- - **`projscan_impact`** *(0.15)* - transitive blast-radius for a file or symbol. BFS over reverse imports + symbol callsites. Use BEFORE renaming or deleting to see what breaks.
1318
- - **`projscan_collision`** *(3.6)* - detect change collisions across the repo's in-flight git worktrees (parallel agents). Flags same-file edits and dependency overlaps (one worktree edits a file another's change imports) before the branches merge. Local-first; needs ≥2 worktrees.
1319
- - **`projscan_claim`** *(3.6)* - advisory claims/leases over files, directories, or symbols, shared across the repo's worktrees. `add` returns contention when another agent already holds an overlapping target; `list` / `release` manage them. Local-first.
1320
- - **`projscan_merge_risk`** *(3.6)* - merge-risk preflight across in-flight worktrees: a safe integration order (merge the least-entangled branch first) plus conflict hotspots (files changed by 2+ worktrees). Builds on `projscan_collision`. Local-first.
1321
- - **`projscan_route`** *(3.6)* - map a stated goal (e.g. "what breaks if I rename X") to the right projscan tool with the exact call, or list the full capability catalog. A discovery entry point over the tool surface; deterministic, no LLM.
1322
- - **`projscan_coordinate`** *(3.6)* - one-call swarm coordination read: composes collisions, claims, and merge-risk into a `readiness` verdict (clear / caution / conflicted) with counts and the recommended integration order. The single entry point for the coordination arc. Local-first.
1323
- - **`projscan_coordinate_watch`** *(3.7)* - long-running coordination watch: polls the in-flight worktrees and emits a `notifications/projscan/coordination_changed` notification whenever the swarm state changes. Pairs with `projscan_coordinate`. `start` / `stop` / `list`.
1309
+
1310
+ - **`projscan_start`** _(3.0.4)_ - first-60-seconds repo orientation. Composes setup diagnostics, `firstTenMinutes`, workflow recipes, workplan, quality scorecard, top risks, adoption gaps, next commands, and optional handoff payload.
1311
+ - **`projscan_understand`** _(3.4)_ - cited repo-comprehension report with `map`, `flow`, `contracts`, `change`, and `verify` views, read-first files, unknowns, change readiness, verification tiers, and exact next commands.
1312
+ - **`projscan_semantic_graph`** _(3.0; query mode 4.0)_ - the code graph, two ways. With no `query`: the stable v3 semantic graph contract (file, function, package, and symbol nodes plus `defines`, `imports`, `imports_package`, `exports`, and `calls` edges). With `query: { direction, file?, symbol? }`: one cheap targeted lookup `imports`, `exports`, `importers`, `symbol_defs`, `package_importers` with millisecond responses on a warm cache. (Subsumes the former `projscan_graph`, removed in 4.0.)
1313
+ - **`projscan_dataflow`** _(3.0)_ - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js and Express request sources are framework-aware, DB/write sinks are receiver-sensitive, and defaults suppress test-file paths, broad readFile/writeFile noise, JavaScript RegExp.exec false positives, and generated-code anxiety; opt into broader scans with `include_tests` / `include_broad_file_io` / `include_generated` or the matching CLI flags.
1314
+ - **`projscan_search`** - fast search across `symbols` (exported names), `files` (path substring), or `content` (source substring with line + excerpt). Sub-file mode (`sub_file: true`) embeds per-function for sharper semantic results _(0.15)_.
1315
+ - **`projscan_coupling`** _(0.11)_ - per-file fan-in / fan-out / instability + circular-import cycles (Tarjan SCC). Filter by `direction: cycles_only | high_fan_in | high_fan_out`.
1316
+ - **`projscan_pr_diff`** _(0.11)_ - structural diff between two git refs. Returns added/removed/modified files with explicit lists of exports, imports, and call sites that changed, plus ΔCC and Δfan-in.
1317
+ - **`projscan_review`** _(0.13)_ - one-call PR review. Composes `pr_diff` + per-changed-file risk + new/expanded import cycles + risky function additions + dependency changes + a verdict (`ok` / `review` / `block`).
1318
+ - **`projscan_workplan`** _(2.3)_ - agent mission-control plan. Composes preflight, review, session, hotspot, plugin, and supply-chain evidence into prioritized tasks with verification commands and handoff text.
1319
+ - **`projscan_bug_hunt`** _(2.3)_ - ranked bug-hunt action queue. Composes doctor issues, preflight, hotspots, and session coordination into ranked actions with verification commands.
1320
+ - **`projscan_release_train`** _(2.3)_ - product-line readiness planner. Reads version, scope, readiness evidence, and next actions.
1321
+ - **`projscan_evidence_pack`** _(2.3)_ - approval packet. Composes planning, bug-hunt, workplan, preflight, changelog, optional website prompt evidence, and PR comments with trust calibration, First Fix, owner routing, baseline trend memory, and exact next commands.
1322
+ - **`projscan_regression_plan`** _(2.3)_ - smoke/focused/full regression matrix. Turns bug-hunt, preflight, and product risk into deduplicated verification commands.
1323
+ - **`projscan_agent_brief`** _(2.3)_ - compact next-agent context packet with focus items, repo context, coordination hints, guardrails, and suggested next actions.
1324
+ - **`projscan_quality_scorecard`** _(2.3)_ - dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
1325
+ - **`projscan_adoption`** _(2.9)_ - adoption helper for MCP config snippets, workflow recipes, and first-run diagnostics with the shared `firstTenMinutes` path.
1326
+ - **`projscan_fix_suggest`** _(0.14)_ - structured action prompt for any open issue: headline, why it matters, where, one-paragraph instruction, optional suggested test. Closes the diagnose fix loop.
1327
+ - **`projscan_explain_issue`** _(0.14)_ - deep dive on one issue: code excerpt, related issues in the same file, similar past commits via `git log --grep`, plus the structured FixSuggestion.
1328
+ - **`projscan_impact`** _(0.15)_ - transitive blast-radius for a file or symbol. BFS over reverse imports + symbol callsites. Use BEFORE renaming or deleting to see what breaks.
1329
+ - **`projscan_collision`** _(3.6)_ - detect change collisions across the repo's in-flight git worktrees (parallel agents). Flags same-file edits and dependency overlaps (one worktree edits a file another's change imports) before the branches merge. Local-first; needs ≥2 worktrees.
1330
+ - **`projscan_claim`** _(3.6)_ - advisory claims/leases over files, directories, or symbols, shared across the repo's worktrees. `add` returns contention when another agent already holds an overlapping target; `list` / `release` manage them. Local-first.
1331
+ - **`projscan_merge_risk`** _(3.6)_ - merge-risk preflight across in-flight worktrees: a safe integration order (merge the least-entangled branch first) plus conflict hotspots (files changed by 2+ worktrees). Builds on `projscan_collision`. Local-first.
1332
+ - **`projscan_route`** _(3.6)_ - map a stated goal (e.g. "what breaks if I rename X") to the right projscan tool with the exact call, or list the full capability catalog. A discovery entry point over the tool surface; deterministic, no LLM.
1333
+ - **`projscan_coordinate`** _(3.6)_ - one-call swarm coordination read: composes collisions, claims, and merge-risk into a `readiness` verdict (clear / caution / conflicted) with counts and the recommended integration order. The single entry point for the coordination arc. Local-first.
1334
+ - **`projscan_coordinate_watch`** _(3.7)_ - long-running coordination watch: polls the in-flight worktrees and emits a `notifications/projscan/coordination_changed` notification whenever the swarm state changes. Pairs with `projscan_coordinate`. `start` / `stop` / `list`.
1324
1335
 
1325
1336
  **Analysis:**
1337
+
1326
1338
  - `projscan_analyze` - full project report
1327
1339
  - `projscan_doctor` - health score + issues (now includes `cycle-detected-N` for circular imports as of 0.13)
1328
- - `projscan_hotspots` - risk-ranked files (churn × **AST cyclomatic complexity** × issues × ownership × coverage; falls back to LOC for non-AST languages). Pass `view: "functions"` *(0.13)* for top-N risky individual functions.
1329
- - `projscan_file` - per-file purpose, imports, exports, smells + risk + ownership + related issues + CC + fan-in/fan-out + per-function CC table *(0.13)*
1340
+ - `projscan_hotspots` - risk-ranked files (churn × **AST cyclomatic complexity** × issues × ownership × coverage; falls back to LOC for non-AST languages). Pass `view: "functions"` _(0.13)_ for top-N risky individual functions.
1341
+ - `projscan_file` - per-file purpose, imports, exports, smells + risk + ownership + related issues + CC + fan-in/fan-out + per-function CC table _(0.13)_
1330
1342
  - `projscan_structure` - directory tree
1331
1343
  - `projscan_coverage` - scariest untested files (coverage × hotspots)
1332
1344
 
1333
1345
  **Dependencies:**
1334
- - `projscan_dependencies` - declared deps, risks. In a monorepo: aggregated totals + `byWorkspace` breakdown; `package` arg scopes to one *(0.13)*.
1346
+
1347
+ - `projscan_dependencies` - declared deps, risks. In a monorepo: aggregated totals + `byWorkspace` breakdown; `package` arg scopes to one _(0.13)_.
1335
1348
  - `projscan_outdated` - declared-vs-installed drift (offline). Per-package `byWorkspace`; `package` arg.
1336
- - `projscan_audit` - normalized `npm audit`. `package` arg scopes findings to one workspace's direct deps *(0.13)*.
1349
+ - `projscan_audit` - normalized `npm audit`. `package` arg scopes findings to one workspace's direct deps _(0.13)_.
1337
1350
  - `projscan_upgrade` - upgrade preview (CHANGELOG + importers, offline)
1338
1351
 
1339
1352
  **Workspace (0.11):**
1353
+
1340
1354
  - `projscan_workspaces` - list monorepo packages (npm/yarn/pnpm/Nx/Turbo/Lerna). Use the `name` as the `package` arg on `projscan_hotspots` / `projscan_coupling` to scope.
1341
1355
 
1342
1356
  **Session (1.4):**
1343
- - **`projscan_session`** *(1.4)* - durable cross-invocation session. Subactions: `current` (id + counts), `touched` (files touched this session, sorted by recency, filterable by source: `tool-result` / `fs-watch` / `explicit`), `events` (chronological log), `reset` (start a fresh session). Auto-populated from every tool result and from `notifications/file_changed` push events when `--watch` is on. MCP resources and agent briefs add `coordinationHints` so agents can separate current worktree checks from remembered session context before parallel edits continue.
1357
+
1358
+ - **`projscan_session`** _(1.4)_ - durable cross-invocation session. Subactions: `current` (id + counts), `touched` (files touched this session, sorted by recency, filterable by source: `tool-result` / `fs-watch` / `explicit`), `events` (chronological log), `reset` (start a fresh session). Auto-populated from every tool result and from `notifications/file_changed` push events when `--watch` is on. MCP resources and agent briefs add `coordinationHints` so agents can separate current worktree checks from remembered session context before parallel edits continue.
1344
1359
 
1345
1360
  **Memory (1.5):**
1346
- - **`projscan_memory`** *(1.5)* - durable, local-only feedback loop. Records, per analyzer rule id, how many runs surfaced it and how many fixed it. Subactions: `current` (aggregate counts), `stable` (rules surfaced across ≥ 3 runs over ≥ 7 days without ever being fixed — paired with a ready-to-paste `.projscanrc.json disableRules` snippet), `runs` (every tracked rule with full history), `forget` (drop a single rule). Stored at `.projscan-memory/memory.json`; never leaves the machine. Lets an agent ask "what is this project tolerating?" and propose quieting it.
1361
+
1362
+ - **`projscan_memory`** _(1.5)_ - durable, local-only feedback loop. Records, per analyzer rule id, how many runs surfaced it and how many fixed it. Subactions: `current` (aggregate counts), `stable` (rules surfaced across ≥ 3 runs over ≥ 7 days without ever being fixed — paired with a ready-to-paste `.projscanrc.json disableRules` snippet), `runs` (every tracked rule with full history), `forget` (drop a single rule). Stored at `.projscan-memory/memory.json`; never leaves the machine. Lets an agent ask "what is this project tolerating?" and propose quieting it.
1347
1363
 
1348
1364
  **Operator (1.6):**
1349
- - **`projscan_workspace_graph`** *(1.6)* - cross-repo intelligence over locally trusted sibling repos registered with `projscan workspace add` and stored under `.projscan-cache/workspace.json`. Subactions: `list` (registered repos + parsed-file + export counts), `graph` (every symbol exported by ≥ 2 repos — the candidate refactor / API contract surface), `file_importers` (given a file in one repo, every other repo whose graph imports it). Read-only.
1350
- - **`projscan_apply_fix`** *(1.6)* - mechanically execute the safe fix templates. Default is dry-run; pass `confirm: true` to write. Atomic writes, per-apply rollback record at `.projscan-cache/rollbacks/<id>.json`. Reverse with `action: "rollback", rollback_id: ...`. Six templates supported at this release: `unused-dependency-*`, `missing-test-framework`, `missing-eslint`, `missing-prettier`, `missing-editorconfig`, `missing-readme`.
1351
- - **`projscan_taint`** *(1.6)* - source-to-sink reachability over the per-function call graph. Built-in defaults cover common JS / Python sources (`process.env`, `req.body`, etc.) and sinks (`exec`, `eval`, `db.query`, etc.). Project-specific names go in `.projscanrc.json` `taint`. `projscan_review` automatically diffs taint flows between base and head and **blocks any PR that introduces a new flow**. In 3.0.2, review surfaces hardened `newDataflowRisks`, compact `graphEvidence`, and graph-readiness gates for safer handoff.
1365
+
1366
+ - **`projscan_workspace_graph`** _(1.6)_ - cross-repo intelligence over locally trusted sibling repos registered with `projscan workspace add` and stored under `.projscan-cache/workspace.json`. Subactions: `list` (registered repos + parsed-file + export counts), `graph` (every symbol exported by ≥ 2 repos — the candidate refactor / API contract surface), `file_importers` (given a file in one repo, every other repo whose graph imports it). Read-only.
1367
+ - **`projscan_apply_fix`** _(1.6)_ - mechanically execute the safe fix templates. Default is dry-run; pass `confirm: true` to write. Atomic writes, per-apply rollback record at `.projscan-cache/rollbacks/<id>.json`. Reverse with `action: "rollback", rollback_id: ...`. Six templates supported at this release: `unused-dependency-*`, `missing-test-framework`, `missing-eslint`, `missing-prettier`, `missing-editorconfig`, `missing-readme`.
1368
+ - **`projscan_taint`** _(1.6)_ - source-to-sink reachability over the per-function call graph. Built-in defaults cover common JS / Python sources (`process.env`, `req.body`, etc.) and sinks (`exec`, `eval`, `db.query`, etc.). Project-specific names go in `.projscanrc.json` `taint`. `projscan_review` automatically diffs taint flows between base and head and **blocks any PR that introduces a new flow**. In 3.0.2, review surfaces hardened `newDataflowRisks`, compact `graphEvidence`, and graph-readiness gates for safer handoff.
1352
1369
 
1353
1370
  Analyzer plugins can optionally read graph/dataflow context through `check(rootPath, files, context)` while staying on manifest schema v1. The packaged `graph-context` example shows `context.getSemanticGraph()` and `context.getDataflow()` in a real analyzer. For analyzer and reporter plugin authoring, manifest validation, `--reporter <name>`, and the trust model, see [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/PLUGIN-AUTHORING.md).
1354
1371
 
@@ -1362,7 +1379,7 @@ Analyzer plugins can optionally read graph/dataflow context through `check(rootP
1362
1379
 
1363
1380
  ### Semantic search (0.9.0+, opt-in)
1364
1381
 
1365
- projscan ships with BM25-ranked lexical search by default. To unlock **true semantic search** - embeddings over file content so queries like *"which file implements auth"* hit files that don't literally contain the word "auth" - install the optional peer:
1382
+ projscan ships with BM25-ranked lexical search by default. To unlock **true semantic search** - embeddings over file content so queries like _"which file implements auth"_ hit files that don't literally contain the word "auth" - install the optional peer:
1366
1383
 
1367
1384
  ```bash
1368
1385
  npm install @xenova/transformers
@@ -1370,11 +1387,16 @@ projscan search "verifying user credentials" --mode semantic
1370
1387
  ```
1371
1388
 
1372
1389
  Or via the MCP tool:
1390
+
1373
1391
  ```json
1374
- { "name": "projscan_search", "arguments": { "query": "verifying user credentials", "mode": "semantic" } }
1392
+ {
1393
+ "name": "projscan_search",
1394
+ "arguments": { "query": "verifying user credentials", "mode": "semantic" }
1395
+ }
1375
1396
  ```
1376
1397
 
1377
1398
  Modes on `projscan_search`:
1399
+
1378
1400
  - `lexical` (default) - BM25 over content + symbol + path boosts. No peer needed.
1379
1401
  - `semantic` - cosine similarity on `Xenova/all-MiniLM-L6-v2` embeddings. Requires peer.
1380
1402
  - `hybrid` - both, fused via Reciprocal Rank Fusion. Requires peer.
@@ -1396,14 +1418,16 @@ All opt-in - default behavior is unchanged.
1396
1418
  projscan caches parsed ASTs at `.projscan-cache/graph.json` (auto-gitignored). First run populates it; subsequent runs re-parse only files whose `mtime` changed. Agent queries on a warm cache are milliseconds, not seconds.
1397
1419
 
1398
1420
  ### Prompts (6, parameterized with live project data)
1421
+
1399
1422
  - `prioritize_refactoring` - ranked plan grounded in current hotspots
1400
1423
  - `investigate_file` - senior-engineer brief for a specific file
1401
- - **`refactor_hotspot`** *(1.5)* - step-by-step refactor plan for one hotspot file
1402
- - **`triage_doctor_issues`** *(1.5)* - critical / important / backlog ordering of open issues
1403
- - **`review_this_pr`** *(1.5)* - PR-comment-ready review primed with the structural diff and verdict
1404
- - **`safely_rename_symbol`** *(1.5)* - ordered rename + verification checklist via `projscan_impact` blast radius
1424
+ - **`refactor_hotspot`** _(1.5)_ - step-by-step refactor plan for one hotspot file
1425
+ - **`triage_doctor_issues`** _(1.5)_ - critical / important / backlog ordering of open issues
1426
+ - **`review_this_pr`** _(1.5)_ - PR-comment-ready review primed with the structural diff and verdict
1427
+ - **`safely_rename_symbol`** _(1.5)_ - ordered rename + verification checklist via `projscan_impact` blast radius
1405
1428
 
1406
1429
  ### Resources (3, readable on demand)
1430
+
1407
1431
  - `projscan://health` · `projscan://hotspots` · `projscan://structure`
1408
1432
 
1409
1433
  ## Use Cases