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,398 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Lightweight Markdown frontmatter helpers for Copilot customization files.
4
+ */
5
+ /** Determine whether a character is an ASCII letter. */
6
+ const isAsciiLetter = (character) => (character >= "A" && character <= "Z") ||
7
+ (character >= "a" && character <= "z");
8
+ /** Determine whether a character is valid after the first YAML field letter. */
9
+ const isYamlIdentifierCharacter = (character) => isAsciiLetter(character) ||
10
+ (character >= "0" && character <= "9") ||
11
+ character === "-";
12
+ /** Validate the limited frontmatter field names this plugin supports. */
13
+ const isSupportedFrontmatterFieldName = (value) => {
14
+ if (value.length === 0 || !isAsciiLetter(value[0] ?? "")) {
15
+ return false;
16
+ }
17
+ for (const character of value.slice(1)) {
18
+ if (!isYamlIdentifierCharacter(character)) {
19
+ return false;
20
+ }
21
+ }
22
+ return true;
23
+ };
24
+ /** Parse a supported `key: value` frontmatter line. */
25
+ const parseFieldLine = (line) => {
26
+ const separatorIndex = line.indexOf(":");
27
+ if (separatorIndex <= 0) {
28
+ return null;
29
+ }
30
+ const key = line.slice(0, separatorIndex).trim();
31
+ if (!isSupportedFrontmatterFieldName(key)) {
32
+ return null;
33
+ }
34
+ return {
35
+ key,
36
+ value: line.slice(separatorIndex + 1),
37
+ };
38
+ };
39
+ /** Read a single line and its ending index from a source string. */
40
+ const readLine = (text, startIndex) => {
41
+ const lineFeedIndex = text.indexOf("\n", startIndex);
42
+ if (lineFeedIndex === -1) {
43
+ return {
44
+ line: text.endsWith("\r")
45
+ ? text.slice(startIndex, -1)
46
+ : text.slice(startIndex),
47
+ nextIndex: text.length,
48
+ };
49
+ }
50
+ const lineEndIndex = text[lineFeedIndex - 1] === "\r" ? lineFeedIndex - 1 : lineFeedIndex;
51
+ return {
52
+ line: text.slice(startIndex, lineEndIndex),
53
+ nextIndex: lineFeedIndex + 1,
54
+ };
55
+ };
56
+ /** Remove one trailing CRLF or LF sequence when present. */
57
+ const trimTrailingLineBreak = (value) => {
58
+ if (value.endsWith("\r\n")) {
59
+ return value.slice(0, -2);
60
+ }
61
+ if (value.endsWith("\n")) {
62
+ return value.slice(0, -1);
63
+ }
64
+ return value;
65
+ };
66
+ /** Collect an indented frontmatter block after a top-level field. */
67
+ const collectIndentedBlockLines = (lines, startIndex) => {
68
+ const blockLines = [];
69
+ let nextIndex = startIndex;
70
+ while (nextIndex < lines.length) {
71
+ const nextLine = lines[nextIndex] ?? "";
72
+ if (nextLine.trim().length > 0 &&
73
+ !nextLine.startsWith(" ") &&
74
+ !nextLine.startsWith("\t")) {
75
+ break;
76
+ }
77
+ if (nextLine.trim().length > 0) {
78
+ blockLines.push(nextLine);
79
+ }
80
+ nextIndex += 1;
81
+ }
82
+ return {
83
+ blockLines,
84
+ nextIndex,
85
+ };
86
+ };
87
+ /** Strip balanced HTML comments from Markdown body text. */
88
+ const stripHtmlComments = (text) => {
89
+ let result = "";
90
+ let searchIndex = 0;
91
+ while (searchIndex < text.length) {
92
+ const commentStartIndex = text.indexOf("<!--", searchIndex);
93
+ if (commentStartIndex === -1) {
94
+ result += text.slice(searchIndex);
95
+ break;
96
+ }
97
+ result += text.slice(searchIndex, commentStartIndex);
98
+ const commentEndIndex = text.indexOf("-->", commentStartIndex + 4);
99
+ if (commentEndIndex === -1) {
100
+ result += text.slice(commentStartIndex);
101
+ break;
102
+ }
103
+ searchIndex = commentEndIndex + 3;
104
+ }
105
+ return result;
106
+ };
107
+ /** Count leading spaces or tabs for indentation-sensitive YAML subsets. */
108
+ const getIndentationWidth = (line) => {
109
+ let width = 0;
110
+ for (const character of line) {
111
+ if (character === " ") {
112
+ width += 1;
113
+ continue;
114
+ }
115
+ if (character === "\t") {
116
+ width += 4;
117
+ continue;
118
+ }
119
+ break;
120
+ }
121
+ return width;
122
+ };
123
+ /** Remove balanced single or double quotes from a scalar YAML value. */
124
+ const stripQuotes = (value) => {
125
+ if (value.length >= 2) {
126
+ const firstCharacter = value.at(0);
127
+ const lastCharacter = value.at(-1);
128
+ if ((firstCharacter === '"' && lastCharacter === '"') ||
129
+ (firstCharacter === "'" && lastCharacter === "'")) {
130
+ return value.slice(1, -1);
131
+ }
132
+ }
133
+ return value;
134
+ };
135
+ /** Normalize a scalar-like YAML token into a trimmed string value. */
136
+ function normalizeScalarValue(value) {
137
+ return stripQuotes(value.trim()).trim();
138
+ }
139
+ /** Assign a parsed YAML `key: value` pair into an object-list entry. */
140
+ const setObjectEntryField = (target, source) => {
141
+ const property = parseFieldLine(source.trim());
142
+ if (property === null) {
143
+ return;
144
+ }
145
+ target[property.key] = normalizeScalarValue(property.value);
146
+ };
147
+ /** Parse a one-line YAML flow sequence such as `["a", "b"]`. */
148
+ const parseInlineList = (value) => {
149
+ const trimmedValue = value.trim();
150
+ if (!trimmedValue.startsWith("[") || !trimmedValue.endsWith("]")) {
151
+ return [];
152
+ }
153
+ const innerValue = trimmedValue.slice(1, -1).trim();
154
+ if (innerValue.length === 0) {
155
+ return [];
156
+ }
157
+ return innerValue
158
+ .split(",")
159
+ .map((item) => normalizeScalarValue(item))
160
+ .filter((item) => item.length > 0);
161
+ };
162
+ /** Parse an indented YAML block list of scalar strings. */
163
+ const parseBlockList = (lines) => lines
164
+ .map((line) => {
165
+ const trimmedLine = line.trim();
166
+ if (!trimmedLine.startsWith("-")) {
167
+ return "";
168
+ }
169
+ return normalizeScalarValue(trimmedLine.slice(1));
170
+ })
171
+ .filter((value) => value.length > 0);
172
+ /** Parse the supported subset of YAML frontmatter fields used by Copilot. */
173
+ const parseFrontmatterFields = (content) => {
174
+ const lines = content.replaceAll("\r\n", "\n").split("\n");
175
+ const fields = new Map();
176
+ let index = 0;
177
+ while (index < lines.length) {
178
+ const currentLine = lines[index]?.trimEnd() ?? "";
179
+ if (currentLine.trim().length === 0) {
180
+ index += 1;
181
+ continue;
182
+ }
183
+ const field = parseFieldLine(currentLine.trimStart());
184
+ if (field === null) {
185
+ index += 1;
186
+ continue;
187
+ }
188
+ const normalizedValue = field.value.trim();
189
+ if (normalizedValue.length > 0) {
190
+ const inlineList = parseInlineList(normalizedValue);
191
+ if (inlineList.length > 0) {
192
+ fields.set(field.key, {
193
+ kind: "list",
194
+ values: inlineList,
195
+ });
196
+ index += 1;
197
+ continue;
198
+ }
199
+ fields.set(field.key, {
200
+ kind: "scalar",
201
+ value: normalizeScalarValue(normalizedValue),
202
+ });
203
+ index += 1;
204
+ continue;
205
+ }
206
+ const { blockLines, nextIndex } = collectIndentedBlockLines(lines, index + 1);
207
+ const parsedBlockValues = parseBlockList(blockLines);
208
+ if (parsedBlockValues.length > 0) {
209
+ fields.set(field.key, {
210
+ kind: "list",
211
+ values: parsedBlockValues,
212
+ });
213
+ index = nextIndex;
214
+ continue;
215
+ }
216
+ fields.set(field.key, {
217
+ kind: "scalar",
218
+ value: "",
219
+ });
220
+ index = nextIndex;
221
+ }
222
+ return fields;
223
+ };
224
+ /** Extract top-of-file YAML frontmatter when present. */
225
+ export const extractFrontmatter = (text) => {
226
+ if (!text.startsWith("---")) {
227
+ return null;
228
+ }
229
+ const openingLine = readLine(text, 0);
230
+ if (openingLine.line !== "---" || openingLine.nextIndex >= text.length) {
231
+ return null;
232
+ }
233
+ let lineStartIndex = openingLine.nextIndex;
234
+ while (lineStartIndex < text.length) {
235
+ const currentLine = readLine(text, lineStartIndex);
236
+ if (currentLine.line === "---") {
237
+ const content = trimTrailingLineBreak(text.slice(openingLine.nextIndex, lineStartIndex));
238
+ return {
239
+ body: text.slice(currentLine.nextIndex),
240
+ content,
241
+ fields: parseFrontmatterFields(content),
242
+ };
243
+ }
244
+ lineStartIndex = currentLine.nextIndex;
245
+ }
246
+ return null;
247
+ };
248
+ /** Read a non-empty scalar frontmatter value. */
249
+ export const getFrontmatterScalar = (document, key) => {
250
+ const field = document.fields.get(key);
251
+ return field?.kind === "scalar" && field.value.length > 0
252
+ ? field.value
253
+ : undefined;
254
+ };
255
+ /** Read a non-empty list of scalar frontmatter values. */
256
+ export const getFrontmatterList = (document, key) => {
257
+ const field = document.fields.get(key);
258
+ return field?.kind === "list" && field.values.length > 0
259
+ ? field.values
260
+ : undefined;
261
+ };
262
+ /** Determine whether a field exists but is empty or unparsable for our subset. */
263
+ export const hasFrontmatterField = (document, key) => document.fields.has(key);
264
+ /** Read a supported YAML object-list block such as `handoffs:` entries. */
265
+ export const getFrontmatterObjectList = (document, key) => {
266
+ const lines = document.content.replaceAll("\r\n", "\n").split("\n");
267
+ let index = 0;
268
+ while (index < lines.length) {
269
+ const currentLine = lines[index] ?? "";
270
+ if (currentLine.startsWith(" ") || currentLine.startsWith("\t")) {
271
+ index += 1;
272
+ continue;
273
+ }
274
+ const field = parseFieldLine(currentLine.trimEnd());
275
+ if (field === null) {
276
+ index += 1;
277
+ continue;
278
+ }
279
+ if (field.key !== key) {
280
+ index += 1;
281
+ continue;
282
+ }
283
+ const rawValue = field.value.trim();
284
+ if (rawValue === "[]") {
285
+ return [];
286
+ }
287
+ if (rawValue.length > 0) {
288
+ return undefined;
289
+ }
290
+ const { blockLines } = collectIndentedBlockLines(lines, index + 1);
291
+ const entries = [];
292
+ let currentEntry = null;
293
+ for (const blockLine of blockLines) {
294
+ const trimmedLine = blockLine.trim();
295
+ if (trimmedLine.startsWith("-")) {
296
+ if (currentEntry !== null) {
297
+ entries.push(currentEntry);
298
+ }
299
+ currentEntry = {};
300
+ const inlineProperty = trimmedLine.slice(1).trim();
301
+ if (inlineProperty.length > 0) {
302
+ setObjectEntryField(currentEntry, inlineProperty);
303
+ }
304
+ continue;
305
+ }
306
+ if (currentEntry === null) {
307
+ continue;
308
+ }
309
+ setObjectEntryField(currentEntry, trimmedLine);
310
+ }
311
+ if (currentEntry !== null) {
312
+ entries.push(currentEntry);
313
+ }
314
+ return entries;
315
+ }
316
+ return undefined;
317
+ };
318
+ /** Read nested YAML mappings of object lists such as `hooks: Event: - ...`. */
319
+ export const getFrontmatterObjectListGroups = (document, key) => {
320
+ const lines = document.content.replaceAll("\r\n", "\n").split("\n");
321
+ let index = 0;
322
+ while (index < lines.length) {
323
+ const currentLine = lines[index] ?? "";
324
+ if (currentLine.startsWith(" ") || currentLine.startsWith("\t")) {
325
+ index += 1;
326
+ continue;
327
+ }
328
+ const field = parseFieldLine(currentLine.trimEnd());
329
+ if (field === null) {
330
+ index += 1;
331
+ continue;
332
+ }
333
+ if (field.key !== key) {
334
+ index += 1;
335
+ continue;
336
+ }
337
+ const rawValue = field.value.trim();
338
+ if (rawValue.length > 0) {
339
+ return undefined;
340
+ }
341
+ const { blockLines } = collectIndentedBlockLines(lines, index + 1);
342
+ const groups = new Map();
343
+ let currentGroupName = null;
344
+ let currentEntry = null;
345
+ const flushCurrentEntry = () => {
346
+ if (currentGroupName === null || currentEntry === null) {
347
+ return;
348
+ }
349
+ const groupEntries = groups.get(currentGroupName) ?? [];
350
+ groupEntries.push(currentEntry);
351
+ groups.set(currentGroupName, groupEntries);
352
+ currentEntry = null;
353
+ };
354
+ for (const blockLine of blockLines) {
355
+ const indentationWidth = getIndentationWidth(blockLine);
356
+ const trimmedLine = blockLine.trim();
357
+ if (trimmedLine.length === 0) {
358
+ continue;
359
+ }
360
+ if (!trimmedLine.startsWith("-") && indentationWidth <= 4) {
361
+ flushCurrentEntry();
362
+ const groupField = parseFieldLine(trimmedLine);
363
+ if (groupField === null) {
364
+ currentGroupName = null;
365
+ continue;
366
+ }
367
+ currentGroupName = groupField.key;
368
+ if (currentGroupName !== null &&
369
+ !groups.has(currentGroupName)) {
370
+ groups.set(currentGroupName, []);
371
+ }
372
+ continue;
373
+ }
374
+ if (trimmedLine.startsWith("-")) {
375
+ flushCurrentEntry();
376
+ if (currentGroupName === null) {
377
+ continue;
378
+ }
379
+ currentEntry = {};
380
+ const inlineProperty = trimmedLine.slice(1).trim();
381
+ if (inlineProperty.length > 0) {
382
+ setObjectEntryField(currentEntry, inlineProperty);
383
+ }
384
+ continue;
385
+ }
386
+ if (currentEntry === null) {
387
+ continue;
388
+ }
389
+ setObjectEntryField(currentEntry, trimmedLine);
390
+ }
391
+ flushCurrentEntry();
392
+ return groups;
393
+ }
394
+ return undefined;
395
+ };
396
+ /** Remove HTML comments before checking whether Markdown body content exists. */
397
+ export const getMeaningfulMarkdownBody = (text) => stripHtmlComments(text).trim();
398
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/_internal/frontmatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** Extracted Markdown link plus its source range. */
2
+ export type MarkdownLinkMatch = Readonly<{
3
+ destination: string;
4
+ end: number;
5
+ rawDestination: string;
6
+ start: number;
7
+ text: string;
8
+ }>;
9
+ /** Replace code spans and fences so link matching ignores code content. */
10
+ export declare const maskMarkdownCode: (text: string) => string;
11
+ /** Normalize a raw Markdown link destination by removing wrappers and titles. */
12
+ export declare const extractMarkdownLinkDestination: (rawDestination: string) => string;
13
+ /** Extract Markdown links from text while ignoring code spans and fences. */
14
+ export declare const extractMarkdownLinks: (text: string, offset?: number) => readonly MarkdownLinkMatch[];
15
+ /** Determine whether a Markdown link target is a non-relative workspace path. */
16
+ export declare const isInvalidWorkspaceLinkDestination: (destination: string) => boolean;
17
+ /** Determine whether a Markdown link target is a relative workspace path. */
18
+ export declare const isRelativeWorkspaceLinkDestination: (destination: string) => boolean;
19
+ /** Resolve a relative Markdown workspace link from a file path. */
20
+ export declare const resolveMarkdownWorkspaceLink: (currentFilePath: string, destination: string) => string;
21
+ //# sourceMappingURL=markdown-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-links.d.ts","sourceRoot":"","sources":["../../src/_internal/markdown-links.ts"],"names":[],"mappings":"AAcA,qDAAqD;AACrD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAUvC,CAAC;AAEV,iFAAiF;AACjF,eAAO,MAAM,8BAA8B,GACvC,gBAAgB,MAAM,KACvB,MAaF,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,GAC7B,MAAM,MAAM,EACZ,eAAU,KACX,SAAS,iBAAiB,EAuE5B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,iCAAiC,GAC1C,aAAa,MAAM,KACpB,OAAkD,CAAC;AAEtD,6EAA6E;AAC7E,eAAO,MAAM,kCAAkC,GAC3C,aAAa,MAAM,KACpB,OAA+C,CAAC;AAEnD,mEAAmE;AACnE,eAAO,MAAM,4BAA4B,GACrC,iBAAiB,MAAM,EACvB,aAAa,MAAM,KACpB,MAAoE,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared Markdown link extraction helpers for Copilot customization files.
4
+ */
5
+ import { isNonRelativeWorkspacePath, isRelativeWorkspacePath, resolveRelativeWorkspacePath, } from "./file-system.js";
6
+ const FENCED_BACKTICK_CODE_BLOCK_PATTERN = /```[\s\S]*?```/gu;
7
+ const FENCED_TILDE_CODE_BLOCK_PATTERN = /~~~[\s\S]*?~~~/gu;
8
+ const INLINE_CODE_PATTERN = /`[^\n\r`]+`/gu;
9
+ /** Replace code spans and fences so link matching ignores code content. */
10
+ export const maskMarkdownCode = (text) => text
11
+ .replaceAll(FENCED_BACKTICK_CODE_BLOCK_PATTERN, (match) => match.replaceAll(/[^\n\r]/gu, " "))
12
+ .replaceAll(FENCED_TILDE_CODE_BLOCK_PATTERN, (match) => match.replaceAll(/[^\n\r]/gu, " "))
13
+ .replaceAll(INLINE_CODE_PATTERN, (match) => match.replaceAll(/[^\n\r]/gu, " "));
14
+ /** Normalize a raw Markdown link destination by removing wrappers and titles. */
15
+ export const extractMarkdownLinkDestination = (rawDestination) => {
16
+ const trimmedDestination = rawDestination.trim();
17
+ if (trimmedDestination.startsWith("<") &&
18
+ trimmedDestination.endsWith(">")) {
19
+ return trimmedDestination.slice(1, -1).trim();
20
+ }
21
+ const [destination] = trimmedDestination.split(/\s+/u, 1);
22
+ return destination?.trim() ?? "";
23
+ };
24
+ /** Extract Markdown links from text while ignoring code spans and fences. */
25
+ export const extractMarkdownLinks = (text, offset = 0) => {
26
+ const maskedText = maskMarkdownCode(text);
27
+ const links = [];
28
+ let searchOffset = 0;
29
+ while (searchOffset < maskedText.length) {
30
+ const textStart = maskedText.indexOf("[", searchOffset);
31
+ if (textStart === -1) {
32
+ break;
33
+ }
34
+ if (textStart > 0 && maskedText[textStart - 1] === "!") {
35
+ searchOffset = textStart + 1;
36
+ continue;
37
+ }
38
+ const textEnd = maskedText.indexOf("](", textStart + 1);
39
+ if (textEnd === -1) {
40
+ break;
41
+ }
42
+ const linkText = maskedText.slice(textStart + 1, textEnd);
43
+ if (linkText.length === 0 ||
44
+ linkText.includes("]") ||
45
+ linkText.includes("\n") ||
46
+ linkText.includes("\r")) {
47
+ searchOffset = textStart + 1;
48
+ continue;
49
+ }
50
+ const destinationStart = textEnd + 2;
51
+ const destinationEnd = maskedText.indexOf(")", destinationStart);
52
+ if (destinationEnd === -1) {
53
+ break;
54
+ }
55
+ const rawDestination = maskedText.slice(destinationStart, destinationEnd);
56
+ if (rawDestination.length === 0 ||
57
+ rawDestination.includes("\n") ||
58
+ rawDestination.includes("\r")) {
59
+ searchOffset = textStart + 1;
60
+ continue;
61
+ }
62
+ const matchedText = maskedText.slice(textStart, destinationEnd + 1);
63
+ const start = offset + textStart;
64
+ links.push({
65
+ destination: extractMarkdownLinkDestination(rawDestination),
66
+ end: start + matchedText.length,
67
+ rawDestination,
68
+ start,
69
+ text: matchedText,
70
+ });
71
+ searchOffset = destinationEnd + 1;
72
+ }
73
+ return links;
74
+ };
75
+ /** Determine whether a Markdown link target is a non-relative workspace path. */
76
+ export const isInvalidWorkspaceLinkDestination = (destination) => isNonRelativeWorkspacePath(destination);
77
+ /** Determine whether a Markdown link target is a relative workspace path. */
78
+ export const isRelativeWorkspaceLinkDestination = (destination) => isRelativeWorkspacePath(destination);
79
+ /** Resolve a relative Markdown workspace link from a file path. */
80
+ export const resolveMarkdownWorkspaceLink = (currentFilePath, destination) => resolveRelativeWorkspacePath(currentFilePath, destination);
81
+ //# sourceMappingURL=markdown-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-links.js","sourceRoot":"","sources":["../../src/_internal/markdown-links.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared helpers for markdown-backed Copilot rules.
4
+ */
5
+ import type { TSESLint } from "@typescript-eslint/utils";
6
+ /** Report a markdown document-level problem at the start of the file. */
7
+ export declare const reportAtDocumentStart: <MessageIds extends string>(context: Readonly<TSESLint.RuleContext<MessageIds, readonly unknown[]>>, options: Readonly<{
8
+ data?: Readonly<Record<string, string>>;
9
+ messageId: MessageIds;
10
+ }>) => void;
11
+ /** Create a markdown document listener keyed off the root AST node. */
12
+ export declare const createMarkdownDocumentListener: (lintDocument: () => void) => TSESLint.RuleListener;
13
+ //# sourceMappingURL=markdown-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-rule.d.ts","sourceRoot":"","sources":["../../src/_internal/markdown-rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAYzD,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,GAAI,UAAU,SAAS,MAAM,EAC3D,SAAS,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,EACvE,SAAS,QAAQ,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,SAAS,EAAE,UAAU,CAAC;CACzB,CAAC,KACH,IAKF,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,8BAA8B,GACvC,cAAc,MAAM,IAAI,KACzB,QAAQ,CAAC,YAIV,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** Common document-start report location used by markdown rules. */
2
+ const createDocumentStartLocation = (context) => ({
3
+ end: context.sourceCode.getLocFromIndex(Math.min(1, context.sourceCode.text.length)),
4
+ start: context.sourceCode.getLocFromIndex(0),
5
+ });
6
+ /** Report a markdown document-level problem at the start of the file. */
7
+ export const reportAtDocumentStart = (context, options) => {
8
+ context.report({
9
+ ...options,
10
+ loc: createDocumentStartLocation(context),
11
+ });
12
+ };
13
+ /** Create a markdown document listener keyed off the root AST node. */
14
+ export const createMarkdownDocumentListener = (lintDocument) => ({
15
+ root() {
16
+ lintDocument();
17
+ },
18
+ });
19
+ //# sourceMappingURL=markdown-rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-rule.js","sourceRoot":"","sources":["../../src/_internal/markdown-rule.ts"],"names":[],"mappings":"AAMA,oEAAoE;AACpE,MAAM,2BAA2B,GAAG,CAChC,OAAmE,EACxC,EAAE,CAAC,CAAC;IAC/B,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,eAAe,CACnC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAC9C;IACD,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,OAAuE,EACvE,OAGE,EACE,EAAE;IACN,OAAO,CAAC,MAAM,CAAC;QACX,GAAG,OAAO;QACV,GAAG,EAAE,2BAA2B,CAAC,OAAO,CAAC;KAC5C,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,uEAAuE;AACvE,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC1C,YAAwB,EACH,EAAE,CAAC,CAAC;IACzB,IAAI;QACA,YAAY,EAAE,CAAC;IACnB,CAAC;CACJ,CAAC,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared JSON helpers for repository hook configuration rules.
4
+ */
5
+ /** Read-only JSON array value. */
6
+ export type JsonArray = readonly JsonValue[];
7
+ /** Read-only JSON object value. */
8
+ export interface JsonObject {
9
+ readonly [key: string]: JsonValue;
10
+ }
11
+ /** JSON primitive scalar value. */
12
+ export type JsonPrimitive = boolean | null | number | string;
13
+ /** Any supported JSON value. */
14
+ export type JsonValue = JsonArray | JsonObject | JsonPrimitive;
15
+ /** Repository hook entry paired with its source event name and array index. */
16
+ export type RepositoryHookEntry = Readonly<{
17
+ eventName: string;
18
+ hook: JsonObject;
19
+ index: number;
20
+ }>;
21
+ /** Supported repository hook event names. */
22
+ export type RepositoryHookEventName = "agentStop" | "errorOccurred" | "postToolUse" | "preToolUse" | "sessionEnd" | "sessionStart" | "subagentStop" | "userPromptSubmitted";
23
+ /** Supported repository hook transport types. */
24
+ export type RepositoryHookType = "command" | "prompt";
25
+ /** Default repository hook timeout used by GitHub Copilot. */
26
+ export declare const DEFAULT_REPOSITORY_HOOK_TIMEOUT_SECONDS = 30;
27
+ /** Known valid repository hook event names. */
28
+ export declare const VALID_REPOSITORY_HOOK_EVENT_NAMES: ReadonlySet<RepositoryHookEventName>;
29
+ /** Known valid repository hook types. */
30
+ export declare const VALID_REPOSITORY_HOOK_TYPES: ReadonlySet<RepositoryHookType>;
31
+ /** Determine whether a string is a supported repository hook event name. */
32
+ export declare const isRepositoryHookEventName: (value: string) => value is RepositoryHookEventName;
33
+ /** Determine whether a string is a supported repository hook type. */
34
+ export declare const isRepositoryHookType: (value: string) => value is RepositoryHookType;
35
+ /** Determine whether a parsed JSON value is an object. */
36
+ export declare const isJsonObject: (value: JsonValue | undefined) => value is JsonObject;
37
+ /** Determine whether a parsed JSON value is an array. */
38
+ export declare const isJsonArray: (value: JsonValue | undefined) => value is JsonArray;
39
+ /** Determine whether a parsed JSON value is a string. */
40
+ export declare const isJsonString: (value: JsonValue | undefined) => value is string;
41
+ /** Determine whether a parsed JSON value is a finite number. */
42
+ export declare const isJsonNumber: (value: JsonValue | undefined) => value is number;
43
+ /** Safely parse JSON source text. */
44
+ export declare const parseJsonText: (text: string) => JsonValue | undefined;
45
+ /** Get the top-level `hooks` value when present. */
46
+ export declare const getRepositoryHooksValue: (root: JsonValue | undefined) => JsonValue | undefined;
47
+ /** Get the top-level `version` value when present. */
48
+ export declare const getRepositoryHooksVersionValue: (root: JsonValue | undefined) => JsonValue | undefined;
49
+ /** Get key/value entries from the `hooks` object when present. */
50
+ export declare const getRepositoryHookEventEntries: (root: JsonValue | undefined) => readonly (readonly [string, JsonValue])[];
51
+ /** Collect object-shaped hook entries from hook arrays. */
52
+ export declare const getRepositoryHookObjects: (root: JsonValue | undefined) => readonly RepositoryHookEntry[];
53
+ /** Format a parsed JSON value for diagnostic messages. */
54
+ export declare const formatJsonValue: (value: JsonValue | undefined) => string;
55
+ //# sourceMappingURL=repository-hooks-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-hooks-json.d.ts","sourceRoot":"","sources":["../../src/_internal/repository-hooks-json.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kCAAkC;AAClC,MAAM,MAAM,SAAS,GAAG,SAAS,SAAS,EAAE,CAAC;AAC7C,mCAAmC;AACnC,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AACD,mCAAmC;AACnC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,gCAAgC;AAChC,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAE/D,+EAA+E;AAC/E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH,6CAA6C;AAC7C,MAAM,MAAM,uBAAuB,GAC7B,WAAW,GACX,eAAe,GACf,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,cAAc,GACd,qBAAqB,CAAC;AAE5B,iDAAiD;AACjD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD,8DAA8D;AAC9D,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAE1D,+CAA+C;AAC/C,eAAO,MAAM,iCAAiC,EAAE,WAAW,CAAC,uBAAuB,CAU7E,CAAC;AAEP,yCAAyC;AACzC,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,kBAAkB,CACtC,CAAC;AAEnC,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,GAClC,OAAO,MAAM,KACd,KAAK,IAAI,uBAC+D,CAAC;AAE5E,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,GAC7B,OAAO,MAAM,KACd,KAAK,IAAI,kBACoD,CAAC;AAEjE,0DAA0D;AAC1D,eAAO,MAAM,YAAY,GACrB,OAAO,SAAS,GAAG,SAAS,KAC7B,KAAK,IAAI,UAC4D,CAAC;AAEzE,yDAAyD;AACzD,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,GAAG,SAAS,KAAG,KAAK,IAAI,SAC5C,CAAC;AAEzB,yDAAyD;AACzD,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,GAAG,SAAS,KAAG,KAAK,IAAI,MACxC,CAAC;AAE9B,gEAAgE;AAChE,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,GAAG,SAAS,KAAG,KAAK,IAAI,MACd,CAAC;AAExD,qCAAqC;AACrC,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,SAAS,GAAG,SAMxD,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,GAChC,MAAM,SAAS,GAAG,SAAS,KAC5B,SAAS,GAAG,SAA6D,CAAC;AAE7E,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,GACvC,MAAM,SAAS,GAAG,SAAS,KAC5B,SAAS,GAAG,SAA+D,CAAC;AAE/E,kEAAkE;AAClE,eAAO,MAAM,6BAA6B,GACtC,MAAM,SAAS,GAAG,SAAS,KAC5B,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAIzC,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,GACjC,MAAM,SAAS,GAAG,SAAS,KAC5B,SAAS,mBAAmB,EAsB9B,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,eAAe,GAAI,OAAO,SAAS,GAAG,SAAS,KAAG,MAU9D,CAAC"}