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
@@ -1,8 +1,6 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { pathToFileURL } from 'node:url';
4
- import { getPluginTrustStatus } from './pluginTrust.js';
5
- import { validateManifest } from './pluginManifestValidation.js';
1
+ import { loadAnalyzerPluginEntry } from './pluginAnalyzerLoading.js';
2
+ import { discoverPluginManifests } from './pluginManifestDiscovery.js';
3
+ import { resolveReporterPlugin as resolveReporterPluginEntry } from './pluginReporterLoading.js';
6
4
  /**
7
5
  * Stable local plugin API (2.0+).
8
6
  *
@@ -18,86 +16,14 @@ import { validateManifest } from './pluginManifestValidation.js';
18
16
  * discipline as the rest of projscan.
19
17
  */
20
18
  export const PLUGIN_PREVIEW_FLAG = 'PROJSCAN_PLUGINS_PREVIEW';
21
- export const PLUGIN_DIR = '.projscan-plugins';
22
- export const PLUGIN_MANIFEST_EXT = '.projscan-plugin.json';
19
+ export { PLUGIN_DIR, PLUGIN_MANIFEST_EXT, discoverPluginManifests, readPluginManifestFile, } from './pluginManifestDiscovery.js';
20
+ export { runAnalyzerPlugins } from './pluginAnalyzerRunning.js';
23
21
  export { PLUGIN_REPORTER_COMMANDS, PLUGIN_SCHEMA_VERSION, validateManifest, } from './pluginManifestValidation.js';
24
- // Keep arbitrary plugin file URLs out of Vite/Vitest's static import transform.
25
- const dynamicImport = new Function('specifier', 'return import(specifier)');
22
+ export { renderReporterPlugin } from './pluginReporterLoading.js';
26
23
  export function pluginsEnabled() {
27
24
  const v = process.env[PLUGIN_PREVIEW_FLAG];
28
25
  return v === '1' || v === 'true';
29
26
  }
