pr-checkmate 3.2.3 → 4.0.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 (174) hide show
  1. package/.eslintrc.js +3 -9
  2. package/LICENSE +8 -3
  3. package/README.md +54 -5
  4. package/dist/cjs/agent/hook.d.ts +37 -0
  5. package/dist/cjs/agent/hook.js +175 -0
  6. package/dist/cjs/agent/registration.d.ts +10 -0
  7. package/dist/cjs/agent/registration.js +28 -0
  8. package/dist/cjs/agent/setup.d.ts +20 -0
  9. package/dist/cjs/agent/setup.js +229 -0
  10. package/dist/cjs/cli.js +101 -0
  11. package/dist/cjs/config/constants.d.ts +2 -0
  12. package/dist/cjs/config/constants.js +5 -1
  13. package/dist/cjs/config/pr-checkmate.template.json +11 -1
  14. package/dist/cjs/core/checks/dependencies/grype-scan.js +18 -0
  15. package/dist/cjs/core/checks/findings.js +33 -7
  16. package/dist/cjs/core/checks/git/large-files.d.ts +1 -0
  17. package/dist/cjs/core/checks/git/large-files.js +3 -3
  18. package/dist/cjs/core/checks/languages/lint.js +12 -0
  19. package/dist/cjs/core/checks/languages/ruff-shared.js +6 -1
  20. package/dist/cjs/core/checks/pr/commitlint.js +4 -2
  21. package/dist/cjs/core/checks/pr/pr-size-check.d.ts +2 -0
  22. package/dist/cjs/core/checks/pr/pr-size-check.js +5 -5
  23. package/dist/cjs/core/checks/quality/package-size.d.ts +23 -1
  24. package/dist/cjs/core/checks/quality/package-size.js +20 -4
  25. package/dist/cjs/core/checks/quality/spellcheck.js +8 -5
  26. package/dist/cjs/core/checks/security/agent-instructions.d.ts +4 -0
  27. package/dist/cjs/core/checks/security/agent-instructions.js +149 -0
  28. package/dist/cjs/core/checks/security/diff-security.d.ts +7 -0
  29. package/dist/cjs/core/checks/security/diff-security.js +21 -1
  30. package/dist/cjs/core/checks/security/security.d.ts +0 -13
  31. package/dist/cjs/core/checks/security/security.js +27 -0
  32. package/dist/cjs/core/checks/security/workflow-security.js +33 -0
  33. package/dist/cjs/core/commands.d.ts +6 -0
  34. package/dist/cjs/core/commands.js +11 -1
  35. package/dist/cjs/core/finding-store.d.ts +16 -0
  36. package/dist/cjs/core/finding-store.js +73 -0
  37. package/dist/cjs/core/install/doctor.js +12 -0
  38. package/dist/cjs/core/install/grype-db.d.ts +25 -0
  39. package/dist/cjs/core/install/grype-db.js +45 -0
  40. package/dist/cjs/core/install/profiles.d.ts +1 -1
  41. package/dist/cjs/core/install/profiles.js +1 -1
  42. package/dist/cjs/core/install/reuse.js +6 -3
  43. package/dist/cjs/core/registry.js +2 -0
  44. package/dist/cjs/core/reporters.js +9 -0
  45. package/dist/cjs/core/run-checks.js +15 -5
  46. package/dist/cjs/core/sarif.d.ts +13 -0
  47. package/dist/cjs/core/sarif.js +60 -0
  48. package/dist/cjs/core/types.d.ts +7 -2
  49. package/dist/cjs/index.d.ts +2 -1
  50. package/dist/cjs/index.js +4 -1
  51. package/dist/cjs/init.d.ts +0 -8
  52. package/dist/cjs/init.js +12 -2
  53. package/dist/cjs/interfaces/index.d.ts +12 -0
  54. package/dist/cjs/mcp/config-tools.d.ts +30 -0
  55. package/dist/cjs/mcp/config-tools.js +320 -0
  56. package/dist/cjs/mcp/dependency.d.ts +33 -0
  57. package/dist/cjs/mcp/dependency.js +407 -0
  58. package/dist/cjs/mcp/protocol.d.ts +97 -0
  59. package/dist/cjs/mcp/protocol.js +181 -0
  60. package/dist/cjs/mcp/review.d.ts +63 -0
  61. package/dist/cjs/mcp/review.js +150 -0
  62. package/dist/cjs/mcp/serve.d.ts +8 -0
  63. package/dist/cjs/mcp/serve.js +49 -0
  64. package/dist/cjs/mcp/settings.d.ts +13 -0
  65. package/dist/cjs/mcp/settings.js +50 -0
  66. package/dist/cjs/mcp/tools.d.ts +23 -0
  67. package/dist/cjs/mcp/tools.js +633 -0
  68. package/dist/cjs/utils/execa.d.ts +7 -0
  69. package/dist/cjs/utils/execa.js +41 -1
  70. package/dist/cjs/utils/own-deps.js +8 -1
  71. package/dist/cjs/utils/resolve-bin.d.ts +2 -0
  72. package/dist/cjs/utils/resolve-bin.js +5 -0
  73. package/dist/cjs/utils/result-collector.d.ts +17 -1
  74. package/dist/cjs/utils/result-collector.js +7 -2
  75. package/dist/esm/agent/hook.d.ts +37 -0
  76. package/dist/esm/agent/hook.js +167 -0
  77. package/dist/esm/agent/registration.d.ts +10 -0
  78. package/dist/esm/agent/registration.js +21 -0
  79. package/dist/esm/agent/setup.d.ts +20 -0
  80. package/dist/esm/agent/setup.js +220 -0
  81. package/dist/esm/cli.js +100 -2
  82. package/dist/esm/config/constants.d.ts +2 -0
  83. package/dist/esm/config/constants.js +4 -0
  84. package/dist/esm/config/pr-checkmate.template.json +11 -1
  85. package/dist/esm/core/checks/dependencies/dependency-check.js +2 -2
  86. package/dist/esm/core/checks/dependencies/grype-scan.js +18 -0
  87. package/dist/esm/core/checks/dependencies/license-check.js +2 -2
  88. package/dist/esm/core/checks/dependencies/npm-audit.js +2 -2
  89. package/dist/esm/core/checks/findings.js +33 -7
  90. package/dist/esm/core/checks/git/diff-smell.js +1 -1
  91. package/dist/esm/core/checks/git/large-files.d.ts +1 -0
  92. package/dist/esm/core/checks/git/large-files.js +1 -1
  93. package/dist/esm/core/checks/languages/cpp-format.js +1 -1
  94. package/dist/esm/core/checks/languages/lint.js +12 -3
  95. package/dist/esm/core/checks/languages/prettier.js +3 -3
  96. package/dist/esm/core/checks/languages/python-format.js +2 -2
  97. package/dist/esm/core/checks/languages/python-lint.js +2 -2
  98. package/dist/esm/core/checks/languages/ruff-shared.js +6 -1
  99. package/dist/esm/core/checks/languages/typecheck.js +1 -1
  100. package/dist/esm/core/checks/pr/commitlint.js +4 -2
  101. package/dist/esm/core/checks/pr/pr-body.js +1 -1
  102. package/dist/esm/core/checks/pr/pr-size-check.d.ts +2 -0
  103. package/dist/esm/core/checks/pr/pr-size-check.js +3 -3
  104. package/dist/esm/core/checks/pr/pr-title-lint.js +1 -1
  105. package/dist/esm/core/checks/quality/dead-code.js +1 -1
  106. package/dist/esm/core/checks/quality/duplicate-check.js +1 -1
  107. package/dist/esm/core/checks/quality/markdown-lint.js +1 -1
  108. package/dist/esm/core/checks/quality/package-size.d.ts +23 -1
  109. package/dist/esm/core/checks/quality/package-size.js +19 -4
  110. package/dist/esm/core/checks/quality/spellcheck.js +11 -8
  111. package/dist/esm/core/checks/security/agent-instructions.d.ts +4 -0
  112. package/dist/esm/core/checks/security/agent-instructions.js +146 -0
  113. package/dist/esm/core/checks/security/diff-security.d.ts +7 -0
  114. package/dist/esm/core/checks/security/diff-security.js +21 -1
  115. package/dist/esm/core/checks/security/security.d.ts +0 -13
  116. package/dist/esm/core/checks/security/security.js +28 -1
  117. package/dist/esm/core/checks/security/workflow-security.js +33 -0
  118. package/dist/esm/core/commands.d.ts +6 -0
  119. package/dist/esm/core/commands.js +10 -0
  120. package/dist/esm/core/finding-store.d.ts +16 -0
  121. package/dist/esm/core/finding-store.js +67 -0
  122. package/dist/esm/core/install/doctor.js +12 -0
  123. package/dist/esm/core/install/grype-db.d.ts +25 -0
  124. package/dist/esm/core/install/grype-db.js +41 -0
  125. package/dist/esm/core/install/prepare.js +1 -1
  126. package/dist/esm/core/install/profiles.d.ts +1 -1
  127. package/dist/esm/core/install/profiles.js +1 -1
  128. package/dist/esm/core/install/reuse.js +6 -3
  129. package/dist/esm/core/registry.js +2 -0
  130. package/dist/esm/core/reporters.js +9 -0
  131. package/dist/esm/core/run-checks.js +17 -7
  132. package/dist/esm/core/sarif.d.ts +13 -0
  133. package/dist/esm/core/sarif.js +57 -0
  134. package/dist/esm/core/types.d.ts +7 -2
  135. package/dist/esm/index.d.ts +2 -1
  136. package/dist/esm/index.js +2 -0
  137. package/dist/esm/init.d.ts +0 -8
  138. package/dist/esm/init.js +15 -4
  139. package/dist/esm/interfaces/index.d.ts +12 -0
  140. package/dist/esm/mcp/config-tools.d.ts +30 -0
  141. package/dist/esm/mcp/config-tools.js +310 -0
  142. package/dist/esm/mcp/dependency.d.ts +33 -0
  143. package/dist/esm/mcp/dependency.js +402 -0
  144. package/dist/esm/mcp/protocol.d.ts +97 -0
  145. package/dist/esm/mcp/protocol.js +175 -0
  146. package/dist/esm/mcp/review.d.ts +63 -0
  147. package/dist/esm/mcp/review.js +139 -0
  148. package/dist/esm/mcp/serve.d.ts +8 -0
  149. package/dist/esm/mcp/serve.js +43 -0
  150. package/dist/esm/mcp/settings.d.ts +13 -0
  151. package/dist/esm/mcp/settings.js +43 -0
  152. package/dist/esm/mcp/tools.d.ts +23 -0
  153. package/dist/esm/mcp/tools.js +626 -0
  154. package/dist/esm/utils/execa.d.ts +7 -0
  155. package/dist/esm/utils/execa.js +40 -1
  156. package/dist/esm/utils/own-deps.js +8 -1
  157. package/dist/esm/utils/resolve-bin.d.ts +2 -0
  158. package/dist/esm/utils/resolve-bin.js +4 -0
  159. package/dist/esm/utils/result-collector.d.ts +17 -1
  160. package/dist/esm/utils/result-collector.js +7 -2
  161. package/eslint-default-rules.json +2 -8
  162. package/eslint.config.mjs +37 -8
  163. package/install-manifests/commitlint/package-lock.json +5 -4
  164. package/install-manifests/core/package-lock.json +5 -3
  165. package/install-manifests/js/package-lock.json +250 -571
  166. package/install-manifests/js/package.json +10 -8
  167. package/install-manifests/markdown/package-lock.json +16 -13
  168. package/install-manifests/markdown/package.json +3 -0
  169. package/install-manifests/spellcheck/package-lock.json +3 -3
  170. package/package.json +24 -16
  171. package/pr-checkmate.schema.json +35 -0
  172. package/src/config/.eslintrc.js +3 -9
  173. package/src/config/eslint-default-rules.json +2 -8
  174. package/src/config/pr-checkmate.schema.json +35 -0
