projscan 4.7.0 → 4.8.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 (278) hide show
  1. package/README.md +22 -22
  2. package/dist/cli/commands/start.js +5 -28
  3. package/dist/cli/commands/start.js.map +1 -1
  4. package/dist/cli/commands/startOptionsRegistration.d.ts +2 -0
  5. package/dist/cli/commands/startOptionsRegistration.js +29 -0
  6. package/dist/cli/commands/startOptionsRegistration.js.map +1 -0
  7. package/dist/core/ast.d.ts +2 -17
  8. package/dist/core/ast.js +4 -33
  9. package/dist/core/ast.js.map +1 -1
  10. package/dist/core/astResult.d.ts +20 -0
  11. package/dist/core/astResult.js +39 -0
  12. package/dist/core/astResult.js.map +1 -0
  13. package/dist/core/codeGraph.d.ts +1 -16
  14. package/dist/core/codeGraph.js +4 -89
  15. package/dist/core/codeGraph.js.map +1 -1
  16. package/dist/core/codeGraphAdapterContexts.d.ts +8 -0
  17. package/dist/core/codeGraphAdapterContexts.js +14 -0
  18. package/dist/core/codeGraphAdapterContexts.js.map +1 -0
  19. package/dist/core/codeGraphIncremental.d.ts +17 -0
  20. package/dist/core/codeGraphIncremental.js +64 -0
  21. package/dist/core/codeGraphIncremental.js.map +1 -0
  22. package/dist/core/collisionDetector.d.ts +1 -0
  23. package/dist/core/collisionDetector.js +3 -0
  24. package/dist/core/collisionDetector.js.map +1 -1
  25. package/dist/core/coordination.js +23 -5
  26. package/dist/core/coordination.js.map +1 -1
  27. package/dist/core/coordinationEvidence.d.ts +1 -0
  28. package/dist/core/coordinationEvidence.js.map +1 -1
  29. package/dist/core/frameworkExpressSources.js +6 -31
  30. package/dist/core/frameworkExpressSources.js.map +1 -1
  31. package/dist/core/frameworkFastifySources.js +5 -22
  32. package/dist/core/frameworkFastifySources.js.map +1 -1
  33. package/dist/core/frameworkHonoSources.js +5 -24
  34. package/dist/core/frameworkHonoSources.js.map +1 -1
  35. package/dist/core/frameworkKoaSources.js +5 -24
  36. package/dist/core/frameworkKoaSources.js.map +1 -1
  37. package/dist/core/frameworkSourceContext.d.ts +15 -0
  38. package/dist/core/frameworkSourceContext.js +2 -0
  39. package/dist/core/frameworkSourceContext.js.map +1 -0
  40. package/dist/core/frameworkSourceMatching.d.ts +6 -0
  41. package/dist/core/frameworkSourceMatching.js +29 -0
  42. package/dist/core/frameworkSourceMatching.js.map +1 -0
  43. package/dist/core/frameworkSourceResolvers.d.ts +2 -0
  44. package/dist/core/frameworkSourceResolvers.js +45 -0
  45. package/dist/core/frameworkSourceResolvers.js.map +1 -0
  46. package/dist/core/frameworkSources.d.ts +2 -14
  47. package/dist/core/frameworkSources.js +9 -38
  48. package/dist/core/frameworkSources.js.map +1 -1
  49. package/dist/core/frameworkSvelteKitSources.d.ts +2 -0
  50. package/dist/core/frameworkSvelteKitSources.js +118 -0
  51. package/dist/core/frameworkSvelteKitSources.js.map +1 -0
  52. package/dist/core/intentRouter.d.ts +1 -1
  53. package/dist/core/intentRouter.js +2 -8
  54. package/dist/core/intentRouter.js.map +1 -1
  55. package/dist/core/intentRouterCatalog.js +32 -0
  56. package/dist/core/intentRouterCatalog.js.map +1 -1
  57. package/dist/core/intentRouterKeywordToolGuards.js +5 -0
  58. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
  59. package/dist/core/intentRouterKeywordWeights.js +23 -0
  60. package/dist/core/intentRouterKeywordWeights.js.map +1 -1
  61. package/dist/core/intentRouterReleaseSignals.js +3 -18
  62. package/dist/core/intentRouterReleaseSignals.js.map +1 -1
  63. package/dist/core/intentRouterResolution.d.ts +3 -0
  64. package/dist/core/intentRouterResolution.js +11 -0
  65. package/dist/core/intentRouterResolution.js.map +1 -0
  66. package/dist/core/languages/pythonManifests.js +6 -19
  67. package/dist/core/languages/pythonManifests.js.map +1 -1
  68. package/dist/core/languages/pythonPep508.js +1 -1
  69. package/dist/core/languages/pythonPep508.js.map +1 -1
  70. package/dist/core/languages/pythonProjectEvidence.js +4 -4
  71. package/dist/core/languages/pythonProjectEvidence.js.map +1 -1
  72. package/dist/core/languages/pythonPyproject.js +1 -1
  73. package/dist/core/languages/pythonPyproject.js.map +1 -1
  74. package/dist/core/languages/pythonPyprojectEvidence.d.ts +7 -0
  75. package/dist/core/languages/pythonPyprojectEvidence.js +23 -0
  76. package/dist/core/languages/pythonPyprojectEvidence.js.map +1 -0
  77. package/dist/core/languages/pythonRequirements.d.ts +2 -0
  78. package/dist/core/languages/pythonRequirements.js +74 -9
  79. package/dist/core/languages/pythonRequirements.js.map +1 -1
  80. package/dist/core/pluginAnalyzerLoading.d.ts +3 -0
  81. package/dist/core/pluginAnalyzerLoading.js +55 -0
  82. package/dist/core/pluginAnalyzerLoading.js.map +1 -0
  83. package/dist/core/pluginAnalyzerRunning.d.ts +10 -0
  84. package/dist/core/pluginAnalyzerRunning.js +32 -0
  85. package/dist/core/pluginAnalyzerRunning.js.map +1 -0
  86. package/dist/core/pluginIssueValidation.d.ts +2 -0
  87. package/dist/core/pluginIssueValidation.js +22 -0
  88. package/dist/core/pluginIssueValidation.js.map +1 -0
  89. package/dist/core/pluginManifestDiscovery.d.ts +25 -0
  90. package/dist/core/pluginManifestDiscovery.js +80 -0
  91. package/dist/core/pluginManifestDiscovery.js.map +1 -0
  92. package/dist/core/pluginModuleLoading.d.ts +8 -0
  93. package/dist/core/pluginModuleLoading.js +91 -0
  94. package/dist/core/pluginModuleLoading.js.map +1 -0
  95. package/dist/core/pluginReporterLoading.d.ts +41 -0
  96. package/dist/core/pluginReporterLoading.js +105 -0
  97. package/dist/core/pluginReporterLoading.js.map +1 -0
  98. package/dist/core/pluginRuntimeTypes.d.ts +20 -0
  99. package/dist/core/pluginRuntimeTypes.js +2 -0
  100. package/dist/core/pluginRuntimeTypes.js.map +1 -0
  101. package/dist/core/plugins.d.ts +9 -86
  102. package/dist/core/plugins.js +12 -350
  103. package/dist/core/plugins.js.map +1 -1
  104. package/dist/core/preflight.d.ts +1 -2
  105. package/dist/core/preflight.js +4 -91
  106. package/dist/core/preflight.js.map +1 -1
  107. package/dist/core/preflightEvidence.js +11 -0
  108. package/dist/core/preflightEvidence.js.map +1 -1
  109. package/dist/core/preflightInputs.d.ts +1 -0
  110. package/dist/core/preflightInputs.js.map +1 -1
  111. package/dist/core/preflightReasons.d.ts +21 -0
  112. package/dist/core/preflightReasons.js +28 -0
  113. package/dist/core/preflightReasons.js.map +1 -0
  114. package/dist/core/preflightReport.d.ts +9 -0
  115. package/dist/core/preflightReport.js +67 -0
  116. package/dist/core/preflightReport.js.map +1 -0
  117. package/dist/core/review.js +2 -47
  118. package/dist/core/review.js.map +1 -1
  119. package/dist/core/reviewChangedReport.d.ts +13 -0
  120. package/dist/core/reviewChangedReport.js +38 -0
  121. package/dist/core/reviewChangedReport.js.map +1 -0
  122. package/dist/core/reviewComputation.d.ts +9 -0
  123. package/dist/core/reviewComputation.js +14 -0
  124. package/dist/core/reviewComputation.js.map +1 -0
  125. package/dist/core/reviewContractChanges.js +22 -8
  126. package/dist/core/reviewContractChanges.js.map +1 -1
  127. package/dist/core/reviewDataflow.js +18 -0
  128. package/dist/core/reviewDataflow.js.map +1 -1
  129. package/dist/core/roadmapCatalog.js +7 -203
  130. package/dist/core/roadmapCatalog.js.map +1 -1
  131. package/dist/core/roadmapCatalogPost44.d.ts +2 -0
  132. package/dist/core/roadmapCatalogPost44.js +205 -0
  133. package/dist/core/roadmapCatalogPost44.js.map +1 -0
  134. package/dist/core/roadmapCatalogTypes.d.ts +6 -0
  135. package/dist/core/roadmapCatalogTypes.js +2 -0
  136. package/dist/core/roadmapCatalogTypes.js.map +1 -0
  137. package/dist/core/startClaimRouteCriteria.d.ts +7 -0
  138. package/dist/core/startClaimRouteCriteria.js +16 -0
  139. package/dist/core/startClaimRouteCriteria.js.map +1 -0
  140. package/dist/core/startCouplingRouteCriteria.d.ts +2 -0
  141. package/dist/core/startCouplingRouteCriteria.js +13 -0
  142. package/dist/core/startCouplingRouteCriteria.js.map +1 -0
  143. package/dist/core/startDependencyRouteCriteria.d.ts +2 -0
  144. package/dist/core/startDependencyRouteCriteria.js +43 -0
  145. package/dist/core/startDependencyRouteCriteria.js.map +1 -0
  146. package/dist/core/startFileRouteCriteria.d.ts +2 -0
  147. package/dist/core/startFileRouteCriteria.js +56 -0
  148. package/dist/core/startFileRouteCriteria.js.map +1 -0
  149. package/dist/core/startFixedRouteCriteria.d.ts +1 -0
  150. package/dist/core/startFixedRouteCriteria.js +90 -0
  151. package/dist/core/startFixedRouteCriteria.js.map +1 -0
  152. package/dist/core/startImpactRouteCriteria.d.ts +7 -0
  153. package/dist/core/startImpactRouteCriteria.js +14 -0
  154. package/dist/core/startImpactRouteCriteria.js.map +1 -0
  155. package/dist/core/startIntentTargets.d.ts +1 -0
  156. package/dist/core/startIntentTargets.js +28 -0
  157. package/dist/core/startIntentTargets.js.map +1 -1
  158. package/dist/core/startMissionControl.js +8 -2
  159. package/dist/core/startMissionControl.js.map +1 -1
  160. package/dist/core/startMissionPolicy.js +2 -0
  161. package/dist/core/startMissionPolicy.js.map +1 -1
  162. package/dist/core/startMode.d.ts +1 -0
  163. package/dist/core/startMode.js +10 -2
  164. package/dist/core/startMode.js.map +1 -1
  165. package/dist/core/startPreflightRouteCriteria.d.ts +11 -0
  166. package/dist/core/startPreflightRouteCriteria.js +29 -0
  167. package/dist/core/startPreflightRouteCriteria.js.map +1 -0
  168. package/dist/core/startProductPlanningRouteCriteria.d.ts +8 -0
  169. package/dist/core/startProductPlanningRouteCriteria.js +29 -0
  170. package/dist/core/startProductPlanningRouteCriteria.js.map +1 -0
  171. package/dist/core/startRegressionRouteCriteria.d.ts +3 -0
  172. package/dist/core/startRegressionRouteCriteria.js +62 -0
  173. package/dist/core/startRegressionRouteCriteria.js.map +1 -0
  174. package/dist/core/startRouteActions.js +39 -1
  175. package/dist/core/startRouteActions.js.map +1 -1
  176. package/dist/core/startSuccessCriteria.d.ts +2 -3
  177. package/dist/core/startSuccessCriteria.js +15 -419
  178. package/dist/core/startSuccessCriteria.js.map +1 -1
  179. package/dist/core/startUnderstandRouteCriteria.d.ts +3 -0
  180. package/dist/core/startUnderstandRouteCriteria.js +97 -0
  181. package/dist/core/startUnderstandRouteCriteria.js.map +1 -0
  182. package/dist/core/telemetry.d.ts +9 -89
  183. package/dist/core/telemetry.js +33 -391
  184. package/dist/core/telemetry.js.map +1 -1
  185. package/dist/core/telemetryConfig.d.ts +58 -0
  186. package/dist/core/telemetryConfig.js +171 -0
  187. package/dist/core/telemetryConfig.js.map +1 -0
  188. package/dist/core/telemetryEvents.d.ts +57 -0
  189. package/dist/core/telemetryEvents.js +143 -0
  190. package/dist/core/telemetryEvents.js.map +1 -0
  191. package/dist/core/telemetryFlushing.d.ts +10 -0
  192. package/dist/core/telemetryFlushing.js +42 -0
  193. package/dist/core/telemetryFlushing.js.map +1 -0
  194. package/dist/core/telemetryRecording.d.ts +26 -0
  195. package/dist/core/telemetryRecording.js +38 -0
  196. package/dist/core/telemetryRecording.js.map +1 -0
  197. package/dist/core/telemetrySender.d.ts +9 -0
  198. package/dist/core/telemetrySender.js +22 -0
  199. package/dist/core/telemetrySender.js.map +1 -0
  200. package/dist/index.d.ts +4 -60
  201. package/dist/index.js +4 -60
  202. package/dist/index.js.map +1 -1
  203. package/dist/mcp/server.js +2 -13
  204. package/dist/mcp/server.js.map +1 -1
  205. package/dist/mcp/serverMessageHandling.d.ts +3 -0
  206. package/dist/mcp/serverMessageHandling.js +16 -0
  207. package/dist/mcp/serverMessageHandling.js.map +1 -0
  208. package/dist/mcp/toolDefinitions.d.ts +3 -0
  209. package/dist/mcp/toolDefinitions.js +15 -0
  210. package/dist/mcp/toolDefinitions.js.map +1 -0
  211. package/dist/mcp/tools.js +2 -12
  212. package/dist/mcp/tools.js.map +1 -1
  213. package/dist/projscan-sbom.cdx.json +6 -6
  214. package/dist/publicAgent.d.ts +22 -0
  215. package/dist/publicAgent.js +23 -0
  216. package/dist/publicAgent.js.map +1 -0
  217. package/dist/publicCore.d.ts +29 -0
  218. package/dist/publicCore.js +30 -0
  219. package/dist/publicCore.js.map +1 -0
  220. package/dist/publicLanguages.d.ts +1 -0
  221. package/dist/publicLanguages.js +2 -0
  222. package/dist/publicLanguages.js.map +1 -0
  223. package/dist/publicMcp.d.ts +8 -0
  224. package/dist/publicMcp.js +9 -0
  225. package/dist/publicMcp.js.map +1 -0
  226. package/dist/reporters/htmlAnalysisReporter.d.ts +3 -0
  227. package/dist/reporters/htmlAnalysisReporter.js +98 -0
  228. package/dist/reporters/htmlAnalysisReporter.js.map +1 -0
  229. package/dist/reporters/htmlCoverageReporter.d.ts +2 -0
  230. package/dist/reporters/htmlCoverageReporter.js +52 -0
  231. package/dist/reporters/htmlCoverageReporter.js.map +1 -0
  232. package/dist/reporters/htmlImpactReporter.d.ts +2 -0
  233. package/dist/reporters/htmlImpactReporter.js +41 -0
  234. package/dist/reporters/htmlImpactReporter.js.map +1 -0
  235. package/dist/reporters/htmlPrDiffReporter.d.ts +2 -0
  236. package/dist/reporters/htmlPrDiffReporter.js +84 -0
  237. package/dist/reporters/htmlPrDiffReporter.js.map +1 -0
  238. package/dist/reporters/htmlReporter.d.ts +20 -9
  239. package/dist/reporters/htmlReporter.js +7 -365
  240. package/dist/reporters/htmlReporter.js.map +1 -1
  241. package/dist/reporters/htmlReviewReporter.d.ts +2 -0
  242. package/dist/reporters/htmlReviewReporter.js +94 -0
  243. package/dist/reporters/htmlReviewReporter.js.map +1 -0
  244. package/dist/reporters/htmlShared.d.ts +7 -0
  245. package/dist/reporters/htmlShared.js +106 -0
  246. package/dist/reporters/htmlShared.js.map +1 -0
  247. package/dist/tool-manifest.json +2 -2
  248. package/dist/types/preflight.d.ts +19 -0
  249. package/dist/types/start.d.ts +7 -451
  250. package/dist/types/startCommon.d.ts +79 -0
  251. package/dist/types/startCommon.js +2 -0
  252. package/dist/types/startCommon.js.map +1 -0
  253. package/dist/types/startExecution.d.ts +44 -0
  254. package/dist/types/startExecution.js +2 -0
  255. package/dist/types/startExecution.js.map +1 -0
  256. package/dist/types/startMissionControl.d.ts +91 -0
  257. package/dist/types/startMissionControl.js +2 -0
  258. package/dist/types/startMissionControl.js.map +1 -0
  259. package/dist/types/startMissionProof.d.ts +91 -0
  260. package/dist/types/startMissionProof.js +2 -0
  261. package/dist/types/startMissionProof.js.map +1 -0
  262. package/dist/types/startMissionResume.d.ts +100 -0
  263. package/dist/types/startMissionResume.js +2 -0
  264. package/dist/types/startMissionResume.js.map +1 -0
  265. package/dist/types/startMissionReview.d.ts +45 -0
  266. package/dist/types/startMissionReview.js +2 -0
  267. package/dist/types/startMissionReview.js.map +1 -0
  268. package/dist/types/startMissionTooling.d.ts +16 -0
  269. package/dist/types/startMissionTooling.js +2 -0
  270. package/dist/types/startMissionTooling.js.map +1 -0
  271. package/dist/utils/changedFiles.d.ts +1 -0
  272. package/dist/utils/changedFiles.js +7 -4
  273. package/dist/utils/changedFiles.js.map +1 -1
  274. package/docs/GUIDE.md +9 -7
  275. package/docs/ROADMAP.md +2 -2
  276. package/docs/examples/adoption-workflows.md +12 -1
  277. package/docs/examples/swarm-coordination.md +11 -2
  278. package/package.json +1 -1
