projscan 4.9.3 → 4.10.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 (178) hide show
  1. package/README.md +23 -1
  2. package/dist/analyzers/securityCheck.js +33 -15
  3. package/dist/analyzers/securityCheck.js.map +1 -1
  4. package/dist/analyzers/supplyChainCheck.js +9 -2
  5. package/dist/analyzers/supplyChainCheck.js.map +1 -1
  6. package/dist/cli/commands/bugHunt.js +3 -1
  7. package/dist/cli/commands/bugHunt.js.map +1 -1
  8. package/dist/cli/commands/ci.js +29 -13
  9. package/dist/cli/commands/ci.js.map +1 -1
  10. package/dist/cli/commands/dogfood.js +2 -0
  11. package/dist/cli/commands/dogfood.js.map +1 -1
  12. package/dist/cli/commands/feedback.js +21 -2
  13. package/dist/cli/commands/feedback.js.map +1 -1
  14. package/dist/cli/commands/init.js +3 -0
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/route.js +3 -2
  17. package/dist/cli/commands/route.js.map +1 -1
  18. package/dist/core/adoption.js +50 -21
  19. package/dist/core/adoption.js.map +1 -1
  20. package/dist/core/agentBrief.js +2 -1
  21. package/dist/core/agentBrief.js.map +1 -1
  22. package/dist/core/bugHunt.js +51 -22
  23. package/dist/core/bugHunt.js.map +1 -1
  24. package/dist/core/bugHuntHotspotFindings.js +2 -1
  25. package/dist/core/bugHuntHotspotFindings.js.map +1 -1
  26. package/dist/core/ciGate.d.ts +10 -0
  27. package/dist/core/ciGate.js +21 -0
  28. package/dist/core/ciGate.js.map +1 -0
  29. package/dist/core/dogfood.d.ts +1 -0
  30. package/dist/core/dogfood.js +42 -20
  31. package/dist/core/dogfood.js.map +1 -1
  32. package/dist/core/dogfoodDiscovery.d.ts +8 -0
  33. package/dist/core/dogfoodDiscovery.js +119 -0
  34. package/dist/core/dogfoodDiscovery.js.map +1 -0
  35. package/dist/core/feedback.js +73 -5
  36. package/dist/core/feedback.js.map +1 -1
  37. package/dist/core/fileInspectionReport.js +37 -0
  38. package/dist/core/fileInspectionReport.js.map +1 -1
  39. package/dist/core/intentRouterArchitectureKeywordWeights.d.ts +1 -0
  40. package/dist/core/intentRouterArchitectureKeywordWeights.js +69 -0
  41. package/dist/core/intentRouterArchitectureKeywordWeights.js.map +1 -0
  42. package/dist/core/intentRouterCatalog.js +85 -31
  43. package/dist/core/intentRouterCatalog.js.map +1 -1
  44. package/dist/core/intentRouterDependencyKeywordWeights.d.ts +1 -0
  45. package/dist/core/intentRouterDependencyKeywordWeights.js +100 -0
  46. package/dist/core/intentRouterDependencyKeywordWeights.js.map +1 -0
  47. package/dist/core/intentRouterFileImpactKeywordWeights.d.ts +1 -0
  48. package/dist/core/intentRouterFileImpactKeywordWeights.js +92 -0
  49. package/dist/core/intentRouterFileImpactKeywordWeights.js.map +1 -0
  50. package/dist/core/intentRouterKeywordEarlyGuards.js +8 -3
  51. package/dist/core/intentRouterKeywordEarlyGuards.js.map +1 -1
  52. package/dist/core/intentRouterKeywordSearchGuards.js +28 -24
  53. package/dist/core/intentRouterKeywordSearchGuards.js.map +1 -1
  54. package/dist/core/intentRouterKeywordToolGuards.js +43 -0
  55. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
  56. package/dist/core/intentRouterKeywordWeights.js +40 -1222
  57. package/dist/core/intentRouterKeywordWeights.js.map +1 -1
  58. package/dist/core/intentRouterOperationalKeywordWeights.d.ts +1 -0
  59. package/dist/core/intentRouterOperationalKeywordWeights.js +203 -0
  60. package/dist/core/intentRouterOperationalKeywordWeights.js.map +1 -0
  61. package/dist/core/intentRouterPlanningSignals.js +4 -1
  62. package/dist/core/intentRouterPlanningSignals.js.map +1 -1
  63. package/dist/core/intentRouterPrDiffKeywords.d.ts +4 -0
  64. package/dist/core/intentRouterPrDiffKeywords.js +64 -0
  65. package/dist/core/intentRouterPrDiffKeywords.js.map +1 -0
  66. package/dist/core/intentRouterPrDiffSignals.js +6 -0
  67. package/dist/core/intentRouterPrDiffSignals.js.map +1 -1
  68. package/dist/core/intentRouterProductImprovementSignals.d.ts +1 -0
  69. package/dist/core/intentRouterProductImprovementSignals.js +48 -0
  70. package/dist/core/intentRouterProductImprovementSignals.js.map +1 -0
  71. package/dist/core/intentRouterRegressionKeywordMatches.js +3 -0
  72. package/dist/core/intentRouterRegressionKeywordMatches.js.map +1 -1
  73. package/dist/core/intentRouterRegressionKeywordWeights.d.ts +1 -0
  74. package/dist/core/intentRouterRegressionKeywordWeights.js +118 -0
  75. package/dist/core/intentRouterRegressionKeywordWeights.js.map +1 -0
  76. package/dist/core/intentRouterReleaseSignals.d.ts +1 -0
  77. package/dist/core/intentRouterReleaseSignals.js +47 -0
  78. package/dist/core/intentRouterReleaseSignals.js.map +1 -1
  79. package/dist/core/intentRouterReviewSignals.d.ts +1 -0
  80. package/dist/core/intentRouterReviewSignals.js +23 -1
  81. package/dist/core/intentRouterReviewSignals.js.map +1 -1
  82. package/dist/core/intentRouterSearchKeywordWeights.d.ts +1 -0
  83. package/dist/core/intentRouterSearchKeywordWeights.js +407 -0
  84. package/dist/core/intentRouterSearchKeywordWeights.js.map +1 -0
  85. package/dist/core/intentRouterSecurityKeywordWeights.d.ts +1 -0
  86. package/dist/core/intentRouterSecurityKeywordWeights.js +50 -0
  87. package/dist/core/intentRouterSecurityKeywordWeights.js.map +1 -0
  88. package/dist/core/intentRouterTrustFeedbackKeywordWeights.d.ts +1 -0
  89. package/dist/core/intentRouterTrustFeedbackKeywordWeights.js +222 -0
  90. package/dist/core/intentRouterTrustFeedbackKeywordWeights.js.map +1 -0
  91. package/dist/core/intentRouterUnderstandSignals.js +1 -0
  92. package/dist/core/intentRouterUnderstandSignals.js.map +1 -1
  93. package/dist/core/intentRouterWorkSignals.js +3 -0
  94. package/dist/core/intentRouterWorkSignals.js.map +1 -1
  95. package/dist/core/intentRouterWorkflowKeywordWeights.d.ts +1 -0
  96. package/dist/core/intentRouterWorkflowKeywordWeights.js +124 -0
  97. package/dist/core/intentRouterWorkflowKeywordWeights.js.map +1 -0
  98. package/dist/core/issueEngine.js +46 -2
  99. package/dist/core/issueEngine.js.map +1 -1
  100. package/dist/core/memory.d.ts +2 -0
  101. package/dist/core/memory.js +33 -1
  102. package/dist/core/memory.js.map +1 -1
  103. package/dist/core/preflightChangedFiles.d.ts +3 -0
  104. package/dist/core/preflightChangedFiles.js +13 -0
  105. package/dist/core/preflightChangedFiles.js.map +1 -1
  106. package/dist/core/preflightEvidence.d.ts +3 -0
  107. package/dist/core/preflightEvidence.js +3 -0
  108. package/dist/core/preflightEvidence.js.map +1 -1
  109. package/dist/core/privacy.d.ts +2 -0
  110. package/dist/core/privacy.js +10 -0
  111. package/dist/core/privacy.js.map +1 -1
  112. package/dist/core/qualityScorecard.js +25 -13
  113. package/dist/core/qualityScorecard.js.map +1 -1
  114. package/dist/core/startEvidence.js +26 -1
  115. package/dist/core/startEvidence.js.map +1 -1
  116. package/dist/core/startFixedRouteCriteria.js +5 -0
  117. package/dist/core/startFixedRouteCriteria.js.map +1 -1
  118. package/dist/core/startInputs.d.ts +3 -0
  119. package/dist/core/startMissionPolicy.d.ts +1 -1
  120. package/dist/core/startMissionPolicy.js +18 -7
  121. package/dist/core/startMissionPolicy.js.map +1 -1
  122. package/dist/core/startMode.js +17 -4
  123. package/dist/core/startMode.js.map +1 -1
  124. package/dist/core/startReportBuilder.js +1 -1
  125. package/dist/core/startReportBuilder.js.map +1 -1
  126. package/dist/core/startReviewGate.js +26 -4
  127. package/dist/core/startReviewGate.js.map +1 -1
  128. package/dist/core/startRouteActions.js +6 -0
  129. package/dist/core/startRouteActions.js.map +1 -1
  130. package/dist/core/understand.js +60 -13
  131. package/dist/core/understand.js.map +1 -1
  132. package/dist/core/workplan.js +99 -17
  133. package/dist/core/workplan.js.map +1 -1
  134. package/dist/projscan-sbom.cdx.json +6 -6
  135. package/dist/reporters/ciIssueDetails.d.ts +10 -0
  136. package/dist/reporters/ciIssueDetails.js +37 -0
  137. package/dist/reporters/ciIssueDetails.js.map +1 -0
  138. package/dist/reporters/consoleCiReporter.d.ts +2 -1
  139. package/dist/reporters/consoleCiReporter.js +26 -9
  140. package/dist/reporters/consoleCiReporter.js.map +1 -1
  141. package/dist/reporters/consoleFileReporter.js +10 -0
  142. package/dist/reporters/consoleFileReporter.js.map +1 -1
  143. package/dist/reporters/consoleHealthReporter.js +3 -1
  144. package/dist/reporters/consoleHealthReporter.js.map +1 -1
  145. package/dist/reporters/jsonReporter.d.ts +2 -1
  146. package/dist/reporters/jsonReporter.js +17 -10
  147. package/dist/reporters/jsonReporter.js.map +1 -1
  148. package/dist/reporters/markdownFileReporter.js +11 -0
  149. package/dist/reporters/markdownFileReporter.js.map +1 -1
  150. package/dist/reporters/markdownHealthReporter.d.ts +2 -1
  151. package/dist/reporters/markdownHealthReporter.js +5 -5
  152. package/dist/reporters/markdownHealthReporter.js.map +1 -1
  153. package/dist/reporters/scoreBreakdownReporter.d.ts +2 -0
  154. package/dist/reporters/scoreBreakdownReporter.js +24 -0
  155. package/dist/reporters/scoreBreakdownReporter.js.map +1 -0
  156. package/dist/tool-manifest.json +2 -2
  157. package/dist/types/analysis.d.ts +21 -1
  158. package/dist/types/bugHunt.d.ts +3 -0
  159. package/dist/types/config.d.ts +9 -0
  160. package/dist/types/dogfood.d.ts +15 -1
  161. package/dist/types/inspection.d.ts +3 -0
  162. package/dist/types/preflight.d.ts +3 -0
  163. package/dist/types/startMissionControl.d.ts +3 -0
  164. package/dist/types/startMissionReview.d.ts +2 -0
  165. package/dist/utils/ciFailOn.d.ts +5 -0
  166. package/dist/utils/ciFailOn.js +12 -0
  167. package/dist/utils/ciFailOn.js.map +1 -0
  168. package/dist/utils/config.js +3 -1
  169. package/dist/utils/config.js.map +1 -1
  170. package/dist/utils/configBasics.d.ts +2 -0
  171. package/dist/utils/configBasics.js +21 -0
  172. package/dist/utils/configBasics.js.map +1 -1
  173. package/dist/utils/configIssueRules.js +64 -0
  174. package/dist/utils/configIssueRules.js.map +1 -1
  175. package/dist/utils/scoreCalculator.js +77 -16
  176. package/dist/utils/scoreCalculator.js.map +1 -1
  177. package/docs/GUIDE.md +36 -6
  178. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