@@ -3,14 +3,14 @@
3
3
  "version": "1.0.0",
4
4
  "dependencies": {
5
5
  "typescript": "6.0.3",
6
- "eslint": "10.11.0",
6
+ "eslint": "10.14.0",
7
7
  "eslint-config-prettier": "10.1.8",
8
- "eslint-plugin-import-x": "4.17.1",
9
- "eslint-plugin-jsdoc": "65.1.0",
10
- "eslint-plugin-prettier": "5.5.6",
11
- "eslint-plugin-sonarjs": "4.2.1",
12
- "@typescript-eslint/eslint-plugin": "8.70.1",
13
- "@typescript-eslint/parser": "8.70.1",
8
+ "eslint-plugin-jsdoc": "65.4.2",
9
+ "eslint-plugin-prettier": "5.5.7",
10
+ "eslint-plugin-simple-import-sort": "14.0.0",
11
+ "eslint-plugin-sonarjs": "4.2.2",
12
+ "@typescript-eslint/eslint-plugin": "8.72.1",
13
+ "@typescript-eslint/parser": "8.72.1",
14
14
  "prettier": "3.9.9",
15
15
  "dpdm": "4.3.0",
16
16
  "knip": "6.38.0",
@@ -20,7 +20,9 @@
20
20
  "overrides": {
21
21
  "dpdm": {
22
22
  "typescript": "$typescript"
23
- }
23
+ },
24
+ "minimatch": "^11.0.3",
25
+ "glob": "^14.0.3"
24
26
  },