30
- export async function readPluginManifestFile(manifestPath) {
31
- let raw;
32
- try {
33
- raw = await fs.readFile(manifestPath, 'utf-8');
34
- }
35
- catch (err) {
36
- const message = `unable to read manifest: ${err instanceof Error ? err.message : String(err)}`;
37
- return {
38
- ok: false,
39
- reason: message,
40
- diagnostic: {
41
- code: 'read-error',
42
- message,
43
- hint: 'Check file permissions and try again.',
44
- },
45
- };
46
- }
47
- let parsed;
48
- try {
49
- parsed = JSON.parse(raw);
50
- }
51
- catch (err) {
52
- const message = `invalid JSON: ${err instanceof Error ? err.message : String(err)}`;
53
- return {
54
- ok: false,
55
- reason: message,
56
- diagnostic: {
57
- code: 'invalid-json',
58
- message,
59
- hint: 'Fix the manifest so it is valid JSON.',
60
- },
61
- };
62
- }
63
- const validation = validateManifest(parsed);
64
- return validation.ok
65
- ? { ok: true, manifest: validation.manifest }
66
- : { ok: false, reason: validation.reason, diagnostic: validation.diagnostic };
67
- }
68
- /**
69
- * Discover every plugin manifest under `<root>/.projscan-plugins/`. Manifests
70
- * that fail to parse or validate are returned with `manifest: null` and an
71
- * `error` so the CLI / MCP tool can surface them without throwing.
72
- */
73
- export async function discoverPluginManifests(rootPath) {
74
- const dir = path.join(rootPath, PLUGIN_DIR);
75
- let entries;
76
- try {
77
- entries = await fs.readdir(dir);
78
- }
79
- catch {
80
- return [];
81
- }
82
- const out = [];
83
- for (const name of entries.sort()) {
84
- if (!name.endsWith(PLUGIN_MANIFEST_EXT))
85
- continue;
86
- const manifestPath = path.join(dir, name);
87
- const result = await readPluginManifestFile(manifestPath);
88
- if (!result.ok) {
89
- out.push({
90
- manifestPath,
91
- manifest: null,
92
- error: result.reason,
93
- diagnostic: result.diagnostic,
94
- });
95
- continue;
96
- }
97
- out.push({ manifestPath, manifest: result.manifest });
98
- }
99
- return out;
100
- }
101
27
  /**
102
28
  * Discover, validate, and dynamically import every plugin under the
103
29
  * project. Returns [] when the preview flag is off.
@@ -112,280 +38,16 @@ export async function loadPlugins(rootPath) {
112
38
  const discovered = await discoverPluginManifests(rootPath);
113
39
  const loaded = [];
114
40
  for (const entry of discovered) {
115
- if (!entry.manifest)
116
- continue;
117
- if (entry.manifest.kind !== 'analyzer')
118
- continue;
119
- const modulePath = path.resolve(path.dirname(entry.manifestPath), entry.manifest.module);
120
- try {
121
- await assertPluginModuleReadable(entry.manifest.module, modulePath);
122
- // Trust-on-first-use gate: never import (execute) a module the user
123
- // hasn't explicitly approved. The preview flag opts a user into the
124
- // plugin *system*; trust opts them into each specific module's bytes.
125
- const trust = await getPluginTrustStatus(modulePath);
126
- if (trust.status !== 'trusted') {
127
- process.stderr.write(untrustedAnalyzerWarning(entry.manifest.name, trust.status));
128
- continue;
129
- }
130
- const mod = await importPluginModule(modulePath);
131
- const exportsObj = (mod.default ?? mod);
132
- if (typeof exportsObj.check !== 'function') {
133
- process.stderr.write(`[projscan] plugin "${entry.manifest.name}" missing required export "check"; export default { check(rootPath, files) { ... } } or export a named check function. skipped.\n`);
134
- continue;
135
- }
136
- loaded.push({
137
- manifest: entry.manifest,
138
- manifestPath: entry.manifestPath,
139
- modulePath,
140
- exports: { check: exportsObj.check },
141
- });
142
- }
143
- catch (err) {
144
- const detail = describePluginModuleLoadError(err, entry.manifest.module, modulePath, 'manifest');
145
- process.stderr.write(`[projscan] plugin "${entry.manifest.name}" failed to load: ${detail.message}${detail.hint ? ` ${detail.hint}` : ''}. skipped.\n`);
146
- }
41
+ const plugin = await loadAnalyzerPluginEntry(entry);
42
+ if (plugin)
43
+ loaded.push(plugin);
147
44
  }
148
45
  return loaded;
149
46
  }
150
47
  export async function resolveReporterPlugin(rootPath, reporterName, command) {
151
- if (!pluginsEnabled()) {
152
- return pluginRuntimeFail({
153
- code: 'plugins-disabled',
154
- message: `reporter plugins require ${PLUGIN_PREVIEW_FLAG}=1`,
155
- hint: `Set ${PLUGIN_PREVIEW_FLAG}=1 in the environment to enable plugin reporters.`,
156
- });
157
- }
158
- const entries = await discoverPluginManifests(rootPath);
159
- const reporters = entries.filter((entry) => entry.manifest?.kind === 'reporter');
160
- const entry = reporters.find((candidate) => candidate.manifest.name === reporterName);
161
- if (!entry) {
162
- return pluginRuntimeFail({
163
- code: 'reporter-not-found',
164
- message: `reporter plugin "${reporterName}" was not found`,
165
- hint: 'Run `projscan plugin list` to see discovered reporter plugins.',
166
- });
167
- }
168
- if (!entry.manifest.commands.includes(command)) {
169
- return pluginRuntimeFail({
170
- code: 'reporter-unsupported-command',
171
- message: `reporter plugin "${reporterName}" does not support command "${command}"`,
172
- hint: `Add "${command}" to the reporter manifest's commands array or choose a different reporter.`,
173
- });
174
- }
175
- return loadReporterPlugin(entry.manifest, entry.manifestPath);
176
- }
177
- export async function renderReporterPlugin(plugin, context) {
178
- try {
179
- const output = await plugin.exports.render(context);
180
- if (typeof output !== 'string') {
181
- return pluginRuntimeFail({
182
- code: 'reporter-render-error',
183
- message: `reporter plugin "${plugin.manifest.name}" returned ${typeof output}; expected string`,
184
- hint: 'Reporter render(context) must return text for stdout.',
185
- });
186
- }
187
- return { ok: true, output };
188
- }
189
- catch (err) {
190
- return pluginRuntimeFail({
191
- code: 'reporter-render-error',
192
- message: `reporter plugin "${plugin.manifest.name}" failed during render: ${formatError(err)}`,
193
- hint: 'Fix the reporter render(context) implementation and try again.',
194
- });
195
- }
196
- }
197
- async function loadReporterPlugin(manifest, manifestPath) {
198
- const modulePath = path.resolve(path.dirname(manifestPath), manifest.module);
199
- try {
200
- await assertPluginModuleReadable(manifest.module, modulePath);
201
- // Trust-on-first-use gate — see loadPlugins. Reporters render to stdout,
202
- // but importing the module still runs its top-level code, so the same
203
- // approval requirement applies.
204
- const trust = await getPluginTrustStatus(modulePath);
205
- if (trust.status !== 'trusted') {
206
- return pluginRuntimeFail(untrustedReporterDiagnostic(manifest.name, trust.status));
207
- }
208
- const mod = await importPluginModule(modulePath);
209
- const exportsObj = (mod.default ?? mod);
210
- if (typeof exportsObj.render !== 'function') {
211
- return pluginRuntimeFail({
212
- code: 'invalid-reporter-export',
213
- message: `reporter plugin "${manifest.name}" missing required export "render"`,
214
- hint: 'Use export default { render(context) { ... } } or export a named render function.',
215
- });
216
- }
217
- return {
218
- ok: true,
219
- plugin: {
220
- manifest,
221
- manifestPath,
222
- modulePath,
223
- exports: { render: exportsObj.render },
224
- },
225
- };
226
- }
227
- catch (err) {
228
- const detail = describePluginModuleLoadError(err, manifest.module, modulePath, 'reporter manifest');
229
- return pluginRuntimeFail({
230
- code: 'reporter-load-error',
231
- message: `reporter plugin "${manifest.name}" failed to load: ${detail.message}`,
232
- hint: detail.hint ?? 'Check the reporter module path and module syntax.',
233
- });
234
- }
235
- }
236
- class PluginModuleMissingError extends Error {
237
- manifestModule;
238
- modulePath;
239
- constructor(manifestModule, modulePath) {
240
- super(`module "${manifestModule}" was not found at ${modulePath}`);
241
- this.manifestModule = manifestModule;
242
- this.modulePath = modulePath;
243
- }
244
- }
245
- class PluginModuleReadError extends Error {
246
- manifestModule;
247
- modulePath;
248
- constructor(manifestModule, modulePath, err) {
249
- super(`module "${manifestModule}" could not be read at ${modulePath}: ${formatError(err)}`);
250
- this.manifestModule = manifestModule;
251
- this.modulePath = modulePath;
252
- }
253
- }
254
- async function assertPluginModuleReadable(manifestModule, modulePath) {
255
- try {
256
- await fs.access(modulePath);
257
- }
258
- catch (err) {
259
- const code = typeof err === 'object' && err !== null && 'code' in err
260
- ? String(err.code)
261
- : '';
262
- if (code === 'ENOENT')
263
- throw new PluginModuleMissingError(manifestModule, modulePath);
264
- throw new PluginModuleReadError(manifestModule, modulePath, err);
265
- }
266
- }
267
- function describePluginModuleLoadError(err, manifestModule, modulePath, manifestLabel) {
268
- if (err instanceof PluginModuleMissingError) {
269
- return {
270
- message: err.message,
271
- hint: `Check the ${manifestLabel} "module" path.`,
272
- };
273
- }
274
- if (err instanceof PluginModuleReadError) {
275
- return {
276
- message: err.message,
277
- hint: `Check file permissions for the ${manifestLabel} "module" path.`,
278
- };
279
- }
280
- if (err instanceof SyntaxError) {
281
- return {
282
- message: `syntax error in module "${manifestModule}": ${formatError(err)}`,
283
- hint: `Run node "${modulePath}" to reproduce the syntax error.`,
284
- };
285
- }
286
- return { message: formatError(err) };
287
- }
288
- function untrustedAnalyzerWarning(name, status) {
289
- const reason = status === 'changed' ? 'module changed since it was trusted' : 'module is not trusted';
290
- const verb = status === 'changed' ? 'Re-run' : 'Run';
291
- return `[projscan] plugin "${name}" ${reason}; skipped (not executed). ${verb} \`projscan plugin trust ${name}\` to approve this module.\n`;
292
- }
293
- function untrustedReporterDiagnostic(name, status) {
294
- const changed = status === 'changed';
295
- return {
296
- code: 'plugin-untrusted',
297
- message: changed
298
- ? `reporter plugin "${name}" changed since it was trusted; not executed`
299
- : `reporter plugin "${name}" is not trusted; not executed`,
300
- hint: `${changed ? 'Re-run' : 'Run'} \`projscan plugin trust ${name}\` to approve this reporter.`,
301
- };
302
- }
303
- function importPluginModule(modulePath) {
304
- return dynamicImport(pathToFileURL(modulePath).href).catch(async (err) => {
305
- if (!isMissingDynamicImportCallback(err))
306
- throw err;
307
- return importPluginModuleFromSource(modulePath);
308
- });
309
- }
310
- function isMissingDynamicImportCallback(err) {
311
- return (err instanceof TypeError && err.message.includes('dynamic import callback was not specified'));
312
- }
313
- async function importPluginModuleFromSource(modulePath) {
314
- const source = await fs.readFile(modulePath, 'utf-8');
315
- const defaultMatch = source.match(/^\s*export\s+default\s+([\s\S]*?)\s*;?\s*$/);
316
- if (defaultMatch) {
317
- const expression = defaultMatch[1].trim().replace(/;$/, '');
318
- return { default: new Function(`return (${expression});`)() };
319
- }
320
- const names = [];
321
- let transformed = source.replace(/\bexport\s+(async\s+function|function)\s+([A-Za-z_$][\w$]*)/g, (_m, kind, name) => {
322
- names.push(String(name));
323
- return `${kind} ${name}`;
324
- });
325
- transformed = transformed.replace(/\bexport\s+const\s+([A-Za-z_$][\w$]*)\s*=/g, (_m, name) => {
326
- names.push(String(name));
327
- return `const ${name} =`;
48
+ return resolveReporterPluginEntry(rootPath, reporterName, command, {
49
+ pluginsEnabled: pluginsEnabled(),
50
+ previewFlag: PLUGIN_PREVIEW_FLAG,
328
51
  });
329
- if (names.length === 0) {
330
- throw new Error('unsupported module syntax in Vitest VM fallback');
331
- }
332
- return new Function(`${transformed}\nreturn { ${names.join(', ')} };`)();
333
- }
334
- /**
335
- * Run every loaded analyzer plugin against `files`. Issues that don't pass
336
- * a tight shape check are dropped so a malformed plugin can't poison the
337
- * issue stream. Each plugin's output is also re-stamped with `id` prefixed
338
- * by the plugin name (so two plugins emitting the same local rule id can't
339
- * collide).
340
- */
341
- export async function runAnalyzerPlugins(plugins, rootPath, files, context) {
342
- const out = [];
343
- for (const p of plugins) {
344
- let raw;
345
- try {
346
- raw = (await p.exports.check(rootPath, files, context)) ?? [];
347
- }
348
- catch (err) {
349
- process.stderr.write(`[projscan] plugin "${p.manifest.name}" threw during check: ${err instanceof Error ? err.message : String(err)}. ignored for this run.\n`);
350
- continue;
351
- }
352
- for (const issue of raw) {
353
- if (!isWellShapedIssue(issue))
354
- continue;
355
- out.push({
356
- ...issue,
357
- id: `plugin:${p.manifest.name}:${issue.id}`,
358
- category: issue.category || p.manifest.category,
359
- });
360
- }
361
- }
362
- return out;
363
- }
364
- function pluginRuntimeFail(diagnostic) {
365
- return { ok: false, reason: diagnostic.message, diagnostic };
366
- }
367
- function formatError(err) {
368
- return err instanceof Error ? err.message : String(err);
369
- }
370
- function isWellShapedIssue(x) {
371
- if (!x || typeof x !== 'object')
372
- return false;
373
- const obj = x;
374
- if (typeof obj.id !== 'string' || obj.id.length === 0)
375
- return false;
376
- if (typeof obj.title !== 'string')
377
- return false;
378
- if (typeof obj.description !== 'string')
379
- return false;
380
- if (!isSeverity(obj.severity))
381
- return false;
382
- if (typeof obj.category !== 'string')
383
- return false;
384
- if (typeof obj.fixAvailable !== 'boolean')
385
- return false;
386
- return true;
387
- }
388
- function isSeverity(x) {
389
- return x === 'error' || x === 'warning' || x === 'info';
390
52
  }
