eslint-plugin-copilot 1.0.5

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 (424) hide show
  1. package/CHANGELOG.md +5316 -0
  2. package/LICENSE +21 -0
  3. package/README.md +192 -0
  4. package/dist/_internal/copilot-config-references.d.ts +34 -0
  5. package/dist/_internal/copilot-config-references.d.ts.map +1 -0
  6. package/dist/_internal/copilot-config-references.js +55 -0
  7. package/dist/_internal/copilot-config-references.js.map +1 -0
  8. package/dist/_internal/copilot-customization-names.d.ts +21 -0
  9. package/dist/_internal/copilot-customization-names.d.ts.map +1 -0
  10. package/dist/_internal/copilot-customization-names.js +56 -0
  11. package/dist/_internal/copilot-customization-names.js.map +1 -0
  12. package/dist/_internal/copilot-file-kind.d.ts +19 -0
  13. package/dist/_internal/copilot-file-kind.d.ts.map +1 -0
  14. package/dist/_internal/copilot-file-kind.js +111 -0
  15. package/dist/_internal/copilot-file-kind.js.map +1 -0
  16. package/dist/_internal/create-copilot-rule.d.ts +39 -0
  17. package/dist/_internal/create-copilot-rule.d.ts.map +1 -0
  18. package/dist/_internal/create-copilot-rule.js +56 -0
  19. package/dist/_internal/create-copilot-rule.js.map +1 -0
  20. package/dist/_internal/customization-body.d.ts +6 -0
  21. package/dist/_internal/customization-body.d.ts.map +1 -0
  22. package/dist/_internal/customization-body.js +15 -0
  23. package/dist/_internal/customization-body.js.map +1 -0
  24. package/dist/_internal/duplicate-names.d.ts +12 -0
  25. package/dist/_internal/duplicate-names.d.ts.map +1 -0
  26. package/dist/_internal/duplicate-names.js +24 -0
  27. package/dist/_internal/duplicate-names.js.map +1 -0
  28. package/dist/_internal/file-system.d.ts +21 -0
  29. package/dist/_internal/file-system.d.ts.map +1 -0
  30. package/dist/_internal/file-system.js +86 -0
  31. package/dist/_internal/file-system.js.map +1 -0
  32. package/dist/_internal/frontmatter.d.ts +37 -0
  33. package/dist/_internal/frontmatter.d.ts.map +1 -0
  34. package/dist/_internal/frontmatter.js +398 -0
  35. package/dist/_internal/frontmatter.js.map +1 -0
  36. package/dist/_internal/markdown-links.d.ts +21 -0
  37. package/dist/_internal/markdown-links.d.ts.map +1 -0
  38. package/dist/_internal/markdown-links.js +81 -0
  39. package/dist/_internal/markdown-links.js.map +1 -0
  40. package/dist/_internal/markdown-rule.d.ts +13 -0
  41. package/dist/_internal/markdown-rule.d.ts.map +1 -0
  42. package/dist/_internal/markdown-rule.js +19 -0
  43. package/dist/_internal/markdown-rule.js.map +1 -0
  44. package/dist/_internal/repository-hooks-json.d.ts +55 -0
  45. package/dist/_internal/repository-hooks-json.d.ts.map +1 -0
  46. package/dist/_internal/repository-hooks-json.js +80 -0
  47. package/dist/_internal/repository-hooks-json.js.map +1 -0
  48. package/dist/_internal/rule-catalog.d.ts +20 -0
  49. package/dist/_internal/rule-catalog.d.ts.map +1 -0
  50. package/dist/_internal/rule-catalog.js +97 -0
  51. package/dist/_internal/rule-catalog.js.map +1 -0
  52. package/dist/_internal/rule-docs-url.d.ts +9 -0
  53. package/dist/_internal/rule-docs-url.d.ts.map +1 -0
  54. package/dist/_internal/rule-docs-url.js +9 -0
  55. package/dist/_internal/rule-docs-url.js.map +1 -0
  56. package/dist/_internal/rules-registry.d.ts +83 -0
  57. package/dist/_internal/rules-registry.d.ts.map +1 -0
  58. package/dist/_internal/rules-registry.js +145 -0
  59. package/dist/_internal/rules-registry.js.map +1 -0
  60. package/dist/_internal/skill-files.d.ts +8 -0
  61. package/dist/_internal/skill-files.d.ts.map +1 -0
  62. package/dist/_internal/skill-files.js +18 -0
  63. package/dist/_internal/skill-files.js.map +1 -0
  64. package/dist/plugin.cjs +5312 -0
  65. package/dist/plugin.cjs.map +7 -0
  66. package/dist/plugin.d.cts +34 -0
  67. package/dist/plugin.d.ts +34 -0
  68. package/dist/plugin.d.ts.map +1 -0
  69. package/dist/plugin.js +142 -0
  70. package/dist/plugin.js.map +1 -0
  71. package/dist/rules/no-blank-customization-body.d.ts +4 -0
  72. package/dist/rules/no-blank-customization-body.d.ts.map +1 -0
  73. package/dist/rules/no-blank-customization-body.js +49 -0
  74. package/dist/rules/no-blank-customization-body.js.map +1 -0
  75. package/dist/rules/no-blank-repository-instructions.d.ts +4 -0
  76. package/dist/rules/no-blank-repository-instructions.d.ts.map +1 -0
  77. package/dist/rules/no-blank-repository-instructions.js +49 -0
  78. package/dist/rules/no-blank-repository-instructions.js.map +1 -0
  79. package/dist/rules/no-blank-skill-body.d.ts +4 -0
  80. package/dist/rules/no-blank-skill-body.d.ts.map +1 -0
  81. package/dist/rules/no-blank-skill-body.js +48 -0
  82. package/dist/rules/no-blank-skill-body.js.map +1 -0
  83. package/dist/rules/no-deprecated-agent-infer.d.ts +4 -0
  84. package/dist/rules/no-deprecated-agent-infer.d.ts.map +1 -0
  85. package/dist/rules/no-deprecated-agent-infer.js +48 -0
  86. package/dist/rules/no-deprecated-agent-infer.js.map +1 -0
  87. package/dist/rules/no-duplicate-agent-names.d.ts +4 -0
  88. package/dist/rules/no-duplicate-agent-names.d.ts.map +1 -0
  89. package/dist/rules/no-duplicate-agent-names.js +72 -0
  90. package/dist/rules/no-duplicate-agent-names.js.map +1 -0
  91. package/dist/rules/no-duplicate-prompt-names.d.ts +4 -0
  92. package/dist/rules/no-duplicate-prompt-names.d.ts.map +1 -0
  93. package/dist/rules/no-duplicate-prompt-names.js +72 -0
  94. package/dist/rules/no-duplicate-prompt-names.js.map +1 -0
  95. package/dist/rules/no-duplicate-skill-names.d.ts +4 -0
  96. package/dist/rules/no-duplicate-skill-names.d.ts.map +1 -0
  97. package/dist/rules/no-duplicate-skill-names.js +74 -0
  98. package/dist/rules/no-duplicate-skill-names.js.map +1 -0
  99. package/dist/rules/no-duplicate-slash-command-names.d.ts +4 -0
  100. package/dist/rules/no-duplicate-slash-command-names.d.ts.map +1 -0
  101. package/dist/rules/no-duplicate-slash-command-names.js +82 -0
  102. package/dist/rules/no-duplicate-slash-command-names.js.map +1 -0
  103. package/dist/rules/no-empty-repository-hook-arrays.d.ts +4 -0
  104. package/dist/rules/no-empty-repository-hook-arrays.d.ts.map +1 -0
  105. package/dist/rules/no-empty-repository-hook-arrays.js +49 -0
  106. package/dist/rules/no-empty-repository-hook-arrays.js.map +1 -0
  107. package/dist/rules/no-legacy-chatmode-files.d.ts +4 -0
  108. package/dist/rules/no-legacy-chatmode-files.d.ts.map +1 -0
  109. package/dist/rules/no-legacy-chatmode-files.js +42 -0
  110. package/dist/rules/no-legacy-chatmode-files.js.map +1 -0
  111. package/dist/rules/prefer-custom-instructions-under-code-review-limit.d.ts +4 -0
  112. package/dist/rules/prefer-custom-instructions-under-code-review-limit.d.ts.map +1 -0
  113. package/dist/rules/prefer-custom-instructions-under-code-review-limit.js +52 -0
  114. package/dist/rules/prefer-custom-instructions-under-code-review-limit.js.map +1 -0
  115. package/dist/rules/prefer-fast-repository-hooks.d.ts +4 -0
  116. package/dist/rules/prefer-fast-repository-hooks.d.ts.map +1 -0
  117. package/dist/rules/prefer-fast-repository-hooks.js +58 -0
  118. package/dist/rules/prefer-fast-repository-hooks.js.map +1 -0
  119. package/dist/rules/prefer-qualified-tools.d.ts +4 -0
  120. package/dist/rules/prefer-qualified-tools.d.ts.map +1 -0
  121. package/dist/rules/prefer-qualified-tools.js +56 -0
  122. package/dist/rules/prefer-qualified-tools.js.map +1 -0
  123. package/dist/rules/require-agent-tool-for-subagents.d.ts +4 -0
  124. package/dist/rules/require-agent-tool-for-subagents.d.ts.map +1 -0
  125. package/dist/rules/require-agent-tool-for-subagents.js +64 -0
  126. package/dist/rules/require-agent-tool-for-subagents.js.map +1 -0
  127. package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.d.ts +4 -0
  128. package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.d.ts.map +1 -0
  129. package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.js +50 -0
  130. package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.js.map +1 -0
  131. package/dist/rules/require-chatmode-file-metadata.d.ts +4 -0
  132. package/dist/rules/require-chatmode-file-metadata.d.ts.map +1 -0
  133. package/dist/rules/require-chatmode-file-metadata.js +59 -0
  134. package/dist/rules/require-chatmode-file-metadata.js.map +1 -0
  135. package/dist/rules/require-existing-agent-hook-cwd.d.ts +4 -0
  136. package/dist/rules/require-existing-agent-hook-cwd.d.ts.map +1 -0
  137. package/dist/rules/require-existing-agent-hook-cwd.js +64 -0
  138. package/dist/rules/require-existing-agent-hook-cwd.js.map +1 -0
  139. package/dist/rules/require-existing-agent-mcp-servers.d.ts +4 -0
  140. package/dist/rules/require-existing-agent-mcp-servers.d.ts.map +1 -0
  141. package/dist/rules/require-existing-agent-mcp-servers.js +58 -0
  142. package/dist/rules/require-existing-agent-mcp-servers.js.map +1 -0
  143. package/dist/rules/require-existing-relative-agent-links.d.ts +4 -0
  144. package/dist/rules/require-existing-relative-agent-links.d.ts.map +1 -0
  145. package/dist/rules/require-existing-relative-agent-links.js +61 -0
  146. package/dist/rules/require-existing-relative-agent-links.js.map +1 -0
  147. package/dist/rules/require-existing-relative-instructions-links.d.ts +4 -0
  148. package/dist/rules/require-existing-relative-instructions-links.d.ts.map +1 -0
  149. package/dist/rules/require-existing-relative-instructions-links.js +61 -0
  150. package/dist/rules/require-existing-relative-instructions-links.js.map +1 -0
  151. package/dist/rules/require-existing-relative-prompt-links.d.ts +4 -0
  152. package/dist/rules/require-existing-relative-prompt-links.d.ts.map +1 -0
  153. package/dist/rules/require-existing-relative-prompt-links.js +61 -0
  154. package/dist/rules/require-existing-relative-prompt-links.js.map +1 -0
  155. package/dist/rules/require-existing-relative-skill-links.d.ts +4 -0
  156. package/dist/rules/require-existing-relative-skill-links.d.ts.map +1 -0
  157. package/dist/rules/require-existing-relative-skill-links.js +61 -0
  158. package/dist/rules/require-existing-relative-skill-links.js.map +1 -0
  159. package/dist/rules/require-existing-repository-hook-cwd.d.ts +4 -0
  160. package/dist/rules/require-existing-repository-hook-cwd.d.ts.map +1 -0
  161. package/dist/rules/require-existing-repository-hook-cwd.js +65 -0
  162. package/dist/rules/require-existing-repository-hook-cwd.js.map +1 -0
  163. package/dist/rules/require-github-copilot-target-for-mcp-servers.d.ts +4 -0
  164. package/dist/rules/require-github-copilot-target-for-mcp-servers.d.ts.map +1 -0
  165. package/dist/rules/require-github-copilot-target-for-mcp-servers.js +63 -0
  166. package/dist/rules/require-github-copilot-target-for-mcp-servers.js.map +1 -0
  167. package/dist/rules/require-instructions-apply-to.d.ts +4 -0
  168. package/dist/rules/require-instructions-apply-to.d.ts.map +1 -0
  169. package/dist/rules/require-instructions-apply-to.js +60 -0
  170. package/dist/rules/require-instructions-apply-to.js.map +1 -0
  171. package/dist/rules/require-json-agent-mcp-servers.d.ts +4 -0
  172. package/dist/rules/require-json-agent-mcp-servers.d.ts.map +1 -0
  173. package/dist/rules/require-json-agent-mcp-servers.js +58 -0
  174. package/dist/rules/require-json-agent-mcp-servers.js.map +1 -0
  175. package/dist/rules/require-prompt-file-metadata.d.ts +4 -0
  176. package/dist/rules/require-prompt-file-metadata.d.ts.map +1 -0
  177. package/dist/rules/require-prompt-file-metadata.js +104 -0
  178. package/dist/rules/require-prompt-file-metadata.js.map +1 -0
  179. package/dist/rules/require-qualified-agent-handoff-models.d.ts +4 -0
  180. package/dist/rules/require-qualified-agent-handoff-models.d.ts.map +1 -0
  181. package/dist/rules/require-qualified-agent-handoff-models.js +78 -0
  182. package/dist/rules/require-qualified-agent-handoff-models.js.map +1 -0
  183. package/dist/rules/require-relative-agent-hook-cwd.d.ts +4 -0
  184. package/dist/rules/require-relative-agent-hook-cwd.d.ts.map +1 -0
  185. package/dist/rules/require-relative-agent-hook-cwd.js +70 -0
  186. package/dist/rules/require-relative-agent-hook-cwd.js.map +1 -0
  187. package/dist/rules/require-relative-agent-links.d.ts +4 -0
  188. package/dist/rules/require-relative-agent-links.d.ts.map +1 -0
  189. package/dist/rules/require-relative-agent-links.js +58 -0
  190. package/dist/rules/require-relative-agent-links.js.map +1 -0
  191. package/dist/rules/require-relative-instructions-links.d.ts +4 -0
  192. package/dist/rules/require-relative-instructions-links.d.ts.map +1 -0
  193. package/dist/rules/require-relative-instructions-links.js +58 -0
  194. package/dist/rules/require-relative-instructions-links.js.map +1 -0
  195. package/dist/rules/require-relative-prompt-links.d.ts +4 -0
  196. package/dist/rules/require-relative-prompt-links.d.ts.map +1 -0
  197. package/dist/rules/require-relative-prompt-links.js +82 -0
  198. package/dist/rules/require-relative-prompt-links.js.map +1 -0
  199. package/dist/rules/require-relative-repository-hook-cwd.d.ts +4 -0
  200. package/dist/rules/require-relative-repository-hook-cwd.d.ts.map +1 -0
  201. package/dist/rules/require-relative-repository-hook-cwd.js +63 -0
  202. package/dist/rules/require-relative-repository-hook-cwd.js.map +1 -0
  203. package/dist/rules/require-relative-skill-links.d.ts +4 -0
  204. package/dist/rules/require-relative-skill-links.d.ts.map +1 -0
  205. package/dist/rules/require-relative-skill-links.js +58 -0
  206. package/dist/rules/require-relative-skill-links.js.map +1 -0
  207. package/dist/rules/require-repository-hook-arrays.d.ts +4 -0
  208. package/dist/rules/require-repository-hook-arrays.d.ts.map +1 -0
  209. package/dist/rules/require-repository-hook-arrays.js +54 -0
  210. package/dist/rules/require-repository-hook-arrays.js.map +1 -0
  211. package/dist/rules/require-repository-hook-command-shell.d.ts +4 -0
  212. package/dist/rules/require-repository-hook-command-shell.d.ts.map +1 -0
  213. package/dist/rules/require-repository-hook-command-shell.js +57 -0
  214. package/dist/rules/require-repository-hook-command-shell.js.map +1 -0
  215. package/dist/rules/require-repository-hooks-object.d.ts +4 -0
  216. package/dist/rules/require-repository-hooks-object.d.ts.map +1 -0
  217. package/dist/rules/require-repository-hooks-object.js +50 -0
  218. package/dist/rules/require-repository-hooks-object.js.map +1 -0
  219. package/dist/rules/require-repository-instructions-file.d.ts +4 -0
  220. package/dist/rules/require-repository-instructions-file.d.ts.map +1 -0
  221. package/dist/rules/require-repository-instructions-file.js +50 -0
  222. package/dist/rules/require-repository-instructions-file.js.map +1 -0
  223. package/dist/rules/require-skill-file-location.d.ts +4 -0
  224. package/dist/rules/require-skill-file-location.d.ts.map +1 -0
  225. package/dist/rules/require-skill-file-location.js +46 -0
  226. package/dist/rules/require-skill-file-location.js.map +1 -0
  227. package/dist/rules/require-skill-file-metadata.d.ts +4 -0
  228. package/dist/rules/require-skill-file-metadata.d.ts.map +1 -0
  229. package/dist/rules/require-skill-file-metadata.js +60 -0
  230. package/dist/rules/require-skill-file-metadata.js.map +1 -0
  231. package/dist/rules/require-skill-md-filename.d.ts +4 -0
  232. package/dist/rules/require-skill-md-filename.d.ts.map +1 -0
  233. package/dist/rules/require-skill-md-filename.js +55 -0
  234. package/dist/rules/require-skill-md-filename.js.map +1 -0
  235. package/dist/rules/require-skill-name-match-directory.d.ts +4 -0
  236. package/dist/rules/require-skill-name-match-directory.d.ts.map +1 -0
  237. package/dist/rules/require-skill-name-match-directory.js +59 -0
  238. package/dist/rules/require-skill-name-match-directory.js.map +1 -0
  239. package/dist/rules/require-string-repository-hook-env-values.d.ts +4 -0
  240. package/dist/rules/require-string-repository-hook-env-values.d.ts.map +1 -0
  241. package/dist/rules/require-string-repository-hook-env-values.js +59 -0
  242. package/dist/rules/require-string-repository-hook-env-values.js.map +1 -0
  243. package/dist/rules/require-valid-agent-argument-hint.d.ts +4 -0
  244. package/dist/rules/require-valid-agent-argument-hint.d.ts.map +1 -0
  245. package/dist/rules/require-valid-agent-argument-hint.js +51 -0
  246. package/dist/rules/require-valid-agent-argument-hint.js.map +1 -0
  247. package/dist/rules/require-valid-agent-handoff-send.d.ts +4 -0
  248. package/dist/rules/require-valid-agent-handoff-send.d.ts.map +1 -0
  249. package/dist/rules/require-valid-agent-handoff-send.js +67 -0
  250. package/dist/rules/require-valid-agent-handoff-send.js.map +1 -0
  251. package/dist/rules/require-valid-agent-handoffs.d.ts +4 -0
  252. package/dist/rules/require-valid-agent-handoffs.d.ts.map +1 -0
  253. package/dist/rules/require-valid-agent-handoffs.js +78 -0
  254. package/dist/rules/require-valid-agent-handoffs.js.map +1 -0
  255. package/dist/rules/require-valid-agent-hook-events.d.ts +4 -0
  256. package/dist/rules/require-valid-agent-hook-events.d.ts.map +1 -0
  257. package/dist/rules/require-valid-agent-hook-events.js +68 -0
  258. package/dist/rules/require-valid-agent-hook-events.js.map +1 -0
  259. package/dist/rules/require-valid-agent-hook-timeouts.d.ts +4 -0
  260. package/dist/rules/require-valid-agent-hook-timeouts.d.ts.map +1 -0
  261. package/dist/rules/require-valid-agent-hook-timeouts.js +83 -0
  262. package/dist/rules/require-valid-agent-hook-timeouts.js.map +1 -0
  263. package/dist/rules/require-valid-agent-hooks.d.ts +4 -0
  264. package/dist/rules/require-valid-agent-hooks.d.ts.map +1 -0
  265. package/dist/rules/require-valid-agent-hooks.js +86 -0
  266. package/dist/rules/require-valid-agent-hooks.js.map +1 -0
  267. package/dist/rules/require-valid-agent-invocation-controls.d.ts +4 -0
  268. package/dist/rules/require-valid-agent-invocation-controls.d.ts.map +1 -0
  269. package/dist/rules/require-valid-agent-invocation-controls.js +71 -0
  270. package/dist/rules/require-valid-agent-invocation-controls.js.map +1 -0
  271. package/dist/rules/require-valid-agent-mcp-servers.d.ts +4 -0
  272. package/dist/rules/require-valid-agent-mcp-servers.d.ts.map +1 -0
  273. package/dist/rules/require-valid-agent-mcp-servers.js +64 -0
  274. package/dist/rules/require-valid-agent-mcp-servers.js.map +1 -0
  275. package/dist/rules/require-valid-agent-model.d.ts +4 -0
  276. package/dist/rules/require-valid-agent-model.d.ts.map +1 -0
  277. package/dist/rules/require-valid-agent-model.js +64 -0
  278. package/dist/rules/require-valid-agent-model.js.map +1 -0
  279. package/dist/rules/require-valid-agent-name.d.ts +4 -0
  280. package/dist/rules/require-valid-agent-name.d.ts.map +1 -0
  281. package/dist/rules/require-valid-agent-name.js +51 -0
  282. package/dist/rules/require-valid-agent-name.js.map +1 -0
  283. package/dist/rules/require-valid-agent-subagents.d.ts +4 -0
  284. package/dist/rules/require-valid-agent-subagents.d.ts.map +1 -0
  285. package/dist/rules/require-valid-agent-subagents.js +79 -0
  286. package/dist/rules/require-valid-agent-subagents.js.map +1 -0
  287. package/dist/rules/require-valid-agent-target.d.ts +4 -0
  288. package/dist/rules/require-valid-agent-target.d.ts.map +1 -0
  289. package/dist/rules/require-valid-agent-target.js +62 -0
  290. package/dist/rules/require-valid-agent-target.js.map +1 -0
  291. package/dist/rules/require-valid-agent-tools.d.ts +4 -0
  292. package/dist/rules/require-valid-agent-tools.d.ts.map +1 -0
  293. package/dist/rules/require-valid-agent-tools.js +64 -0
  294. package/dist/rules/require-valid-agent-tools.js.map +1 -0
  295. package/dist/rules/require-valid-instructions-apply-to-globs.d.ts +4 -0
  296. package/dist/rules/require-valid-instructions-apply-to-globs.d.ts.map +1 -0
  297. package/dist/rules/require-valid-instructions-apply-to-globs.js +79 -0
  298. package/dist/rules/require-valid-instructions-apply-to-globs.js.map +1 -0
  299. package/dist/rules/require-valid-prompt-argument-hint.d.ts +4 -0
  300. package/dist/rules/require-valid-prompt-argument-hint.d.ts.map +1 -0
  301. package/dist/rules/require-valid-prompt-argument-hint.js +52 -0
  302. package/dist/rules/require-valid-prompt-argument-hint.js.map +1 -0
  303. package/dist/rules/require-valid-prompt-model.d.ts +4 -0
  304. package/dist/rules/require-valid-prompt-model.d.ts.map +1 -0
  305. package/dist/rules/require-valid-prompt-model.js +77 -0
  306. package/dist/rules/require-valid-prompt-model.js.map +1 -0
  307. package/dist/rules/require-valid-prompt-name.d.ts +4 -0
  308. package/dist/rules/require-valid-prompt-name.d.ts.map +1 -0
  309. package/dist/rules/require-valid-prompt-name.js +51 -0
  310. package/dist/rules/require-valid-prompt-name.js.map +1 -0
  311. package/dist/rules/require-valid-prompt-tools.d.ts +4 -0
  312. package/dist/rules/require-valid-prompt-tools.d.ts.map +1 -0
  313. package/dist/rules/require-valid-prompt-tools.js +64 -0
  314. package/dist/rules/require-valid-prompt-tools.js.map +1 -0
  315. package/dist/rules/require-valid-repository-hook-command-type.d.ts +4 -0
  316. package/dist/rules/require-valid-repository-hook-command-type.d.ts.map +1 -0
  317. package/dist/rules/require-valid-repository-hook-command-type.js +58 -0
  318. package/dist/rules/require-valid-repository-hook-command-type.js.map +1 -0
  319. package/dist/rules/require-valid-repository-hook-env.d.ts +4 -0
  320. package/dist/rules/require-valid-repository-hook-env.d.ts.map +1 -0
  321. package/dist/rules/require-valid-repository-hook-env.js +57 -0
  322. package/dist/rules/require-valid-repository-hook-env.js.map +1 -0
  323. package/dist/rules/require-valid-repository-hook-events.d.ts +4 -0
  324. package/dist/rules/require-valid-repository-hook-events.d.ts.map +1 -0
  325. package/dist/rules/require-valid-repository-hook-events.js +55 -0
  326. package/dist/rules/require-valid-repository-hook-events.js.map +1 -0
  327. package/dist/rules/require-valid-repository-hook-timeouts.d.ts +4 -0
  328. package/dist/rules/require-valid-repository-hook-timeouts.d.ts.map +1 -0
  329. package/dist/rules/require-valid-repository-hook-timeouts.js +59 -0
  330. package/dist/rules/require-valid-repository-hook-timeouts.js.map +1 -0
  331. package/dist/rules/require-valid-repository-hook-version.d.ts +4 -0
  332. package/dist/rules/require-valid-repository-hook-version.d.ts.map +1 -0
  333. package/dist/rules/require-valid-repository-hook-version.js +53 -0
  334. package/dist/rules/require-valid-repository-hook-version.js.map +1 -0
  335. package/dist/rules/require-valid-skill-directory-name.d.ts +4 -0
  336. package/dist/rules/require-valid-skill-directory-name.d.ts.map +1 -0
  337. package/dist/rules/require-valid-skill-directory-name.js +50 -0
  338. package/dist/rules/require-valid-skill-directory-name.js.map +1 -0
  339. package/dist/rules/require-valid-skill-license.d.ts +4 -0
  340. package/dist/rules/require-valid-skill-license.d.ts.map +1 -0
  341. package/dist/rules/require-valid-skill-license.js +47 -0
  342. package/dist/rules/require-valid-skill-license.js.map +1 -0
  343. package/dist/rules/require-valid-skill-name.d.ts +4 -0
  344. package/dist/rules/require-valid-skill-name.d.ts.map +1 -0
  345. package/dist/rules/require-valid-skill-name.js +57 -0
  346. package/dist/rules/require-valid-skill-name.js.map +1 -0
  347. package/docs/rules/getting-started.md +24 -0
  348. package/docs/rules/guides/copilot-customization-files.md +17 -0
  349. package/docs/rules/no-blank-customization-body.md +52 -0
  350. package/docs/rules/no-blank-repository-instructions.md +37 -0
  351. package/docs/rules/no-blank-skill-body.md +41 -0
  352. package/docs/rules/no-deprecated-agent-infer.md +42 -0
  353. package/docs/rules/no-duplicate-agent-names.md +36 -0
  354. package/docs/rules/no-duplicate-prompt-names.md +36 -0
  355. package/docs/rules/no-duplicate-skill-names.md +37 -0
  356. package/docs/rules/no-duplicate-slash-command-names.md +40 -0
  357. package/docs/rules/no-empty-repository-hook-arrays.md +44 -0
  358. package/docs/rules/no-legacy-chatmode-files.md +53 -0
  359. package/docs/rules/overview.md +27 -0
  360. package/docs/rules/prefer-custom-instructions-under-code-review-limit.md +39 -0
  361. package/docs/rules/prefer-fast-repository-hooks.md +43 -0
  362. package/docs/rules/prefer-qualified-tools.md +49 -0
  363. package/docs/rules/presets/all.md +82 -0
  364. package/docs/rules/presets/index.md +78 -0
  365. package/docs/rules/presets/minimal.md +16 -0
  366. package/docs/rules/presets/recommended.md +67 -0
  367. package/docs/rules/presets/strict.md +81 -0
  368. package/docs/rules/require-agent-tool-for-subagents.md +44 -0
  369. package/docs/rules/require-agents-md-for-cross-surface-agent-instructions.md +39 -0
  370. package/docs/rules/require-chatmode-file-metadata.md +41 -0
  371. package/docs/rules/require-existing-agent-hook-cwd.md +51 -0
  372. package/docs/rules/require-existing-agent-mcp-servers.md +43 -0
  373. package/docs/rules/require-existing-relative-agent-links.md +41 -0
  374. package/docs/rules/require-existing-relative-instructions-links.md +43 -0
  375. package/docs/rules/require-existing-relative-prompt-links.md +41 -0
  376. package/docs/rules/require-existing-relative-skill-links.md +44 -0
  377. package/docs/rules/require-existing-repository-hook-cwd.md +45 -0
  378. package/docs/rules/require-github-copilot-target-for-mcp-servers.md +46 -0
  379. package/docs/rules/require-instructions-apply-to.md +40 -0
  380. package/docs/rules/require-json-agent-mcp-servers.md +41 -0
  381. package/docs/rules/require-prompt-file-metadata.md +45 -0
  382. package/docs/rules/require-qualified-agent-handoff-models.md +47 -0
  383. package/docs/rules/require-relative-agent-hook-cwd.md +50 -0
  384. package/docs/rules/require-relative-agent-links.md +40 -0
  385. package/docs/rules/require-relative-instructions-links.md +42 -0
  386. package/docs/rules/require-relative-prompt-links.md +43 -0
  387. package/docs/rules/require-relative-repository-hook-cwd.md +43 -0
  388. package/docs/rules/require-relative-skill-links.md +42 -0
  389. package/docs/rules/require-repository-hook-arrays.md +33 -0
  390. package/docs/rules/require-repository-hook-command-shell.md +44 -0
  391. package/docs/rules/require-repository-hooks-object.md +34 -0
  392. package/docs/rules/require-repository-instructions-file.md +42 -0
  393. package/docs/rules/require-skill-file-location.md +33 -0
  394. package/docs/rules/require-skill-file-metadata.md +40 -0
  395. package/docs/rules/require-skill-md-filename.md +43 -0
  396. package/docs/rules/require-skill-name-match-directory.md +46 -0
  397. package/docs/rules/require-string-repository-hook-env-values.md +43 -0
  398. package/docs/rules/require-valid-agent-argument-hint.md +42 -0
  399. package/docs/rules/require-valid-agent-handoff-send.md +49 -0
  400. package/docs/rules/require-valid-agent-handoffs.md +51 -0
  401. package/docs/rules/require-valid-agent-hook-events.md +47 -0
  402. package/docs/rules/require-valid-agent-hook-timeouts.md +49 -0
  403. package/docs/rules/require-valid-agent-hooks.md +49 -0
  404. package/docs/rules/require-valid-agent-invocation-controls.md +45 -0
  405. package/docs/rules/require-valid-agent-mcp-servers.md +45 -0
  406. package/docs/rules/require-valid-agent-model.md +43 -0
  407. package/docs/rules/require-valid-agent-name.md +42 -0
  408. package/docs/rules/require-valid-agent-subagents.md +52 -0
  409. package/docs/rules/require-valid-agent-target.md +44 -0
  410. package/docs/rules/require-valid-agent-tools.md +43 -0
  411. package/docs/rules/require-valid-instructions-apply-to-globs.md +45 -0
  412. package/docs/rules/require-valid-prompt-argument-hint.md +42 -0
  413. package/docs/rules/require-valid-prompt-model.md +45 -0
  414. package/docs/rules/require-valid-prompt-name.md +42 -0
  415. package/docs/rules/require-valid-prompt-tools.md +43 -0
  416. package/docs/rules/require-valid-repository-hook-command-type.md +45 -0
  417. package/docs/rules/require-valid-repository-hook-env.md +43 -0
  418. package/docs/rules/require-valid-repository-hook-events.md +34 -0
  419. package/docs/rules/require-valid-repository-hook-timeouts.md +43 -0
  420. package/docs/rules/require-valid-repository-hook-version.md +34 -0
  421. package/docs/rules/require-valid-skill-directory-name.md +34 -0
  422. package/docs/rules/require-valid-skill-license.md +45 -0
  423. package/docs/rules/require-valid-skill-name.md +43 -0
  424. package/package.json +562 -0