+ import { evaluateCiGate } from '../core/ciGate.js';
1
2
  import { calculateScore } from '../utils/scoreCalculator.js';
3
+ import { toCiIssueDetail } from './ciIssueDetails.js';
2
4
  export const CLI_JSON_SCHEMA_VERSION = 2;
3
5
  function emitJson(payload) {
4
6
  console.log(JSON.stringify({ schemaVersion: CLI_JSON_SCHEMA_VERSION, ...payload }, null, 2));
@@ -10,7 +12,7 @@ export function reportAnalysisJson(report, reportControls) {
10
12
  });
11
13
  }
12
14
  export function reportHealthJson(issues, reportControls) {
13
- const { score, grade, errors, warnings, infos } = calculateScore(issues);
15
+ const { score, grade, errors, warnings, infos, scoreBreakdown } = calculateScore(issues);
14
16
  console.log(JSON.stringify({
15
17
  schemaVersion: CLI_JSON_SCHEMA_VERSION,
16
18
  ...(reportControls ? { reportControls } : {}),
@@ -21,25 +23,30 @@ export function reportHealthJson(issues, reportControls) {
21
23
  errors,
22
24
  warnings,
23
25
  info: infos,
26
+ scoreBreakdown,
24
27
  issues,
25
28
  },
26
29
  }, null, 2));
27
30
  }