@@ -0,0 +1,91 @@
1
+ import type { PreflightSuggestedAction } from './preflight.js';
2
+ export type MissionRunStatus = 'not_run' | 'running' | 'passed' | 'failed' | 'unknown';
3
+ export interface MissionProofStatusRow {
4
+ id: string;
5
+ label?: string;
6
+ log?: string;
7
+ command?: string;
8
+ exitCode?: number;
9
+ }
10
+ export interface MissionReviewDecisionRecord {
11
+ decision: 'approve_next_slice' | 'request_changes' | 'review_version_candidate' | string;
12
+ reviewer?: string;
13
+ at?: string;
14
+ note?: string;
15
+ }
16
+ export interface MissionOutcome {
17
+ schemaVersion: 1;
18
+ available: boolean;
19
+ missionDir: string;
20
+ status: MissionRunStatus;
21
+ reason?: string;
22
+ nextAction?: string;
23
+ proof: {
24
+ completedCommands: number;
25
+ failedCommands: number;
26
+ reruns: number;
27
+ totalCommands?: number;
28
+ failedStep?: string;
29
+ failedLog?: string;
30
+ exitCode?: number;
31
+ rows: MissionProofStatusRow[];
32
+ };
33
+ review: {
34
+ decisions: MissionReviewDecisionRecord[];
35
+ approvals: number;
36
+ changeRequests: number;
37
+ versionCandidateReviews: number;
38
+ };
39
+ whatChanged: string[];
40
+ whatRemains: string[];
41
+ versionCandidate: {
42
+ recommendation: 'run_proof' | 'wait' | 'review_candidate' | 'do_not_cut';
43
+ summary: string;
44
+ };
45
+ resumePrompt: string;
46
+ }
47
+ export interface MissionProofBaselineRun {
48
+ id: string;
49
+ status: MissionRunStatus;
50
+ failedGates?: number;
51
+ reruns?: number;
52
+ minutesSpent?: number;
53
+ reviewerApprovals?: number;
54
+ }
55
+ export interface MissionProofTotals {
56
+ missions: number;
57
+ passed: number;
58
+ failed: number;
59
+ running: number;
60
+ notRun: number;
61
+ unavailable: number;
62
+ proofCompletionRate: number;
63
+ reruns: number;
64
+ failedGates: number;
65
+ reviewerApprovals: number;
66
+ }
67
+ export interface MissionProofReport {
68
+ schemaVersion: 1;
69
+ readOnly: true;
70
+ rootPath: string;
71
+ summary: string;
72
+ missionControl: {
73
+ missions: MissionOutcome[];
74
+ totals: MissionProofTotals;
75
+ };
76
+ baseline?: {
77
+ path: string;
78
+ runs: MissionProofBaselineRun[];
79
+ totals: MissionProofTotals & {
80
+ minutesSpent: number;
81
+ };
82
+ };
83
+ comparison?: {
84
+ completionRateDelta: number;
85
+ rerunsAvoided: number;
86
+ failedGatesAvoided: number;
87
+ minutesSaved: number;
88
+ };
89
+ riskAvoided: string[];
90
+ nextActions: PreflightSuggestedAction[];
91
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startMissionProof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startMissionProof.js","sourceRoot":"","sources":["../../src/types/startMissionProof.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ import type { PreflightSuggestedAction } from './preflight.js';
2
+ import type { StartMissionControlStatus, StartUnresolvedInput } from './startCommon.js';
3
+ import type { StartExecutionCursor, StartExecutionPhaseId, StartExecutionStatus, StartExecutionStepKind } from './startExecution.js';
4
+ import type { StartMissionReviewGate } from './startMissionReview.js';
5
+ import type { StartMissionProofItem, StartMissionProofToolCall, StartMissionToolCall } from './startMissionTooling.js';
6
+ export interface StartMissionResumeReference {
7
+ id: string;
8
+ phaseId: StartExecutionPhaseId;
9
+ kind: StartExecutionStepKind;
10
+ status: StartExecutionStatus;
11
+ label: string;
12
+ instruction?: string;
13
+ command?: string;
14
+ placeholder?: string;
15
+ }
16
+ export interface StartMissionInputBinding {
17
+ inputId: string;
18
+ label: string;
19
+ placeholder: string;
20
+ instruction: string;
21
+ followUpIds: string[];
22
+ }
23
+ export type StartMissionResumeChecklistItemKind = 'run_current' | 'resolve_input' | 'run_follow_up' | 'run_proof' | 'confirm_done';
24
+ export interface StartMissionResumeChecklistItem {
25
+ id: string;
26
+ kind: StartMissionResumeChecklistItemKind;
27
+ phaseId: StartExecutionPhaseId;
28
+ stepId: string;
29
+ status: StartExecutionStatus;
30
+ label: string;
31
+ command?: string;
32
+ tool?: string;
33
+ args?: Record<string, unknown>;
34
+ placeholder?: string;
35
+ instruction?: string;
36
+ blockedBy?: string[];
37
+ dependsOn?: string[];
38
+ unlocks?: string[];
39
+ followUpIds?: string[];
40
+ }
41
+ export interface StartMissionResumeFollowUp {
42
+ id: string;
43
+ phaseId: StartExecutionPhaseId;
44
+ kind: StartExecutionStepKind;
45
+ status: StartExecutionStatus;
46
+ label: string;
47
+ command?: string;
48
+ tool?: string;
49
+ args?: Record<string, unknown>;
50
+ blockedBy?: string[];
51
+ dependsOn?: string[];
52
+ }
53
+ export interface StartMissionResume {
54
+ currentStep: StartExecutionCursor;
55
+ status: StartExecutionStatus;
56
+ instruction: string;
57
+ prompt: string;
58
+ commandBlock?: string;
59
+ toolCall?: StartMissionToolCall;
60
+ followUps?: StartMissionResumeFollowUp[];
61
+ inputBindings?: StartMissionInputBinding[];
62
+ checklist?: StartMissionResumeChecklistItem[];
63
+ remainingProofItems?: StartMissionProofItem[];
64
+ remainingProofCommands?: string[];
65
+ remainingProofToolCalls?: StartMissionProofToolCall[];
66
+ unlocks?: StartMissionResumeReference[];
67
+ blockedBy?: StartMissionResumeReference[];
68
+ }
69
+ export interface StartMissionHandoff {
70
+ currentStep: StartExecutionCursor;
71
+ resume: StartMissionResume;
72
+ reviewGate: StartMissionReviewGate;
73
+ nextAction: PreflightSuggestedAction;
74
+ readyActions: PreflightSuggestedAction[];
75
+ needsInput: StartUnresolvedInput[];
76
+ doneWhen: string[];
77
+ readyProof: {
78
+ summary: string;
79
+ commands: string[];
80
+ toolCalls?: StartMissionProofToolCall[];
81
+ items?: StartMissionProofItem[];
82
+ };
83
+ }
84
+ export interface StartMissionRunbook {
85
+ title: string;
86
+ status: StartMissionControlStatus;
87
+ currentPhase: StartExecutionPhaseId;
88
+ currentStep: StartExecutionCursor;
89
+ resume: StartMissionResume;
90
+ readyCommandBlock: string;
91
+ blockedInputSummary?: string;
92
+ markdown: string;
93
+ }
94
+ export interface StartMissionTaskCard {
95
+ title: string;
96
+ status: StartMissionControlStatus;
97
+ currentPhase: StartExecutionPhaseId;
98
+ currentStep: StartExecutionCursor;
99
+ markdown: string;
100
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startMissionResume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startMissionResume.js","sourceRoot":"","sources":["../../src/types/startMissionResume.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import type { StartMissionControlStatus } from './startCommon.js';
2
+ import type { StartMissionProofItem, StartMissionProofToolCall } from './startMissionTooling.js';
3
+ export interface StartMissionReviewWorktree {
4
+ available: boolean;
5
+ clean: boolean;
6
+ changedFileCount: number;
7
+ files: string[];
8
+ baseRef: string | null;
9
+ summary: string;
10
+ reason?: string;
11
+ }
12
+ export interface StartMissionReviewProof {
13
+ summary: string;
14
+ commands: string[];
15
+ toolCalls?: StartMissionProofToolCall[];
16
+ items?: StartMissionProofItem[];
17
+ }
18
+ export type StartMissionReviewBlockedAction = 'next_slice' | 'release' | 'publish' | 'deploy' | 'push' | 'merge' | 'version_bump';
19
+ export interface StartMissionReviewPolicy {
20
+ approvalRequired: true;
21
+ blockedActions: StartMissionReviewBlockedAction[];
22
+ summary: string;
23
+ }
24
+ export interface StartMissionReviewDecision {
25
+ id: 'approve_next_slice' | 'request_changes' | 'review_version_candidate';
26
+ label: string;
27
+ description: string;
28
+ consequence: string;
29
+ reply: string;
30
+ }
31
+ export interface StartMissionReviewGate {
32
+ title: string;
33
+ required: true;
34
+ status: StartMissionControlStatus;
35
+ stopCondition: string;
36
+ reviewPrompt: string;
37
+ checklist: string[];
38
+ doneWhen: string[];
39
+ policy: StartMissionReviewPolicy;
40
+ decisions: StartMissionReviewDecision[];
41
+ commands: string[];
42
+ worktree: StartMissionReviewWorktree;
43
+ proof: StartMissionReviewProof;
44
+ markdown: string;
45
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startMissionReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startMissionReview.js","sourceRoot":"","sources":["../../src/types/startMissionReview.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { StartExecutionStatus } from './startExecution.js';
2
+ export interface StartMissionToolCall {
3
+ tool: string;
4
+ args?: Record<string, unknown>;
5
+ }
6
+ export interface StartMissionProofToolCall extends StartMissionToolCall {
7
+ stepId: string;
8
+ command: string;
9
+ }
10
+ export interface StartMissionProofItem {
11
+ stepId: string;
12
+ status: StartExecutionStatus;
13
+ label: string;
14
+ command: string;
15
+ toolCall?: StartMissionToolCall;
16
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startMissionTooling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startMissionTooling.js","sourceRoot":"","sources":["../../src/types/startMissionTooling.ts"],"names":[],"mappings":""}
@@ -3,6 +3,7 @@ export interface ChangedFilesResult {
3
3
  reason?: string;
4
4
  baseRef: string | null;
5
5
  files: string[];
6
+ uncommittedFiles: string[];
6
7
  }
7
8
  /**
8
9
  * Return files changed since a git base ref. Uses three-dot diff semantics
@@ -18,6 +18,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
18
18
  reason: 'not a git repository',
19
19
  baseRef: null,
20
20
  files: [],
21
+ uncommittedFiles: [],
21
22
  };
22
23
  }
23
24
  const candidates = explicitBaseRef ? [explicitBaseRef] : [...DEFAULT_BASE_REFS, 'HEAD~1'];
@@ -29,8 +30,8 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
29
30
  continue;
30
31
  }
31
32
  try {
32
- const files = await diffNames(rootPath, ref);
33
- return { available: true, baseRef: ref, files };
33
+ const { files, uncommittedFiles } = await diffNames(rootPath, ref);
34
+ return { available: true, baseRef: ref, files, uncommittedFiles };
34
35
  }
35
36
  catch (err) {
36
37
  // 1.10+ — surface stdio-too-large explicitly instead of letting it
@@ -46,6 +47,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
46
47
  '(typically > 100K files changed). Use --base-ref to pin a closer ref.',
47
48
  baseRef: null,
48
49
  files: [],
50
+ uncommittedFiles: [],
49
51
  };
50
52
  }
51
53
  lastError = err instanceof Error ? err.message : String(err);
@@ -55,7 +57,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
55
57
  try {
56
58
  const files = await statusNames(rootPath);
57
59
  if (files.length > 0) {
58
- return { available: true, baseRef: '(working tree)', files };
60
+ return { available: true, baseRef: '(working tree)', files, uncommittedFiles: files };
59
61
  }
60
62
  }
61
63
  catch (err) {
@@ -66,6 +68,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
66
68
  reason: lastError ?? 'no usable base ref found',
67
69
  baseRef: null,
68
70
  files: [],
71
+ uncommittedFiles: [],
69
72
  };
70
73
  }
71
74
  async function isGitRepo(rootPath) {
@@ -104,7 +107,7 @@ async function diffNames(rootPath, baseRef) {
104
107
  }
105
108
  for (const f of uncommitted)
106
109
  set.add(f);
107
- return [...set].sort();
110
+ return { files: [...set].sort(), uncommittedFiles: uncommitted };
108
111
  }
109
112
  async function statusNames(rootPath) {
110
113
  const { stdout } = await execFileAsync('git', ['status', '--porcelain', '--untracked-files=all'], { cwd: rootPath, maxBuffer: 10 * 1024 * 1024 });
@@ -1 +1 @@
1
- {"version":3,"file":"changedFiles.js","sourceRoot":"","sources":["../../src/utils/changedFiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"changedFiles.js","sourceRoot":"","sources":["../../src/utils/changedFiles.ts"],"names":[],"mappings":"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"}
package/docs/GUIDE.md CHANGED
@@ -167,6 +167,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
167
167
  For risky-file, complexity, refactor-priority, and codebase-performance questions, such as `projscan start --intent "what files are risky to touch?"`, `projscan start --intent "which files are too complex?"`, `projscan start --intent "what file should I refactor first?"`, `projscan start --intent "find performance bottlenecks"`, or `projscan start --intent "where are the slow files?"`, it routes to `projscan_hotspots` so the developer sees the highest-risk files before editing. For exact-file risk questions, such as `projscan start --intent "why is src/core/start.ts risky?"`, it routes to `projscan_file` so the file's hotspot, ownership, issue, import, and export context explains the risk. For cleanup questions, such as `projscan start --intent "find dead code"`, `projscan start --intent "find dead code and unused exports I can delete"`, `projscan start --intent "what can I safely delete?"`, or `projscan start --intent "what can I remove safely?"`, it routes to `projscan_doctor` so dead code, unused exports, and adjacent health issues are reviewed before files are removed.
168
168
  For tech-debt and simplification questions, such as `projscan start --intent "what tech debt should I pay down?"` or `projscan start --intent "what code should I simplify?"`, it routes to `projscan_hotspots` instead of incident handling for the word `down`.
169
169
  For reviewer-proof requests, such as `projscan start --intent "write a PR comment for reviewers"`, `projscan start --intent "write a PR description"`, `projscan start --intent "what should my PR say?"`, `projscan start --intent "make a PR checklist"`, `projscan start --intent "summarize my changes for reviewers"`, or `projscan start --intent "what should I tell my team about this change?"`, it routes to `projscan_evidence_pack` with `pr_comment: true` so the developer gets a paste-ready verdict, top risks, owner routing, and next commands.
170
+ For shareable scoped-evidence requests, such as `projscan start --intent "share redacted evidence for src/api with a partner"`, it routes to `projscan_analyze` and returns ready analyze, doctor, and CI commands with `--report-scope` and `--redact-paths` so security reviewers and partners can receive path-safe artifacts without a full repo map.
170
171
  For reviewer-routing questions, such as `projscan start --intent "who should review this PR?"`, it routes to `projscan_evidence_pack` so likely owners and reviewer-facing context are prepared before a full review.
171
172
  For PR-readiness questions, such as `projscan start --intent "am I ready to open a PR?"`, it routes to `projscan_evidence_pack` so preflight, owner routing, top risks, and reviewer-facing proof are prepared before review starts.
172
173
  For changed-file owner questions, such as `projscan start --intent "who owns the changed files?"`, it routes to `projscan_evidence_pack` so changed-file owner routing is prepared without confusing it with single-file ownership inspection.
@@ -180,7 +181,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
180
181
  For short proof-command phrasing, such as `projscan start --intent "give me proof commands"`, it also routes to `projscan_regression_plan --level focused`; reviewer-proof wording with PR comments still routes to `projscan_evidence_pack`.
181
182
  For pre-push command questions, such as `projscan start --intent "what commands should I run before pushing?"`, it routes to `projscan_regression_plan --level focused` so the branch has a small verification loop before it leaves the workstation.
182
183
  For release-readiness wording, such as `projscan start --intent "what should I check before release?"`, `projscan start --intent "can I deploy this?"`, `projscan start --intent "prepare this branch for deployment"`, `projscan start --intent "what changed since last release?"`, `projscan start --intent "write a release note for this change"`, or `projscan start --intent "draft changelog entry"`, it routes to `projscan_release_train` so changelog, package, SBOM, provenance, and blockers are reviewed before deploying or publishing.
183
- For product-planning questions, such as `projscan start --intent "what should we build next?"` or `projscan start --intent "plan the product roadmap"`, it routes to `projscan_release_train` / `projscan release-train` so broad product direction becomes read-only roadmap planning with current post-4.4 workstreams and `evidence.roadmapPreview` instead of a generic before-edit orientation.
184
+ For generic build-next questions, such as `projscan start --intent "what should we build next?"`, it routes to `projscan_workplan --mode before_edit` so the next implementation slice starts with an ordered plan and verification instead of release readiness. For explicit product-roadmap questions, such as `projscan start --intent "plan the product roadmap"`, it routes to `projscan_release_train` / `projscan release-train` so broad product direction becomes read-only roadmap planning with current post-4.4 workstreams and `evidence.roadmapPreview`.
184
185
  For broad improvement-planning questions, such as `projscan start --intent "what should we improve next?"`, it routes to `projscan_bug_hunt` so the agent gets an actionable ranked queue; technical variants such as tests, performance, release, dependencies, or safety keep their specialized routes.
185
186
  For quick-win and low-risk improvement wording, such as `projscan start --intent "find a quick win"`, `projscan start --intent "what is a low risk improvement?"`, or `projscan start --intent "pick a small safe task"`, it routes to `projscan_bug_hunt` so a ranked, verifiable action queue is selected instead of a generic quality readout.
186
187
  For tiny-task and beginner-safe wording, such as `projscan start --intent "what can I do in five minutes?"`, `projscan start --intent "pick an easy task for me"`, or `projscan start --intent "what should an intern work on?"`, it also routes to `projscan_bug_hunt`.
@@ -204,7 +205,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
204
205
  - **`projscan_preflight` / `projscan preflight`** — agent safety gate. Returns `proceed`, `caution`, or `block` with health, changed-file, review, remembered session, hotspot, plugin-policy, supply-chain, and release-scale evidence. `evidence.riskSources.currentWorktree` is current Git/worktree evidence; `evidence.riskSources.sessionMemory` is remembered handoff context. Use `--mode before_edit` at the start of work and `--mode before_commit` / `--mode before_merge` before handing off or merging; scale-only commit blocks are cautions, while merge gates still require manual release sign-off.
205
206
  - **`projscan_hotspots` / `projscan hotspots`** — files ranked by `git churn × AST cyclomatic complexity × open issues × ownership × coverage`. Pass `view: "functions"` for top-N risky individual functions across the repo (0.13+).
206
207
  - **`projscan_semantic_graph` / `projscan semantic-graph`** — stable v3 graph contract with file, function, package, and symbol nodes plus imports, exports, definitions, and calls edges. Use it when an agent needs one normalized graph shape instead of several targeted queries.
207
- - **`projscan_dataflow` / `projscan dataflow`** — direct, propagated, and bridge source-to-sink dataflow risks, including framework-aware Next.js route request body and URL sources. Use it for a focused safety pass before touching command execution, raw SQL, filesystem writes, or DOM sinks.
208
+ - **`projscan_dataflow` / `projscan dataflow`** — direct, propagated, and bridge source-to-sink dataflow risks, including framework-aware Next.js, Remix, SvelteKit, Hono, Express, Fastify, and Koa request sources. Use it for a focused safety pass before touching command execution, raw SQL, filesystem writes, or DOM sinks.
208
209
  - **`projscan_coupling` / `projscan coupling`** — per-file fan-in / fan-out / instability plus circular-import cycles (Tarjan SCC). Use `direction: cycles_only` or `projscan coupling --cycles-only` to surface architectural debt directly.
209
210
  - **`projscan_analyze` / `projscan analyze`** — the everything report; useful at session start but verbose.
210
211
 
@@ -434,8 +435,9 @@ graph. Bridge risks are graph-backed dataflow additions: a wrapper that calls a
434
435
  and a sink wrapper is surfaced even when legacy taint reachability cannot see a
435
436
  downstream call path from source to sink. By default, dataflow suppresses test-file paths,
436
437
  broad readFile/writeFile-style noise, and JavaScript RegExp.exec false positives.
437
- Framework request-source detection covers narrow tested patterns for Next.js, Hono,
438
- Express, Fastify, and Koa handlers, including Hono validator output,
438
+ Framework request-source detection covers narrow tested patterns for Next.js, Remix,
439
+ SvelteKit, Hono, Express, Fastify, and Koa handlers, including SvelteKit
440
+ `RequestEvent` request/body/url/params/cookies evidence, Hono validator output,
439
441
  Express/Fastify/Koa request IP metadata, Fastify host/hostname and raw
440
442
  URL/header evidence, and Express/Koa header accessors plus Express
441
443
  `req.param(...)` and `req.originalUrl`, while
@@ -702,8 +704,8 @@ Preview the impact of upgrading a package. The default path is fully offline; pa
702
704
  - Breaking-change markers found in the CHANGELOG: scans for `BREAKING CHANGE`, `deprecated`, `removed support`, `no longer supported`, and section headers containing "breaking"
703
705
  - CHANGELOG excerpt sliced to the relevant version range (read from `node_modules/<pkg>/CHANGELOG.md`)
704
706
  - Importer list - every file in your source tree that imports the package (direct or sub-path)
705
- - Python manifest evidence for packages declared in `pyproject.toml` (including PEP 735 `dependency-groups`, Poetry dependency groups, and legacy `tool.poetry.dev-dependencies`), `setup.cfg`, `setup.py`, or root `requirements*.txt`. Root Python manifests are sufficient local evidence even before `.py` files exist.
706
- - Python current-version evidence from `poetry.lock` / `uv.lock` / `pdm.lock` package blocks, `conda-lock.yml` / `conda-lock.yaml` package entries, `Pipfile.lock` exact versions, pinned root `requirements*.txt`, or pinned root `constraints*.txt` entries
707
+ - Python manifest evidence for packages declared in `pyproject.toml` (including PEP 735 `dependency-groups`, Poetry dependency groups, and legacy `tool.poetry.dev-dependencies`), `setup.cfg`, `setup.py`, root `requirements*.txt`, or common `requirements/*.txt` / `requirements/*.in` manifests such as `requirements/base.txt` and `requirements/dev.in`. Python manifests are sufficient local evidence even before `.py` files exist.
708
+ - Python current-version evidence from `poetry.lock` / `uv.lock` / `pdm.lock` package blocks, `conda-lock.yml` / `conda-lock.yaml` package entries, `Pipfile.lock` exact versions, pinned root or recognized nested `requirements/*.txt`, or pinned root or recognized nested `constraints/*.txt` entries
707
709
 
708
710
  **Example:**
709
711
 
@@ -725,7 +727,7 @@ $ projscan upgrade react --format markdown
725
727
 
726
728
  - Reads the CHANGELOG that npm already placed in `node_modules/`. If the package author doesn't ship one, you'll see "No local CHANGELOG found."
727
729
  - Without `--check-registry`, works with what's **installed** and reports `latestSource: "installed"`. With `--check-registry`, npm registry lookup is attempted and failures fall back to the installed version with `registryError`.
728
- - Python previews stay offline. They do not query PyPI; current-version evidence comes from supported local lockfiles, pinned root requirements, or pinned root constraints.
730
+ - Python previews stay offline. They do not query PyPI; current-version evidence comes from supported local lockfiles, pinned root or recognized nested requirements, or pinned root or recognized nested constraints.
729
731
 
730
732
  ### coverage
731
733
 
package/docs/ROADMAP.md CHANGED
@@ -65,7 +65,7 @@ The active validation lines are:
65
65
  - **Swarm coordination evidence.** Validate how real agents use `collisions`, `claim`, `merge-risk`, `coordinate`, and `coordinate --watch`; deepen only the coordination paths that prevent integration failures.
66
66
  - **Evidence export adoption.** Prove scoped/redacted report controls work for partner, security, and release-review handoffs without leaking unnecessary repo structure.
67
67
  - **Python upgrade coverage.** Extend lockfile support only after Poetry and pinned-requirement evidence prove useful in real repos.
68
- - **Framework dataflow precision.** Add more framework patterns only when each has a narrow request source, sink, and false-positive fixture.
68
+ - **Framework dataflow precision.** Add more framework patterns only when each has a narrow request source, sink, and false-positive fixture; current validation includes Remix route data and SvelteKit `RequestEvent` coverage.
69
69
  - **Hotspot maintainability.** Continue extracting and covering high-churn start/review/type surfaces when they show concrete review or defect risk.
70
70
 
71
71
  Strictly **local-first** throughout: same-repo / same-machine evidence, no daemon, no cloud, no hidden network calls, no new telemetry, and no secret-value reads.
@@ -90,7 +90,7 @@ Success signals: teams copy the adoption examples into real reviews, scoped/reda
90
90
  - Roadmap and release-train planning now default to the current post-4.4 product lines instead of stale shipped work.
91
91
  - Adoption examples cover agent orchestration, package ownership, custom policy plugins, swarm coordination, and scoped evidence exports.
92
92
  - `analyze`, `doctor`, and `ci` can scope and redact shareable evidence with direct flags or named `reportPolicies` presets.
93
- - `projscan upgrade` and MCP `projscan_upgrade` support offline Python previews from manifests, Poetry/Pipfile/uv/PDM/Conda lockfiles, pinned requirements/constraints, and Python importers.
93
+ - `projscan upgrade` and MCP `projscan_upgrade` support offline Python previews from manifests, Poetry/Pipfile/uv/PDM/Conda lockfiles, root and recognized nested requirements/constraints, and Python importers.
94
94
  - Dataflow detects narrow Fastify and Koa request-source patterns, including Fastify raw URL/header and Koa IP evidence, while suppressing lookalike helpers and Koa response-body writes.
95
95
  - Start next-action assembly and taint function identity were tightened during release readiness cleanup.
96
96
 
@@ -50,7 +50,9 @@ projscan agent-brief --intent "handoff package ownership for fastapi" --format j
50
50
  For Node packages, `upgrade` reads local `package.json`, `node_modules`, local
51
51
  CHANGELOG files, and importer evidence. For Python packages, it reads
52
52
  `pyproject.toml`, `setup.cfg`, `setup.py`, root `requirements*.txt` files,
53
- Poetry/Pipfile/uv/PDM/Conda lockfiles, and pinned root requirements/constraints, then
53
+ common `requirements/*.txt` / `requirements/*.in` manifests,
54
+ Poetry/Pipfile/uv/PDM/Conda lockfiles, and pinned root or recognized nested
55
+ requirements/constraints, then
54
56
  returns declared scope, current-version source, drift, and Python importers.
55
57
 
56
58
  Decision loop:
@@ -93,6 +95,15 @@ Decision loop:
93
95
  Use this when a team wants to share a health or CI artifact without exposing
94
96
  repo layout or sensitive paths.
95
97
 
98
+ Start from Mission Control when the reviewer asks in plain language:
99
+
100
+ ```bash
101
+ projscan start --intent "share redacted evidence for src/api with a partner" --format json
102
+ ```
103
+
104
+ The routed start output returns the three artifact commands below as ready
105
+ actions, using the requested scope when one is present in the intent.
106
+
96
107
  ```bash
97
108
  projscan analyze --report-scope src/api --redact-paths --format json > reports/api-analysis.json
98
109
  projscan doctor --report-scope src/api --redact-paths --format markdown > reports/api-health.md
@@ -56,11 +56,20 @@ with the active command path, current worktree state, local-only source signals,
56
56
  the validation workflow above, and a reminder that session memory is separate
57
57
  from current Git/worktree evidence. The default `coordinate` console view prints
58
58
  the same session-boundary reminder inside its `Evidence` section.
59
+ Read `currentWorktree.changedFileCount` as the branch/base delta used for
60
+ collision detection, including local commits and any dirty files. Read
61
+ `currentWorktree.uncommittedChangedFileCount` as the current dirty worktree
62
+ count from `git status`. A clean worktree can therefore show changed files
63
+ against `origin/main` while still reporting `0` uncommitted files.
59
64
  When multiple worktrees are present, `agent-brief` also carries a
60
65
  `context.coordinationHints` entry even for a clear swarm, so the next agent knows
61
66
  to validate locally with `projscan coordinate --format json`,
62
67
  `projscan coordinate --watch --interval 5 --format json`, and
63
68
  `projscan agent-brief --format json` before continuing parallel edits.
69
+ `preflight` also carries this proof path under `evidence.coordination`: it keeps
70
+ the compact readiness counts and adds the local-only command path, current
71
+ worktree summary, validation workflow, and session-boundary reminder used by
72
+ `coordinate`.
64
73
 
65
74
  For MCP clients that support long-running notifications, use the watch tool:
66
75
 
@@ -116,5 +125,5 @@ These are the next hardening targets for real swarm usage:
116
125
  - transitive collision recall: prove dependent-file conflicts are caught, not
117
126
  only same-file conflicts
118
127
  - live watch adoption: prove agents notice and act on coordination changes
119
- - preflight and agent-brief integration: prove the same coordination facts show
120
- up where agents already look before editing or handing off
128
+ - preflight and handoff adoption: prove agents consistently cite the shared
129
+ coordination proof path before editing, committing, and handing off
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "projscan",
3
3
  "mcpName": "io.github.abhiyoheswaran1/projscan",
4
- "version": "4.7.0",
4
+ "version": "4.8.0",
5
5
  "description": "Agent-first code intelligence. MCP server (2025-03-26) with 11 AST adapters covering 12 named languages: JavaScript, TypeScript, Python, Go, Java, Ruby, Rust, PHP, C#, Kotlin, Swift, and C++; repo understanding maps (projscan_understand), stable v3 semantic graph (projscan_semantic_graph), dataflow risk engine with bridge-helper detection (projscan_dataflow), code graph, file + per-function AST cyclomatic complexity, per-function fan-in + fan-out, coupling + cycle detection, structural PR diff with HTML reporter, coverage report with HTML reporter, intent-grounded one-call PR review (projscan_review with optional `intent` arg, new taint flows, contract changes, and newDataflowRisks) and long-running PR-watch mode with structured per-bucket deltas (projscan_review_watch), first-60-seconds workflow orientation (projscan_start), agent workplans (projscan_workplan), bug-hunt queues (projscan_bug_hunt), product-line planning (projscan_release_train), evidence packs (projscan_evidence_pack), regression planning (projscan_regression_plan), agent briefs (projscan_agent_brief), quality scorecards (projscan_quality_scorecard), and preflight with supply-chain IOC evidence, rule-driven fix suggestions + mechanical apply layer with rollback (projscan_apply_fix, projscan_fix_suggest, projscan_explain_issue), source-to-sink taint analysis (projscan_taint) with truncation reporting, transitive blast-radius analysis with cross-repo mode (projscan_impact for files and symbols), cross-repo workspace registration + intelligence (projscan_workspace_graph), per-function semantic search chunks (sub-file embeddings), per-rule confidence + severity drift + cost-summary analytics with live streaming (projscan_cost_summary), stable local analyzer + reporter plugin API (projscan_plugin, CLI --reporter, opt-in via PROJSCAN_PLUGINS_PREVIEW=1), monorepo workspace awareness with cross-package import policy + per-package dependencies / outdated / audit, BM25 + optional semantic search, cursor pagination, progress notifications, context-budgeted output, and a stable-surface CI guard. CLI on the side.",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",