eslint-plugin-copilot 1.0.8 → 1.1.2
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.
- package/README.md +71 -72
- package/dist/_internal/copilot-config-references.d.ts +1 -1
- package/dist/_internal/copilot-config-references.d.ts.map +1 -1
- package/dist/_internal/copilot-config-references.js +3 -1
- package/dist/_internal/copilot-config-references.js.map +1 -1
- package/dist/_internal/copilot-file-kind.d.ts.map +1 -1
- package/dist/_internal/copilot-file-kind.js +4 -3
- package/dist/_internal/copilot-file-kind.js.map +1 -1
- package/dist/_internal/create-copilot-rule.d.ts +4 -2
- package/dist/_internal/create-copilot-rule.d.ts.map +1 -1
- package/dist/_internal/create-copilot-rule.js.map +1 -1
- package/dist/_internal/file-system.d.ts.map +1 -1
- package/dist/_internal/file-system.js +31 -18
- package/dist/_internal/file-system.js.map +1 -1
- package/dist/_internal/frontmatter.d.ts +1 -1
- package/dist/_internal/frontmatter.d.ts.map +1 -1
- package/dist/_internal/frontmatter.js +151 -119
- package/dist/_internal/frontmatter.js.map +1 -1
- package/dist/_internal/markdown-links.d.ts.map +1 -1
- package/dist/_internal/markdown-links.js +3 -1
- package/dist/_internal/markdown-links.js.map +1 -1
- package/dist/_internal/markdown-rule.d.ts +2 -1
- package/dist/_internal/markdown-rule.d.ts.map +1 -1
- package/dist/_internal/markdown-rule.js.map +1 -1
- package/dist/_internal/repository-hooks-json.d.ts +5 -2
- package/dist/_internal/repository-hooks-json.d.ts.map +1 -1
- package/dist/_internal/repository-hooks-json.js +7 -6
- package/dist/_internal/repository-hooks-json.js.map +1 -1
- package/dist/_internal/rule-catalog.d.ts.map +1 -1
- package/dist/_internal/rule-catalog.js +2 -3
- package/dist/_internal/rule-catalog.js.map +1 -1
- package/dist/plugin.cjs +560 -633
- package/dist/plugin.cjs.map +4 -4
- package/dist/plugin.d.cts +2 -1
- package/dist/plugin.d.ts +2 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +4 -3
- package/dist/plugin.js.map +1 -1
- package/dist/rules/no-blank-customization-body.d.ts +1 -0
- package/dist/rules/no-blank-customization-body.d.ts.map +1 -1
- package/dist/rules/no-blank-customization-body.js +3 -0
- package/dist/rules/no-blank-customization-body.js.map +1 -1
- package/dist/rules/no-blank-repository-instructions.d.ts +1 -0
- package/dist/rules/no-blank-repository-instructions.d.ts.map +1 -1
- package/dist/rules/no-blank-repository-instructions.js +3 -0
- package/dist/rules/no-blank-repository-instructions.js.map +1 -1
- package/dist/rules/no-blank-skill-body.d.ts +1 -0
- package/dist/rules/no-blank-skill-body.d.ts.map +1 -1
- package/dist/rules/no-blank-skill-body.js +3 -0
- package/dist/rules/no-blank-skill-body.js.map +1 -1
- package/dist/rules/no-deprecated-agent-infer.d.ts +1 -0
- package/dist/rules/no-deprecated-agent-infer.d.ts.map +1 -1
- package/dist/rules/no-deprecated-agent-infer.js +3 -0
- package/dist/rules/no-deprecated-agent-infer.js.map +1 -1
- package/dist/rules/no-duplicate-agent-names.d.ts +1 -0
- package/dist/rules/no-duplicate-agent-names.d.ts.map +1 -1
- package/dist/rules/no-duplicate-agent-names.js +6 -4
- package/dist/rules/no-duplicate-agent-names.js.map +1 -1
- package/dist/rules/no-duplicate-prompt-names.d.ts +1 -0
- package/dist/rules/no-duplicate-prompt-names.d.ts.map +1 -1
- package/dist/rules/no-duplicate-prompt-names.js +6 -4
- package/dist/rules/no-duplicate-prompt-names.js.map +1 -1
- package/dist/rules/no-duplicate-skill-names.d.ts +1 -0
- package/dist/rules/no-duplicate-skill-names.d.ts.map +1 -1
- package/dist/rules/no-duplicate-skill-names.js +6 -4
- package/dist/rules/no-duplicate-skill-names.js.map +1 -1
- package/dist/rules/no-duplicate-slash-command-names.d.ts +1 -0
- package/dist/rules/no-duplicate-slash-command-names.d.ts.map +1 -1
- package/dist/rules/no-duplicate-slash-command-names.js +6 -4
- package/dist/rules/no-duplicate-slash-command-names.js.map +1 -1
- package/dist/rules/no-empty-repository-hook-arrays.d.ts +1 -0
- package/dist/rules/no-empty-repository-hook-arrays.d.ts.map +1 -1
- package/dist/rules/no-empty-repository-hook-arrays.js +7 -3
- package/dist/rules/no-empty-repository-hook-arrays.js.map +1 -1
- package/dist/rules/no-legacy-chatmode-files.d.ts +1 -0
- package/dist/rules/no-legacy-chatmode-files.d.ts.map +1 -1
- package/dist/rules/no-legacy-chatmode-files.js +3 -0
- package/dist/rules/no-legacy-chatmode-files.js.map +1 -1
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.d.ts +1 -0
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.d.ts.map +1 -1
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.js +3 -0
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.js.map +1 -1
- package/dist/rules/prefer-fast-repository-hooks.d.ts +1 -0
- package/dist/rules/prefer-fast-repository-hooks.d.ts.map +1 -1
- package/dist/rules/prefer-fast-repository-hooks.js +5 -1
- package/dist/rules/prefer-fast-repository-hooks.js.map +1 -1
- package/dist/rules/prefer-qualified-tools.d.ts +1 -0
- package/dist/rules/prefer-qualified-tools.d.ts.map +1 -1
- package/dist/rules/prefer-qualified-tools.js +8 -3
- package/dist/rules/prefer-qualified-tools.js.map +1 -1
- package/dist/rules/require-agent-tool-for-subagents.d.ts +1 -0
- package/dist/rules/require-agent-tool-for-subagents.d.ts.map +1 -1
- package/dist/rules/require-agent-tool-for-subagents.js +6 -2
- package/dist/rules/require-agent-tool-for-subagents.js.map +1 -1
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.d.ts +1 -0
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.d.ts.map +1 -1
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.js +3 -0
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.js.map +1 -1
- package/dist/rules/require-chatmode-file-metadata.d.ts +1 -0
- package/dist/rules/require-chatmode-file-metadata.d.ts.map +1 -1
- package/dist/rules/require-chatmode-file-metadata.js +5 -1
- package/dist/rules/require-chatmode-file-metadata.js.map +1 -1
- package/dist/rules/require-existing-agent-hook-cwd.d.ts +1 -0
- package/dist/rules/require-existing-agent-hook-cwd.d.ts.map +1 -1
- package/dist/rules/require-existing-agent-hook-cwd.js +6 -2
- package/dist/rules/require-existing-agent-hook-cwd.js.map +1 -1
- package/dist/rules/require-existing-agent-mcp-servers.d.ts +1 -0
- package/dist/rules/require-existing-agent-mcp-servers.d.ts.map +1 -1
- package/dist/rules/require-existing-agent-mcp-servers.js +6 -2
- package/dist/rules/require-existing-agent-mcp-servers.js.map +1 -1
- package/dist/rules/require-existing-relative-agent-links.d.ts +1 -0
- package/dist/rules/require-existing-relative-agent-links.d.ts.map +1 -1
- package/dist/rules/require-existing-relative-agent-links.js +3 -0
- package/dist/rules/require-existing-relative-agent-links.js.map +1 -1
- package/dist/rules/require-existing-relative-instructions-links.d.ts +1 -0
- package/dist/rules/require-existing-relative-instructions-links.d.ts.map +1 -1
- package/dist/rules/require-existing-relative-instructions-links.js +3 -0
- package/dist/rules/require-existing-relative-instructions-links.js.map +1 -1
- package/dist/rules/require-existing-relative-prompt-links.d.ts +1 -0
- package/dist/rules/require-existing-relative-prompt-links.d.ts.map +1 -1
- package/dist/rules/require-existing-relative-prompt-links.js +3 -0
- package/dist/rules/require-existing-relative-prompt-links.js.map +1 -1
- package/dist/rules/require-existing-relative-skill-links.d.ts +1 -0
- package/dist/rules/require-existing-relative-skill-links.d.ts.map +1 -1
- package/dist/rules/require-existing-relative-skill-links.js +3 -0
- package/dist/rules/require-existing-relative-skill-links.js.map +1 -1
- package/dist/rules/require-existing-repository-hook-cwd.d.ts +1 -0
- package/dist/rules/require-existing-repository-hook-cwd.d.ts.map +1 -1
- package/dist/rules/require-existing-repository-hook-cwd.js +5 -1
- package/dist/rules/require-existing-repository-hook-cwd.js.map +1 -1
- package/dist/rules/require-github-copilot-target-for-mcp-servers.d.ts +1 -0
- package/dist/rules/require-github-copilot-target-for-mcp-servers.d.ts.map +1 -1
- package/dist/rules/require-github-copilot-target-for-mcp-servers.js +5 -1
- package/dist/rules/require-github-copilot-target-for-mcp-servers.js.map +1 -1
- package/dist/rules/require-instructions-apply-to.d.ts +1 -0
- package/dist/rules/require-instructions-apply-to.d.ts.map +1 -1
- package/dist/rules/require-instructions-apply-to.js +5 -1
- package/dist/rules/require-instructions-apply-to.js.map +1 -1
- package/dist/rules/require-json-agent-mcp-servers.d.ts +1 -0
- package/dist/rules/require-json-agent-mcp-servers.d.ts.map +1 -1
- package/dist/rules/require-json-agent-mcp-servers.js +6 -2
- package/dist/rules/require-json-agent-mcp-servers.js.map +1 -1
- package/dist/rules/require-prompt-file-metadata.d.ts +1 -0
- package/dist/rules/require-prompt-file-metadata.d.ts.map +1 -1
- package/dist/rules/require-prompt-file-metadata.js +43 -32
- package/dist/rules/require-prompt-file-metadata.js.map +1 -1
- package/dist/rules/require-qualified-agent-handoff-models.d.ts +1 -0
- package/dist/rules/require-qualified-agent-handoff-models.d.ts.map +1 -1
- package/dist/rules/require-qualified-agent-handoff-models.js +6 -2
- package/dist/rules/require-qualified-agent-handoff-models.js.map +1 -1
- package/dist/rules/require-relative-agent-hook-cwd.d.ts +1 -0
- package/dist/rules/require-relative-agent-hook-cwd.d.ts.map +1 -1
- package/dist/rules/require-relative-agent-hook-cwd.js +6 -2
- package/dist/rules/require-relative-agent-hook-cwd.js.map +1 -1
- package/dist/rules/require-relative-agent-links.d.ts +1 -0
- package/dist/rules/require-relative-agent-links.d.ts.map +1 -1
- package/dist/rules/require-relative-agent-links.js +3 -0
- package/dist/rules/require-relative-agent-links.js.map +1 -1
- package/dist/rules/require-relative-instructions-links.d.ts +1 -0
- package/dist/rules/require-relative-instructions-links.d.ts.map +1 -1
- package/dist/rules/require-relative-instructions-links.js +3 -0
- package/dist/rules/require-relative-instructions-links.js.map +1 -1
- package/dist/rules/require-relative-prompt-links.d.ts +1 -0
- package/dist/rules/require-relative-prompt-links.d.ts.map +1 -1
- package/dist/rules/require-relative-prompt-links.js +3 -0
- package/dist/rules/require-relative-prompt-links.js.map +1 -1
- package/dist/rules/require-relative-repository-hook-cwd.d.ts +1 -0
- package/dist/rules/require-relative-repository-hook-cwd.d.ts.map +1 -1
- package/dist/rules/require-relative-repository-hook-cwd.js +5 -1
- package/dist/rules/require-relative-repository-hook-cwd.js.map +1 -1
- package/dist/rules/require-relative-skill-links.d.ts +1 -0
- package/dist/rules/require-relative-skill-links.d.ts.map +1 -1
- package/dist/rules/require-relative-skill-links.js +3 -0
- package/dist/rules/require-relative-skill-links.js.map +1 -1
- package/dist/rules/require-repository-hook-arrays.d.ts +1 -0
- package/dist/rules/require-repository-hook-arrays.d.ts.map +1 -1
- package/dist/rules/require-repository-hook-arrays.js +7 -3
- package/dist/rules/require-repository-hook-arrays.js.map +1 -1
- package/dist/rules/require-repository-hook-command-shell.d.ts +1 -0
- package/dist/rules/require-repository-hook-command-shell.d.ts.map +1 -1
- package/dist/rules/require-repository-hook-command-shell.js +5 -1
- package/dist/rules/require-repository-hook-command-shell.js.map +1 -1
- package/dist/rules/require-repository-hooks-object.d.ts +1 -0
- package/dist/rules/require-repository-hooks-object.d.ts.map +1 -1
- package/dist/rules/require-repository-hooks-object.js +3 -0
- package/dist/rules/require-repository-hooks-object.js.map +1 -1
- package/dist/rules/require-repository-instructions-file.d.ts +1 -0
- package/dist/rules/require-repository-instructions-file.d.ts.map +1 -1
- package/dist/rules/require-repository-instructions-file.js +3 -0
- package/dist/rules/require-repository-instructions-file.js.map +1 -1
- package/dist/rules/require-skill-file-location.d.ts +1 -0
- package/dist/rules/require-skill-file-location.d.ts.map +1 -1
- package/dist/rules/require-skill-file-location.js +3 -0
- package/dist/rules/require-skill-file-location.js.map +1 -1
- package/dist/rules/require-skill-file-metadata.d.ts +1 -0
- package/dist/rules/require-skill-file-metadata.d.ts.map +1 -1
- package/dist/rules/require-skill-file-metadata.js +6 -2
- package/dist/rules/require-skill-file-metadata.js.map +1 -1
- package/dist/rules/require-skill-md-filename.d.ts +1 -0
- package/dist/rules/require-skill-md-filename.d.ts.map +1 -1
- package/dist/rules/require-skill-md-filename.js +3 -0
- package/dist/rules/require-skill-md-filename.js.map +1 -1
- package/dist/rules/require-skill-name-match-directory.d.ts +1 -0
- package/dist/rules/require-skill-name-match-directory.d.ts.map +1 -1
- package/dist/rules/require-skill-name-match-directory.js +5 -1
- package/dist/rules/require-skill-name-match-directory.js.map +1 -1
- package/dist/rules/require-string-repository-hook-env-values.d.ts +1 -0
- package/dist/rules/require-string-repository-hook-env-values.d.ts.map +1 -1
- package/dist/rules/require-string-repository-hook-env-values.js +6 -2
- package/dist/rules/require-string-repository-hook-env-values.js.map +1 -1
- package/dist/rules/require-valid-agent-argument-hint.d.ts +1 -0
- package/dist/rules/require-valid-agent-argument-hint.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-argument-hint.js +5 -1
- package/dist/rules/require-valid-agent-argument-hint.js.map +1 -1
- package/dist/rules/require-valid-agent-handoff-send.d.ts +1 -0
- package/dist/rules/require-valid-agent-handoff-send.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-handoff-send.js +7 -3
- package/dist/rules/require-valid-agent-handoff-send.js.map +1 -1
- package/dist/rules/require-valid-agent-handoffs.d.ts +1 -0
- package/dist/rules/require-valid-agent-handoffs.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-handoffs.js +5 -1
- package/dist/rules/require-valid-agent-handoffs.js.map +1 -1
- package/dist/rules/require-valid-agent-hook-events.d.ts +1 -0
- package/dist/rules/require-valid-agent-hook-events.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-hook-events.js +6 -2
- package/dist/rules/require-valid-agent-hook-events.js.map +1 -1
- package/dist/rules/require-valid-agent-hook-timeouts.d.ts +1 -0
- package/dist/rules/require-valid-agent-hook-timeouts.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-hook-timeouts.js +6 -2
- package/dist/rules/require-valid-agent-hook-timeouts.js.map +1 -1
- package/dist/rules/require-valid-agent-hooks.d.ts +1 -0
- package/dist/rules/require-valid-agent-hooks.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-hooks.js +31 -21
- package/dist/rules/require-valid-agent-hooks.js.map +1 -1
- package/dist/rules/require-valid-agent-invocation-controls.d.ts +1 -0
- package/dist/rules/require-valid-agent-invocation-controls.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-invocation-controls.js +7 -3
- package/dist/rules/require-valid-agent-invocation-controls.js.map +1 -1
- package/dist/rules/require-valid-agent-mcp-servers.d.ts +1 -0
- package/dist/rules/require-valid-agent-mcp-servers.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-mcp-servers.js +8 -4
- package/dist/rules/require-valid-agent-mcp-servers.js.map +1 -1
- package/dist/rules/require-valid-agent-model.d.ts +1 -0
- package/dist/rules/require-valid-agent-model.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-model.js +7 -3
- package/dist/rules/require-valid-agent-model.js.map +1 -1
- package/dist/rules/require-valid-agent-name.d.ts +1 -0
- package/dist/rules/require-valid-agent-name.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-name.js +5 -1
- package/dist/rules/require-valid-agent-name.js.map +1 -1
- package/dist/rules/require-valid-agent-subagents.d.ts +1 -0
- package/dist/rules/require-valid-agent-subagents.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-subagents.js +8 -4
- package/dist/rules/require-valid-agent-subagents.js.map +1 -1
- package/dist/rules/require-valid-agent-target.d.ts +1 -0
- package/dist/rules/require-valid-agent-target.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-target.js +6 -2
- package/dist/rules/require-valid-agent-target.js.map +1 -1
- package/dist/rules/require-valid-agent-tools.d.ts +1 -0
- package/dist/rules/require-valid-agent-tools.d.ts.map +1 -1
- package/dist/rules/require-valid-agent-tools.js +8 -4
- package/dist/rules/require-valid-agent-tools.js.map +1 -1
- package/dist/rules/require-valid-instructions-apply-to-globs.d.ts +1 -0
- package/dist/rules/require-valid-instructions-apply-to-globs.d.ts.map +1 -1
- package/dist/rules/require-valid-instructions-apply-to-globs.js +8 -3
- package/dist/rules/require-valid-instructions-apply-to-globs.js.map +1 -1
- package/dist/rules/require-valid-prompt-argument-hint.d.ts +1 -0
- package/dist/rules/require-valid-prompt-argument-hint.d.ts.map +1 -1
- package/dist/rules/require-valid-prompt-argument-hint.js +6 -3
- package/dist/rules/require-valid-prompt-argument-hint.js.map +1 -1
- package/dist/rules/require-valid-prompt-model.d.ts +1 -0
- package/dist/rules/require-valid-prompt-model.d.ts.map +1 -1
- package/dist/rules/require-valid-prompt-model.js +9 -5
- package/dist/rules/require-valid-prompt-model.js.map +1 -1
- package/dist/rules/require-valid-prompt-name.d.ts +1 -0
- package/dist/rules/require-valid-prompt-name.d.ts.map +1 -1
- package/dist/rules/require-valid-prompt-name.js +5 -1
- package/dist/rules/require-valid-prompt-name.js.map +1 -1
- package/dist/rules/require-valid-prompt-tools.d.ts +1 -0
- package/dist/rules/require-valid-prompt-tools.d.ts.map +1 -1
- package/dist/rules/require-valid-prompt-tools.js +8 -4
- package/dist/rules/require-valid-prompt-tools.js.map +1 -1
- package/dist/rules/require-valid-repository-hook-command-type.d.ts +1 -0
- package/dist/rules/require-valid-repository-hook-command-type.d.ts.map +1 -1
- package/dist/rules/require-valid-repository-hook-command-type.js +5 -1
- package/dist/rules/require-valid-repository-hook-command-type.js.map +1 -1
- package/dist/rules/require-valid-repository-hook-env.d.ts +1 -0
- package/dist/rules/require-valid-repository-hook-env.d.ts.map +1 -1
- package/dist/rules/require-valid-repository-hook-env.js +6 -2
- package/dist/rules/require-valid-repository-hook-env.js.map +1 -1
- package/dist/rules/require-valid-repository-hook-events.d.ts +1 -0
- package/dist/rules/require-valid-repository-hook-events.d.ts.map +1 -1
- package/dist/rules/require-valid-repository-hook-events.js +5 -1
- package/dist/rules/require-valid-repository-hook-events.js.map +1 -1
- package/dist/rules/require-valid-repository-hook-timeouts.d.ts +1 -0
- package/dist/rules/require-valid-repository-hook-timeouts.d.ts.map +1 -1
- package/dist/rules/require-valid-repository-hook-timeouts.js +7 -3
- package/dist/rules/require-valid-repository-hook-timeouts.js.map +1 -1
- package/dist/rules/require-valid-repository-hook-version.d.ts +1 -0
- package/dist/rules/require-valid-repository-hook-version.d.ts.map +1 -1
- package/dist/rules/require-valid-repository-hook-version.js +3 -0
- package/dist/rules/require-valid-repository-hook-version.js.map +1 -1
- package/dist/rules/require-valid-skill-directory-name.d.ts +1 -0
- package/dist/rules/require-valid-skill-directory-name.d.ts.map +1 -1
- package/dist/rules/require-valid-skill-directory-name.js +3 -0
- package/dist/rules/require-valid-skill-directory-name.js.map +1 -1
- package/dist/rules/require-valid-skill-license.d.ts +1 -0
- package/dist/rules/require-valid-skill-license.d.ts.map +1 -1
- package/dist/rules/require-valid-skill-license.js +5 -1
- package/dist/rules/require-valid-skill-license.js.map +1 -1
- package/dist/rules/require-valid-skill-name.d.ts +1 -0
- package/dist/rules/require-valid-skill-name.d.ts.map +1 -1
- package/dist/rules/require-valid-skill-name.js +5 -1
- package/dist/rules/require-valid-skill-name.js.map +1 -1
- package/package.json +37 -277
package/dist/plugin.d.cts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Public plugin entrypoint for eslint-plugin-copilot.
|
|
4
4
|
*/
|
|
5
5
|
import type { ESLint, Linter } from "eslint";
|
|
6
|
+
import type { Except } from "type-fest";
|
|
6
7
|
import { type CopilotConfigName } from "./_internal/copilot-config-references.js";
|
|
7
8
|
import { copilotRules } from "./_internal/rules-registry.js";
|
|
8
9
|
/** Flat-config preset layers produced by this plugin. */
|
|
@@ -18,7 +19,7 @@ export type CopilotRuleName = keyof typeof copilotRules;
|
|
|
18
19
|
/** Contract for the exported preset map. */
|
|
19
20
|
type CopilotConfigsContract = Record<CopilotConfigName, CopilotPresetConfig>;
|
|
20
21
|
/** Fully assembled plugin contract used by the runtime default export. */
|
|
21
|
-
type CopilotPluginContract =
|
|
22
|
+
type CopilotPluginContract = Except<ESLint.Plugin, "configs" | "rules"> & {
|
|
22
23
|
configs: CopilotConfigsContract;
|
|
23
24
|
meta: {
|
|
24
25
|
name: string;
|
package/dist/plugin.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Public plugin entrypoint for eslint-plugin-copilot.
|
|
4
4
|
*/
|
|
5
5
|
import type { ESLint, Linter } from "eslint";
|
|
6
|
+
import type { Except } from "type-fest";
|
|
6
7
|
import { type CopilotConfigName } from "./_internal/copilot-config-references.js";
|
|
7
8
|
import { copilotRules } from "./_internal/rules-registry.js";
|
|
8
9
|
/** Flat-config preset layers produced by this plugin. */
|
|
@@ -18,7 +19,7 @@ export type CopilotRuleName = keyof typeof copilotRules;
|
|
|
18
19
|
/** Contract for the exported preset map. */
|
|
19
20
|
type CopilotConfigsContract = Record<CopilotConfigName, CopilotPresetConfig>;
|
|
20
21
|
/** Fully assembled plugin contract used by the runtime default export. */
|
|
21
|
-
type CopilotPluginContract =
|
|
22
|
+
type CopilotPluginContract = Except<ESLint.Plugin, "configs" | "rules"> & {
|
|
22
23
|
configs: CopilotConfigsContract;
|
|
23
24
|
meta: {
|
|
24
25
|
name: string;
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AASxC,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAyC7D,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,EAAE,CAAC;AAEvD,wDAAwD;AACxD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG,WAAW,eAAe,EAAE,CAAC;AAEzD,iEAAiE;AACjE,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,YAAY,CAAC;AAExD,4CAA4C;AAC5C,KAAK,sBAAsB,GAAG,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AAE7E,0EAA0E;AAC1E,KAAK,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG;IACtE,OAAO,EAAE,sBAAsB,CAAC;IAChC,IAAI,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACrD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C,CAAC;AAyIF,oFAAoF;AACpF,QAAA,MAAM,MAAM,EAAE,qBASb,CAAC;AASF,eAAe,MAAM,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import json from "@eslint/json";
|
|
2
2
|
import markdown from "@eslint/markdown";
|
|
3
|
+
import { not, objectEntries, safeCastTo, setHas } from "ts-extras";
|
|
3
4
|
import packageJson from "../package.json" with { type: "json" };
|
|
4
5
|
import { copilotConfigMetadataByName, } from "./_internal/copilot-config-references.js";
|
|
5
6
|
import { copilotRules } from "./_internal/rules-registry.js";
|
|
@@ -51,7 +52,7 @@ const eslintRules = copilotRules;
|
|
|
51
52
|
const markdownPlugin = markdown;
|
|
52
53
|
const jsonPlugin = json;
|
|
53
54
|
/** Stable ordered entries used to derive preset membership. */
|
|
54
|
-
const copilotRuleEntries =
|
|
55
|
+
const copilotRuleEntries = safeCastTo(objectEntries(copilotRules).toSorted(([left], [right]) => left.localeCompare(right)));
|
|
55
56
|
/** Create an empty mutable preset-rule bucket map. */
|
|
56
57
|
const createEmptyPresetRuleMap = () => ({
|
|
57
58
|
all: [],
|
|
@@ -89,8 +90,8 @@ const errorRulesFor = (ruleNames) => {
|
|
|
89
90
|
const presetRuleNamesByConfig = derivePresetRuleNamesByConfig();
|
|
90
91
|
/** Split preset rule names into markdown-backed and JSON-backed layers. */
|
|
91
92
|
const partitionRuleNamesByPresetLayer = (ruleNames) => ({
|
|
92
|
-
jsonRuleNames: ruleNames.filter((ruleName) => REPOSITORY_HOOK_JSON_RULE_NAMES
|
|
93
|
-
markdownRuleNames: ruleNames.filter((ruleName) =>
|
|
93
|
+
jsonRuleNames: ruleNames.filter((ruleName) => setHas(REPOSITORY_HOOK_JSON_RULE_NAMES, ruleName)),
|
|
94
|
+
markdownRuleNames: ruleNames.filter(not((ruleName) => setHas(REPOSITORY_HOOK_JSON_RULE_NAMES, ruleName))),
|
|
94
95
|
});
|
|
95
96
|
/** Build one public preset config as layered flat-config entries. */
|
|
96
97
|
const createPresetConfig = (configName, plugin) => {
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-blank-customization-body`. */
|
|
2
3
|
declare const noBlankCustomizationBodyRule: CopilotRuleModule;
|
|
3
4
|
export default noBlankCustomizationBodyRule;
|
|
4
5
|
//# sourceMappingURL=no-blank-customization-body.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-blank-customization-body.d.ts","sourceRoot":"","sources":["../../src/rules/no-blank-customization-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"no-blank-customization-body.d.ts","sourceRoot":"","sources":["../../src/rules/no-blank-customization-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAkB7E,qDAAqD;AACrD,QAAA,MAAM,4BAA4B,EAAE,iBA4ClC,CAAC;AAEH,eAAe,4BAA4B,CAAC"}
|
|
@@ -6,6 +6,8 @@ import { getCopilotFileKind } from "../_internal/copilot-file-kind.js";
|
|
|
6
6
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
7
7
|
import { extractFrontmatter, getMeaningfulMarkdownBody, } from "../_internal/frontmatter.js";
|
|
8
8
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
9
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
10
|
+
/** Rule module for `no-blank-customization-body`. */
|
|
9
11
|
const noBlankCustomizationBodyRule = createCopilotRule({
|
|
10
12
|
create(context) {
|
|
11
13
|
return createMarkdownDocumentListener(() => {
|
|
@@ -35,6 +37,7 @@ const noBlankCustomizationBodyRule = createCopilotRule({
|
|
|
35
37
|
frozen: false,
|
|
36
38
|
recommended: true,
|
|
37
39
|
requiresTypeChecking: false,
|
|
40
|
+
url: createRuleDocsUrl("no-blank-customization-body"),
|
|
38
41
|
},
|
|
39
42
|
messages: {
|
|
40
43
|
blankBody: "Copilot customization files should include meaningful Markdown instructions in the document body, not only frontmatter or comments.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-blank-customization-body.js","sourceRoot":"","sources":["../../src/rules/no-blank-customization-body.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EACH,kBAAkB,EAClB,yBAAyB,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"no-blank-customization-body.js","sourceRoot":"","sources":["../../src/rules/no-blank-customization-body.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EACH,kBAAkB,EAClB,yBAAyB,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,qDAAqD;AACrD,MAAM,4BAA4B,GAAsB,iBAAiB,CAAC;IACtE,MAAM,CAAC,OAAO;QACV,OAAO,8BAA8B,CAAC,GAAG,EAAE;YACvC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAEtD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,yBAAyB,EAAE,CAAC;gBAC9D,OAAO;YACX,CAAC;YAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,WAAW,EAAE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAE9D,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjD,OAAO;YACX,CAAC;YAED,qBAAqB,CAAC,OAAO,EAAE;gBAC3B,SAAS,EAAE,WAAW;aACzB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,EAAE;QACF,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE;YACF,cAAc,EAAE;gBACZ,6BAA6B;gBAC7B,wBAAwB;gBACxB,qBAAqB;aACxB;YACD,WAAW,EACP,+FAA+F;YACnG,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,KAAK;YAC3B,GAAG,EAAE,iBAAiB,CAAC,6BAA6B,CAAC;SACxD;QACD,QAAQ,EAAE;YACN,SAAS,EACL,qIAAqI;SAC5I;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAClB;IACD,IAAI,EAAE,6BAA6B;CACtC,CAAC,CAAC;AAEH,eAAe,4BAA4B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-blank-repository-instructions`. */
|
|
2
3
|
declare const noBlankRepositoryInstructionsRule: CopilotRuleModule;
|
|
3
4
|
export default noBlankRepositoryInstructionsRule;
|
|
4
5
|
//# sourceMappingURL=no-blank-repository-instructions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-blank-repository-instructions.d.ts","sourceRoot":"","sources":["../../src/rules/no-blank-repository-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"no-blank-repository-instructions.d.ts","sourceRoot":"","sources":["../../src/rules/no-blank-repository-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAkB7E,0DAA0D;AAC1D,QAAA,MAAM,iCAAiC,EAAE,iBA+CvC,CAAC;AAEH,eAAe,iCAAiC,CAAC"}
|
|
@@ -6,6 +6,8 @@ import { getCopilotFileKind } from "../_internal/copilot-file-kind.js";
|
|
|
6
6
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
7
7
|
import { extractFrontmatter, getMeaningfulMarkdownBody, } from "../_internal/frontmatter.js";
|
|
8
8
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
9
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
10
|
+
/** Rule module for `no-blank-repository-instructions`. */
|
|
9
11
|
const noBlankRepositoryInstructionsRule = createCopilotRule({
|
|
10
12
|
create(context) {
|
|
11
13
|
return createMarkdownDocumentListener(() => {
|
|
@@ -35,6 +37,7 @@ const noBlankRepositoryInstructionsRule = createCopilotRule({
|
|
|
35
37
|
frozen: false,
|
|
36
38
|
recommended: true,
|
|
37
39
|
requiresTypeChecking: false,
|
|
40
|
+
url: createRuleDocsUrl("no-blank-repository-instructions"),
|
|
38
41
|
},
|
|
39
42
|
messages: {
|
|
40
43
|
blankInstructions: "Repository-wide Copilot instructions should contain actionable Markdown guidance instead of being blank.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-blank-repository-instructions.js","sourceRoot":"","sources":["../../src/rules/no-blank-repository-instructions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EACH,kBAAkB,EAClB,yBAAyB,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"no-blank-repository-instructions.js","sourceRoot":"","sources":["../../src/rules/no-blank-repository-instructions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EACH,kBAAkB,EAClB,yBAAyB,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,0DAA0D;AAC1D,MAAM,iCAAiC,GAAsB,iBAAiB,CAAC;IAC3E,MAAM,CAAC,OAAO;QACV,OAAO,8BAA8B,CAAC,GAAG,EAAE;YACvC,IACI,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACpC,yBAAyB,EAC3B,CAAC;gBACC,OAAO;YACX,CAAC;YAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,yBAAyB,CAClC,WAAW,EAAE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAC/C,CAAC;YAEF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO;YACX,CAAC;YAED,qBAAqB,CAAC,OAAO,EAAE;gBAC3B,SAAS,EAAE,mBAAmB;aACjC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,EAAE;QACF,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE;YACF,cAAc,EAAE;gBACZ,6BAA6B;gBAC7B,wBAAwB;gBACxB,qBAAqB;aACxB;YACD,WAAW,EACP,4DAA4D;YAChE,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,KAAK;YAC3B,GAAG,EAAE,iBAAiB,CAAC,kCAAkC,CAAC;SAC7D;QACD,QAAQ,EAAE;YACN,iBAAiB,EACb,0GAA0G;SACjH;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAClB;IACD,IAAI,EAAE,kCAAkC;CAC3C,CAAC,CAAC;AAEH,eAAe,iCAAiC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-blank-skill-body`. */
|
|
2
3
|
declare const noBlankSkillBodyRule: CopilotRuleModule;
|
|
3
4
|
export default noBlankSkillBodyRule;
|
|
4
5
|
//# sourceMappingURL=no-blank-skill-body.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-blank-skill-body.d.ts","sourceRoot":"","sources":["../../src/rules/no-blank-skill-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"no-blank-skill-body.d.ts","sourceRoot":"","sources":["../../src/rules/no-blank-skill-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAe7E,6CAA6C;AAC7C,QAAA,MAAM,oBAAoB,EAAE,iBAyC1B,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
|
|
@@ -6,6 +6,8 @@ import { isSkillFilePath } from "../_internal/copilot-file-kind.js";
|
|
|
6
6
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
7
7
|
import { extractFrontmatter } from "../_internal/frontmatter.js";
|
|
8
8
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
9
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
10
|
+
/** Rule module for `no-blank-skill-body`. */
|
|
9
11
|
const noBlankSkillBodyRule = createCopilotRule({
|
|
10
12
|
create(context) {
|
|
11
13
|
return createMarkdownDocumentListener(() => {
|
|
@@ -34,6 +36,7 @@ const noBlankSkillBodyRule = createCopilotRule({
|
|
|
34
36
|
frozen: false,
|
|
35
37
|
recommended: true,
|
|
36
38
|
requiresTypeChecking: false,
|
|
39
|
+
url: createRuleDocsUrl("no-blank-skill-body"),
|
|
37
40
|
},
|
|
38
41
|
messages: {
|
|
39
42
|
blankSkillBody: "Copilot skill definition files should include a non-empty Markdown body with instructions, examples, or guidance.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-blank-skill-body.js","sourceRoot":"","sources":["../../src/rules/no-blank-skill-body.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"no-blank-skill-body.js","sourceRoot":"","sources":["../../src/rules/no-blank-skill-body.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,6CAA6C;AAC7C,MAAM,oBAAoB,GAAsB,iBAAiB,CAAC;IAC9D,MAAM,CAAC,OAAO;QACV,OAAO,8BAA8B,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,OAAO;YACX,CAAC;YAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,WAAW,EAAE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAE1D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO;YACX,CAAC;YAED,qBAAqB,CAAC,OAAO,EAAE;gBAC3B,SAAS,EAAE,gBAAgB;aAC9B,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,EAAE;QACF,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE;YACF,cAAc,EAAE;gBACZ,6BAA6B;gBAC7B,wBAAwB;gBACxB,qBAAqB;aACxB;YACD,WAAW,EAAE,iDAAiD;YAC9D,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,KAAK;YAC3B,GAAG,EAAE,iBAAiB,CAAC,qBAAqB,CAAC;SAChD;QACD,QAAQ,EAAE;YACN,cAAc,EACV,mHAAmH;SAC1H;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAClB;IACD,IAAI,EAAE,qBAAqB;CAC9B,CAAC,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-deprecated-agent-infer`. */
|
|
2
3
|
declare const noDeprecatedAgentInferRule: CopilotRuleModule;
|
|
3
4
|
export default noDeprecatedAgentInferRule;
|
|
4
5
|
//# sourceMappingURL=no-deprecated-agent-infer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-deprecated-agent-infer.d.ts","sourceRoot":"","sources":["../../src/rules/no-deprecated-agent-infer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"no-deprecated-agent-infer.d.ts","sourceRoot":"","sources":["../../src/rules/no-deprecated-agent-infer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAkB7E,mDAAmD;AACnD,QAAA,MAAM,0BAA0B,EAAE,iBA4ChC,CAAC;AAEH,eAAe,0BAA0B,CAAC"}
|
|
@@ -6,6 +6,8 @@ import { isCustomAgentFilePath } from "../_internal/copilot-file-kind.js";
|
|
|
6
6
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
7
7
|
import { extractFrontmatter, hasFrontmatterField, } from "../_internal/frontmatter.js";
|
|
8
8
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
9
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
10
|
+
/** Rule module for `no-deprecated-agent-infer`. */
|
|
9
11
|
const noDeprecatedAgentInferRule = createCopilotRule({
|
|
10
12
|
create(context) {
|
|
11
13
|
return createMarkdownDocumentListener(() => {
|
|
@@ -34,6 +36,7 @@ const noDeprecatedAgentInferRule = createCopilotRule({
|
|
|
34
36
|
frozen: false,
|
|
35
37
|
recommended: true,
|
|
36
38
|
requiresTypeChecking: false,
|
|
39
|
+
url: createRuleDocsUrl("no-deprecated-agent-infer"),
|
|
37
40
|
},
|
|
38
41
|
messages: {
|
|
39
42
|
deprecatedInfer: "Copilot custom agent files should replace deprecated `infer` frontmatter with `user-invocable` and/or `disable-model-invocation`.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-deprecated-agent-infer.js","sourceRoot":"","sources":["../../src/rules/no-deprecated-agent-infer.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EACH,kBAAkB,EAClB,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"no-deprecated-agent-infer.js","sourceRoot":"","sources":["../../src/rules/no-deprecated-agent-infer.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EACH,kBAAkB,EAClB,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,mDAAmD;AACnD,MAAM,0BAA0B,GAAsB,iBAAiB,CAAC;IACpE,MAAM,CAAC,OAAO;QACV,OAAO,8BAA8B,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,OAAO;YACX,CAAC;YAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEhE,IACI,WAAW,KAAK,IAAI;gBACpB,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,EAC5C,CAAC;gBACC,OAAO;YACX,CAAC;YAED,qBAAqB,CAAC,OAAO,EAAE;gBAC3B,SAAS,EAAE,iBAAiB;aAC/B,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,EAAE;QACF,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE;YACF,cAAc,EAAE;gBACZ,6BAA6B;gBAC7B,wBAAwB;gBACxB,qBAAqB;aACxB;YACD,WAAW,EACP,wEAAwE;YAC5E,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,KAAK;YAC3B,GAAG,EAAE,iBAAiB,CAAC,2BAA2B,CAAC;SACtD;QACD,QAAQ,EAAE;YACN,eAAe,EACX,mIAAmI;SAC1I;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAClB;IACD,IAAI,EAAE,2BAA2B;CACpC,CAAC,CAAC;AAEH,eAAe,0BAA0B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-duplicate-agent-names`. */
|
|
2
3
|
declare const noDuplicateAgentNamesRule: CopilotRuleModule;
|
|
3
4
|
export default noDuplicateAgentNamesRule;
|
|
4
5
|
//# sourceMappingURL=no-duplicate-agent-names.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-agent-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-agent-names.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-duplicate-agent-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-agent-names.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAyB7E,kDAAkD;AAClD,QAAA,MAAM,yBAAyB,EAAE,iBAsF/B,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
6
|
import * as path from "node:path";
|
|
7
|
+
import { arrayJoin, isDefined } from "ts-extras";
|
|
7
8
|
import { getAgentName, normalizeNameForComparison, } from "../_internal/copilot-customization-names.js";
|
|
8
9
|
import { findRepositoryRoot, isCustomAgentFilePath, } from "../_internal/copilot-file-kind.js";
|
|
9
10
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
@@ -11,7 +12,9 @@ import { collectDuplicateNameGroups } from "../_internal/duplicate-names.js";
|
|
|
11
12
|
import { listFilesRecursively } from "../_internal/file-system.js";
|
|
12
13
|
import { extractFrontmatter } from "../_internal/frontmatter.js";
|
|
13
14
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
15
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
14
16
|
const normalizeRelativeFilePath = (repositoryRoot, filePath) => path.relative(repositoryRoot, filePath).replaceAll("\\", "/");
|
|
17
|
+
/** Rule module for `no-duplicate-agent-names`. */
|
|
15
18
|
const noDuplicateAgentNamesRule = createCopilotRule({
|
|
16
19
|
create(context) {
|
|
17
20
|
return createMarkdownDocumentListener(() => {
|
|
@@ -32,14 +35,12 @@ const noDuplicateAgentNamesRule = createCopilotRule({
|
|
|
32
35
|
}), normalizeNameForComparison);
|
|
33
36
|
const currentAgentName = getAgentName(context.filename, extractFrontmatter(context.sourceCode.text));
|
|
34
37
|
const duplicateGroup = duplicateGroups.get(normalizeNameForComparison(currentAgentName));
|
|
35
|
-
if (duplicateGroup
|
|
38
|
+
if (!isDefined(duplicateGroup)) {
|
|
36
39
|
return;
|
|
37
40
|
}
|
|
38
41
|
reportAtDocumentStart(context, {
|
|
39
42
|
data: {
|
|
40
|
-
files: duplicateGroup
|
|
41
|
-
.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath))
|
|
42
|
-
.join(", "),
|
|
43
|
+
files: arrayJoin(duplicateGroup.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath)), ", "),
|
|
43
44
|
name: currentAgentName,
|
|
44
45
|
},
|
|
45
46
|
messageId: "duplicateAgentName",
|
|
@@ -58,6 +59,7 @@ const noDuplicateAgentNamesRule = createCopilotRule({
|
|
|
58
59
|
frozen: false,
|
|
59
60
|
recommended: true,
|
|
60
61
|
requiresTypeChecking: false,
|
|
62
|
+
url: createRuleDocsUrl("no-duplicate-agent-names"),
|
|
61
63
|
},
|
|
62
64
|
messages: {
|
|
63
65
|
duplicateAgentName: "Copilot custom-agent name `{{name}}` is duplicated across agent files: {{files}}.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-agent-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-agent-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"no-duplicate-agent-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-agent-names.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-duplicate-prompt-names`. */
|
|
2
3
|
declare const noDuplicatePromptNamesRule: CopilotRuleModule;
|
|
3
4
|
export default noDuplicatePromptNamesRule;
|
|
4
5
|
//# sourceMappingURL=no-duplicate-prompt-names.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-prompt-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-prompt-names.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-duplicate-prompt-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-prompt-names.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAsB7E,mDAAmD;AACnD,QAAA,MAAM,0BAA0B,EAAE,iBAsFhC,CAAC;AAEH,eAAe,0BAA0B,CAAC"}
|
|
@@ -4,6 +4,7 @@ import * as fs from "node:fs";
|
|
|
4
4
|
* ESLint rule implementation for `no-duplicate-prompt-names`.
|
|
5
5
|
*/
|
|
6
6
|
import * as path from "node:path";
|
|
7
|
+
import { arrayJoin, isDefined } from "ts-extras";
|
|
7
8
|
import { getPromptName, normalizeNameForComparison, } from "../_internal/copilot-customization-names.js";
|
|
8
9
|
import { findRepositoryRoot } from "../_internal/copilot-file-kind.js";
|
|
9
10
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
@@ -11,7 +12,9 @@ import { collectDuplicateNameGroups } from "../_internal/duplicate-names.js";
|
|
|
11
12
|
import { listFilesRecursively } from "../_internal/file-system.js";
|
|
12
13
|
import { extractFrontmatter } from "../_internal/frontmatter.js";
|
|
13
14
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
15
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
14
16
|
const normalizeRelativeFilePath = (repositoryRoot, filePath) => path.relative(repositoryRoot, filePath).replaceAll("\\", "/");
|
|
17
|
+
/** Rule module for `no-duplicate-prompt-names`. */
|
|
15
18
|
const noDuplicatePromptNamesRule = createCopilotRule({
|
|
16
19
|
create(context) {
|
|
17
20
|
return createMarkdownDocumentListener(() => {
|
|
@@ -32,14 +35,12 @@ const noDuplicatePromptNamesRule = createCopilotRule({
|
|
|
32
35
|
}), normalizeNameForComparison);
|
|
33
36
|
const currentPromptName = getPromptName(context.filename, extractFrontmatter(context.sourceCode.text));
|
|
34
37
|
const duplicateGroup = duplicateGroups.get(normalizeNameForComparison(currentPromptName));
|
|
35
|
-
if (duplicateGroup
|
|
38
|
+
if (!isDefined(duplicateGroup)) {
|
|
36
39
|
return;
|
|
37
40
|
}
|
|
38
41
|
reportAtDocumentStart(context, {
|
|
39
42
|
data: {
|
|
40
|
-
files: duplicateGroup
|
|
41
|
-
.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath))
|
|
42
|
-
.join(", "),
|
|
43
|
+
files: arrayJoin(duplicateGroup.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath)), ", "),
|
|
43
44
|
name: currentPromptName,
|
|
44
45
|
},
|
|
45
46
|
messageId: "duplicatePromptName",
|
|
@@ -58,6 +59,7 @@ const noDuplicatePromptNamesRule = createCopilotRule({
|
|
|
58
59
|
frozen: false,
|
|
59
60
|
recommended: true,
|
|
60
61
|
requiresTypeChecking: false,
|
|
62
|
+
url: createRuleDocsUrl("no-duplicate-prompt-names"),
|
|
61
63
|
},
|
|
62
64
|
messages: {
|
|
63
65
|
duplicatePromptName: "Copilot prompt name `{{name}}` is duplicated across prompt files: {{files}}.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-prompt-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-prompt-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"no-duplicate-prompt-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-prompt-names.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-duplicate-skill-names`. */
|
|
2
3
|
declare const noDuplicateSkillNamesRule: CopilotRuleModule;
|
|
3
4
|
export default noDuplicateSkillNamesRule;
|
|
4
5
|
//# sourceMappingURL=no-duplicate-skill-names.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-skill-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-skill-names.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-duplicate-skill-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-skill-names.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAyB7E,kDAAkD;AAClD,QAAA,MAAM,yBAAyB,EAAE,iBAuF/B,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
6
|
import * as path from "node:path";
|
|
7
|
+
import { arrayJoin, isDefined } from "ts-extras";
|
|
7
8
|
import { getSkillName, normalizeNameForComparison, } from "../_internal/copilot-customization-names.js";
|
|
8
9
|
import { findRepositoryRoot, isSkillFilePath, } from "../_internal/copilot-file-kind.js";
|
|
9
10
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
@@ -11,7 +12,9 @@ import { collectDuplicateNameGroups } from "../_internal/duplicate-names.js";
|
|
|
11
12
|
import { listFilesRecursively } from "../_internal/file-system.js";
|
|
12
13
|
import { extractFrontmatter } from "../_internal/frontmatter.js";
|
|
13
14
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
15
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
14
16
|
const normalizeRelativeFilePath = (repositoryRoot, filePath) => path.relative(repositoryRoot, filePath).replaceAll("\\", "/");
|
|
17
|
+
/** Rule module for `no-duplicate-skill-names`. */
|
|
15
18
|
const noDuplicateSkillNamesRule = createCopilotRule({
|
|
16
19
|
create(context) {
|
|
17
20
|
return createMarkdownDocumentListener(() => {
|
|
@@ -34,14 +37,12 @@ const noDuplicateSkillNamesRule = createCopilotRule({
|
|
|
34
37
|
}), normalizeNameForComparison);
|
|
35
38
|
const currentSkillName = getSkillName(context.filename, extractFrontmatter(context.sourceCode.text));
|
|
36
39
|
const duplicateGroup = duplicateGroups.get(normalizeNameForComparison(currentSkillName));
|
|
37
|
-
if (duplicateGroup
|
|
40
|
+
if (!isDefined(duplicateGroup)) {
|
|
38
41
|
return;
|
|
39
42
|
}
|
|
40
43
|
reportAtDocumentStart(context, {
|
|
41
44
|
data: {
|
|
42
|
-
files: duplicateGroup
|
|
43
|
-
.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath))
|
|
44
|
-
.join(", "),
|
|
45
|
+
files: arrayJoin(duplicateGroup.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath)), ", "),
|
|
45
46
|
name: currentSkillName,
|
|
46
47
|
},
|
|
47
48
|
messageId: "duplicateSkillName",
|
|
@@ -60,6 +61,7 @@ const noDuplicateSkillNamesRule = createCopilotRule({
|
|
|
60
61
|
frozen: false,
|
|
61
62
|
recommended: true,
|
|
62
63
|
requiresTypeChecking: false,
|
|
64
|
+
url: createRuleDocsUrl("no-duplicate-skill-names"),
|
|
63
65
|
},
|
|
64
66
|
messages: {
|
|
65
67
|
duplicateSkillName: "Copilot skill name `{{name}}` is duplicated across skill files: {{files}}.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-skill-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-skill-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"no-duplicate-skill-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-skill-names.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-duplicate-slash-command-names`. */
|
|
2
3
|
declare const noDuplicateSlashCommandNamesRule: CopilotRuleModule;
|
|
3
4
|
export default noDuplicateSlashCommandNamesRule;
|
|
4
5
|
//# sourceMappingURL=no-duplicate-slash-command-names.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-slash-command-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-slash-command-names.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-duplicate-slash-command-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-slash-command-names.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AA6B7E,0DAA0D;AAC1D,QAAA,MAAM,gCAAgC,EAAE,iBA2FtC,CAAC;AAEH,eAAe,gCAAgC,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
6
|
import * as path from "node:path";
|
|
7
|
+
import { arrayJoin, isDefined } from "ts-extras";
|
|
7
8
|
import { getPromptName, getSkillName, normalizeNameForComparison, } from "../_internal/copilot-customization-names.js";
|
|
8
9
|
import { findRepositoryRoot, isSkillFilePath, } from "../_internal/copilot-file-kind.js";
|
|
9
10
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
@@ -11,8 +12,10 @@ import { collectDuplicateNameGroups } from "../_internal/duplicate-names.js";
|
|
|
11
12
|
import { listFilesRecursively } from "../_internal/file-system.js";
|
|
12
13
|
import { extractFrontmatter } from "../_internal/frontmatter.js";
|
|
13
14
|
import { createMarkdownDocumentListener, reportAtDocumentStart, } from "../_internal/markdown-rule.js";
|
|
15
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
14
16
|
const isPromptOrSkillCommandFile = (filePath) => filePath.endsWith(".prompt.md") || isSkillFilePath(filePath);
|
|
15
17
|
const normalizeRelativeFilePath = (repositoryRoot, filePath) => path.relative(repositoryRoot, filePath).replaceAll("\\", "/");
|
|
18
|
+
/** Rule module for `no-duplicate-slash-command-names`. */
|
|
16
19
|
const noDuplicateSlashCommandNamesRule = createCopilotRule({
|
|
17
20
|
create(context) {
|
|
18
21
|
return createMarkdownDocumentListener(() => {
|
|
@@ -42,14 +45,12 @@ const noDuplicateSlashCommandNamesRule = createCopilotRule({
|
|
|
42
45
|
? getPromptName(context.filename, frontmatter)
|
|
43
46
|
: getSkillName(context.filename, frontmatter);
|
|
44
47
|
const duplicateGroup = duplicateGroups.get(normalizeNameForComparison(currentCommandName));
|
|
45
|
-
if (duplicateGroup
|
|
48
|
+
if (!isDefined(duplicateGroup)) {
|
|
46
49
|
return;
|
|
47
50
|
}
|
|
48
51
|
reportAtDocumentStart(context, {
|
|
49
52
|
data: {
|
|
50
|
-
files: duplicateGroup
|
|
51
|
-
.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath))
|
|
52
|
-
.join(", "),
|
|
53
|
+
files: arrayJoin(duplicateGroup.map((entry) => normalizeRelativeFilePath(repositoryRoot, entry.filePath)), ", "),
|
|
53
54
|
name: currentCommandName,
|
|
54
55
|
},
|
|
55
56
|
messageId: "duplicateSlashCommandName",
|
|
@@ -68,6 +69,7 @@ const noDuplicateSlashCommandNamesRule = createCopilotRule({
|
|
|
68
69
|
frozen: false,
|
|
69
70
|
recommended: true,
|
|
70
71
|
requiresTypeChecking: false,
|
|
72
|
+
url: createRuleDocsUrl("no-duplicate-slash-command-names"),
|
|
71
73
|
},
|
|
72
74
|
messages: {
|
|
73
75
|
duplicateSlashCommandName: "Slash command name `{{name}}` is duplicated across prompt or skill files: {{files}}.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-duplicate-slash-command-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-slash-command-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"no-duplicate-slash-command-names.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-slash-command-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAIjD,OAAO,EACH,aAAa,EACb,YAAY,EACZ,0BAA0B,GAC7B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACH,kBAAkB,EAClB,eAAe,GAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,0BAA0B,GAAG,CAAC,QAAgB,EAAW,EAAE,CAC7D,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;AAEjE,MAAM,yBAAyB,GAAG,CAC9B,cAAsB,EACtB,QAAgB,EACV,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAE3E,0DAA0D;AAC1D,MAAM,gCAAgC,GAAsB,iBAAiB,CAAC;IAC1E,MAAM,CAAC,OAAO;QACV,OAAO,8BAA8B,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,OAAO;YACX,CAAC;YAED,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5D,MAAM,YAAY,GAAG;gBACjB,GAAG,oBAAoB,CACnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,EAC/C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAChD;gBACD,GAAG,oBAAoB,CACnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC9C,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,UAAU,CACvD;gBACD,GAAG,oBAAoB,CACnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC9C,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,UAAU,CACvD;aACJ,CAAC;YACF,MAAM,eAAe,GAAG,0BAA0B,CAC9C,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC1B,MAAM,UAAU,GACZ,OAAO,CAAC,QAAQ,KAAK,QAAQ;oBACzB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;oBACzB,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAEnD,OAAO;oBACH,QAAQ;oBACR,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;wBACjC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC;wBACtC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC;iBAC5C,CAAC;YACN,CAAC,CAAC,EACF,0BAA0B,CAC7B,CAAC;YACF,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC9D,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC;gBAC9C,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAClD,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CACtC,0BAA0B,CAAC,kBAAkB,CAAC,CACjD,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC7B,OAAO;YACX,CAAC;YAED,qBAAqB,CAAC,OAAO,EAAE;gBAC3B,IAAI,EAAE;oBACF,KAAK,EAAE,SAAS,CACZ,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACzB,yBAAyB,CACrB,cAAc,EACd,KAAK,CAAC,QAAQ,CACjB,CACJ,EACD,IAAI,CACP;oBACD,IAAI,EAAE,kBAAkB;iBAC3B;gBACD,SAAS,EAAE,2BAA2B;aACzC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,EAAE;QACF,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE;YACF,cAAc,EAAE;gBACZ,6BAA6B;gBAC7B,wBAAwB;gBACxB,qBAAqB;aACxB;YACD,WAAW,EACP,wEAAwE;YAC5E,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,KAAK;YAC3B,GAAG,EAAE,iBAAiB,CAAC,kCAAkC,CAAC;SAC7D;QACD,QAAQ,EAAE;YACN,yBAAyB,EACrB,sFAAsF;SAC7F;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAClB;IACD,IAAI,EAAE,kCAAkC;CAC3C,CAAC,CAAC;AAEH,eAAe,gCAAgC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CopilotRuleModule } from "../_internal/create-copilot-rule.js";
|
|
2
|
+
/** Rule module for `no-empty-repository-hook-arrays`. */
|
|
2
3
|
declare const noEmptyRepositoryHookArraysRule: CopilotRuleModule;
|
|
3
4
|
export default noEmptyRepositoryHookArraysRule;
|
|
4
5
|
//# sourceMappingURL=no-empty-repository-hook-arrays.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-empty-repository-hook-arrays.d.ts","sourceRoot":"","sources":["../../src/rules/no-empty-repository-hook-arrays.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-empty-repository-hook-arrays.d.ts","sourceRoot":"","sources":["../../src/rules/no-empty-repository-hook-arrays.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAgB7E,yDAAyD;AACzD,QAAA,MAAM,+BAA+B,EAAE,iBA8CrC,CAAC;AAEH,eAAe,+BAA+B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { arrayFirst, isDefined, isEmpty } from "ts-extras";
|
|
1
2
|
/**
|
|
2
3
|
* @packageDocumentation
|
|
3
4
|
* ESLint rule implementation for `no-empty-repository-hook-arrays`.
|
|
@@ -6,6 +7,8 @@ import { isRepositoryHookFilePath } from "../_internal/copilot-file-kind.js";
|
|
|
6
7
|
import { createCopilotRule } from "../_internal/create-copilot-rule.js";
|
|
7
8
|
import { reportAtDocumentStart } from "../_internal/markdown-rule.js";
|
|
8
9
|
import { getRepositoryHookEventEntries, isJsonArray, parseJsonText, } from "../_internal/repository-hooks-json.js";
|
|
10
|
+
import { createRuleDocsUrl } from "../_internal/rule-docs-url.js";
|
|
11
|
+
/** Rule module for `no-empty-repository-hook-arrays`. */
|
|
9
12
|
const noEmptyRepositoryHookArraysRule = createCopilotRule({
|
|
10
13
|
create(context) {
|
|
11
14
|
return {
|
|
@@ -14,13 +17,13 @@ const noEmptyRepositoryHookArraysRule = createCopilotRule({
|
|
|
14
17
|
return;
|
|
15
18
|
}
|
|
16
19
|
const root = parseJsonText(context.sourceCode.text);
|
|
17
|
-
const emptyEntry = getRepositoryHookEventEntries(root).find(([, eventValue]) => isJsonArray(eventValue) && eventValue
|
|
18
|
-
if (emptyEntry
|
|
20
|
+
const emptyEntry = getRepositoryHookEventEntries(root).find(([, eventValue]) => isJsonArray(eventValue) && isEmpty(eventValue));
|
|
21
|
+
if (!isDefined(emptyEntry)) {
|
|
19
22
|
return;
|
|
20
23
|
}
|
|
21
24
|
reportAtDocumentStart(context, {
|
|
22
25
|
data: {
|
|
23
|
-
eventName: emptyEntry
|
|
26
|
+
eventName: arrayFirst(emptyEntry),
|
|
24
27
|
},
|
|
25
28
|
messageId: "emptyRepositoryHookArray",
|
|
26
29
|
});
|
|
@@ -35,6 +38,7 @@ const noEmptyRepositoryHookArraysRule = createCopilotRule({
|
|
|
35
38
|
frozen: false,
|
|
36
39
|
recommended: false,
|
|
37
40
|
requiresTypeChecking: false,
|
|
41
|
+
url: createRuleDocsUrl("no-empty-repository-hook-arrays"),
|
|
38
42
|
},
|
|
39
43
|
messages: {
|
|
40
44
|
emptyRepositoryHookArray: "Repository hook event `{{eventName}}` should not be declared with an empty array.",
|