391
53
  //# sourceMappingURL=plugins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/core/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/core/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,qBAAqB,IAAI,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAKjG;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAC9D,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AASvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AASlE,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,YAAoB,EACpB,OAA8B;IAE9B,OAAO,0BAA0B,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;QACjE,cAAc,EAAE,cAAc,EAAE;QAChC,WAAW,EAAE,mBAAmB;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -1,6 +1,5 @@
1
- import { decidePreflightVerdict, summarizePreflight } from './preflightVerdict.js';
2
1
  import type { PreflightMode, PreflightReport } from '../types.js';
3
- export { decidePreflightVerdict, summarizePreflight };
2
+ export { decidePreflightVerdict, summarizePreflight } from './preflightVerdict.js';
4
3
  export interface ComputePreflightOptions {
5
4
  mode?: PreflightMode;
6
5
  baseRef?: string;
@@ -1,98 +1,11 @@
1
- import { pluginsEnabled } from './plugins.js';
2
- import { policyIssueReasons } from './preflightIssueReasons.js';
3
- import { changedFileReasons } from './preflightChangedFileReasons.js';
4
- import { buildRequiredChecks } from './preflightRequiredChecks.js';
5
- import { buildReleaseScaleEvidence } from './preflightReleaseScale.js';
6
- import { reviewReasons } from './preflightReviewReasons.js';
7
- import { buildEvidence } from './preflightEvidence.js';
8
- import { contextReasons } from './preflightContextReasons.js';
9
- import { buildSuggestedActions, buildToolCalls, } from './preflightSuggestedActions.js';
10
- import { decidePreflightVerdict, summarizePreflight, } from './preflightVerdict.js';
11
1
  import { loadPreflightInputs } from './preflightInputs.js';
12
- import { isPreflightReportTruncated } from './preflightTruncation.js';
13
- export { decidePreflightVerdict, summarizePreflight };
2
+ import { buildPreflightReport } from './preflightReport.js';
3
+ export { decidePreflightVerdict, summarizePreflight } from './preflightVerdict.js';
14
4
  const DEFAULT_MAX_CHANGED_FILES = 50;
15
5
  export async function computePreflight(rootPath, options = {}) {
16
6
  const mode = options.mode ?? 'before_edit';
17
- const { issues, health, changedFiles, session, hotspots, review, coordination } = await loadPreflightInputs(rootPath, mode, options);
7
+ const inputs = await loadPreflightInputs(rootPath, mode, options);
18
8
  const maxChangedFiles = options.maxChangedFiles ?? DEFAULT_MAX_CHANGED_FILES;
19
- const supplyChain = countSupplyChainIssues(issues);
20
- const releaseScale = buildReleaseScaleEvidence({
21
- mode,
22
- issues,
23
- changedFiles,
24
- health,
25
- review,
26
- supplyChain,
27
- maxChangedFiles,
28
- });
29
- const reasons = buildPreflightReasons({
30
- mode,
31
- issues,
32
- changedFiles,
33
- health,
34
- session,
35
- hotspots,
36
- review,
37
- releaseScale,
38
- coordination,
39
- maxChangedFiles,
40
- });
41
- const verdict = decidePreflightVerdict(reasons);
42
- const evidence = buildEvidence({
43
- health,
44
- changedFiles,
45
- session,
46
- hotspots,
47
- issues,
48
- pluginsEnabledForRun: pluginsEnabled(),
49
- review,
50
- releaseScale,
51
- coordination,
52
- });
53
- const truncated = isPreflightReportTruncated({ evidence, changedFiles });
54
- const report = {
55
- schemaVersion: 1,
56
- mode,
57
- verdict,
58
- summary: '',
59
- reasons,
60
- evidence,
61
- requiredChecks: buildRequiredChecks({
62
- mode,
63
- health,
64
- changedFiles,
65
- review,
66
- supplyChain,
67
- releaseScale,
68
- }),
69
- suggestedNextActions: buildSuggestedActions({ reasons, mode, changedFiles }),
70
- toolCalls: buildToolCalls({ reasons, mode, changedFiles }),
71
- ...(truncated ? { truncated: true } : {}),
72
- };
73
- return { ...report, summary: summarizePreflight(report) };
74
- }
75
- function countSupplyChainIssues(issues) {
76
- const supplyChainIssues = issues.filter((issue) => issue.category === 'supply-chain');
77
- return {
78
- errorIssues: supplyChainIssues.filter((issue) => issue.severity === 'error').length,
79
- warningIssues: supplyChainIssues.filter((issue) => issue.severity === 'warning').length,
80
- };
81
- }
82
- function buildPreflightReasons(input) {
83
- const reasons = [];
84
- reasons.push(...policyIssueReasons(input.issues));
85
- reasons.push(...changedFileReasons(input));
86
- if (input.releaseScale?.detected) {
87
- reasons.push({
88
- severity: 'warning',
89
- source: 'release',
90
- message: input.releaseScale.explanation,
91
- tool: 'projscan_review',
92
- });
93
- }
94
- reasons.push(...reviewReasons(input));
95
- reasons.push(...contextReasons(input));
96
- return reasons;
9
+ return buildPreflightReport({ mode, inputs, maxChangedFiles });
97
10
  }
98
11
  //# sourceMappingURL=preflight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/core/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/core/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAM5D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAUnF,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,UAAmC,EAAE;IAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,yBAAyB,CAAC;IAC7E,OAAO,oBAAoB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -105,6 +105,7 @@ function supplyChainEvidence(issues) {
105
105
  };