25
27
  "private": true
26
28
  }
@@ -9,6 +9,9 @@
9
9
  "version": "1.0.0",
10
10
  "dependencies": {
11
11
  "markdownlint": "0.41.1"
12
+ },
13
+ "overrides": {
14
+ "katex": "^0.19.1"
12
15
  }
13
16
  },
14
17
  "node_modules/@types/debug": {
@@ -80,6 +83,15 @@
80
83
  "url": "https://github.com/sponsors/wooorm"
81
84
  }
82
85
  },
86
+ "node_modules/commander": {
87
+ "version": "15.0.0",
88
+ "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz",
89
+ "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==",
90
+ "license": "MIT",
91
+ "engines": {
92
+ "node": ">=22.12.0"
93
+ }
94
+ },
83
95
  "node_modules/debug": {
84
96
  "version": "4.4.3",
85
97
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -189,30 +201,21 @@
189
201
  }
190
202
  },
191
203
  "node_modules/katex": {
192
- "version": "0.16.47",
193
- "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz",
194
- "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==",
204
+ "version": "0.19.1",
205
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.19.1.tgz",
206
+ "integrity": "sha512-jG8uKntjSEcm2EpQOh0XturpPuuC9r3Sq5HLHdsFdWZT27E672SF19QEi+of0/YeOy15lDgRhKvr5614uRrEfA==",
195
207
  "funding": [
196
208
  "https://opencollective.com/katex",
197
209
  "https://github.com/sponsors/katex"
198
210
  ],
199
211
  "license": "MIT",
200
212
  "dependencies": {
201
- "commander": "^8.3.0"
213
+ "commander": "^15.0.0"
202
214
  },
203
215
  "bin": {
204
216
  "katex": "cli.js"
205
217
  }
206
218
  },
