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/dist/types.d.ts CHANGED
@@ -1,2348 +1,34 @@
1
- export interface ScanResult {
2
- rootPath: string;
3
- totalFiles: number;
4
- totalDirectories: number;
5
- files: FileEntry[];
6
- directoryTree: DirectoryNode;
7
- scanDurationMs: number;
8
- scanBoundary: ScanBoundary;
9
- }
10
- export interface ScanBoundary {
11
- source: 'git' | 'glob';
12
- gitignoreRespected: boolean;
13
- includeIgnored: boolean;
14
- ignoredFileCount: number;
15
- }
16
- export interface FileEntry {
17
- relativePath: string;
18
- absolutePath: string;
19
- extension: string;
20
- sizeBytes: number;
21
- directory: string;
22
- }
23
- export interface DirectoryNode {
24
- name: string;
25
- path: string;
26
- children: DirectoryNode[];
27
- fileCount: number;
28
- totalFileCount: number;
29
- }
30
- export interface LanguageBreakdown {
31
- primary: string;
32
- languages: Record<string, LanguageStat>;
33
- }
34
- export interface LanguageStat {
35
- name: string;
36
- fileCount: number;
37
- percentage: number;
38
- extensions: string[];
39
- }
40
- export interface FrameworkResult {
41
- frameworks: DetectedFramework[];
42
- buildTools: string[];
43
- packageManager: 'npm' | 'yarn' | 'pnpm' | 'unknown';
44
- }
45
- export interface DetectedFramework {
46
- name: string;
47
- version?: string;
48
- category: 'frontend' | 'backend' | 'testing' | 'bundler' | 'css' | 'other';
49
- confidence: 'high' | 'medium' | 'low';
50
- }
51
- export interface DependencyReport {
52
- totalDependencies: number;
53
- totalDevDependencies: number;
54
- dependencies: Record<string, string>;
55
- devDependencies: Record<string, string>;
56
- risks: DependencyRisk[];
57
- licenses?: DependencyLicenseSummary;
58
- sizes?: DependencySizeSummary;
59
- /**
60
- * Per-workspace breakdown when scanning a monorepo (0.13.0+). Absent for
61
- * single-package repos. The top-level `totalDependencies`,
62
- * `totalDevDependencies`, `dependencies`, `devDependencies`, and `risks`
63
- * fields aggregate across all workspaces (root manifest + each package).
64
- * For per-package detail, read this array.
65
- */
66
- byWorkspace?: Array<{
67
- workspace: string;
68
- relativePath: string;
69
- isRoot: boolean;
70
- totalDependencies: number;
71
- totalDevDependencies: number;
72
- risks: DependencyRisk[];
73
- }>;
74
- }
75
- export interface DependencyLicenseEntry {
76
- name: string;
77
- version: string;
78
- scope: 'production' | 'development';
79
- license: string | null;
80
- workspace?: string;
81
- }
82
- export interface DependencyLicenseSummary {
83
- packages: DependencyLicenseEntry[];
84
- byLicense: Record<string, number>;
85
- unknown: string[];
86
- copyleft: DependencyLicenseEntry[];
87
- noticeCandidates: DependencyLicenseEntry[];
88
- }
89
- export interface DependencySizeEntry {
90
- name: string;
91
- version: string;
92
- scope: 'production' | 'development';
93
- bytes: number | null;
94
- formatted: string;
95
- installed: boolean;
96
- workspace?: string;
97
- }
98
- export interface DependencySizeSummary {
99
- packages: DependencySizeEntry[];
100
- largest: DependencySizeEntry[];
101
- totalBytes: number;
102
- formattedTotal: string;
103
- missing: string[];
104
- }
105
- export interface DependencyRisk {
106
- name: string;
107
- reason: string;
108
- severity: 'low' | 'medium' | 'high';
109
- /** Workspace package name when found in a monorepo workspace manifest. Absent for the root. */
110
- workspace?: string;
111
- }
112
- export type IssueSeverity = 'info' | 'warning' | 'error';
113
- export interface IssueLocation {
114
- file: string;
115
- line?: number;
116
- column?: number;
117
- endLine?: number;
118
- endColumn?: number;
119
- }
120
- export interface Issue {
121
- id: string;
122
- title: string;
123
- description: string;
124
- severity: IssueSeverity;
125
- category: string;
126
- fixAvailable: boolean;
127
- fixId?: string;
128
- locations?: IssueLocation[];
129
- /**
130
- * One-line hint shown inline in projscan_doctor output (0.14.0+). Points
131
- * at the fix-suggest pipeline. Absent when no template matches the issue.
132
- */
133
- suggestedAction?: {
134
- summary: string;
135
- };
136
- }
137
- /**
138
- * Structured action prompt the agent can paste into its plan. Returned by
139
- * projscan_fix_suggest. projscan does not run an LLM - this is rule-driven
140
- * guidance with the issue, the location, and a one-paragraph instruction
141
- * the agent (LLM) is expected to act on.
142
- */
143
- export interface FixSuggestion {
144
- /** Echoes the input issue id when matched. */
145
- issueId: string;
146
- /** Severity level passed through from the source issue. */
147
- severity: IssueSeverity;
148
- /** Issue category passed through. */
149
- category: string;
150
- /** One-line "what is wrong". */
151
- headline: string;
152
- /** 2-4 sentences of why this matters. Severity-anchored. */
153
- why: string;
154
- /** Affected locations (mirrors Issue.locations when known). */
155
- where: IssueLocation[];
156
- /** One-paragraph instruction for the driving agent. */
157
- instruction: string;
158
- /** Optional "verify the fix by..." note. */
159
- suggestedTest?: string;
160
- /** Optional related files (importers, peer rules) for context. */
161
- relatedFiles?: string[];
162
- /** Optional documentation links. */
163
- references?: string[];
164
- }
165
- /**
166
- * Markdown-rendered deep dive for a single issue. Returned by
167
- * projscan_explain_issue. Includes the surrounding code excerpt and any
168
- * git-log evidence of similar fixes already merged in this repo.
169
- */
170
- export interface IssueExplanation {
171
- issueId: string;
172
- title: string;
173
- severity: IssueSeverity;
174
- category: string;
175
- headline: string;
176
- /** Source-code excerpt around the primary location. Empty when no location. */
177
- excerpt: {
178
- file: string;
179
- startLine: number;
180
- endLine: number;
181
- lines: string[];
182
- } | null;
183
- /** Other open issues touching the same file (id + title pairs). */
184
- relatedIssues: Array<{
185
- id: string;
186
- title: string;
187
- }>;
188
- /**
189
- * Git log references where this issue id (or its rule prefix) appears in a
190
- * commit message - hints at how teammates have addressed it before.
191
- * Empty when none found or git history unavailable.
192
- */
193
- similarFixes: Array<{
194
- sha: string;
195
- subject: string;
196
- date: string;
197
- }>;
198
- /** The full FixSuggestion if a template matched; null otherwise. */
199
- fix: FixSuggestion | null;
200
- }
201
- export interface Fix {
202
- id: string;
203
- title: string;
204
- description: string;
205
- issueId: string;
206
- apply: (rootPath: string) => Promise<void>;
207
- }
208
- export interface FixResult {
209
- fix: Fix;
210
- success: boolean;
211
- error?: string;
212
- }
213
- export interface FileExplanation {
214
- filePath: string;
215
- purpose: string;
216
- imports: ImportInfo[];
217
- exports: ExportInfo[];
218
- potentialIssues: string[];
219
- lineCount: number;
220
- }
221
- export interface ImportInfo {
222
- source: string;
223
- specifiers: string[];
224
- isRelative: boolean;
225
- }
226
- export interface ExportInfo {
227
- name: string;
228
- type: 'function' | 'class' | 'variable' | 'type' | 'interface' | 'default' | 'unknown';
229
- }
230
- export interface ArchitectureLayer {
231
- name: string;
232
- technologies: string[];
233
- directories: string[];
234
- }
235
- export interface AnalysisReport {
236
- projectName: string;
237
- rootPath: string;
238
- scan: ScanResult;
239
- languages: LanguageBreakdown;
240
- frameworks: FrameworkResult;
241
- dependencies: DependencyReport | null;
242
- issues: Issue[];
243
- timestamp: string;
244
- }
245
- export interface HealthScore {
246
- score: number;
247
- grade: 'A' | 'B' | 'C' | 'D' | 'F';
248
- errors: number;
249
- warnings: number;
250
- infos: number;
251
- }
252
- export type PreflightMode = 'before_edit' | 'before_commit' | 'before_merge';
253
- export type PreflightVerdict = 'proceed' | 'caution' | 'block';
254
- export type PreflightReasonSource = 'doctor' | 'review' | 'taint' | 'session' | 'plugin' | 'supply-chain' | 'memory' | 'changed-files' | 'hotspots' | 'git' | 'format' | 'release' | 'coordination';
255
- export interface PreflightReason {
256
- severity: IssueSeverity;
257
- source: PreflightReasonSource;
258
- message: string;
259
- file?: string;
260
- issueId?: string;
261
- tool?: string;
262
- }
263
- export interface PreflightRequiredCheck {
264
- name: string;
265
- status: 'pass' | 'warn' | 'fail' | 'unavailable';
266
- reason?: string;
267
- }
268
- export interface PreflightSuggestedAction {
269
- label: string;
270
- command?: string;
271
- tool?: string;
272
- args?: Record<string, unknown>;
273
- }
274
- export interface PreflightReleaseScaleEvidence {
275
- detected: boolean;
276
- changedFiles: number;
277
- threshold: number;
278
- reviewVerdict?: ReviewReport['verdict'];
279
- reviewSummary?: string;
280
- concreteBlockers: string[];
281
- explanation: string;
282
- }
283
- export interface PreflightEvidence {
284
- health?: {
285
- score: number;
286
- grade: HealthScore['grade'];
287
- errors: number;
288
- warnings: number;
289
- infos: number;
290
- };
291
- changedFiles?: {
292
- available: boolean;
293
- count: number;
294
- files: string[];
295
- reason?: string;
296
- };
297
- review?: {
298
- available: boolean;
299
- verdict?: ReviewReport['verdict'];
300
- summary?: string;
301
- reason?: string;
302
- };
303
- session?: {
304
- kind?: 'remembered-session';
305
- id: string;
306
- touchedFiles: string[];
307
- totalTouchedFiles?: number;
308
- eventCount: number;
309
- note?: string;
310
- truncated?: boolean;
311
- };
312
- riskSources?: {
313
- currentWorktree: {
314
- kind: 'current-worktree';
315
- available: boolean;
316
- count: number;
317
- files: string[];
318
- baseRef: string | null;
319
- reason?: string;
320
- };
321
- sessionMemory: {
322
- kind: 'remembered-session';
323
- id: string;
324
- touchedFiles: string[];
325
- totalTouchedFiles: number;
326
- eventCount: number;
327
- note: string;
328
- truncated?: boolean;
329
- };
330
- };
331
- hotspots?: {
332
- touched: Array<{
333
- file: string;
334
- riskScore: number;
335
- }>;
336
- };
337
- plugins?: {
338
- enabled: boolean;
339
- errorIssues: number;
340
- warningIssues: number;
341
- };
342
- supplyChain?: {
343
- errorIssues: number;
344
- warningIssues: number;
345
- };
346
- releaseScale?: PreflightReleaseScaleEvidence;
347
- coordination?: {
348
- available: boolean;
349
- readiness: 'clear' | 'caution' | 'conflicted';
350
- worktreeCount: number;
351
- collisions: {
352
- high: number;
353
- medium: number;
354
- };
355
- contendedClaims: number;
356
- };
357
- }
358
- export interface PreflightReport {
359
- schemaVersion: 1;
360
- mode: PreflightMode;
361
- verdict: PreflightVerdict;
362
- summary: string;
363
- reasons: PreflightReason[];
364
- evidence: PreflightEvidence;
365
- requiredChecks: PreflightRequiredCheck[];
366
- suggestedNextActions: PreflightSuggestedAction[];
367
- toolCalls: PreflightSuggestedAction[];
368
- truncated?: boolean;
369
- }
370
- export type WorkplanMode = PreflightMode | 'refactor' | 'release' | 'bug_hunt' | 'hardening';
371
- export type WorkplanPriority = 'p0' | 'p1' | 'p2';
372
- export interface WorkplanEvidence {
373
- source: PreflightReasonSource | 'coordination' | 'release' | 'verification' | 'graph';
374
- message: string;
375
- severity?: IssueSeverity;
376
- file?: string;
377
- issueId?: string;
378
- tool?: string;
379
- }
380
- export interface WorkplanVerification {
381
- commands: string[];
382
- expected: string;
383
- }
384
- export interface FixFirstRecommendation {
385
- id: string;
386
- title: string;
387
- source: string;
388
- priority: WorkplanPriority;
389
- whyFirst: string;
390
- files: string[];
391
- owner?: string;
392
- commands: string[];
393
- expected?: string;
394
- }
395
- export interface WorkplanTask {
396
- id: string;
397
- priority: WorkplanPriority;
398
- title: string;
399
- why: string;
400
- evidence: WorkplanEvidence[];
401
- files: string[];
402
- owner?: string;
403
- suggestedTools: string[];
404
- verification: WorkplanVerification;
405
- handoffText: string;
406
- }
407
- export interface WorkplanTopRisk extends WorkplanEvidence {
408
- priority: WorkplanPriority;
409
- owner?: string;
410
- }
411
- export interface WorkplanCoordination {
412
- touchedFiles: string[];
413
- conflicts: SessionConflict[];
414
- recommendedNextAgent: string;
415
- }
416
- export interface WorkplanReport {
417
- schemaVersion: 1;
418
- mode: WorkplanMode;
419
- verdict: PreflightVerdict;
420
- summary: string;
421
- topRisks: WorkplanTopRisk[];
422
- tasks: WorkplanTask[];
423
- fixFirst?: FixFirstRecommendation;
424
- coordination: WorkplanCoordination;
425
- suggestedNextActions: PreflightSuggestedAction[];
426
- truncated?: boolean;
427
- }
428
- export interface ReleaseTrainTrack {
429
- line: string;
430
- theme: string;
431
- outcome: string;
432
- includedInPlan: boolean;
433
- scope: string[];
434
- successCriteria: string[];
435
- }
436
- export interface ReleaseTrainTask {
437
- id: string;
438
- priority: WorkplanPriority;
439
- title: string;
440
- why: string;
441
- track: string;
442
- files: string[];
443
- verification: WorkplanVerification;
444
- }
445
- export interface ReleaseTrainReport {
446
- schemaVersion: 1;
447
- currentVersion: string | null;
448
- plan: {
449
- policy: 'product-readiness-plan';
450
- lines: string[];
451
- readOnly: true;
452
- };
453
- readiness: {
454
- verdict: PreflightVerdict;
455
- blockers: number;
456
- cautions: number;
457
- summary: string;
458
- };
459
- tracks: ReleaseTrainTrack[];
460
- tasks: ReleaseTrainTask[];
461
- suggestedNextActions: PreflightSuggestedAction[];
462
- }
463
- export type BugHuntVerdict = 'clean' | 'fix' | 'block';
464
- export interface BugHuntFinding {
465
- id: string;
466
- priority: WorkplanPriority;
467
- source: 'doctor' | 'preflight' | 'session' | 'hotspot' | 'verification';
468
- title: string;
469
- why: string;
470
- files: string[];
471
- evidence: WorkplanEvidence[];
472
- suggestedTools: string[];
473
- verification: WorkplanVerification;
474
- }
475
- export interface BugHuntReport {
476
- schemaVersion: 1;
477
- verdict: BugHuntVerdict;
478
- summary: string;
479
- health: HealthScore;
480
- evidence: {
481
- issueCounts: {
482
- errors: number;
483
- warnings: number;
484
- infos: number;
485
- };
486
- hotspotCount: number;
487
- preflightVerdict: PreflightVerdict;
488
- touchedFiles: string[];
489
- conflicts: number;
490
- };
491
- topSuspects: BugHuntFinding[];
492
- fixQueue: BugHuntFinding[];
493
- fixFirst?: FixFirstRecommendation;
494
- verificationMatrix: Array<{
495
- command: string;
496
- reason: string;
497
- expected: string;
498
- }>;
499
- truncated?: boolean;
500
- }
501
- export type EvidencePackVerdict = 'ready' | 'caution' | 'blocked';
502
- export type EvidencePackArtifactStatus = 'ready' | 'caution' | 'blocked';
503
- export interface EvidencePackArtifact {
504
- id: string;
505
- title: string;
506
- status: EvidencePackArtifactStatus;
507
- summary: string;
508
- evidence: string[];
509
- commands: string[];
510
- }
511
- export interface EvidencePackTopRisk {
512
- priority: WorkplanPriority;
513
- title: string;
514
- files: string[];
515
- owner?: string;
516
- command: string;
517
- }
518
- export interface EvidencePackTeamRoute {
519
- owner: string;
520
- files: string[];
521
- reason: string;
522
- }
523
- export interface EvidencePackTrustCalibration {
524
- verdict: 'clean' | 'manual_review' | 'actual_defect';
525
- summary: string;
526
- concreteBlockers: string[];
527
- manualReviewSignals: string[];
528
- watchSignals: string[];
529
- }
530
- export interface EvidencePackPrSummary {
531
- verdictLabel: string;
532
- decision: string;
533
- trust: EvidencePackTrustCalibration;
534
- topRisks: EvidencePackTopRisk[];
535
- teamRoutes: EvidencePackTeamRoute[];
536
- ownershipSuggestion?: string;
537
- fixFirst?: FixFirstRecommendation;
538
- nextCommands: string[];
539
- baselineTrend?: BaselineTrend;
540
- }
541
- export interface EvidencePackPrCommentValidationCheck {
542
- id: string;
543
- status: 'pass' | 'warn' | 'fail';
544
- summary: string;
545
- }
546
- export interface EvidencePackPrCommentValidation {
547
- status: 'pass' | 'warn' | 'fail';
548
- checks: EvidencePackPrCommentValidationCheck[];
549
- }
550
- export interface EvidencePackReport {
551
- schemaVersion: 1;
552
- currentVersion: string | null;
553
- readOnly: true;
554
- verdict: EvidencePackVerdict;
555
- summary: string;
556
- train: {
557
- lines: string[];
558
- readiness: ReleaseTrainReport['readiness'];
559
- };
560
- approval: {
561
- required: true;
562
- recommendation: string;
563
- blockingReasons: string[];
564
- };
565
- artifacts: EvidencePackArtifact[];
566
- changelogEntries: string[];
567
- websitePrompt?: string;
568
- prComment?: string;
569
- prCommentValidation?: EvidencePackPrCommentValidation;
570
- prSummary?: EvidencePackPrSummary;
571
- suggestedNextActions: PreflightSuggestedAction[];
572
- }
573
- export type RegressionPlanLevel = 'smoke' | 'focused' | 'full';
574
- export type RegressionPlanVerdict = 'ready' | 'needs_tests' | 'blocked';
575
- export interface RegressionPlanTarget {
576
- id: string;
577
- priority: WorkplanPriority;
578
- source: 'baseline' | 'bug-hunt' | 'product-line' | 'preflight';
579
- title: string;
580
- why: string;
581
- files: string[];
582
- verification: WorkplanVerification;
583
- }
584
- export interface RegressionPlanReport {
585
- schemaVersion: 1;
586
- level: RegressionPlanLevel;
587
- verdict: RegressionPlanVerdict;
588
- summary: string;
589
- releaseLines: string[];
590
- evidence: {
591
- healthScore: number;
592
- bugHuntVerdict: BugHuntVerdict;
593
- preflightVerdict: PreflightVerdict;
594
- changedFiles: number;
595
- touchedFiles: number;
596
- };
597
- targets: RegressionPlanTarget[];
598
- commands: string[];
599
- suggestedNextActions: PreflightSuggestedAction[];
600
- truncated?: boolean;
601
- }
602
- export type AgentBriefIntent = 'next_agent' | 'bug_hunt' | 'release' | 'refactor' | 'hardening';
603
- export interface AgentBriefItem {
604
- id: string;
605
- priority: WorkplanPriority;
606
- title: string;
607
- why: string;
608
- files: string[];
609
- commands: string[];
610
- }
611
- export interface AgentBriefGuardrail {
612
- id: string;
613
- label: string;
614
- reason: string;
615
- command: string;
616
- }
617
- export interface GraphEvidenceSummary {
618
- schemaVersion: 1;
619
- changedFiles?: number;
620
- changedFunctions?: number;
621
- totalFunctions: number;
622
- totalPackages: number;
623
- totalCallEdges: number;
624
- dataflowRisks: number;
625
- topPackages: string[];
626
- }
627
- export interface AgentBriefReport {
628
- schemaVersion: 1;
629
- intent: AgentBriefIntent;
630
- summary: string;
631
- health: HealthScore;
632
- context: {
633
- totalFiles: number;
634
- totalDirectories: number;
635
- topDirectories: Array<{
636
- directory: string;
637
- files: number;
638
- }>;
639
- touchedFiles: string[];
640
- conflicts: number;
641
- graph?: GraphEvidenceSummary;
642
- coordinationHints: SessionCoordinationHint[];
643
- };
644
- focus: AgentBriefItem[];
645
- guardrails: AgentBriefGuardrail[];
646
- suggestedNextActions: PreflightSuggestedAction[];
647
- truncated?: boolean;
648
- }
649
- export interface WorkplanHandoffPayload {
650
- summary: string;
651
- verdict: PreflightVerdict;
652
- mode: WorkplanMode;
653
- next: string[];
654
- verificationCommands: string[];
655
- coordination: WorkplanCoordination;
656
- markdown: string;
657
- }
658
- export interface StartWorkflowRecommendation {
659
- id: string;
660
- name: string;
661
- why: string;
662
- commands: string[];
663
- mcpTools: string[];
664
- }
665
- export interface StartRisk {
666
- id: string;
667
- priority: WorkplanPriority;
668
- title: string;
669
- source: string;
670
- files: string[];
671
- command: string;
672
- }
673
- export interface StartAdoptionGap {
674
- id: string;
675
- status: 'info' | 'warn' | 'fail';
676
- title: string;
677
- summary: string;
678
- command?: string;
679
- }
680
- export interface StartAdoptionLoopMetric {
681
- id: string;
682
- label: string;
683
- target: string;
684
- command?: string;
685
- }
686
- export interface StartAdoptionLoop {
687
- cadence: 'every_pr';
688
- why: string;
689
- metrics: StartAdoptionLoopMetric[];
690
- nextCommands: string[];
691
- }
692
- export interface StartFirstTenMinutesStep {
693
- id: string;
694
- label: string;
695
- why: string;
696
- command: string;
697
- }
698
- export interface StartFirstTenMinutes {
699
- title: string;
700
- outcome: string;
701
- commands: StartFirstTenMinutesStep[];
702
- }
703
- export type StartModeSource = 'explicit' | 'intent' | 'default';
704
- export type StartMissionControlStatus = 'ready' | 'needs_setup' | 'needs_attention' | 'blocked';
705
- export interface StartRoutedIntent {
706
- intent: string;
707
- category: string;
708
- tool: string;
709
- cli: string;
710
- why: string;
711
- example: string;
712
- confidence: 'high' | 'medium' | 'low';
713
- rank: number;
714
- score: number;
715
- matchedKeywords: string[];
716
- }
717
- export interface StartUnresolvedInput {
718
- name: string;
719
- placeholder: string;
720
- sourceAction: string;
721
- instruction: string;
722
- }
723
- export interface StartMissionResumeReference {
724
- id: string;
725
- phaseId: StartExecutionPhaseId;
726
- kind: StartExecutionStepKind;
727
- status: StartExecutionStatus;
728
- label: string;
729
- instruction?: string;
730
- command?: string;
731
- placeholder?: string;
732
- }
733
- export interface StartMissionToolCall {
734
- tool: string;
735
- args?: Record<string, unknown>;
736
- }
737
- export interface StartMissionProofToolCall extends StartMissionToolCall {
738
- stepId: string;
739
- command: string;
740
- }
741
- export interface StartMissionProofItem {
742
- stepId: string;
743
- status: StartExecutionStatus;
744
- label: string;
745
- command: string;
746
- toolCall?: StartMissionToolCall;
747
- }
748
- export interface StartMissionInputBinding {
749
- inputId: string;
750
- label: string;
751
- placeholder: string;
752
- instruction: string;
753
- followUpIds: string[];
754
- }
755
- export type StartMissionResumeChecklistItemKind = 'run_current' | 'resolve_input' | 'run_follow_up' | 'run_proof' | 'confirm_done';
756
- export interface StartMissionResumeChecklistItem {
757
- id: string;
758
- kind: StartMissionResumeChecklistItemKind;
759
- phaseId: StartExecutionPhaseId;
760
- stepId: string;
761
- status: StartExecutionStatus;
762
- label: string;
763
- command?: string;
764
- tool?: string;
765
- args?: Record<string, unknown>;
766
- placeholder?: string;
767
- instruction?: string;
768
- blockedBy?: string[];
769
- dependsOn?: string[];
770
- unlocks?: string[];
771
- followUpIds?: string[];
772
- }
773
- export interface StartMissionResumeFollowUp {
774
- id: string;
775
- phaseId: StartExecutionPhaseId;
776
- kind: StartExecutionStepKind;
777
- status: StartExecutionStatus;
778
- label: string;
779
- command?: string;
780
- tool?: string;
781
- args?: Record<string, unknown>;
782
- blockedBy?: string[];
783
- dependsOn?: string[];
784
- }
785
- export interface StartMissionResume {
786
- currentStep: StartExecutionCursor;
787
- status: StartExecutionStatus;
788
- instruction: string;
789
- prompt: string;
790
- commandBlock?: string;
791
- toolCall?: StartMissionToolCall;
792
- followUps?: StartMissionResumeFollowUp[];
793
- inputBindings?: StartMissionInputBinding[];
794
- checklist?: StartMissionResumeChecklistItem[];
795
- remainingProofItems?: StartMissionProofItem[];
796
- remainingProofCommands?: string[];
797
- remainingProofToolCalls?: StartMissionProofToolCall[];
798
- unlocks?: StartMissionResumeReference[];
799
- blockedBy?: StartMissionResumeReference[];
800
- }
801
- export interface StartMissionHandoff {
802
- currentStep: StartExecutionCursor;
803
- resume: StartMissionResume;
804
- reviewGate: StartMissionReviewGate;
805
- nextAction: PreflightSuggestedAction;
806
- readyActions: PreflightSuggestedAction[];
807
- needsInput: StartUnresolvedInput[];
808
- doneWhen: string[];
809
- readyProof: {
810
- summary: string;
811
- commands: string[];
812
- toolCalls?: StartMissionProofToolCall[];
813
- items?: StartMissionProofItem[];
814
- };
815
- }
816
- export type StartExecutionPhaseId = 'next_action' | 'ready_now' | 'resolve_inputs' | 'follow_up' | 'proof' | 'done_when';
817
- export type StartExecutionStatus = 'ready' | 'blocked' | 'pending';
818
- export type StartExecutionStepKind = 'tool' | 'input' | 'proof' | 'criterion' | 'handoff';
819
- export interface StartExecutionStep {
820
- id: string;
821
- kind: StartExecutionStepKind;
822
- status: StartExecutionStatus;
823
- label: string;
824
- command?: string;
825
- tool?: string;
826
- args?: Record<string, unknown>;
827
- instruction?: string;
828
- placeholder?: string;
829
- dependsOn?: string[];
830
- blockedBy?: string[];
831
- unlocks?: string[];
832
- }
833
- export interface StartExecutionPhase {
834
- id: StartExecutionPhaseId;
835
- title: string;
836
- status: StartExecutionStatus;
837
- steps: StartExecutionStep[];
838
- }
839
- export interface StartExecutionCursor {
840
- phaseId: StartExecutionPhaseId;
841
- stepId: string;
842
- status: StartExecutionStatus;
843
- kind: StartExecutionStepKind;
844
- label: string;
845
- command?: string;
846
- tool?: string;
847
- args?: Record<string, unknown>;
848
- instruction?: string;
849
- placeholder?: string;
850
- blockedBy?: string[];
851
- unlocks?: string[];
852
- reason: string;
853
- }
854
- export interface StartExecutionPlan {
855
- summary: string;
856
- currentPhase: StartExecutionPhaseId;
857
- cursor: StartExecutionCursor;
858
- phases: StartExecutionPhase[];
859
- }
860
- export interface StartMissionRunbook {
861
- title: string;
862
- status: StartMissionControlStatus;
863
- currentPhase: StartExecutionPhaseId;
864
- currentStep: StartExecutionCursor;
865
- resume: StartMissionResume;
866
- readyCommandBlock: string;
867
- blockedInputSummary?: string;
868
- markdown: string;
869
- }
870
- export interface StartMissionReviewWorktree {
871
- available: boolean;
872
- clean: boolean;
873
- changedFileCount: number;
874
- files: string[];
875
- baseRef: string | null;
876
- summary: string;
877
- reason?: string;
878
- }
879
- export interface StartMissionReviewProof {
880
- summary: string;
881
- commands: string[];
882
- toolCalls?: StartMissionProofToolCall[];
883
- items?: StartMissionProofItem[];
884
- }
885
- export type StartMissionReviewBlockedAction = 'next_slice' | 'release' | 'publish' | 'deploy' | 'push' | 'merge' | 'version_bump';
886
- export interface StartMissionReviewPolicy {
887
- approvalRequired: true;
888
- blockedActions: StartMissionReviewBlockedAction[];
889
- summary: string;
890
- }
891
- export interface StartMissionReviewDecision {
892
- id: 'approve_next_slice' | 'request_changes' | 'review_version_candidate';
893
- label: string;
894
- description: string;
895
- consequence: string;
896
- reply: string;
897
- }
898
- export interface StartMissionReviewGate {
899
- title: string;
900
- required: true;
901
- status: StartMissionControlStatus;
902
- stopCondition: string;
903
- reviewPrompt: string;
904
- checklist: string[];
905
- doneWhen: string[];
906
- policy: StartMissionReviewPolicy;
907
- decisions: StartMissionReviewDecision[];
908
- commands: string[];
909
- worktree: StartMissionReviewWorktree;
910
- proof: StartMissionReviewProof;
911
- markdown: string;
912
- }
913
- export type MissionRunStatus = 'not_run' | 'running' | 'passed' | 'failed' | 'unknown';
914
- export interface MissionProofStatusRow {
915
- id: string;
916
- label?: string;
917
- log?: string;
918
- command?: string;
919
- exitCode?: number;
920
- }
921
- export interface MissionReviewDecisionRecord {
922
- decision: 'approve_next_slice' | 'request_changes' | 'review_version_candidate' | string;
923
- reviewer?: string;
924
- at?: string;
925
- note?: string;
926
- }
927
- export interface MissionOutcome {
928
- schemaVersion: 1;
929
- available: boolean;
930
- missionDir: string;
931
- status: MissionRunStatus;
932
- reason?: string;
933
- nextAction?: string;
934
- proof: {
935
- completedCommands: number;
936
- failedCommands: number;
937
- reruns: number;
938
- totalCommands?: number;
939
- failedStep?: string;
940
- failedLog?: string;
941
- exitCode?: number;
942
- rows: MissionProofStatusRow[];
943
- };
944
- review: {
945
- decisions: MissionReviewDecisionRecord[];
946
- approvals: number;
947
- changeRequests: number;
948
- versionCandidateReviews: number;
949
- };
950
- whatChanged: string[];
951
- whatRemains: string[];
952
- versionCandidate: {
953
- recommendation: 'run_proof' | 'wait' | 'review_candidate' | 'do_not_cut';
954
- summary: string;
955
- };
956
- resumePrompt: string;
957
- }
958
- export interface MissionProofBaselineRun {
959
- id: string;
960
- status: MissionRunStatus;
961
- failedGates?: number;
962
- reruns?: number;
963
- minutesSpent?: number;
964
- reviewerApprovals?: number;
965
- }
966
- export interface MissionProofTotals {
967
- missions: number;
968
- passed: number;
969
- failed: number;
970
- running: number;
971
- notRun: number;
972
- unavailable: number;
973
- proofCompletionRate: number;
974
- reruns: number;
975
- failedGates: number;
976
- reviewerApprovals: number;
977
- }
978
- export interface MissionProofReport {
979
- schemaVersion: 1;
980
- readOnly: true;
981
- rootPath: string;
982
- summary: string;
983
- missionControl: {
984
- missions: MissionOutcome[];
985
- totals: MissionProofTotals;
986
- };
987
- baseline?: {
988
- path: string;
989
- runs: MissionProofBaselineRun[];
990
- totals: MissionProofTotals & {
991
- minutesSpent: number;
992
- };
993
- };
994
- comparison?: {
995
- completionRateDelta: number;
996
- rerunsAvoided: number;
997
- failedGatesAvoided: number;
998
- minutesSaved: number;
999
- };
1000
- riskAvoided: string[];
1001
- nextActions: PreflightSuggestedAction[];
1002
- }
1003
- export interface StartMissionTaskCard {
1004
- title: string;
1005
- status: StartMissionControlStatus;
1006
- currentPhase: StartExecutionPhaseId;
1007
- currentStep: StartExecutionCursor;
1008
- markdown: string;
1009
- }
1010
- export interface StartMissionControl {
1011
- intent?: string;
1012
- status: StartMissionControlStatus;
1013
- headline: string;
1014
- whyNow: string;
1015
- primaryAction: PreflightSuggestedAction;
1016
- actionPlan: PreflightSuggestedAction[];
1017
- readyActions: PreflightSuggestedAction[];
1018
- routedIntent?: StartRoutedIntent;
1019
- alternatives?: StartRoutedIntent[];
1020
- unresolvedInputs: StartUnresolvedInput[];
1021
- guardrails: PreflightSuggestedAction[];
1022
- successCriteria: string[];
1023
- proofSummary: string;
1024
- proofCommands: string[];
1025
- resume: StartMissionResume;
1026
- handoff: StartMissionHandoff;
1027
- executionPlan: StartExecutionPlan;
1028
- runbook: StartMissionRunbook;
1029
- reviewGate: StartMissionReviewGate;
1030
- taskCard: StartMissionTaskCard;
1031
- outcome?: MissionOutcome;
1032
- handoffPrompt: string;
1033
- }
1034
- export interface StartReport {
1035
- schemaVersion: 1;
1036
- readOnly: true;
1037
- rootPath: string;
1038
- mode: WorkplanMode;
1039
- modeSource: StartModeSource;
1040
- modeReason: string;
1041
- summary: string;
1042
- setup: {
1043
- overall: 'pass' | 'warn' | 'fail' | 'info';
1044
- diagnostics: Array<{
1045
- id: string;
1046
- label: string;
1047
- status: 'pass' | 'warn' | 'fail' | 'info';
1048
- summary: string;
1049
- detail?: string;
1050
- command?: string;
1051
- }>;
1052
- };
1053
- recommendedWorkflow: StartWorkflowRecommendation;
1054
- firstTenMinutes: StartFirstTenMinutes;
1055
- missionControl: StartMissionControl;
1056
- coordinationHints: SessionCoordinationHint[];
1057
- evidence: {
1058
- workplanVerdict: PreflightVerdict;
1059
- workplanSummary: string;
1060
- qualityVerdict: QualityScorecardVerdict;
1061
- qualitySummary: string;
1062
- healthScore: number;
1063
- mcpReady: boolean;
1064
- riskSources: {
1065
- currentWorktree: {
1066
- kind: 'current-worktree';
1067
- available: boolean;
1068
- count: number;
1069
- files: string[];
1070
- baseRef: string | null;
1071
- reason?: string;
1072
- };
1073
- sessionMemory: {
1074
- kind: 'remembered-session';
1075
- touchedFiles: string[];
1076
- totalTouchedFiles: number;
1077
- note: string;
1078
- truncated?: boolean;
1079
- };
1080
- };
1081
- };
1082
- topRisks: StartRisk[];
1083
- fixFirst?: FixFirstRecommendation;
1084
- adoptionGaps: StartAdoptionGap[];
1085
- adoptionLoop?: StartAdoptionLoop;
1086
- nextActions: PreflightSuggestedAction[];
1087
- handoff?: WorkplanHandoffPayload;
1088
- truncated?: boolean;
1089
- }
1090
- export type DogfoodRepoStatus = 'pass' | 'warn' | 'fail';
1091
- export interface DogfoodFeedbackResponse {
1092
- repo?: string;
1093
- pr?: string;
1094
- reviewer?: string;
1095
- useful?: boolean;
1096
- minutesSaved?: number;
1097
- preventedBadEdit?: boolean;
1098
- ownerRoutingClear?: boolean;
1099
- nextCommandClear?: boolean;
1100
- falsePositiveRules?: string[];
1101
- missingSignals?: string[];
1102
- noisyFindings?: string[];
1103
- note?: string;
1104
- }
1105
- export interface DogfoodFeedbackInput {
1106
- schemaVersion?: 1;
1107
- questions?: string[];
1108
- responses: DogfoodFeedbackResponse[];
1109
- }
1110
- export interface FeedbackTemplateResult extends DogfoodFeedbackInput {
1111
- schemaVersion: 1;
1112
- path: string;
1113
- createdAt: string;
1114
- instructions: string[];
1115
- }
1116
- export interface FeedbackSummaryReport {
1117
- schemaVersion: 1;
1118
- path: string;
1119
- responses: number;
1120
- usefulResponses: number;
1121
- distinctRepos: number;
1122
- distinctPrs: number;
1123
- minutesSaved: {
1124
- total: number;
1125
- average: number;
1126
- max: number;
1127
- };
1128
- preventedBadEdits: number;
1129
- ownerRoutingClear: number;
1130
- nextCommandClear: number;
1131
- repeatUse: {
1132
- distinctPrs: number;
1133
- repeatedRepos: number;
1134
- requiredDistinctPrs: number;
1135
- requiredRepeatedRepos: number;
1136
- ready: boolean;
1137
- };
1138
- falsePositive: {
1139
- totalReports: number;
1140
- noisyRules: Array<{
1141
- rule: string;
1142
- count: number;
1143
- }>;
1144
- missingSignals: Array<{
1145
- signal: string;
1146
- count: number;
1147
- }>;
1148
- noisyFindings: Array<{
1149
- finding: string;
1150
- count: number;
1151
- }>;
1152
- };
1153
- nextDogfoodCommand: string;
1154
- }
1155
- export interface DogfoodRepoValidation {
1156
- feedbackResponses: number;
1157
- usefulResponses: number;
1158
- prRefs: string[];
1159
- minutesSaved: number;
1160
- preventedBadEdits: number;
1161
- ownerRoutingClear: number;
1162
- nextCommandClear: number;
1163
- falsePositiveRules: string[];
1164
- missingSignals: string[];
1165
- noisyFindings: string[];
1166
- }
1167
- export interface DogfoodWebsiteProof {
1168
- headline: string;
1169
- metrics: string[];
1170
- bullets: string[];
1171
- markdown: string;
1172
- }
1173
- export interface DogfoodMarketValidation {
1174
- status: 'proven' | 'needs_feedback' | 'needs_more_repos' | 'needs_tuning';
1175
- summary: string;
1176
- proofGates: Array<{
1177
- id: 'repo-coverage' | 'reviewer-feedback' | 'useful-feedback' | 'repeat-use' | 'measured-value' | 'false-positive-balance';
1178
- status: 'pass' | 'fail';
1179
- summary: string;
1180
- command: string;
1181
- }>;
1182
- nextProofStep: string;
1183
- repoCoverage: {
1184
- target: number;
1185
- evaluated: number;
1186
- targetMet: boolean;
1187
- };
1188
- feedback: {
1189
- responses: number;
1190
- usefulResponses: number;
1191
- usefulnessRate: number;
1192
- preventedBadEdits: number;
1193
- ownerRoutingClear: number;
1194
- nextCommandClear: number;
1195
- minutesSaved: {
1196
- total: number;
1197
- average: number;
1198
- max: number;
1199
- };
1200
- };
1201
- falsePositive: {
1202
- totalReports: number;
1203
- noisyRules: Array<{
1204
- rule: string;
1205
- count: number;
1206
- }>;
1207
- missingSignals: Array<{
1208
- signal: string;
1209
- count: number;
1210
- }>;
1211
- noisyFindings: Array<{
1212
- finding: string;
1213
- count: number;
1214
- }>;
1215
- };
1216
- firstPr: {
1217
- readyRepos: number;
1218
- repeatUseReadyRepos: number;
1219
- requiredFeedbackQuestions: string[];
1220
- };
1221
- value: {
1222
- averageMinutesSaved: number;
1223
- requiredAverageMinutesSaved: number;
1224
- preventedBadEdits: number;
1225
- ready: boolean;
1226
- };
1227
- repeatUse: {
1228
- distinctPrs: number;
1229
- repeatedRepos: number;
1230
- requiredDistinctPrs: number;
1231
- requiredRepeatedRepos: number;
1232
- ready: boolean;
1233
- };
1234
- websiteProof: DogfoodWebsiteProof;
1235
- }
1236
- export interface DogfoodRepoResult {
1237
- path: string;
1238
- name: string;
1239
- status: DogfoodRepoStatus;
1240
- healthScore: number;
1241
- mcpReady: boolean;
1242
- prCommentReady: boolean;
1243
- repeatUseReady: boolean;
1244
- verdict: EvidencePackVerdict;
1245
- gaps: string[];
1246
- feedbackQuestions: string[];
1247
- validation: DogfoodRepoValidation;
1248
- nextCommands: string[];
1249
- }
1250
- export interface DogfoodReport {
1251
- schemaVersion: 1;
1252
- readOnly: true;
1253
- rootPath: string;
1254
- targetRepoCount: number;
1255
- summary: string;
1256
- repos: DogfoodRepoResult[];
1257
- totals: {
1258
- reposEvaluated: number;
1259
- passingRepos: number;
1260
- warningRepos: number;
1261
- failingRepos: number;
1262
- prCommentReady: number;
1263
- repeatUseReady: number;
1264
- mcpReady: number;
1265
- usefulFeedback: number;
1266
- minutesSaved: number;
1267
- preventedBadEdits: number;
1268
- falsePositiveReports: number;
1269
- };
1270
- marketValidation: DogfoodMarketValidation;
1271
- suggestedNextActions: PreflightSuggestedAction[];
1272
- }
1273
- export type TrialVerdict = 'adopt' | 'pilot' | 'tune' | 'setup';
1274
- export interface TrialReport {
1275
- schemaVersion: 1;
1276
- readOnly: true;
1277
- rootPath: string;
1278
- verdict: TrialVerdict;
1279
- summary: string;
1280
- activation: {
1281
- status: 'pass' | 'warn' | 'fail';
1282
- setupOverall: 'pass' | 'warn' | 'fail';
1283
- healthScore: number;
1284
- mcpReady: boolean;
1285
- adoptionLoopReady: boolean;
1286
- firstPrCommand: string;
1287
- feedbackCommand: string;
1288
- };
1289
- feedback?: FeedbackSummaryReport;
1290
- dogfood: DogfoodReport;
1291
- decision: {
1292
- adoptable: boolean;
1293
- reasons: string[];
1294
- };
1295
- websiteProof: DogfoodWebsiteProof;
1296
- nextCommands: PreflightSuggestedAction[];
1297
- }
1298
- export interface GraphCorpusFixtureMetrics {
1299
- name: string;
1300
- fixture: string;
1301
- files: number;
1302
- functions: number;
1303
- packages: number;
1304
- symbols: number;
1305
- importEdges: number;
1306
- callEdges: number;
1307
- dataflowRisks: number;
1308
- }
1309
- export interface GraphCorpusReport {
1310
- schemaVersion: 1;
1311
- fixtures: GraphCorpusFixtureMetrics[];
1312
- totals: Omit<GraphCorpusFixtureMetrics, 'name' | 'fixture'>;
1313
- }
1314
- export type QualityScorecardVerdict = 'excellent' | 'healthy' | 'needs_attention' | 'blocked';
1315
- export type QualityScorecardStatus = 'pass' | 'watch' | 'fail';
1316
- export interface QualityScorecardDimension {
1317
- id: 'health' | 'security' | 'tests' | 'maintainability' | 'coordination';
1318
- label: string;
1319
- status: QualityScorecardStatus;
1320
- score: number;
1321
- summary: string;
1322
- evidence: string[];
1323
- commands: string[];
1324
- }
1325
- export interface QualityScorecardRisk {
1326
- id: string;
1327
- priority: WorkplanPriority;
1328
- title: string;
1329
- files: string[];
1330
- source: 'issue' | 'hotspot' | 'coordination';
1331
- command: string;
1332
- }
1333
- export interface QualityScorecardReport {
1334
- schemaVersion: 1;
1335
- verdict: QualityScorecardVerdict;
1336
- summary: string;
1337
- health: HealthScore;
1338
- dimensions: QualityScorecardDimension[];
1339
- topRisks: QualityScorecardRisk[];
1340
- fixFirst?: FixFirstRecommendation;
1341
- commands: string[];
1342
- suggestedNextActions: PreflightSuggestedAction[];
1343
- truncated?: boolean;
1344
- }
1345
- export type UnderstandView = 'map' | 'flow' | 'contracts' | 'change' | 'verify';
1346
- export interface UnderstandCitation {
1347
- file: string;
1348
- symbol?: string;
1349
- line?: number;
1350
- reason: string;
1351
- }
1352
- export interface UnderstandClaim {
1353
- id: string;
1354
- title: string;
1355
- detail: string;
1356
- confidence: 'low' | 'medium' | 'high';
1357
- citations: UnderstandCitation[];
1358
- }
1359
- export interface UnderstandEntrypoint {
1360
- file: string;
1361
- kind: 'cli' | 'server' | 'route' | 'package-export' | 'test' | 'script' | 'module';
1362
- symbols: string[];
1363
- why: string;
1364
- citations: UnderstandCitation[];
1365
- }
1366
- export interface UnderstandBoundary {
1367
- name: string;
1368
- files: number;
1369
- publicExports: string[];
1370
- dependsOn: string[];
1371
- citations: UnderstandCitation[];
1372
- }
1373
- export interface UnderstandFlowSideEffect {
1374
- kind: 'database' | 'filesystem' | 'network' | 'process' | 'env' | 'unknown';
1375
- label: string;
1376
- files: string[];
1377
- citations: UnderstandCitation[];
1378
- }
1379
- export interface UnderstandFlow {
1380
- id: string;
1381
- label: string;
1382
- entry: UnderstandEntrypoint;
1383
- path: string[];
1384
- sideEffects: UnderstandFlowSideEffect[];
1385
- confidence: 'low' | 'medium' | 'high';
1386
- citations: UnderstandCitation[];
1387
- }
1388
- export interface UnderstandPublicExport {
1389
- name: string;
1390
- file: string;
1391
- kind: 'package' | 'symbol';
1392
- citations: UnderstandCitation[];
1393
- }
1394
- export interface UnderstandConfigContract {
1395
- name: string;
1396
- file: string;
1397
- kind: 'env' | 'package-script' | 'config-file';
1398
- required: boolean;
1399
- citations: UnderstandCitation[];
1400
- }
1401
- export interface UnderstandBreakingChangeRisk {
1402
- id: string;
1403
- title: string;
1404
- files: string[];
1405
- why: string;
1406
- command: string;
1407
- }
1408
- export interface UnderstandContracts {
1409
- publicExports: UnderstandPublicExport[];
1410
- configContracts: UnderstandConfigContract[];
1411
- breakingChangeRisks: UnderstandBreakingChangeRisk[];
1412
- }
1413
- export interface UnderstandChangeReadiness {
1414
- intent: string;
1415
- blastRadius: Array<{
1416
- label: string;
1417
- files: string[];
1418
- why: string;
1419
- command: string;
1420
- }>;
1421
- safeEdit: {
1422
- title: string;
1423
- files: string[];
1424
- command: string;
1425
- why: string;
1426
- };
1427
- owners: Array<{
1428
- owner: string;
1429
- files: string[];
1430
- reason: string;
1431
- }>;
1432
- rollback: {
1433
- command: string;
1434
- why: string;
1435
- };
1436
- verificationCommands: string[];
1437
- }
1438
- export interface UnderstandVerificationTier {
1439
- id: 'minimal' | 'focused' | 'full';
1440
- label: string;
1441
- commands: string[];
1442
- when: string;
1443
- }
1444
- export interface UnderstandDirectTest {
1445
- file: string;
1446
- tests: string[];
1447
- confidence: 'none' | 'low' | 'medium' | 'high';
1448
- }
1449
- export interface UnderstandVerification {
1450
- tiers: UnderstandVerificationTier[];
1451
- directTests: UnderstandDirectTest[];
1452
- gaps: Array<{
1453
- file: string;
1454
- reason: string;
1455
- command: string;
1456
- }>;
1457
- }
1458
- export interface UnderstandReadFirst {
1459
- file: string;
1460
- why: string;
1461
- command: string;
1462
- citations: UnderstandCitation[];
1463
- }
1464
- export interface UnderstandRisk {
1465
- id: string;
1466
- priority: WorkplanPriority;
1467
- title: string;
1468
- files: string[];
1469
- why: string;
1470
- command: string;
1471
- }
1472
- export interface UnderstandUnknown {
1473
- id: string;
1474
- question: string;
1475
- whyUnknown: string;
1476
- command: string;
1477
- }
1478
- export interface UnderstandReport {
1479
- schemaVersion: 1;
1480
- view: UnderstandView;
1481
- rootPath: string;
1482
- intent?: string;
1483
- summary: string;
1484
- claims: UnderstandClaim[];
1485
- entrypoints: UnderstandEntrypoint[];
1486
- boundaries: UnderstandBoundary[];
1487
- flows: UnderstandFlow[];
1488
- contracts: UnderstandContracts;
1489
- changeReadiness: UnderstandChangeReadiness;
1490
- verification: UnderstandVerification;
1491
- readFirst: UnderstandReadFirst[];
1492
- risks: UnderstandRisk[];
1493
- unknowns: UnderstandUnknown[];
1494
- commands: string[];
1495
- truncated?: boolean;
1496
- }
1497
- export interface SessionCoordinationHint {
1498
- id: 'current-worktree-check' | 'remembered-session-context' | 'resolve-conflicts' | 'swarm-coordination';
1499
- label: string;
1500
- message: string;
1501
- command: string;
1502
- }
1503
- export interface SessionResourceSummary {
1504
- schemaVersion: 1;
1505
- sessionId: string;
1506
- touchedFiles: string[];
1507
- recentIssues: Issue[];
1508
- highRiskTouchedFiles: Array<{
1509
- file: string;
1510
- riskScore: number;
1511
- }>;
1512
- staleSignals: string[];
1513
- coordinationHints: SessionCoordinationHint[];
1514
- truncated?: boolean;
1515
- }
1516
- export interface SessionConflict {
1517
- kind: 'same-file' | 'import-related' | 'same-workspace' | 'taint-related' | 'hotspot-overlap';
1518
- files: string[];
1519
- message: string;
1520
- severity: 'warning' | 'error';
1521
- }
1522
- export interface SessionHandoff {
1523
- schemaVersion: 1;
1524
- summary: SessionResourceSummary;
1525
- remainingRisks: SessionConflict[];
1526
- suggestedNextActions: PreflightSuggestedAction[];
1527
- coordinationHints: SessionCoordinationHint[];
1528
- avoidRepeating: string[];
1529
- }
1530
- export interface RiskNowResource {
1531
- schemaVersion: 1;
1532
- conflicts: SessionConflict[];
1533
- touchedFiles: string[];
1534
- coordinationHints: SessionCoordinationHint[];
1535
- truncated?: boolean;
1536
- }
1537
- export interface PluginTestResult {
1538
- schemaVersion: 1;
1539
- manifestPath: string;
1540
- ok: boolean;
1541
- diagnostics: Array<{
1542
- code: string;
1543
- severity: IssueSeverity;
1544
- message: string;
1545
- }>;
1546
- trust: {
1547
- localOnly: true;
1548
- previewFlag: 'PROJSCAN_PLUGINS_PREVIEW=1';
1549
- reminder: string;
1550
- };
1551
- commands: {
1552
- validate: string;
1553
- test: string;
1554
- execute: string;
1555
- enable: string;
1556
- };
1557
- execution: {
1558
- requested: boolean;
1559
- executed: boolean;
1560
- mode: 'static' | 'execute';
1561
- note: string;
1562
- };
1563
- context: {
1564
- requested: boolean;
1565
- capabilities: Array<'semanticGraph' | 'dataflow'>;
1566
- note: string;
1567
- };
1568
- analyzer?: {
1569
- issues: Issue[];
1570
- };
1571
- reporter?: {
1572
- outputs: Array<{
1573
- command: string;
1574
- text: string;
1575
- }>;
1576
- };
1577
- }
1578
- export interface ReviewContractChange {
1579
- kind: 'export-added' | 'export-removed' | 'export-renamed' | 'entrypoint-changed' | 'public-export-changed' | 'signature-changed';
1580
- file: string;
1581
- symbol?: string;
1582
- before?: string;
1583
- after?: string;
1584
- confidence: 'high' | 'medium' | 'low';
1585
- why: string;
1586
- }
1587
- export interface BaselineHotspot {
1588
- relativePath: string;
1589
- riskScore: number;
1590
- churn: number;
1591
- }
1592
- export interface Baseline {
1593
- score: number;
1594
- grade: HealthScore['grade'];
1595
- issues: {
1596
- id: string;
1597
- title: string;
1598
- severity: IssueSeverity;
1599
- }[];
1600
- hotspots?: BaselineHotspot[];
1601
- issueRuleCounts?: Record<string, number>;
1602
- timestamp: string;
1603
- }
1604
- export interface HotspotDelta {
1605
- relativePath: string;
1606
- beforeScore: number | null;
1607
- afterScore: number | null;
1608
- scoreDelta: number;
1609
- }
1610
- export interface HotspotDiffSummary {
1611
- rose: HotspotDelta[];
1612
- fell: HotspotDelta[];
1613
- appeared: HotspotDelta[];
1614
- resolved: HotspotDelta[];
1615
- }
1616
- export interface BaselineRecurringRule {
1617
- id: string;
1618
- before: number;
1619
- after: number;
1620
- }
1621
- export interface BaselineTrend {
1622
- scoreDirection: 'up' | 'down' | 'flat';
1623
- scoreDelta: number;
1624
- riskDirection?: 'up' | 'down' | 'flat';
1625
- riskDelta?: number;
1626
- qualityScoreBefore?: number;
1627
- qualityScoreAfter?: number;
1628
- newIssueCount?: number;
1629
- resolvedIssueCount?: number;
1630
- changedSinceBaseline?: string[];
1631
- newHotspots: string[];
1632
- recurringNoisyRules: BaselineRecurringRule[];
1633
- summary: string;
1634
- }
1635
- export interface DiffResult {
1636
- before: Baseline;
1637
- after: Baseline;
1638
- scoreDelta: number;
1639
- newIssues: string[];
1640
- resolvedIssues: string[];
1641
- hotspotDiff?: HotspotDiffSummary;
1642
- trend: BaselineTrend;
1643
- }
1644
- export type ReportFormat = 'console' | 'json' | 'markdown' | 'sarif' | 'html';
1645
- export type SemverDrift = 'patch' | 'minor' | 'major' | 'same' | 'unknown';
1646
- export interface OutdatedPackage {
1647
- name: string;
1648
- declared: string;
1649
- installed: string | null;
1650
- latest: string | null;
1651
- drift: SemverDrift;
1652
- scope: 'dependency' | 'devDependency';
1653
- /** Workspace package this dep was declared in. Empty/undefined when not a monorepo. */
1654
- workspace?: string;
1655
- }
1656
- export interface OutdatedReport {
1657
- available: boolean;
1658
- reason?: string;
1659
- totalPackages: number;
1660
- packages: OutdatedPackage[];
1661
- /** Per-workspace breakdown when scanning a monorepo. Empty for single-package repos. */
1662
- byWorkspace?: Array<{
1663
- workspace: string;
1664
- relativePath: string;
1665
- total: number;
1666
- }>;
1667
- }
1668
- export type AuditSeverity = 'critical' | 'high' | 'moderate' | 'low' | 'info';
1669
- export interface AuditFinding {
1670
- name: string;
1671
- severity: AuditSeverity;
1672
- title: string;
1673
- url?: string;
1674
- cve?: string[];
1675
- via: string[];
1676
- range?: string;
1677
- fixAvailable: boolean;
1678
- }
1679
- export interface AuditReport {
1680
- available: boolean;
1681
- reason?: string;
1682
- summary: Record<AuditSeverity, number>;
1683
- findings: AuditFinding[];
1684
- }
1685
- export interface UpgradePreview {
1686
- available: boolean;
1687
- reason?: string;
1688
- name: string;
1689
- declared: string | null;
1690
- installed: string | null;
1691
- latest: string | null;
1692
- drift: SemverDrift;
1693
- breakingMarkers: string[];
1694
- changelogExcerpt?: string;
1695
- importers: string[];
1696
- /**
1697
- * 1.3+ — set when `previewUpgrade` was called with `checkRegistry: true`.
1698
- * "registry" if the latest came from npm; "installed" if we fell back to
1699
- * the locally-installed version (either offline mode or a registry fetch
1700
- * that failed). Absent when no registry attempt was made.
1701
- */
1702
- latestSource?: 'registry' | 'installed';
1703
- /** 1.3+ — set when a registry fetch was attempted and failed. */
1704
- registryError?: string;
1705
- }
1706
- export type CoverageSource = 'lcov' | 'coverage-final' | 'coverage-summary';
1707
- export interface FileCoverage {
1708
- relativePath: string;
1709
- lineCoverage: number;
1710
- linesFound: number;
1711
- linesHit: number;
1712
- }
1713
- export interface CoverageReport {
1714
- available: boolean;
1715
- reason?: string;
1716
- source: CoverageSource | null;
1717
- sourceFile: string | null;
1718
- totalCoverage: number;
1719
- files: FileCoverage[];
1720
- }
1721
- export interface CoverageJoinedHotspot {
1722
- relativePath: string;
1723
- riskScore: number;
1724
- churn: number;
1725
- lineCount: number;
1726
- issueCount: number;
1727
- coverage: number | null;
1728
- priority: number;
1729
- reasons: string[];
1730
- }
1731
- export interface CoverageJoinedReport {
1732
- available: boolean;
1733
- reason?: string;
1734
- coverageSource: CoverageSource | null;
1735
- coverageSourceFile: string | null;
1736
- entries: CoverageJoinedHotspot[];
1737
- }
1738
- export interface ProjscanConfig {
1739
- minScore?: number;
1740
- baseRef?: string;
1741
- hotspots?: {
1742
- limit?: number;
1743
- since?: string;
1744
- };
1745
- ignore?: string[];
1746
- scan?: {
1747
- includeIgnored?: boolean;
1748
- scanEnvValues?: boolean;
1749
- offline?: boolean;
1750
- };
1751
- disableRules?: string[];
1752
- severityOverrides?: Record<string, IssueSeverity>;
1753
- /**
1754
- * Monorepo-specific configuration (0.14.0+). Currently scopes the
1755
- * cross-package import policy: each entry says "package P may only import
1756
- * from these listed packages, or specifically may NOT import from these
1757
- * listed packages." Edges that violate become `cross-package-violation-*`
1758
- * issues in projscan_doctor.
1759
- */
1760
- monorepo?: {
1761
- importPolicy?: ImportPolicyRule[];
1762
- };
1763
- /**
1764
- * Taint analysis tuning (1.6.0+). Both lists merge ON TOP of the
1765
- * built-in defaults — they don't replace them. Use this to add
1766
- * project-specific source/sink names: `customSecretReader`, `query`,
1767
- * `runRawSql`, etc. To suppress a default, list the rule id under
1768
- * `disableRules` (e.g. `taint-flow-detected`).
1769
- */
1770
- taint?: {
1771
- sources?: string[];
1772
- sinks?: string[];
1773
- };
1774
- }
1775
- /**
1776
- * One cross-package import rule. `from` is the package name (matches
1777
- * WorkspacePackage.name). Exactly one of `allow` / `deny` is required. Both
1778
- * lists are package-name globs - a leading `!` negates a single entry, and a
1779
- * single `*` is the wildcard. When both `allow` and `deny` are set, allow
1780
- * is checked first and a hit short-circuits as ALLOWED; otherwise deny is
1781
- * checked.
1782
- */
1783
- export interface ImportPolicyRule {
1784
- from: string;
1785
- allow?: string[];
1786
- deny?: string[];
1787
- }
1788
- export interface LoadedConfig {
1789
- config: ProjscanConfig;
1790
- source: string | null;
1791
- }
1792
- export interface AuthorShare {
1793
- author: string;
1794
- commits: number;
1795
- share: number;
1796
- }
1797
- export interface FileHotspot {
1798
- relativePath: string;
1799
- churn: number;
1800
- distinctAuthors: number;
1801
- daysSinceLastChange: number | null;
1802
- lineCount: number;
1803
- /** AST-derived McCabe complexity. null when no language adapter parsed this file. */
1804
- cyclomaticComplexity: number | null;
1805
- sizeBytes: number;
1806
- issueCount: number;
1807
- issueIds: string[];
1808
- riskScore: number;
1809
- reasons: string[];
1810
- primaryAuthor: string | null;
1811
- primaryAuthorShare: number;
1812
- busFactorOne: boolean;
1813
- topAuthors: AuthorShare[];
1814
- coverage?: number | null;
1815
- /**
1816
- * 1.5+ — true when Project Memory has marked this file as
1817
- * "accepted load-bearing debt" (top-K hotspot for ≥ 5 runs over
1818
- * ≥ 7 days without CC/churn improving). The reporter tags accepted
1819
- * rows so users aren't repeatedly pestered about debt they've
1820
- * implicitly opted into. Absent on older saves / fresh runs.
1821
- */
1822
- accepted?: boolean;
1823
- }
1824
- export interface HotspotReport {
1825
- available: boolean;
1826
- reason?: string;
1827
- window: {
1828
- since: string | null;
1829
- commitsScanned: number;
1830
- };
1831
- hotspots: FileHotspot[];
1832
- totalFilesRanked: number;
1833
- }
1834
- export interface FileCoupling {
1835
- relativePath: string;
1836
- /** Number of files that import this one. */
1837
- fanIn: number;
1838
- /** Number of locally-resolved imports this file makes. */
1839
- fanOut: number;
1840
- /** Bob Martin's instability: fanOut / (fanIn + fanOut). 0 when both are zero. */
1841
- instability: number;
1842
- }
1843
- export interface ImportCycle {
1844
- /** Member files of a strongly-connected component (size >= 2). */
1845
- files: string[];
1846
- size: number;
1847
- }
1848
- export interface CrossPackageEdge {
1849
- /** Importing file + the workspace package it belongs to. */
1850
- from: {
1851
- file: string;
1852
- package: string;
1853
- };
1854
- /** Imported file + the workspace package it belongs to. */
1855
- to: {
1856
- file: string;
1857
- package: string;
1858
- };
1859
- }
1860
- export interface CouplingReport {
1861
- files: FileCoupling[];
1862
- cycles: ImportCycle[];
1863
- /**
1864
- * Edges where importer and imported live in different workspace packages
1865
- * (0.11). Empty when no workspace info was supplied or when all edges are
1866
- * intra-package. Useful for spotting unauthorized deep imports across
1867
- * package boundaries.
1868
- */
1869
- crossPackageEdges: CrossPackageEdge[];
1870
- totalFiles: number;
1871
- totalCycles: number;
1872
- totalCrossPackageEdges: number;
1873
- }
1874
- export type WorkspaceKind = 'npm' | 'yarn' | 'pnpm' | 'nx' | 'turbo' | 'lerna' | 'none';
1875
- export interface WorkspacePackage {
1876
- /** package.json `name` field, or directory basename when missing. */
1877
- name: string;
1878
- /** Workspace-relative path of the package root (no leading `/`, no trailing `/`). */
1879
- relativePath: string;
1880
- /** package.json `version` if available. */
1881
- version?: string;
1882
- /** True when this is the workspace root itself. */
1883
- isRoot: boolean;
1884
- }
1885
- export interface WorkspaceInfo {
1886
- kind: WorkspaceKind;
1887
- /** All packages, including the root if it has its own package.json. */
1888
- packages: WorkspacePackage[];
1889
- /** Source manifest used to discover packages, e.g. "package.json#workspaces" or "pnpm-workspace.yaml". */
1890
- source?: string;
1891
- }
1892
- export interface ExportRename {
1893
- from: string;
1894
- to: string;
1895
- }
1896
- export interface FileAstDiff {
1897
- relativePath: string;
1898
- status: 'added' | 'removed' | 'modified';
1899
- exportsAdded: string[];
1900
- exportsRemoved: string[];
1901
- /**
1902
- * Heuristically-detected renames (0.11). When an export disappears from
1903
- * base AND a similar new name appears in head AND no other export matches,
1904
- * we report it here instead of as a +/- pair. Removed/added lists exclude
1905
- * any names that ended up in renames.
1906
- */
1907
- exportsRenamed: ExportRename[];
1908
- importsAdded: string[];
1909
- importsRemoved: string[];
1910
- callsAdded: string[];
1911
- callsRemoved: string[];
1912
- /** CC(head) - CC(base). null when either side wasn't AST-parsed. */
1913
- cyclomaticDelta: number | null;
1914
- /** fanIn(head) - fanIn(base). null when graph entry missing on either side. */
1915
- fanInDelta: number | null;
1916
- }
1917
- export interface PrDiffReport {
1918
- available: boolean;
1919
- reason?: string;
1920
- base: {
1921
- ref: string;
1922
- resolvedSha: string | null;
1923
- };
1924
- head: {
1925
- ref: string;
1926
- resolvedSha: string | null;
1927
- };
1928
- filesAdded: string[];
1929
- filesRemoved: string[];
1930
- filesModified: FileAstDiff[];
1931
- totalFilesChanged: number;
1932
- }
1933
- export type SemanticGraphNodeKind = 'file' | 'function' | 'package' | 'symbol';
1934
- export interface SemanticGraphNode {
1935
- id: string;
1936
- kind: SemanticGraphNodeKind;
1937
- label: string;
1938
- file?: string;
1939
- line?: number;
1940
- endLine?: number;
1941
- adapterId?: string;
1942
- metrics?: {
1943
- lineCount?: number;
1944
- cyclomaticComplexity?: number;
1945
- fanIn?: number;
1946
- fanOut?: number;
1947
- };
1948
- }
1949
- export type SemanticGraphEdgeKind = 'defines' | 'imports' | 'imports_package' | 'exports' | 'calls';
1950
- export interface SemanticGraphEdge {
1951
- from: string;
1952
- to: string;
1953
- kind: SemanticGraphEdgeKind;
1954
- label?: string;
1955
- }
1956
- export interface SemanticGraphReport {
1957
- schemaVersion: 3;
1958
- nodes: SemanticGraphNode[];
1959
- edges: SemanticGraphEdge[];
1960
- metrics: {
1961
- totalFiles: number;
1962
- totalFunctions: number;
1963
- totalPackages: number;
1964
- totalSymbols: number;
1965
- totalEdges: number;
1966
- };
1967
- truncated: boolean;
1968
- limits: {
1969
- maxNodes: number;
1970
- maxEdges: number;
1971
- };
1972
- }
1973
- export type DataflowRiskKind = 'direct' | 'propagated' | 'bridge';
1974
- export type DataflowRiskSeverity = 'warning' | 'error';
1975
- export type DataflowRiskConfidence = 'low' | 'medium' | 'high';
1976
- export interface DataflowRisk {
1977
- key: string;
1978
- kind: DataflowRiskKind;
1979
- severity: DataflowRiskSeverity;
1980
- confidence: DataflowRiskConfidence;
1981
- sourceFn: string;
1982
- sinkFn: string;
1983
- bridgeFn?: string;
1984
- source: string;
1985
- sink: string;
1986
- path: string[];
1987
- sourcePath?: string[];
1988
- sinkPath?: string[];
1989
- pathLength: number;
1990
- files: string[];
1991
- }
1992
- export interface DataflowReport {
1993
- available: boolean;
1994
- reason?: string;
1995
- riskCount: number;
1996
- risks: DataflowRisk[];
1997
- effectiveSources: string[];
1998
- effectiveSinks: string[];
1999
- truncated?: boolean;
2000
- truncatedSources?: string[];
2001
- maxDepth?: number;
2002
- }
2003
- /**
2004
- * One changed file enriched with risk signals. The agent calling
2005
- * projscan_review uses these to decide which files need careful review.
2006
- */
2007
- export interface ReviewFile {
2008
- relativePath: string;
2009
- status: 'added' | 'removed' | 'modified';
2010
- /** Hotspot risk score for the head version. null when file isn't in the hotspot scope. */
2011
- riskScore: number | null;
2012
- /** Cyclomatic complexity at head. null when no AST adapter parsed it. */
2013
- cyclomaticComplexity: number | null;
2014
- /** Delta from the structural diff (mirrors FileAstDiff.cyclomaticDelta). null when file was added/removed. */
2015
- cyclomaticDelta: number | null;
2016
- /** Number of exports added in this PR. */
2017
- exportsAdded: number;
2018
- /** Number of exports removed in this PR. */
2019
- exportsRemoved: number;
2020
- /** Number of imports added. */
2021
- importsAdded: number;
2022
- /** Number of imports removed. */
2023
- importsRemoved: number;
2024
- /** 1.9+ — set when `projscan_review` was called with an `intent` arg. Absent otherwise. */
2025
- intentAlignment?: 'expected' | 'unexpected' | 'out-of-scope' | 'unknown';
2026
- }
2027
- /**
2028
- * A circular import that exists at head and either didn't exist at base or
2029
- * grew. Surfaced separately from the file list so reviewers see at-a-glance
2030
- * whether the PR introduces new architectural debt.
2031
- */
2032
- export interface ReviewCycle {
2033
- files: string[];
2034
- size: number;
2035
- /**
2036
- * 'new' = no overlap with any base cycle; 'expanded' = at least one new
2037
- * file added to an existing cycle.
2038
- */
2039
- classification: 'new' | 'expanded';
2040
- /** 1.9+ — set when `projscan_review` was called with an `intent` arg. Absent otherwise. */
2041
- intentAlignment?: 'expected' | 'unexpected' | 'out-of-scope' | 'unknown';
2042
- }
2043
- /**
2044
- * A function whose CC newly crossed a worry threshold (>= 10) at head, or
2045
- * was added with high CC, or jumped by 5+ since base.
2046
- */
2047
- export interface ReviewFunction {
2048
- file: string;
2049
- name: string;
2050
- line: number;
2051
- endLine: number;
2052
- cyclomaticComplexity: number;
2053
- /** CC at base. null when the function did not exist at base. */
2054
- baseCc: number | null;
2055
- /** Why this function shows up. */
2056
- reason: 'added' | 'jumped' | 'crossed-threshold';
2057
- /** 1.9+ — set when `projscan_review` was called with an `intent` arg. Absent otherwise. */
2058
- intentAlignment?: 'expected' | 'unexpected' | 'out-of-scope' | 'unknown';
2059
- }
2060
- /**
2061
- * 1.6+ — A taint flow that is NEW at head (not present at base). Mirrors
2062
- * the core TaintFlow shape but is intentionally light — review summaries
2063
- * should be readable in a glance, so we drop the per-step file list and
2064
- * keep only the source/sink, the function pair, and the path length.
2065
- */
2066
- export interface ReviewTaintFlow {
2067
- sourceFn: string;
2068
- sinkFn: string;
2069
- source: string;
2070
- sink: string;
2071
- /** Hop count from source function to sink function, inclusive of both ends. */
2072
- pathLength: number;
2073
- /** First and last files in the path; same value when length = 1. */
2074
- files: string[];
2075
- /** 1.9+ — set when `projscan_review` was called with an `intent` arg. Absent otherwise. */
2076
- intentAlignment?: 'expected' | 'unexpected' | 'out-of-scope' | 'unknown';
2077
- }
2078
- /**
2079
- * 3.0+ — Review-time dataflow risks that are not represented by legacy
2080
- * taint reachability, especially bridge helpers that call both a source
2081
- * wrapper and a sink wrapper.
2082
- */
2083
- export interface ReviewDataflowRisk {
2084
- kind: DataflowRiskKind;
2085
- sourceFn: string;
2086
- sinkFn: string;
2087
- bridgeFn?: string;
2088
- source: string;
2089
- sink: string;
2090
- pathLength: number;
2091
- files: string[];
2092
- severity: DataflowRiskSeverity;
2093
- confidence: DataflowRiskConfidence;
2094
- intentAlignment?: 'expected' | 'unexpected' | 'out-of-scope' | 'unknown';
2095
- }
2096
- /** Workspace-package-scoped dependency change. Aggregates root + workspaces. */
2097
- export interface ReviewDependencyChange {
2098
- /** Workspace name; '' for the root manifest. */
2099
- workspace: string;
2100
- manifestFile: string;
2101
- added: Array<{
2102
- name: string;
2103
- version: string;
2104
- kind: 'dep' | 'dev';
2105
- }>;
2106
- removed: Array<{
2107
- name: string;
2108
- version: string;
2109
- kind: 'dep' | 'dev';
2110
- }>;
2111
- bumped: Array<{
2112
- name: string;
2113
- from: string;
2114
- to: string;
2115
- kind: 'dep' | 'dev';
2116
- }>;
2117
- /** 1.9+ — set when `projscan_review` was called with an `intent` arg. Absent otherwise. */
2118
- intentAlignment?: 'expected' | 'unexpected' | 'out-of-scope' | 'unknown';
2119
- }
2120
- /**
2121
- * 1.5+ — `projscan_review` can shape its response at three tiers based
2122
- * on a `max_cost_tokens` budget passed by the caller: full (no budget
2123
- * or large budget), summary (3K-7K tokens), verdict-only (<3K).
2124
- * Selected by `selectReviewTier` and surfaced as the `tier` field on
2125
- * the response.
2126
- */
2127
- export type ReviewTier = 'full' | 'summary' | 'verdict-only';
2128
- export interface ReviewReport {
2129
- available: boolean;
2130
- reason?: string;
2131
- base: {
2132
- ref: string;
2133
- resolvedSha: string | null;
2134
- };
2135
- head: {
2136
- ref: string;
2137
- resolvedSha: string | null;
2138
- };
2139
- /** The structural diff (same shape as projscan_pr_diff). */
2140
- prDiff: PrDiffReport;
2141
- /** Each changed file annotated with risk + CC + delta. Sorted by risk desc. */
2142
- changedFiles: ReviewFile[];
2143
- /** Cycles introduced or expanded by this PR. Empty when none. */
2144
- newCycles: ReviewCycle[];
2145
- /** Functions that meaningfully grew or were added with high CC. Sorted by CC desc. */
2146
- riskyFunctions: ReviewFunction[];
2147
- /** package.json deltas across root + workspaces. */
2148
- dependencyChanges: ReviewDependencyChange[];
2149
- /**
2150
- * 2.1+ — additive public contract changes such as export and package
2151
- * entrypoint changes. Empty or absent when no contract signal is available.
2152
- */
2153
- contractChanges?: ReviewContractChange[];
2154
- /**
2155
- * 1.6+ — NEW source-to-sink taint flows introduced by this PR. Each
2156
- * entry is a flow that exists at head but didn't exist at base
2157
- * (matched by sourceFn + sinkFn pair). Empty when taint is unavailable
2158
- * (no per-function callSites at either side).
2159
- */
2160
- newTaintFlows: ReviewTaintFlow[];
2161
- /**
2162
- * 3.0+ — NEW dataflow risks introduced by this PR that are outside the
2163
- * legacy source-to-sink taint flow list. Empty when unavailable or clean.
2164
- */
2165
- newDataflowRisks: ReviewDataflowRisk[];
2166
- /** 3.5+ — compact graph/dataflow evidence for review consumers. */
2167
- graphEvidence?: GraphEvidenceSummary;
2168
- /** 'ok' = ship it; 'review' = needs careful look; 'block' = strongly suggests rework. */
2169
- verdict: 'ok' | 'review' | 'block';
2170
- /** One-line bullets explaining the verdict. */
2171
- summary: string[];
2172
- /**
2173
- * 1.5+ — which tier this report was shaped at. Absent when the full
2174
- * report is returned without budget shaping.
2175
- */
2176
- tier?: ReviewTier;
2177
- /**
2178
- * 1.9+ — the parsed intent the agent passed (if any). Echo of the
2179
- * raw string + the parser's classified action + extracted scope
2180
- * tokens. Absent when `intent` arg wasn't provided.
2181
- */
2182
- intent?: {
2183
- raw: string;
2184
- action: 'feature' | 'fix' | 'refactor' | 'perf' | 'test' | 'docs' | 'chore' | 'remove' | 'unknown';
2185
- scopeTokens: string[];
2186
- };
2187
- /**
2188
- * 1.9+ — per-alignment totals across all findings + a small sample
2189
- * of "notable" (unexpected / out-of-scope) findings. Absent when
2190
- * no intent was provided. Verdict is NOT affected by intent —
2191
- * verdict stays structural.
2192
- */
2193
- intentAnalysis?: {
2194
- totals: Record<'expected' | 'unexpected' | 'out-of-scope' | 'unknown', number>;
2195
- notable: Array<{
2196
- kind: 'file' | 'function' | 'cycle' | 'taint' | 'dataflow' | 'dependency';
2197
- label: string;
2198
- alignment: 'expected' | 'unexpected' | 'out-of-scope' | 'unknown';
2199
- reason: string;
2200
- }>;
2201
- };
2202
- }
2203
- /**
2204
- * One reachable file in an impact analysis. `distance` is BFS-hops from the
2205
- * input target (1 = direct dependent, 2 = dependent-of-dependent, etc).
2206
- * `target` itself is not included in the reachable list.
2207
- */
2208
- export interface ImpactNode {
2209
- file: string;
2210
- distance: number;
2211
- /**
2212
- * 1.6+ — name of the registered repo that contains this file.
2213
- * Present only when `cross_repo: true` was passed and the file
2214
- * lives outside the source repo. Absent for in-repo entries.
2215
- */
2216
- repo?: string;
2217
- }
2218
- export interface ImpactBoundarySummary {
2219
- repo: string;
2220
- packageName: string;
2221
- owner: string;
2222
- files: string[];
2223
- reachableFiles: number;
2224
- }
2225
- export interface ImpactReport {
2226
- available: boolean;
2227
- reason?: string;
2228
- /** What was queried. */
2229
- target: {
2230
- kind: 'file' | 'symbol';
2231
- value: string;
2232
- };
2233
- /**
2234
- * For symbol mode: every file the graph claims defines the symbol. Empty
2235
- * for file mode. Useful when an agent needs to know whether a name is
2236
- * defined in multiple places before treating impact as authoritative.
2237
- */
2238
- definitionFiles: string[];
2239
- /**
2240
- * For symbol mode: files that directly call the symbol (their callSites
2241
- * contains the name). The reachable set is computed from these as roots.
2242
- * Empty for file mode.
2243
- */
2244
- directCallers: string[];
2245
- /** Sorted by distance asc, then file asc. */
2246
- reachable: ImpactNode[];
2247
- /** Convenience count of reachable files (== reachable.length). */
2248
- totalReachable: number;
2249
- /**
2250
- * 1.6+ — when cross-repo expansion ran, this is the per-repo
2251
- * breakdown of reachable file counts. Absent when `cross_repo`
2252
- * was false or the workspace had no siblings.
2253
- */
2254
- totalReachableByRepo?: Record<string, number>;
2255
- /** 3.5+ — cross-repo package/ownership boundaries that mention the target. */
2256
- boundarySummary?: ImpactBoundarySummary[];
2257
- /**
2258
- * True when traversal hit `maxDistance` before exhausting the graph.
2259
- * Items beyond the limit are omitted from `reachable`.
2260
- */
2261
- truncated: boolean;
2262
- /** The maxDistance value used for the traversal. */
2263
- maxDistance: number;
2264
- }
2265
- export interface FileInspection {
2266
- relativePath: string;
2267
- exists: boolean;
2268
- reason?: string;
2269
- purpose: string;
2270
- lineCount: number;
2271
- sizeBytes: number;
2272
- imports: ImportInfo[];
2273
- exports: ExportInfo[];
2274
- potentialIssues: string[];
2275
- hotspot: FileHotspot | null;
2276
- issues: Issue[];
2277
- /** AST-derived McCabe complexity. null when no language adapter parsed this file. */
2278
- cyclomaticComplexity?: number | null;
2279
- /** Number of files that import this one. null when graph unavailable. */
2280
- fanIn?: number | null;
2281
- /** Number of locally-resolved imports this file makes. null when graph unavailable. */
2282
- fanOut?: number | null;
2283
- /** Adapter id (e.g. 'javascript', 'python'). Set when the graph was available. */
2284
- language?: string;
2285
- /**
2286
- * Per-function McCabe CC (0.13.0+). Sorted by cyclomaticComplexity desc.
2287
- * Empty array when the file has no functions or the adapter doesn't yet
2288
- * support per-function granularity.
2289
- */
2290
- functions?: FunctionDetail[];
2291
- }
2292
- /**
2293
- * Per-function CC entry exposed via projscan_file. Mirrors the internal
2294
- * `FunctionInfo` from `core/ast.ts` but is part of the stable API surface.
2295
- */
2296
- export interface FunctionDetail {
2297
- name: string;
2298
- /** 1-based start line. */
2299
- line: number;
2300
- /** 1-based end line. */
2301
- endLine: number;
2302
- cyclomaticComplexity: number;
2303
- /**
2304
- * Approximate fan-in (0.15.0+): count of other files whose `callSites`
2305
- * include this function's bare name. Name-based and approximate; absent
2306
- * when the graph couldn't compute it.
2307
- */
2308
- fanIn?: number;
2309
- }
2310
- /**
2311
- * A reversible deprecation marker (3.8 deprecation pass). Present on a tool
2312
- * means "still works, but slated for removal in 4.0 — prefer `replacedBy`".
2313
- */
2314
- export interface ToolDeprecation {
2315
- /** Version the deprecation was announced in (e.g. "3.8.0"). */
2316
- since: string;
2317
- /** The recommended replacement (tool name for MCP, invocation for CLI). */
2318
- replacedBy: string;
2319
- /** Optional one-line rationale shown to humans/agents. */
2320
- note?: string;
2321
- }
2322
- export interface McpToolDefinition {
2323
- name: string;
2324
- description: string;
2325
- inputSchema: {
2326
- type: 'object';
2327
- properties: Record<string, unknown>;
2328
- required?: string[];
2329
- };
2330
- /** Set when the tool is deprecated and scheduled for removal in 4.0. */
2331
- deprecated?: ToolDeprecation;
2332
- }
2333
- export interface McpPromptArgument {
2334
- name: string;
2335
- description: string;
2336
- required?: boolean;
2337
- }
2338
- export interface McpPromptDefinition {
2339
- name: string;
2340
- description: string;
2341
- arguments?: McpPromptArgument[];
2342
- }
2343
- export interface McpResourceDefinition {
2344
- uri: string;
2345
- name: string;
2346
- description: string;
2347
- mimeType: string;
2348
- }
1
+ export type { ExportInfo, ImportInfo, Issue, IssueLocation, IssueSeverity, } from './types/common.js';
2
+ export type { AnalysisReport, ArchitectureLayer, FileExplanation, HealthScore, } from './types/analysis.js';
3
+ export type { ImportPolicyRule, LoadedConfig, ProjscanConfig, ReportFormat, } from './types/config.js';
4
+ export type { CouplingReport, CrossPackageEdge, FileCoupling, ImportCycle, } from './types/coupling.js';
5
+ export type { ExportRename, FileAstDiff, PrDiffReport } from './types/prDiff.js';
6
+ export type { Baseline, BaselineHotspot, BaselineRecurringRule, BaselineTrend, DiffResult, HotspotDelta, HotspotDiffSummary, } from './types/baseline.js';
7
+ export type { AuditFinding, AuditReport, AuditSeverity, OutdatedPackage, OutdatedReport, SemverDrift, UpgradePreview, } from './types/dependencyHealth.js';
8
+ export type { CoverageJoinedHotspot, CoverageJoinedReport, CoverageReport, CoverageSource, FileCoverage, } from './types/coverage.js';
9
+ export type { Fix, FixResult, FixSuggestion, IssueExplanation } from './types/fixes.js';
10
+ export type { DataflowReport, DataflowRisk, DataflowRiskConfidence, DataflowRiskKind, DataflowRiskSeverity, GraphEvidenceSummary, SemanticGraphEdge, SemanticGraphEdgeKind, SemanticGraphNode, SemanticGraphNodeKind, SemanticGraphReport, } from './types/graph.js';
11
+ export type { GraphCorpusFixtureMetrics, GraphCorpusReport } from './types/graphCorpus.js';
12
+ export type { AuthorShare, FileHotspot, HotspotReport } from './types/hotspots.js';
13
+ export type { ImpactBoundarySummary, ImpactNode, ImpactReport } from './types/impact.js';
14
+ export type { FileInspection, FunctionDetail } from './types/inspection.js';
15
+ export type { McpPromptArgument, McpPromptDefinition, McpResourceDefinition, McpToolDefinition, ToolDeprecation, } from './types/mcp.js';
16
+ export type { DependencyLicenseEntry, DependencyLicenseSummary, DependencyReport, DependencyRisk, DependencySizeEntry, DependencySizeSummary, DetectedFramework, DirectoryNode, FileEntry, FrameworkResult, LanguageBreakdown, LanguageStat, ScanBoundary, ScanResult, } from './types/scanning.js';
17
+ export type { PreflightEvidence, PreflightMode, PreflightReason, PreflightReasonSource, PreflightReleaseScaleEvidence, PreflightReport, PreflightRequiredCheck, PreflightSuggestedAction, PreflightVerdict, } from './types/preflight.js';
18
+ export type { FixFirstRecommendation, WorkplanCoordination, WorkplanEvidence, WorkplanMode, WorkplanPriority, WorkplanReport, WorkplanTask, WorkplanTopRisk, WorkplanVerification, } from './types/workplan.js';
19
+ export type { WorkplanHandoffPayload } from './types/workplanHandoff.js';
20
+ export type { ReleaseTrainReport, ReleaseTrainTask, ReleaseTrainTrack, } from './types/releaseTrain.js';
21
+ export type { BugHuntFinding, BugHuntReport, BugHuntVerdict } from './types/bugHunt.js';
22
+ export type { EvidencePackArtifact, EvidencePackArtifactStatus, EvidencePackPrCommentValidation, EvidencePackPrCommentValidationCheck, EvidencePackPrSummary, EvidencePackReport, EvidencePackTeamRoute, EvidencePackTopRisk, EvidencePackTrustCalibration, EvidencePackVerdict, } from './types/evidencePack.js';
23
+ export type { DogfoodFeedbackInput, DogfoodFeedbackResponse, DogfoodMarketValidation, DogfoodReport, DogfoodRepoResult, DogfoodRepoStatus, DogfoodRepoValidation, DogfoodWebsiteProof, FeedbackSummaryReport, FeedbackTemplateResult, } from './types/dogfood.js';
24
+ export type { TrialReport, TrialVerdict } from './types/trial.js';
25
+ export type { UnderstandBoundary, UnderstandBreakingChangeRisk, UnderstandChangeReadiness, UnderstandCitation, UnderstandClaim, UnderstandConfigContract, UnderstandContracts, UnderstandDirectTest, UnderstandEntrypoint, UnderstandFlow, UnderstandFlowSideEffect, UnderstandPublicExport, UnderstandReadFirst, UnderstandReport, UnderstandRisk, UnderstandUnknown, UnderstandVerification, UnderstandVerificationTier, UnderstandView, } from './types/understand.js';
26
+ export type { QualityScorecardDimension, QualityScorecardReport, QualityScorecardRisk, QualityScorecardStatus, QualityScorecardVerdict, } from './types/qualityScorecard.js';
27
+ export type { RegressionPlanLevel, RegressionPlanReport, RegressionPlanTarget, RegressionPlanVerdict, } from './types/regressionPlan.js';
28
+ export type { MissionOutcome, MissionProofBaselineRun, MissionProofReport, MissionProofStatusRow, MissionProofTotals, MissionReviewDecisionRecord, MissionRunStatus, StartAdoptionGap, StartAdoptionLoop, StartAdoptionLoopMetric, StartExecutionCursor, StartExecutionPhase, StartExecutionPhaseId, StartExecutionPlan, StartExecutionStatus, StartExecutionStep, StartExecutionStepKind, StartFirstTenMinutes, StartFirstTenMinutesStep, StartMissionControl, StartMissionControlStatus, StartMissionHandoff, StartMissionInputBinding, StartMissionProofItem, StartMissionProofToolCall, StartMissionResume, StartMissionResumeChecklistItem, StartMissionResumeChecklistItemKind, StartMissionResumeFollowUp, StartMissionResumeReference, StartMissionReviewBlockedAction, StartMissionReviewDecision, StartMissionReviewGate, StartMissionReviewPolicy, StartMissionReviewProof, StartMissionReviewWorktree, StartMissionRunbook, StartMissionTaskCard, StartMissionToolCall, StartModeSource, StartReport, StartRisk, StartRoutedIntent, StartUnresolvedInput, StartWorkflowRecommendation, } from './types/start.js';
29
+ export type { AgentBriefGuardrail, AgentBriefIntent, AgentBriefItem, AgentBriefReport, } from './types/agentBrief.js';
30
+ export type { RiskNowResource, SessionConflict, SessionCoordinationHint, SessionHandoff, SessionResourceSummary, } from './types/session.js';
31
+ export type { PluginTestResult } from './types/pluginDx.js';
32
+ export type { ReviewContractChange } from './types/reviewContract.js';
33
+ export type { ReviewCycle, ReviewDataflowRisk, ReviewDependencyChange, ReviewFile, ReviewFunction, ReviewReport, ReviewTaintFlow, ReviewTier, } from './types/review.js';
34
+ export type { WorkspaceInfo, WorkspaceKind, WorkspacePackage } from './types/workspace.js';