106
106
  }
107
107
  function coordinationEvidence(coordination) {
108
+ const evidence = coordination.evidence;
108
109
  return {
109
110
  available: true,
110
111
  readiness: coordination.readiness,
@@ -114,6 +115,16 @@ function coordinationEvidence(coordination) {
114
115
  medium: coordination.collisions.medium,
115
116
  },
116
117
  contendedClaims: coordination.claims.contendedTargets,
118
+ ...(evidence
119
+ ? {
120
+ commandPath: evidence.commandPath,
121
+ command: evidence.command,
122
+ localOnly: evidence.localOnly,
123
+ currentWorktree: evidence.currentWorktree,
124
+ validationWorkflow: evidence.validationWorkflow,
125
+ sessionSeparation: evidence.sessionSeparation,
126
+ }
127
+ : {}),
117
128
  };
118
129
  }
119
130
  //# sourceMappingURL=preflightEvidence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"preflightEvidence.js","sourceRoot":"","sources":["../../src/core/preflightEvidence.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAuB/C,MAAM,UAAU,aAAa,CAAC,KAU7B;IACC,MAAM,oBAAoB,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAC7F,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAC9F,OAAO;QACL,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,YAAY,EAAE,oBAAoB,CAAC,KAAK,CAAC,YAAY,EAAE,oBAAoB,CAAC;QAC5E,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC;QAC5D,WAAW,EAAE,mBAAmB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE;YAClE,oBAAoB;YACpB,mBAAmB;SACpB,CAAC;QACF,QAAQ,EAAE,EAAE,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;QAC5E,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,oBAAoB,CAAC;QACjE,WAAW,EAAE,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1F,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAmB;IACzC,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,YAAkC,EAClC,KAAe;IAEf,OAAO;QACL,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,KAAK;QACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAsB;IAC5C,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,OAAwB,EACxB,YAAsB;IAEtB,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,YAAY;QACZ,iBAAiB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;QAC9C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,wKAAwK;QAC9K,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,4BAA4B,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,YAAkC,EAClC,OAAwB,EACxB,KAAwE;IAExE,OAAO;QACL,eAAe,EAAE,uBAAuB,CAAC,YAAY,EAAE,KAAK,CAAC,oBAAoB,CAAC;QAClF,aAAa,EAAE,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,YAAkC,EAClC,KAAe;IAEf,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,KAAK;QACL,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAwB,EACxB,YAAsB;IAEtB,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,YAAY;QACZ,iBAAiB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;QAC9C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,4IAA4I;QAClJ,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,4BAA4B,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAA8B,EAC9B,OAAwB;IAExB,IAAI,QAAQ,EAAE,SAAS,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,QAAQ,CAAC,QAAQ;SACrB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SACxE,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC;SACtC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,cAAc,CACrB,MAAe,EACf,OAAgB;IAEhB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,OAAO;QACL,OAAO;QACP,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QAC9E,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;KACnF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe;IAC1C,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;IACtF,OAAO;QACL,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QACnF,aAAa,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;KACxF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,YAAiC;IAEjC,OAAO;QACL,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,UAAU,EAAE;YACV,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI;YAClC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,MAAM;SACvC;QACD,eAAe,EAAE,YAAY,CAAC,MAAM,CAAC,gBAAgB;KACtD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"preflightEvidence.js","sourceRoot":"","sources":["../../src/core/preflightEvidence.ts"],"names":[],"mappings":"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"}