207
- "node_modules/katex/node_modules/commander": {
208
- "version": "8.3.0",
209
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
210
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
211
- "license": "MIT",
212
- "engines": {
213
- "node": ">= 12"
214
- }
215
- },
216
219
  "node_modules/markdownlint": {
217
220
  "version": "0.41.1",
218
221
  "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.41.1.tgz",
@@ -4,5 +4,8 @@
4
4
  "dependencies": {
5
5
  "markdownlint": "0.41.1"
6
6
  },
7
+ "overrides": {
8
+ "katex": "^0.19.1"
9
+ },
7
10
  "private": true
8
11
  }
@@ -982,9 +982,9 @@
982
982
  }
983
983
  },
984
984
  "node_modules/smol-toml": {
985
- "version": "1.8.0",
986
- "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz",
987
- "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==",
985
+ "version": "1.9.1",
986
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.1.tgz",
987
+ "integrity": "sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==",
988
988
  "license": "BSD-3-Clause",
989
989
  "engines": {
990
990
  "node": ">= 18"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pr-checkmate",
3
- "version": "3.2.3",
3
+ "version": "4.0.0",
4
4
  "description": "Security-first PR gate for CI: secret scanning, grype dependency scanning, SBOM — plus linting and formatting across 11 languages",
5
5
  "keywords": [
6
6
  "github-actions",
@@ -9,7 +9,11 @@
9
9
  "eslint",
10
10
  "prettier",
11
11
  "code-quality",
12
- "automation"
12
+ "automation",
13
+ "mcp",
14
+ "model-context-protocol",
15
+ "ai-agents",
16
+ "claude-code"
13
17
  ],
14
18
  "main": "./dist/cjs/index.js",
15
19
  "module": "./dist/esm/index.js",
@@ -78,6 +82,12 @@
78
82
  "author": "Artur Polishchuk",
79
83
  "license": "SEE LICENSE IN LICENSE",
80
84
  "dependencies": {
85
+ "execa": "^9.6.0",
86
+ "gitleaks-secret-scanner-fixed": "3.0.4",
87
+ "inquirer": "^14.1.0",
88
+ "yaml": "^2.9.0"
89
+ },
90
+ "devDependencies": {
81
91
  "@astral-sh/ruff-wasm-nodejs": "^0.16.3",
82
92
  "@commitlint/cli": "^21.2.2",
83
93
  "@commitlint/config-conventional": "^21.2.2",
@@ -86,37 +96,35 @@
86
96
  "@typescript-eslint/parser": "^8.67.0",
87
97
  "@wasm-fmt/clang-format": "^23.1.1",
88
98
  "@wasm-fmt/gofmt": "^0.7.3",
99
+ "conventional-commits-filter": "^6.0.1",
100
+ "conventional-commits-parser": "^7.1.2",
89
101
  "cspell": "^10.0.1",
90
102
  "dpdm": "^4.3.0",
91
103
  "eslint": "^10.8.1",
92
104
  "eslint-config-prettier": "^10.1.8",
93
- "eslint-plugin-import-x": "^4.17.1",
94
105
  "eslint-plugin-jsdoc": "^65.1.0",
95
106
  "eslint-plugin-prettier": "^5.5.6",
107
+ "eslint-plugin-simple-import-sort": "^14.0.0",
96
108
  "eslint-plugin-sonarjs": "^4.2.0",
97
- "execa": "^9.6.0",
98
- "gitleaks-secret-scanner-fixed": "3.0.4",
99
- "inquirer": "^14.1.0",
100
109
  "jscpd": "^5.0.16",
101
110
  "knip": "^6.32.2",
102
111
  "license-checker-rseidelsohn": "^5.0.1",
103
112
  "markdownlint": "^0.41.1",
104
113
  "prettier": "^3.9.6",
105
- "ts-node": "^10.9.1",
106
- "ts-unused-exports": "^11.0.1",
107
- "typescript": "^6.0.3",
108
- "yaml": "^2.9.0"
109
- },
110
- "devDependencies": {
111
- "conventional-commits-filter": "^6.0.1",
112
- "conventional-commits-parser": "^7.1.2",
113
114
  "pyright": "^1.1.413",
114
115
  "standard-version": "^9.5.0",
115
- "typedoc": "^0.28.20"
116
+ "ts-node": "^10.9.1",
117
+ "ts-unused-exports": "^11.0.1",
118
+ "typedoc": "^0.28.20",
119
+ "typescript": "^6.0.3"
116
120
  },
117
121
  "overrides": {
118
122
  "dpdm": {
119
123
  "typescript": "$typescript"
120
- }
124
+ },
125
+ "minimatch": "^11.0.3",
126
+ "glob": "^14.0.3",
127
+ "katex": "^0.19.1",
128
+ "dotgitignore": "file:./tools/dotgitignore"
121
129
  }
122
130
  }