@@ -0,0 +1,45 @@
1
+ # require-valid-agent-mcp-servers
2
+
3
+ Require Copilot custom-agent `mcp-servers` metadata to be a non-empty list when present.
4
+
5
+ > **Rule catalog ID:** R023
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/agents/**/*.agent.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - empty `mcp-servers` values in custom-agent frontmatter
14
+ - empty `mcp-servers` lists such as `[]`
15
+ - scalar `mcp-servers` values instead of the documented list form
16
+
17
+ ## Why this rule exists
18
+
19
+ VS Code documents `mcp-servers` as an optional list of MCP server config JSON entries for GitHub Copilot-targeted custom agents. Keeping that metadata in the documented list form helps avoid ambiguous or no-op custom-agent configuration.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```md
24
+ ---
25
+ description: Coordinate release automation
26
+ target: github-copilot
27
+ mcp-servers: release-coordinator.json
28
+ ---
29
+ Coordinate release tasks through MCP servers.
30
+ ```
31
+
32
+ ## ✅ Correct
33
+
34
+ ```md
35
+ ---
36
+ description: Coordinate release automation
37
+ target: github-copilot
38
+ mcp-servers: ['release-coordinator.json', 'observability.json']
39
+ ---
40
+ Coordinate release tasks through MCP servers.
41
+ ```
42
+
43
+ ## Further reading
44
+
45
+ - [VS Code Docs: Custom agents](https://code.visualstudio.com/docs/copilot/customization/custom-agents)
@@ -0,0 +1,43 @@
1
+ # require-valid-agent-model
2
+
3
+ Require Copilot custom-agent `model` metadata to be a non-empty model name or non-empty prioritized list of model names when present.
4
+
5
+ > **Rule catalog ID:** R022
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/agents/**/*.agent.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - empty custom-agent `model` values
14
+ - empty custom-agent model lists such as `[]`
15
+ - malformed model list literals that collapse to an empty list
16
+
17
+ ## Why this rule exists
18
+
19
+ VS Code documents custom-agent `model` as either a single model name string or a prioritized array of model names. Keeping `model` metadata in one of those documented shapes helps ensure model overrides are intentional and usable.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```md
24
+ ---
25
+ description: Implement approved changes
26
+ model: []
27
+ ---
28
+ Implement the requested changes.
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```md
34
+ ---
35
+ description: Implement approved changes
36
+ model: ['Claude Haiku 4.5 (copilot)', 'GPT-5 (copilot)']
37
+ ---
38
+ Implement the requested changes.
39
+ ```
40
+
41
+ ## Further reading
42
+
43
+ - [VS Code Docs: Custom agents](https://code.visualstudio.com/docs/copilot/customization/custom-agents)
@@ -0,0 +1,42 @@
1
+ # require-valid-agent-name
2
+
3
+ Require Copilot custom-agent `name` metadata to be a non-empty scalar when present.
4
+
5
+ > **Rule catalog ID:** R042
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/agents/**/*.agent.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - blank custom-agent `name` values
14
+ - malformed non-scalar `name` values in supported frontmatter
15
+
16
+ ## Why this rule exists
17
+
18
+ Custom agents can declare a friendly `name` in frontmatter. When present, that field should be an actual scalar string so the agent has a stable human-facing identity instead of an empty placeholder.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```md
23
+ ---
24
+ description: Review implementation quality
25
+ name:
26
+ ---
27
+ Review the implementation carefully.
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```md
33
+ ---
34
+ description: Review implementation quality
35
+ name: reviewer
36
+ ---
37
+ Review the implementation carefully.
38
+ ```
39
+
40
+ ## Further reading
41
+
42
+ - [VS Code Docs: Custom agents](https://code.visualstudio.com/docs/copilot/customization/custom-agents)
@@ -0,0 +1,52 @@
1
+ # require-valid-agent-subagents
2
+
3
+ Require Copilot custom-agent `agents` metadata to be `*`, `[]`, or a non-empty list of explicit agent names.
4
+
5
+ > **Rule catalog ID:** R017
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/agents/**/*.agent.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - scalar `agents` values other than `*`
14
+ - malformed `agents` metadata that is neither `*`, `[]`, nor a list of explicit agent names
15
+ - wildcard list entries such as `['*', 'Planner']`
16
+
17
+ ## Why this rule exists
18
+
19
+ VS Code documents the `agents` field as accepting one of three shapes: a list of allowed agent names, `*` to allow all available subagents, or `[]` to disable subagent use. Keeping that metadata in one of the documented forms makes subagent orchestration predictable and avoids accidental misconfiguration.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```md
24
+ ---
25
+ description: Coordinate feature work
26
+ agents: Planner
27
+ ---
28
+ Use subagents when helpful.
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```md
34
+ ---
35
+ description: Coordinate feature work
36
+ agents: ['Planner', 'Reviewer']
37
+ ---
38
+ Use subagents when helpful.
39
+ ```
40
+
41
+ ```md
42
+ ---
43
+ description: Stay in the current agent only
44
+ agents: []
45
+ ---
46
+ Do not use subagents for this workflow.
47
+ ```
48
+
49
+ ## Further reading
50
+
51
+ - [VS Code Docs: Subagents](https://code.visualstudio.com/docs/copilot/agents/subagents)
52
+ - [VS Code Docs: Custom agents](https://code.visualstudio.com/docs/copilot/customization/custom-agents)
@@ -0,0 +1,44 @@
1
+ # require-valid-agent-target
2
+
3
+ Require Copilot custom-agent `target` metadata to use a documented target value when present.
4
+
5
+ > **Rule catalog ID:** R019
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/agents/**/*.agent.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - empty `target` values in custom-agent frontmatter
14
+ - custom-agent `target` values other than `vscode` or `github-copilot`
15
+
16
+ ## Why this rule exists
17
+
18
+ VS Code documents `target` as the target environment or context for a custom agent and currently supports `vscode` and `github-copilot`. Using other target values drifts away from the documented custom-agent contract and can make the agent configuration ambiguous.
19
+
20
+ This rule intentionally defers to the more specific `require-github-copilot-target-for-mcp-servers` rule when `mcp-servers` metadata is present.
21
+
22
+ ## ❌ Incorrect
23
+
24
+ ```md
25
+ ---
26
+ description: Plan work inside VS Code
27
+ target: github
28
+ ---
29
+ Plan work before implementation starts.
30
+ ```
31
+
32
+ ## ✅ Correct
33
+
34
+ ```md
35
+ ---
36
+ description: Plan work inside VS Code
37
+ target: vscode
38
+ ---
39
+ Plan work before implementation starts.
40
+ ```
41
+
42
+ ## Further reading
43
+
44
+ - [VS Code Docs: Custom agents](https://code.visualstudio.com/docs/copilot/customization/custom-agents)
@@ -0,0 +1,43 @@
1
+ # require-valid-agent-tools
2
+
3
+ Require Copilot custom-agent `tools` metadata to be a non-empty list of tool or tool-set names when present.
4
+
5
+ > **Rule catalog ID:** R025
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/agents/**/*.agent.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - empty custom-agent `tools` values
14
+ - scalar custom-agent `tools` values instead of the documented list form
15
+ - empty custom-agent `tools` lists such as `[]`
16
+
17
+ ## Why this rule exists
18
+
19
+ VS Code documents custom-agent `tools` as a list of tool or tool set names. Keeping that metadata in the documented list shape helps ensure a custom agent's allowed tool surface is explicit and machine-usable.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```md
24
+ ---
25
+ description: Review implementation quality
26
+ tools: search/codebase
27
+ ---
28
+ Review the implementation carefully.
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```md
34
+ ---
35
+ description: Review implementation quality
36
+ tools: ['search/codebase', 'fetch/web']
37
+ ---
38
+ Review the implementation carefully.
39
+ ```
40
+
41
+ ## Further reading
42
+
43
+ - [VS Code Docs: Custom agents](https://code.visualstudio.com/docs/copilot/customization/custom-agents)
@@ -0,0 +1,45 @@
1
+ # require-valid-instructions-apply-to-globs
2
+
3
+ Require path-specific Copilot instructions `applyTo` metadata to use repository-relative glob patterns.
4
+
5
+ > **Rule catalog ID:** R044
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/instructions/**/*.instructions.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - `applyTo` entries that start with `./` or `../`
14
+ - absolute paths such as `/src/**` or `C:\repo\src\**`
15
+ - path-like values that use URI schemes or backslashes
16
+ - empty or otherwise non-portable `applyTo` patterns
17
+
18
+ ## Why this rule exists
19
+
20
+ Path-specific instructions are meant to target files relative to the repository layout. Repository-relative globs are more portable across machines and clients than absolute paths, URI-like references, or current-directory-relative shortcuts.
21
+
22
+ ## ❌ Incorrect
23
+
24
+ ```md
25
+ ---
26
+ description: Frontend guidance
27
+ applyTo: ./src/**/*.ts
28
+ ---
29
+ Use explicit return types.
30
+ ```
31
+
32
+ ## ✅ Correct
33
+
34
+ ```md
35
+ ---
36
+ description: Frontend guidance
37
+ applyTo: src/**/*.ts
38
+ ---
39
+ Use explicit return types.
40
+ ```
41
+
42
+ ## Further reading
43
+
44
+ - [GitHub Docs: Add repository custom instructions for GitHub Copilot](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions)
45
+ - [VS Code Docs: Custom instructions](https://code.visualstudio.com/docs/copilot/customization/custom-instructions)
@@ -0,0 +1,42 @@
1
+ # require-valid-prompt-argument-hint
2
+
3
+ Require Copilot prompt-file `argument-hint` metadata to be a non-empty scalar when present.
4
+
5
+ > **Rule catalog ID:** R041
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/prompts/**/*.prompt.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - blank `argument-hint` values
14
+ - non-scalar `argument-hint` values that do not parse as one string
15
+
16
+ ## Why this rule exists
17
+
18
+ `argument-hint` is meant to describe the argument shape a prompt expects. If you include it, it should give users and clients a concrete hint rather than an empty or malformed placeholder.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```md
23
+ ---
24
+ description: Summarize a change
25
+ argument-hint:
26
+ ---
27
+ Summarize the supplied change.
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```md
33
+ ---
34
+ description: Summarize a change
35
+ argument-hint: <pull-request-number>
36
+ ---
37
+ Summarize the supplied change.
38
+ ```
39
+
40
+ ## Further reading
41
+
42
+ - [VS Code Docs: Prompt files](https://code.visualstudio.com/docs/copilot/customization/prompt-files)
@@ -0,0 +1,45 @@
1
+ # require-valid-prompt-model
2
+
3
+ Require Copilot prompt-file `model` metadata to be a non-empty single model name when present.
4
+
5
+ > **Rule catalog ID:** R026
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/prompts/**/*.prompt.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - empty prompt-file `model` values
14
+ - prompt-file `model` lists where the docs only describe a single model field
15
+ - malformed list literals such as `model: []`
16
+
17
+ ## Why this rule exists
18
+
19
+ VS Code documents prompt-file `model` as the language model used when running the prompt. Unlike custom agents, the prompt-file docs do not describe a prioritized model array shape, so keeping prompt `model` metadata to a single non-empty model name keeps prompt configuration aligned with the documented contract.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```md
24
+ ---
25
+ description: Review changes
26
+ agent: plan
27
+ model: ['Claude Haiku 4.5 (copilot)', 'GPT-5 (copilot)']
28
+ ---
29
+ Review the requested changes.
30
+ ```
31
+
32
+ ## ✅ Correct
33
+
34
+ ```md
35
+ ---
36
+ description: Review changes
37
+ agent: plan
38
+ model: GPT-5 (copilot)
39
+ ---
40
+ Review the requested changes.
41
+ ```
42
+
43
+ ## Further reading
44
+
45
+ - [VS Code Docs: Prompt files](https://code.visualstudio.com/docs/copilot/customization/prompt-files)
@@ -0,0 +1,42 @@
1
+ # require-valid-prompt-name
2
+
3
+ Require Copilot prompt-file `name` metadata to be a non-empty scalar when present.
4
+
5
+ > **Rule catalog ID:** R040
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/prompts/**/*.prompt.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - blank `name` values
14
+ - non-scalar `name` values that do not parse as a single string in supported frontmatter
15
+
16
+ ## Why this rule exists
17
+
18
+ Prompt files can expose a slash-command name through frontmatter. When `name` is present, it should be a real string value instead of an empty placeholder so the prompt has a stable, intentional command name.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```md
23
+ ---
24
+ description: Review a pull request
25
+ name:
26
+ ---
27
+ Review the proposed changes.
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```md
33
+ ---
34
+ description: Review a pull request
35
+ name: review-pr
36
+ ---
37
+ Review the proposed changes.
38
+ ```
39
+
40
+ ## Further reading
41
+
42
+ - [VS Code Docs: Prompt files](https://code.visualstudio.com/docs/copilot/customization/prompt-files)
@@ -0,0 +1,43 @@
1
+ # require-valid-prompt-tools
2
+
3
+ Require Copilot prompt-file `tools` metadata to be a non-empty list of tool or tool-set names when present.
4
+
5
+ > **Rule catalog ID:** R027
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/prompts/**/*.prompt.md`
10
+
11
+ ## What this rule reports
12
+
13
+ - scalar `tools` values such as `tools: fetch`
14
+ - empty `tools` values
15
+ - empty prompt tool lists such as `tools: []`
16
+
17
+ ## Why this rule exists
18
+
19
+ VS Code documents reusable prompt-file `tools` metadata as a list. Keeping prompt tool declarations in that documented list form makes the allowed tool surface explicit and easier for Copilot clients to interpret consistently.
20
+
21
+ ## ❌ Incorrect
22
+
23
+ ```md
24
+ ---
25
+ description: Review a pull request
26
+ tools: fetch
27
+ ---
28
+ Review the proposed changes.
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```md
34
+ ---
35
+ description: Review a pull request
36
+ tools: ['search/codebase', 'fetch/web']
37
+ ---
38
+ Review the proposed changes.
39
+ ```
40
+
41
+ ## Further reading
42
+
43
+ - [VS Code Docs: Prompt files](https://code.visualstudio.com/docs/copilot/customization/prompt-files)
@@ -0,0 +1,45 @@
1
+ # require-valid-repository-hook-command-type
2
+
3
+ Require repository hook definitions to declare a supported `type` value such as `command` or `prompt`.
4
+
5
+ > **Rule catalog ID:** R060
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/hooks/**/*.json`
10
+
11
+ ## What this rule reports
12
+
13
+ - hook objects with a missing `type`
14
+ - hook objects whose `type` is not a supported string
15
+
16
+ ## Why this rule exists
17
+
18
+ Each hook definition needs an explicit type so Copilot knows how to interpret it. Requiring a supported `type` catches incomplete hook entries and obvious schema mismatches.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```json
23
+ {
24
+ "version": 1,
25
+ "hooks": {
26
+ "sessionStart": [{ "bash": "echo ready" }]
27
+ }
28
+ }
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```json
34
+ {
35
+ "version": 1,
36
+ "hooks": {
37
+ "sessionStart": [{ "type": "command", "bash": "echo ready" }]
38
+ }
39
+ }
40
+ ```
41
+
42
+ ## Further reading
43
+
44
+ - [GitHub Docs: Using hooks with GitHub Copilot agents](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/use-hooks)
45
+ - [GitHub Docs: GitHub Copilot CLI command reference](https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference)
@@ -0,0 +1,43 @@
1
+ # require-valid-repository-hook-env
2
+
3
+ Require repository hook `env` values to be JSON objects when present.
4
+
5
+ > **Rule catalog ID:** R065
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/hooks/**/*.json`
10
+
11
+ ## What this rule reports
12
+
13
+ - `env` values that are arrays, numbers, strings, or other non-object JSON values
14
+
15
+ ## Why this rule exists
16
+
17
+ Hook environment variables are documented as key/value mappings. Requiring an object shape keeps that contract explicit and prevents malformed environment configuration.
18
+
19
+ ## ❌ Incorrect
20
+
21
+ ```json
22
+ {
23
+ "version": 1,
24
+ "hooks": {
25
+ "sessionStart": [{ "type": "command", "bash": "echo ready", "env": ["LOG_LEVEL"] }]
26
+ }
27
+ }
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```json
33
+ {
34
+ "version": 1,
35
+ "hooks": {
36
+ "sessionStart": [{ "type": "command", "bash": "echo ready", "env": { "LOG_LEVEL": "info" } }]
37
+ }
38
+ }
39
+ ```
40
+
41
+ ## Further reading
42
+
43
+ - [GitHub Docs: Using hooks with GitHub Copilot agents](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/use-hooks)
@@ -0,0 +1,34 @@
1
+ # require-valid-repository-hook-events
2
+
3
+ Require repository hook configuration files to use supported hook event names.
4
+
5
+ > **Rule catalog ID:** R059
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/hooks/**/*.json`
10
+
11
+ ## What this rule reports
12
+
13
+ - unsupported hook event names inside the top-level `hooks` object
14
+
15
+ ## Why this rule exists
16
+
17
+ Repository hooks only run for a fixed set of documented lifecycle events. Rejecting unknown event names helps catch typos and prevents configuration from silently doing nothing.
18
+
19
+ ## ❌ Incorrect
20
+
21
+ ```json
22
+ { "version": 1, "hooks": { "beforeAnything": [] } }
23
+ ```
24
+
25
+ ## ✅ Correct
26
+
27
+ ```json
28
+ { "version": 1, "hooks": { "sessionStart": [] } }
29
+ ```
30
+
31
+ ## Further reading
32
+
33
+ - [GitHub Docs: Using hooks with GitHub Copilot agents](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/use-hooks)
34
+ - [GitHub Docs: GitHub Copilot CLI command reference](https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference)
@@ -0,0 +1,43 @@
1
+ # require-valid-repository-hook-timeouts
2
+
3
+ Require repository hook `timeoutSec` values to be positive integers when present.
4
+
5
+ > **Rule catalog ID:** R064
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/hooks/**/*.json`
10
+
11
+ ## What this rule reports
12
+
13
+ - zero, negative, fractional, or non-numeric `timeoutSec` values
14
+
15
+ ## Why this rule exists
16
+
17
+ Hook timeouts are numeric execution budgets. Requiring a positive integer keeps the hook configuration aligned with the documented schema and avoids values that are ambiguous or unusable at runtime.
18
+
19
+ ## ❌ Incorrect
20
+
21
+ ```json
22
+ {
23
+ "version": 1,
24
+ "hooks": {
25
+ "sessionStart": [{ "type": "command", "bash": "echo ready", "timeoutSec": 0 }]
26
+ }
27
+ }
28
+ ```
29
+
30
+ ## ✅ Correct
31
+
32
+ ```json
33
+ {
34
+ "version": 1,
35
+ "hooks": {
36
+ "sessionStart": [{ "type": "command", "bash": "echo ready", "timeoutSec": 10 }]
37
+ }
38
+ }
39
+ ```
40
+
41
+ ## Further reading
42
+
43
+ - [GitHub Docs: Using hooks with GitHub Copilot agents](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/use-hooks)
@@ -0,0 +1,34 @@
1
+ # require-valid-repository-hook-version
2
+
3
+ Require repository hook configuration files to declare `version: 1`.
4
+
5
+ > **Rule catalog ID:** R056
6
+
7
+ ## Targeted pattern scope
8
+
9
+ - `.github/hooks/**/*.json`
10
+
11
+ ## What this rule reports
12
+
13
+ - hook configuration files with a missing `version`
14
+ - hook configuration files whose `version` is not exactly `1`
15
+
16
+ ## Why this rule exists
17
+
18
+ Repository hook files use an explicit versioned JSON schema. Requiring the documented `version: 1` value catches incompatible or incomplete hook files early.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```json
23
+ { "version": 2, "hooks": {} }
24
+ ```
25
+
26
+ ## ✅ Correct
27
+
28
+ ```json
29
+ { "version": 1, "hooks": {} }
30
+ ```
31
+
32
+ ## Further reading
33
+
34
+ - [GitHub Docs: Using hooks with GitHub Copilot agents](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/use-hooks)