28
- export function reportCiJson(issues, threshold, reportControls) {
29
- const { score, grade, errors, warnings, infos } = calculateScore(issues);
31
+ export function reportCiJson(issues, threshold, reportControls, failOn) {
32
+ const gate = evaluateCiGate(issues, threshold, failOn);
30
33
  console.log(JSON.stringify({
31
34
  schemaVersion: CLI_JSON_SCHEMA_VERSION,
32
35
  ...(reportControls ? { reportControls } : {}),
33
36
  ci: {
34
- score,
35
- grade,
36
- pass: score >= threshold,
37
+ score: gate.score,
38
+ grade: gate.grade,
39
+ pass: gate.pass,
37
40
  threshold,
41
+ failOn: gate.failOn,
42
+ scorePass: gate.scorePass,
43
+ severityFloorMet: gate.severityFloorMet,
38
44
  totalIssues: issues.length,
39
- errors,
40
- warnings,
41
- info: infos,
42
- issues,
45
+ errors: gate.errors,
46
+ warnings: gate.warnings,
47
+ info: gate.infos,
48
+ scoreBreakdown: gate.scoreBreakdown,
49
+ issues: issues.map(toCiIssueDetail),
43
50
  },
44
51
  }, null, 2));
45
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsonReporter.js","sourceRoot":"","sources":["../../src/reporters/jsonReporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonReporter.js","sourceRoot":"","sources":["../../src/reporters/jsonReporter.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export function reportFileMarkdown(insp) {
12
12
  appendFileImports(lines, insp);
13
13
  appendFileExports(lines, insp);
14
14
  appendFileFunctions(lines, insp);
15
+ appendFileSuggestedActions(lines, insp);
15
16
  console.log(lines.join('\n'));
16
17
  }
17
18
  function appendFileSummary(lines, insp) {
@@ -89,4 +90,14 @@ function appendFileFunctions(lines, insp) {
89
90
  lines.push('', `_... and ${insp.functions.length - 20} more_`);
90
91
  }
91
92
  }
93
+ function appendFileSuggestedActions(lines, insp) {
94
+ if (!insp.suggestedNextActions || insp.suggestedNextActions.length === 0)
95
+ return;
96
+ lines.push('', '## Next Actions', '');
97
+ for (const action of insp.suggestedNextActions) {
98
+ lines.push(action.command
99
+ ? `- **${action.label}:** \`${action.command}\``
100
+ : `- **${action.label}**`);
101
+ }
102
+ }
92
103
  //# sourceMappingURL=markdownFileReporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdownFileReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownFileReporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdownFileReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownFileReporter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Issue } from '../types.js';
2
2
  import type { ReportControlsMetadata } from '../core/reportScope.js';
3
+ import type { CiFailOnSeverity } from '../types/config.js';
3
4
  export declare function reportHealthMarkdown(issues: Issue[], reportControls?: ReportControlsMetadata): void;
4
- export declare function reportCiMarkdown(issues: Issue[], threshold: number, reportControls?: ReportControlsMetadata): void;
5
+ export declare function reportCiMarkdown(issues: Issue[], threshold: number, reportControls?: ReportControlsMetadata, failOn?: CiFailOnSeverity): void;
@@ -1,3 +1,4 @@
1
+ import { evaluateCiGate } from '../core/ciGate.js';
1
2
  import { calculateScore, badgeMarkdown } from '../utils/scoreCalculator.js';
2
3
  export function reportHealthMarkdown(issues, reportControls) {
3
4
  const { score, grade } = calculateScore(issues);
@@ -10,12 +11,11 @@ export function reportHealthMarkdown(issues, reportControls) {
10
11
  appendHealthIssues(lines, issues);
11
12
  console.log(lines.join('\n'));
12
13
  }
13
- export function reportCiMarkdown(issues, threshold, reportControls) {
14
- const { score, grade } = calculateScore(issues);
15
- const pass = score >= threshold;
16
- const lines = [`# Projscan CI - ${ciLabel(pass)}`, ''];
14
+ export function reportCiMarkdown(issues, threshold, reportControls, failOn) {
15
+ const gate = evaluateCiGate(issues, threshold, failOn);
16
+ const lines = [`# Projscan CI - ${ciLabel(gate.pass)}`, ''];
17
17
  appendReportControlsMarkdown(lines, reportControls);
18
- lines.push(`| Metric | Value |`, `| --- | --- |`, `| Score | **${score}/100** |`, `| Grade | **${grade}** |`, `| Threshold | ${threshold} |`, `| Result | ${ciIcon(pass)} ${ciResultLabel(pass)} |`);
18
+ lines.push(`| Metric | Value |`, `| --- | --- |`, `| Score | **${gate.score}/100** |`, `| Grade | **${gate.grade}** |`, `| Threshold | ${threshold} |`, `| Fail on | ${gate.failOn} |`, `| Result | ${ciIcon(gate.pass)} ${ciResultLabel(gate.pass)} |`);
19
19
  appendCiIssues(lines, issues);
20
20
  console.log(lines.join('\n'));
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"markdownHealthReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownHealthReporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdownHealthReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownHealthReporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ScoreBreakdown } from '../types.js';
2
+ export declare function printScoreBreakdown(breakdown: ScoreBreakdown | undefined): void;
@@ -0,0 +1,24 @@
1
+ import chalk from 'chalk';
2
+ export function printScoreBreakdown(breakdown) {
3
+ if (!breakdown || breakdown.uncappedPenalty <= 0)
4
+ return;
5
+ console.log(` Score breakdown: ${breakdown.baseScore} - ${breakdown.totalPenalty} penalty = ${breakdown.finalScore}`);
6
+ console.log(` ${severityParts(breakdown).join('; ')}`);
7
+ const categories = breakdown.byCategory.filter((entry) => entry.penalty > 0);
8
+ if (categories.length > 0) {
9
+ console.log(` ${chalk.dim('categories:')} ${categories
10
+ .map((entry) => `${entry.category} -${entry.penalty}`)
11
+ .join(', ')}`);
12
+ }
13
+ }
14
+ function severityParts(breakdown) {
15
+ return ['error', 'warning', 'info']
16
+ .map((severity) => {
17
+ const item = breakdown.bySeverity[severity];
18
+ if (item.count === 0)
19
+ return null;
20
+ return `${severity}: ${item.count} x ${item.weight} = -${item.penalty}`;
21
+ })
22
+ .filter((part) => Boolean(part));
23
+ }
24
+ //# sourceMappingURL=scoreBreakdownReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoreBreakdownReporter.js","sourceRoot":"","sources":["../../src/reporters/scoreBreakdownReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,SAAqC;IACvE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC;QAAE,OAAO;IAEzD,OAAO,CAAC,GAAG,CACT,sBAAsB,SAAS,CAAC,SAAS,MAAM,SAAS,CAAC,YAAY,cAAc,SAAS,CAAC,UAAU,EAAE,CAC1G,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC7E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,UAAU;aAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;aACrD,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,SAAyB;IAC9C,OAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAW;SAC3C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1E,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "projscan",
3
- "version": "4.9.3",
3
+ "version": "4.10.0",
4
4
  "mcpProtocolVersion": null,
5
- "generatedAt": "2026-06-20T11:00:08.981Z",
5
+ "generatedAt": "2026-06-21T15:38:46.053Z",
6
6
  "toolCount": 45,
7
7
  "tools": [
8
8
  {
@@ -1,4 +1,4 @@
1
- import type { ExportInfo, ImportInfo, Issue } from './common.js';
1
+ import type { ExportInfo, ImportInfo, Issue, IssueSeverity } from './common.js';
2
2
  import type { DependencyReport, FrameworkResult, LanguageBreakdown, ScanResult } from './scanning.js';
3
3
  export interface FileExplanation {
4
4
  filePath: string;
@@ -29,4 +29,24 @@ export interface HealthScore {
29
29
  errors: number;
30
30
  warnings: number;
31
31
  infos: number;
32
+ scoreBreakdown?: ScoreBreakdown;
33
+ }
34
+ export interface ScoreSeverityBreakdown {
35
+ count: number;
36
+ weight: number;
37
+ penalty: number;
38
+ }
39
+ export interface ScoreCategoryBreakdown {
40
+ category: string;
41
+ count: number;
42
+ penalty: number;
43
+ }
44
+ export interface ScoreBreakdown {
45
+ baseScore: number;
46
+ finalScore: number;
47
+ grade: HealthScore['grade'];
48
+ totalPenalty: number;
49
+ uncappedPenalty: number;
50
+ bySeverity: Record<IssueSeverity, ScoreSeverityBreakdown>;
51
+ byCategory: ScoreCategoryBreakdown[];
32
52
  }
@@ -26,11 +26,14 @@ export interface BugHuntReport {
26
26
  };
27
27
  hotspotCount: number;
28
28
  preflightVerdict: PreflightVerdict;
29
+ preflightActionableReasonCount?: number;
30
+ preflightIgnoredReasonCount?: number;
29
31
  touchedFiles: string[];
30
32
  conflicts: number;
31
33
  };
32
34
  topSuspects: BugHuntFinding[];
33
35
  fixQueue: BugHuntFinding[];
36
+ reviewQueue?: BugHuntFinding[];
34
37
  fixFirst?: FixFirstRecommendation;
35
38
  verificationMatrix: Array<{
36
39
  command: string;
@@ -1,7 +1,9 @@
1
1
  import type { IssueSeverity } from './common.js';
2
2
  export type ReportFormat = 'console' | 'json' | 'markdown' | 'sarif' | 'html';
3
+ export type CiFailOnSeverity = IssueSeverity;
3
4
  export interface ProjscanConfig {
4
5
  minScore?: number;
6
+ failOn?: CiFailOnSeverity;
5
7
  baseRef?: string;
6
8
  hotspots?: {
7
9
  limit?: number;
@@ -14,6 +16,8 @@ export interface ProjscanConfig {
14
16
  offline?: boolean;
15
17
  };
16
18
  disableRules?: string[];
19
+ suppress?: Record<string, string[]>;
20
+ inlineSuppressions?: Record<string, InlineRuleSuppression[]>;
17
21
  severityOverrides?: Record<string, IssueSeverity>;
18
22
  /**
19
23
  * Named evidence-export presets. `analyze`, `doctor`, and `ci` can select
@@ -43,6 +47,11 @@ export interface ProjscanConfig {
43
47
  sinks?: string[];
44
48
  };
45
49
  }
50
+ export interface InlineRuleSuppression {
51
+ line: number;
52
+ rules: string[];
53
+ reason?: string;
54
+ }
46
55
  export interface ReportPolicyPreset {
47
56
  reportScope?: string[];
48
57
  redactPaths?: boolean;
@@ -65,7 +65,7 @@ export interface FeedbackSummaryReport {
65
65
  };
66
66
  nextDogfoodCommand: string;
67
67
  }
68
- export type FeedbackIntakeCategory = 'false_positive' | 'noisy_caution' | 'missing_framework_rule' | 'confusing_docs_output' | 'useful_signal' | 'uncategorized';
68
+ export type FeedbackIntakeCategory = 'false_positive' | 'noisy_caution' | 'install_warning' | 'missing_framework_rule' | 'confusing_docs_output' | 'workflow_focus' | 'useful_signal' | 'uncategorized';
69
69
  export type FeedbackIntakeConfidence = 'high' | 'medium' | 'low';
70
70
  export interface FeedbackIntakeReport {
71
71
  schemaVersion: 1;
@@ -76,6 +76,10 @@ export interface FeedbackIntakeReport {
76
76
  taskTitle: string;
77
77
  suggestedCommand: string;
78
78
  nextCommand: string;
79
+ agentloopTaskCommand: string;
80
+ followUpCommands: string[];
81
+ feedbackSummaryCommand?: string;
82
+ dogfoodCommand?: string;
79
83
  feedbackResponse: DogfoodFeedbackResponse;
80
84
  appended?: {
81
85
  path: string;
@@ -100,6 +104,14 @@ export interface DogfoodWebsiteProof {
100
104
  bullets: string[];
101
105
  markdown: string;
102
106
  }
107
+ export interface DogfoodRepoDiscovery {
108
+ roots: string[];
109
+ candidates: string[];
110
+ selected: string[];
111
+ targetRepoCount: number;
112
+ missingRepoCount: number;
113
+ command: string;
114
+ }
103
115
  export interface DogfoodMarketValidation {
104
116
  status: 'proven' | 'needs_feedback' | 'needs_more_repos' | 'needs_tuning';
105
117
  summary: string;
@@ -175,6 +187,7 @@ export interface DogfoodRepoResult {
175
187
  gaps: string[];
176
188
  feedbackQuestions: string[];
177
189
  validation: DogfoodRepoValidation;
190
+ feedbackCaptureCommand?: string;
178
191
  nextCommands: string[];
179
192
  }
180
193
  export interface DogfoodReport {
@@ -198,5 +211,6 @@ export interface DogfoodReport {
198
211
  falsePositiveReports: number;
199
212
  };
200
213
  marketValidation: DogfoodMarketValidation;
214
+ repoDiscovery?: DogfoodRepoDiscovery;
201
215
  suggestedNextActions: PreflightSuggestedAction[];
202
216
  }
@@ -1,5 +1,6 @@
1
1
  import type { ExportInfo, ImportInfo, Issue } from './common.js';
2
2
  import type { FileHotspot } from './hotspots.js';
3
+ import type { PreflightSuggestedAction } from './preflight.js';
3
4
  export interface FileInspection {
4
5
  relativePath: string;
5
6
  exists: boolean;
@@ -20,6 +21,8 @@ export interface FileInspection {
20
21
  fanOut?: number | null;
21
22
  /** Adapter id (e.g. 'javascript', 'python'). Set when the graph was available. */
22
23
  language?: string;
24
+ /** Concise follow-up commands for the inspected file. */
25
+ suggestedNextActions?: PreflightSuggestedAction[];
23
26
  /**
24
27
  * Per-function McCabe CC (0.13.0+). Sorted by cyclomaticComplexity desc.
25
28
  * Empty array when the file has no functions or the adapter doesn't yet
@@ -85,6 +85,9 @@ export interface PreflightEvidence {
85
85
  count: number;
86
86
  files: string[];
87
87
  baseRef: string | null;
88
+ branchChangedFileCount?: number;
89
+ uncommittedChangedFileCount?: number;
90
+ uncommittedFiles?: string[];
88
91
  reason?: string;
89
92
  };
90
93
  sessionMemory: {
@@ -70,6 +70,9 @@ export interface StartReport {
70
70
  count: number;
71
71
  files: string[];
72
72
  baseRef: string | null;
73
+ branchChangedFileCount?: number;
74
+ uncommittedChangedFileCount?: number;
75
+ uncommittedFiles?: string[];
73
76
  reason?: string;
74
77
  };
75
78
  sessionMemory: {
@@ -4,6 +4,8 @@ export interface StartMissionReviewWorktree {
4
4
  available: boolean;
5
5
  clean: boolean;
6
6
  changedFileCount: number;
7
+ branchChangedFileCount?: number;
8
+ uncommittedChangedFileCount?: number;
7
9
  files: string[];
8
10
  baseRef: string | null;
9
11
  summary: string;
@@ -0,0 +1,5 @@
1
+ import type { CiFailOnSeverity } from '../types/config.js';
2
+ export declare const DEFAULT_CI_FAIL_ON: CiFailOnSeverity;
3
+ export declare const CI_FAIL_ON_VALUES: CiFailOnSeverity[];
4
+ export declare function normalizeCiFailOn(value: unknown): CiFailOnSeverity | undefined;
5
+ export declare function ciFailOnLabel(failOn: CiFailOnSeverity): string;
@@ -0,0 +1,12 @@
1
+ export const DEFAULT_CI_FAIL_ON = 'warning';
2
+ export const CI_FAIL_ON_VALUES = ['info', 'warning', 'error'];
3
+ export function normalizeCiFailOn(value) {
4
+ return typeof value === 'string' && isCiFailOnSeverity(value) ? value : undefined;
5
+ }
6
+ export function ciFailOnLabel(failOn) {
7
+ return `${failOn}-or-higher`;
8
+ }
9
+ function isCiFailOnSeverity(value) {
10
+ return CI_FAIL_ON_VALUES.includes(value);
11
+ }
12
+ //# sourceMappingURL=ciFailOn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciFailOn.js","sourceRoot":"","sources":["../../src/utils/ciFailOn.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAqB,SAAS,CAAC;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAElF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAwB;IACpD,OAAO,GAAG,MAAM,YAAY,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAyB,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { applyBaseRef, applyDisableRules, applyIgnore, applyMinScore } from './configBasics.js';
1
+ import { applyBaseRef, applyDisableRules, applyFailOn, applyIgnore, applyMinScore, applySuppress, } from './configBasics.js';
2
2
  import { applyHotspots } from './configHotspots.js';
3
3
  import { applyMonorepo } from './configMonorepo.js';
4
4
  import { applyReportPolicies } from './configReportPolicies.js';
@@ -19,11 +19,13 @@ function normalize(input) {
19
19
  const obj = input;
20
20
  const out = {};
21
21
  applyMinScore(obj, out);
22
+ applyFailOn(obj, out);
22
23
  applyBaseRef(obj, out);
23
24
  applyHotspots(obj, out);
24
25
  applyIgnore(obj, out);
25
26
  applyScan(obj, out);
26
27
  applyDisableRules(obj, out);
28
+ applySuppress(obj, out);
27
29
  applySeverityOverrides(obj, out);
28
30
  applyReportPolicies(obj, out);
29
31
  applyMonorepo(obj, out);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import type { ProjscanConfig } from '../types/config.js';
2
2
  export declare function applyMinScore(obj: Record<string, unknown>, out: ProjscanConfig): void;
3
+ export declare function applyFailOn(obj: Record<string, unknown>, out: ProjscanConfig): void;
3
4
  export declare function applyBaseRef(obj: Record<string, unknown>, out: ProjscanConfig): void;
4
5
  export declare function applyIgnore(obj: Record<string, unknown>, out: ProjscanConfig): void;
5
6
  export declare function applyDisableRules(obj: Record<string, unknown>, out: ProjscanConfig): void;
7
+ export declare function applySuppress(obj: Record<string, unknown>, out: ProjscanConfig): void;
@@ -1,8 +1,14 @@
1
+ import { normalizeCiFailOn } from './ciFailOn.js';
1
2
  export function applyMinScore(obj, out) {
2
3
  if (typeof obj.minScore === 'number' && Number.isFinite(obj.minScore)) {
3
4
  out.minScore = Math.max(0, Math.min(100, Math.floor(obj.minScore)));
4
5
  }
5
6
  }
7
+ export function applyFailOn(obj, out) {
8
+ const failOn = normalizeCiFailOn(obj.failOn);
9
+ if (failOn)
10
+ out.failOn = failOn;
11
+ }
6
12
  export function applyBaseRef(obj, out) {
7
13
  if (typeof obj.baseRef === 'string' && obj.baseRef.trim()) {
8
14
  out.baseRef = obj.baseRef.trim();
@@ -18,4 +24,19 @@ export function applyDisableRules(obj, out) {
18
24
  return;
19
25
  out.disableRules = obj.disableRules.filter((v) => typeof v === 'string' && v.length > 0);
20
26
  }
27
+ export function applySuppress(obj, out) {
28
+ if (!obj.suppress || typeof obj.suppress !== 'object' || Array.isArray(obj.suppress))
29
+ return;
30
+ const raw = obj.suppress;
31
+ const suppress = {};
32
+ for (const [rule, value] of Object.entries(raw)) {
33
+ if (!Array.isArray(value))
34
+ continue;
35
+ const patterns = value.filter((v) => typeof v === 'string' && v.length > 0);
36
+ if (patterns.length > 0)
37
+ suppress[rule] = patterns;
38
+ }
39
+ if (Object.keys(suppress).length > 0)
40
+ out.suppress = suppress;
41
+ }
21
42
  //# sourceMappingURL=configBasics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configBasics.js","sourceRoot":"","sources":["../../src/utils/configBasics.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,GAA4B,EAAE,GAAmB;IAC7E,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAA4B,EAAE,GAAmB;IAC5E,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAA4B,EAAE,GAAmB;IAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAA4B,EAAE,GAAmB;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO;IAC7C,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CACxC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"configBasics.js","sourceRoot":"","sources":["../../src/utils/configBasics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,UAAU,aAAa,CAAC,GAA4B,EAAE,GAAmB;IAC7E,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAA4B,EAAE,GAAmB;IAC3E,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAA4B,EAAE,GAAmB;IAC5E,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAA4B,EAAE,GAAmB;IAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAA4B,EAAE,GAAmB;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO;IAC7C,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CACxC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAA4B,EAAE,GAAmB;IAC7E,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO;IAC7F,MAAM,GAAG,GAAG,GAAG,CAAC,QAAmC,CAAC;IACpD,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;IACrD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAChE,CAAC"}
@@ -8,6 +8,7 @@ export function applyConfigToIssues(issues, config) {
8
8
  const overrides = config.severityOverrides ?? {};
9
9
  return issues
10
10
  .filter((issue) => !isRuleDisabled(issue.id, disabled))
11
+ .filter((issue) => !isRuleSuppressed(issue, config))
11
12
  .map((issue) => overrides[issue.id] && overrides[issue.id] !== issue.severity
12
13
  ? { ...issue, severity: overrides[issue.id] }
13
14
  : issue);
@@ -21,4 +22,67 @@ function isRuleDisabled(id, disabled) {
21
22
  }
22
23
  return false;
23
24
  }
25
+ function isRuleSuppressed(issue, config) {
26
+ return isSuppressedByConfigMap(issue, config.suppress ?? {}) || isSuppressedInline(issue, config);
27
+ }
28
+ function isSuppressedByConfigMap(issue, suppress) {
29
+ for (const [rule, patterns] of Object.entries(suppress)) {
30
+ if (!matchesRule(issue.id, rule))
31
+ continue;
32
+ if ((issue.locations ?? []).some((location) => matchesAnyPath(location.file, patterns))) {
33
+ return true;
34
+ }
35
+ }
36
+ return false;
37
+ }
38
+ function isSuppressedInline(issue, config) {
39
+ for (const location of issue.locations ?? []) {
40
+ const entries = config.inlineSuppressions?.[normalizePath(location.file)] ?? [];
41
+ if (entries.some((entry) => entry.line === location.line && entry.rules.some((rule) => matchesRule(issue.id, rule)))) {
42
+ return true;
43
+ }
44
+ }
45
+ return false;
46
+ }
47
+ function matchesRule(id, rule) {
48
+ if (rule === '*' || rule === id)
49
+ return true;
50
+ return rule.endsWith('*') && id.startsWith(rule.slice(0, -1));
51
+ }
52
+ function matchesAnyPath(file, patterns) {
53
+ const normalized = normalizePath(file);
54
+ return patterns.some((pattern) => matchesPath(normalized, pattern));
55
+ }
56
+ function matchesPath(file, pattern) {
57
+ const normalized = normalizePath(pattern);
58
+ if (file === normalized)
59
+ return true;
60
+ if (!normalized.includes('*'))
61
+ return false;
62
+ return globToRegExp(normalized).test(file);
63
+ }
64
+ function globToRegExp(pattern) {
65
+ let source = '^';
66
+ for (let i = 0; i < pattern.length; i += 1) {
67
+ const char = pattern[i];
68
+ if (char === '*') {
69
+ if (pattern[i + 1] === '*') {
70
+ source += '.*';
71
+ i += 1;
72
+ }
73
+ else {
74
+ source += '[^/]*';
75
+ }
76
+ continue;
77
+ }
78
+ source += escapeRegExp(char);
79
+ }
80
+ return new RegExp(`${source}$`);
81
+ }
82
+ function normalizePath(value) {
83
+ return value.replace(/\\/g, '/').replace(/^\.\//, '');
84
+ }
85
+ function escapeRegExp(value) {
86
+ return value.replace(/[|\\{}()[\]^$+?.]/g, '\\$&');
87
+ }
24
88
  //# sourceMappingURL=configIssueRules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configIssueRules.js","sourceRoot":"","sources":["../../src/utils/configIssueRules.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,MAAsB;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAEjD,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;SACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,QAAQ;QAC3D,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC7C,CAAC,CAAC,KAAK,CACV,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,QAAkB;IACpD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"configIssueRules.js","sourceRoot":"","sources":["../../src/utils/configIssueRules.ts"],"names":[],"mappings":"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"}