@@ -309,6 +309,41 @@
309
309
  "dockerfileSecurity": {
310
310
  "$ref": "#/$defs/toggleIgnorePaths"
311
311
  },
312
+ "agentInstructions": {
313
+ "$ref": "#/$defs/toggleIgnorePaths"
314
+ },
315
+ "mcp": {
316
+ "type": "object",
317
+ "description": "What the pr-checkmate MCP server offers an AI agent working in this project. Changes apply to the agent's next request.",
318
+ "additionalProperties": false,
319
+ "properties": {
320
+ "enabled": {
321
+ "type": "boolean",
322
+ "description": "false turns the server off for this project: it still connects, but offers no tools, resources or prompts. Default true."
323
+ },
324
+ "disabledTools": {
325
+ "type": "array",
326
+ "description": "Tools to hide from the agent.",
327
+ "items": {
328
+ "enum": [
329
+ "get_rules",
330
+ "check_changes",
331
+ "apply_fixes",
332
+ "scan_secrets",
333
+ "check_dependency",
334
+ "suggest_config",
335
+ "write_config",
336
+ "explain_config",
337
+ "verify"
338
+ ]
339
+ }
340
+ },
341
+ "readOnly": {
342
+ "type": "boolean",
343
+ "description": "Hide the tools that write files (apply_fixes, write_config), so the agent can only read and report. Default false."
344
+ }
345
+ }
346
+ },
312
347
  "migrationSafety": {
313
348
  "$ref": "#/$defs/toggleSeverity"
314
349
  },