@@ -13,3 +13,4 @@ export declare function loadPreflightInputs(rootPath: string, mode: PreflightMod
13
13
  review: import("./preflightReviewEvidence.js").PreflightReviewEvidence;
14
14
  coordination: import("./coordination.js").CoordinationSummary | null;
15
15
  }>;
16
+ export type PreflightInputs = Awaited<ReturnType<typeof loadPreflightInputs>>;
@@ -1 +1 @@
1
- {"version":3,"file":"preflightInputs.js","sourceRoot":"","sources":["../../src/core/preflightInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAS7D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,IAAmB,EACnB,UAAsC,EAAE;IAExC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,mBAAmB,CAChC,MAAM,6BAA6B,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAChF,YAAY,CAAC,MAAM,CACpB,CAAC;IACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE,OAAO;QACL,MAAM;QACN,MAAM;QACN,YAAY;QACZ,OAAO;QACP,QAAQ;QACR,MAAM;QACN,YAAY;KACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC1C,QAAgB,EAChB,KAAkB,EAClB,cAAwB;IAExB,OAAO,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"preflightInputs.js","sourceRoot":"","sources":["../../src/core/preflightInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAS7D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,IAAmB,EACnB,UAAsC,EAAE;IAExC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,mBAAmB,CAChC,MAAM,6BAA6B,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAChF,YAAY,CAAC,MAAM,CACpB,CAAC;IACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE,OAAO;QACL,MAAM;QACN,MAAM;QACN,YAAY;QACZ,OAAO;QACP,QAAQ;QACR,MAAM;QACN,YAAY;KACb,CAAC;AACJ,CAAC;AAID,KAAK,UAAU,6BAA6B,CAC1C,QAAgB,EAChB,KAAkB,EAClB,cAAwB;IAExB,OAAO,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type CoordinationSummary, type PreflightSessionEvidence } from './preflightLocalEvidence.js';
2
+ import type { PreflightChangedFiles } from './preflightChangedFiles.js';
3
+ import type { PreflightReviewEvidence } from './preflightReviewEvidence.js';
4
+ import type { HealthScore, HotspotReport, Issue, PreflightMode, PreflightReason, PreflightReleaseScaleEvidence } from '../types.js';
5
+ export interface PreflightSupplyChainIssueCounts {
6
+ errorIssues: number;
7
+ warningIssues: number;
8
+ }
9
+ export declare function countSupplyChainIssues(issues: Issue[]): PreflightSupplyChainIssueCounts;
10
+ export declare function buildPreflightReasons(input: {
11
+ mode: PreflightMode;
12
+ issues: Issue[];
13
+ changedFiles: PreflightChangedFiles;
14
+ health: HealthScore;
15
+ session: PreflightSessionEvidence;
16
+ hotspots: HotspotReport | null;
17
+ review: PreflightReviewEvidence;
18
+ releaseScale: PreflightReleaseScaleEvidence | null;
19
+ coordination: CoordinationSummary | null;
20
+ maxChangedFiles: number;
21
+ }): PreflightReason[];
@@ -0,0 +1,28 @@
1
+ import { changedFileReasons } from './preflightChangedFileReasons.js';
2
+ import { contextReasons } from './preflightContextReasons.js';
3
+ import { policyIssueReasons } from './preflightIssueReasons.js';
4
+ import { reviewReasons } from './preflightReviewReasons.js';
5
+ export function countSupplyChainIssues(issues) {
6
+ const supplyChainIssues = issues.filter((issue) => issue.category === 'supply-chain');
7
+ return {
8
+ errorIssues: supplyChainIssues.filter((issue) => issue.severity === 'error').length,
9
+ warningIssues: supplyChainIssues.filter((issue) => issue.severity === 'warning').length,
10
+ };
11
+ }
12
+ export function buildPreflightReasons(input) {
13
+ const reasons = [];
14
+ reasons.push(...policyIssueReasons(input.issues));
15
+ reasons.push(...changedFileReasons(input));
16
+ if (input.releaseScale?.detected) {
17
+ reasons.push({
18
+ severity: 'warning',
19
+ source: 'release',
20
+ message: input.releaseScale.explanation,
21
+ tool: 'projscan_review',
22
+ });
23
+ }
24
+ reasons.push(...reviewReasons(input));
25
+ reasons.push(...contextReasons(input));
26
+ return reasons;
27
+ }
28
+ //# sourceMappingURL=preflightReasons.js.map