@@ -41,7 +41,7 @@ module.exports = {
41
41
  sourceType: 'module',
42
42
  project: './tsconfig.json',
43
43
  },
44
- plugins: ['@typescript-eslint', 'prettier', 'import-x', 'jsdoc'],
44
+ plugins: ['@typescript-eslint', 'prettier', 'simple-import-sort', 'jsdoc'],
45
45
  extends: [
46
46
  'eslint:recommended',
47
47
  'plugin:@typescript-eslint/recommended',
@@ -85,14 +85,8 @@ module.exports = {
85
85
  // Complexity analysis (#61)
86
86
  complexity: ['warn', 30],
87
87
  // Import ordering (#65)
88
- 'import-x/order': [
89
- 'warn',
90
- {
91
- groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
92
- alphabetize: { order: 'asc', caseInsensitive: true },
93
- },
94
- ],
95
- 'import-x/no-duplicates': 'error',
88
+ 'simple-import-sort/imports': 'warn',
89
+ 'no-duplicate-imports': ['error', { allowSeparateTypeImports: true }],
96
90
  // Documentation (#62). `jsdoc/require-jsdoc` is deliberately absent — see the
97
91
  // note in eslint-flat-config.mjs. These three check docblocks that exist and
98
92
  // fix only inside them; they never fabricate one.
@@ -26,14 +26,8 @@
26
26
  "sonarjs/cognitive-complexity": ["warn", 30],
27
27
  "sonarjs/no-duplicate-string": ["warn", { "threshold": 3 }],
28
28
  "sonarjs/no-identical-functions": "warn",
29
- "import/order": [
30
- "warn",
31
- {
32
- "groups": ["builtin", "external", "internal", "parent", "sibling", "index"],
33
- "alphabetize": { "order": "asc", "caseInsensitive": true }
34
- }
35
- ],
36
- "import/no-duplicates": "error",
29
+ "simple-import-sort/imports": "warn",
30
+ "no-duplicate-imports": ["error", { "allowSeparateTypeImports": true }],
37
31
  "jsdoc/check-param-names": "warn",
38
32
  "jsdoc/check-tag-names": "warn",
39
33
  "jsdoc/check-types": "warn",
@@ -309,6 +309,41 @@
309
309
  "dockerfileSecurity": {
310
310
  "$ref": "#/$defs/toggleIgnorePaths"
311
311
  },
312
+ "agentInstructions": {
313
+ "$ref": "#/$defs/toggleIgnorePaths"
314
+ },
315
+ "mcp": {
316
+ "type": "object",
317
+ "description": "What the pr-checkmate MCP server offers an AI agent working in this project. Changes apply to the agent's next request.",
318
+ "additionalProperties": false,
319
+ "properties": {
320
+ "enabled": {
321
+ "type": "boolean",
322
+ "description": "false turns the server off for this project: it still connects, but offers no tools, resources or prompts. Default true."
323
+ },
324
+ "disabledTools": {
325
+ "type": "array",
326
+ "description": "Tools to hide from the agent.",
327
+ "items": {
328
+ "enum": [
329
+ "get_rules",
330
+ "check_changes",
331
+ "apply_fixes",
332
+ "scan_secrets",
333
+ "check_dependency",
334
+ "suggest_config",
335
+ "write_config",
336
+ "explain_config",
337
+ "verify"
338
+ ]
339
+ }
340
+ },
341
+ "readOnly": {
342
+ "type": "boolean",
343
+ "description": "Hide the tools that write files (apply_fixes, write_config), so the agent can only read and report. Default false."
344
+ }
345
+ }
346
+ },
312
347
  "migrationSafety": {
313
348
  "$ref": "#/$defs/toggleSeverity"
314
349
  },