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.
- package/CHANGELOG.md +5316 -0
- package/LICENSE +21 -0
- package/README.md +192 -0
- package/dist/_internal/copilot-config-references.d.ts +34 -0
- package/dist/_internal/copilot-config-references.d.ts.map +1 -0
- package/dist/_internal/copilot-config-references.js +55 -0
- package/dist/_internal/copilot-config-references.js.map +1 -0
- package/dist/_internal/copilot-customization-names.d.ts +21 -0
- package/dist/_internal/copilot-customization-names.d.ts.map +1 -0
- package/dist/_internal/copilot-customization-names.js +56 -0
- package/dist/_internal/copilot-customization-names.js.map +1 -0
- package/dist/_internal/copilot-file-kind.d.ts +19 -0
- package/dist/_internal/copilot-file-kind.d.ts.map +1 -0
- package/dist/_internal/copilot-file-kind.js +111 -0
- package/dist/_internal/copilot-file-kind.js.map +1 -0
- package/dist/_internal/create-copilot-rule.d.ts +39 -0
- package/dist/_internal/create-copilot-rule.d.ts.map +1 -0
- package/dist/_internal/create-copilot-rule.js +56 -0
- package/dist/_internal/create-copilot-rule.js.map +1 -0
- package/dist/_internal/customization-body.d.ts +6 -0
- package/dist/_internal/customization-body.d.ts.map +1 -0
- package/dist/_internal/customization-body.js +15 -0
- package/dist/_internal/customization-body.js.map +1 -0
- package/dist/_internal/duplicate-names.d.ts +12 -0
- package/dist/_internal/duplicate-names.d.ts.map +1 -0
- package/dist/_internal/duplicate-names.js +24 -0
- package/dist/_internal/duplicate-names.js.map +1 -0
- package/dist/_internal/file-system.d.ts +21 -0
- package/dist/_internal/file-system.d.ts.map +1 -0
- package/dist/_internal/file-system.js +86 -0
- package/dist/_internal/file-system.js.map +1 -0
- package/dist/_internal/frontmatter.d.ts +37 -0
- package/dist/_internal/frontmatter.d.ts.map +1 -0
- package/dist/_internal/frontmatter.js +398 -0
- package/dist/_internal/frontmatter.js.map +1 -0
- package/dist/_internal/markdown-links.d.ts +21 -0
- package/dist/_internal/markdown-links.d.ts.map +1 -0
- package/dist/_internal/markdown-links.js +81 -0
- package/dist/_internal/markdown-links.js.map +1 -0
- package/dist/_internal/markdown-rule.d.ts +13 -0
- package/dist/_internal/markdown-rule.d.ts.map +1 -0
- package/dist/_internal/markdown-rule.js +19 -0
- package/dist/_internal/markdown-rule.js.map +1 -0
- package/dist/_internal/repository-hooks-json.d.ts +55 -0
- package/dist/_internal/repository-hooks-json.d.ts.map +1 -0
- package/dist/_internal/repository-hooks-json.js +80 -0
- package/dist/_internal/repository-hooks-json.js.map +1 -0
- package/dist/_internal/rule-catalog.d.ts +20 -0
- package/dist/_internal/rule-catalog.d.ts.map +1 -0
- package/dist/_internal/rule-catalog.js +97 -0
- package/dist/_internal/rule-catalog.js.map +1 -0
- package/dist/_internal/rule-docs-url.d.ts +9 -0
- package/dist/_internal/rule-docs-url.d.ts.map +1 -0
- package/dist/_internal/rule-docs-url.js +9 -0
- package/dist/_internal/rule-docs-url.js.map +1 -0
- package/dist/_internal/rules-registry.d.ts +83 -0
- package/dist/_internal/rules-registry.d.ts.map +1 -0
- package/dist/_internal/rules-registry.js +145 -0
- package/dist/_internal/rules-registry.js.map +1 -0
- package/dist/_internal/skill-files.d.ts +8 -0
- package/dist/_internal/skill-files.d.ts.map +1 -0
- package/dist/_internal/skill-files.js +18 -0
- package/dist/_internal/skill-files.js.map +1 -0
- package/dist/plugin.cjs +5312 -0
- package/dist/plugin.cjs.map +7 -0
- package/dist/plugin.d.cts +34 -0
- package/dist/plugin.d.ts +34 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +142 -0
- package/dist/plugin.js.map +1 -0
- package/dist/rules/no-blank-customization-body.d.ts +4 -0
- package/dist/rules/no-blank-customization-body.d.ts.map +1 -0
- package/dist/rules/no-blank-customization-body.js +49 -0
- package/dist/rules/no-blank-customization-body.js.map +1 -0
- package/dist/rules/no-blank-repository-instructions.d.ts +4 -0
- package/dist/rules/no-blank-repository-instructions.d.ts.map +1 -0
- package/dist/rules/no-blank-repository-instructions.js +49 -0
- package/dist/rules/no-blank-repository-instructions.js.map +1 -0
- package/dist/rules/no-blank-skill-body.d.ts +4 -0
- package/dist/rules/no-blank-skill-body.d.ts.map +1 -0
- package/dist/rules/no-blank-skill-body.js +48 -0
- package/dist/rules/no-blank-skill-body.js.map +1 -0
- package/dist/rules/no-deprecated-agent-infer.d.ts +4 -0
- package/dist/rules/no-deprecated-agent-infer.d.ts.map +1 -0
- package/dist/rules/no-deprecated-agent-infer.js +48 -0
- package/dist/rules/no-deprecated-agent-infer.js.map +1 -0
- package/dist/rules/no-duplicate-agent-names.d.ts +4 -0
- package/dist/rules/no-duplicate-agent-names.d.ts.map +1 -0
- package/dist/rules/no-duplicate-agent-names.js +72 -0
- package/dist/rules/no-duplicate-agent-names.js.map +1 -0
- package/dist/rules/no-duplicate-prompt-names.d.ts +4 -0
- package/dist/rules/no-duplicate-prompt-names.d.ts.map +1 -0
- package/dist/rules/no-duplicate-prompt-names.js +72 -0
- package/dist/rules/no-duplicate-prompt-names.js.map +1 -0
- package/dist/rules/no-duplicate-skill-names.d.ts +4 -0
- package/dist/rules/no-duplicate-skill-names.d.ts.map +1 -0
- package/dist/rules/no-duplicate-skill-names.js +74 -0
- package/dist/rules/no-duplicate-skill-names.js.map +1 -0
- package/dist/rules/no-duplicate-slash-command-names.d.ts +4 -0
- package/dist/rules/no-duplicate-slash-command-names.d.ts.map +1 -0
- package/dist/rules/no-duplicate-slash-command-names.js +82 -0
- package/dist/rules/no-duplicate-slash-command-names.js.map +1 -0
- package/dist/rules/no-empty-repository-hook-arrays.d.ts +4 -0
- package/dist/rules/no-empty-repository-hook-arrays.d.ts.map +1 -0
- package/dist/rules/no-empty-repository-hook-arrays.js +49 -0
- package/dist/rules/no-empty-repository-hook-arrays.js.map +1 -0
- package/dist/rules/no-legacy-chatmode-files.d.ts +4 -0
- package/dist/rules/no-legacy-chatmode-files.d.ts.map +1 -0
- package/dist/rules/no-legacy-chatmode-files.js +42 -0
- package/dist/rules/no-legacy-chatmode-files.js.map +1 -0
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.d.ts +4 -0
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.d.ts.map +1 -0
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.js +52 -0
- package/dist/rules/prefer-custom-instructions-under-code-review-limit.js.map +1 -0
- package/dist/rules/prefer-fast-repository-hooks.d.ts +4 -0
- package/dist/rules/prefer-fast-repository-hooks.d.ts.map +1 -0
- package/dist/rules/prefer-fast-repository-hooks.js +58 -0
- package/dist/rules/prefer-fast-repository-hooks.js.map +1 -0
- package/dist/rules/prefer-qualified-tools.d.ts +4 -0
- package/dist/rules/prefer-qualified-tools.d.ts.map +1 -0
- package/dist/rules/prefer-qualified-tools.js +56 -0
- package/dist/rules/prefer-qualified-tools.js.map +1 -0
- package/dist/rules/require-agent-tool-for-subagents.d.ts +4 -0
- package/dist/rules/require-agent-tool-for-subagents.d.ts.map +1 -0
- package/dist/rules/require-agent-tool-for-subagents.js +64 -0
- package/dist/rules/require-agent-tool-for-subagents.js.map +1 -0
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.d.ts +4 -0
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.d.ts.map +1 -0
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.js +50 -0
- package/dist/rules/require-agents-md-for-cross-surface-agent-instructions.js.map +1 -0
- package/dist/rules/require-chatmode-file-metadata.d.ts +4 -0
- package/dist/rules/require-chatmode-file-metadata.d.ts.map +1 -0
- package/dist/rules/require-chatmode-file-metadata.js +59 -0
- package/dist/rules/require-chatmode-file-metadata.js.map +1 -0
- package/dist/rules/require-existing-agent-hook-cwd.d.ts +4 -0
- package/dist/rules/require-existing-agent-hook-cwd.d.ts.map +1 -0
- package/dist/rules/require-existing-agent-hook-cwd.js +64 -0
- package/dist/rules/require-existing-agent-hook-cwd.js.map +1 -0
- package/dist/rules/require-existing-agent-mcp-servers.d.ts +4 -0
- package/dist/rules/require-existing-agent-mcp-servers.d.ts.map +1 -0
- package/dist/rules/require-existing-agent-mcp-servers.js +58 -0
- package/dist/rules/require-existing-agent-mcp-servers.js.map +1 -0
- package/dist/rules/require-existing-relative-agent-links.d.ts +4 -0
- package/dist/rules/require-existing-relative-agent-links.d.ts.map +1 -0
- package/dist/rules/require-existing-relative-agent-links.js +61 -0
- package/dist/rules/require-existing-relative-agent-links.js.map +1 -0
- package/dist/rules/require-existing-relative-instructions-links.d.ts +4 -0
- package/dist/rules/require-existing-relative-instructions-links.d.ts.map +1 -0
- package/dist/rules/require-existing-relative-instructions-links.js +61 -0
- package/dist/rules/require-existing-relative-instructions-links.js.map +1 -0
- package/dist/rules/require-existing-relative-prompt-links.d.ts +4 -0
- package/dist/rules/require-existing-relative-prompt-links.d.ts.map +1 -0
- package/dist/rules/require-existing-relative-prompt-links.js +61 -0
- package/dist/rules/require-existing-relative-prompt-links.js.map +1 -0
- package/dist/rules/require-existing-relative-skill-links.d.ts +4 -0
- package/dist/rules/require-existing-relative-skill-links.d.ts.map +1 -0
- package/dist/rules/require-existing-relative-skill-links.js +61 -0
- package/dist/rules/require-existing-relative-skill-links.js.map +1 -0
- package/dist/rules/require-existing-repository-hook-cwd.d.ts +4 -0
- package/dist/rules/require-existing-repository-hook-cwd.d.ts.map +1 -0
- package/dist/rules/require-existing-repository-hook-cwd.js +65 -0
- package/dist/rules/require-existing-repository-hook-cwd.js.map +1 -0
- package/dist/rules/require-github-copilot-target-for-mcp-servers.d.ts +4 -0
- package/dist/rules/require-github-copilot-target-for-mcp-servers.d.ts.map +1 -0
- package/dist/rules/require-github-copilot-target-for-mcp-servers.js +63 -0
- package/dist/rules/require-github-copilot-target-for-mcp-servers.js.map +1 -0
- package/dist/rules/require-instructions-apply-to.d.ts +4 -0
- package/dist/rules/require-instructions-apply-to.d.ts.map +1 -0
- package/dist/rules/require-instructions-apply-to.js +60 -0
- package/dist/rules/require-instructions-apply-to.js.map +1 -0
- package/dist/rules/require-json-agent-mcp-servers.d.ts +4 -0
- package/dist/rules/require-json-agent-mcp-servers.d.ts.map +1 -0
- package/dist/rules/require-json-agent-mcp-servers.js +58 -0
- package/dist/rules/require-json-agent-mcp-servers.js.map +1 -0
- package/dist/rules/require-prompt-file-metadata.d.ts +4 -0
- package/dist/rules/require-prompt-file-metadata.d.ts.map +1 -0
- package/dist/rules/require-prompt-file-metadata.js +104 -0
- package/dist/rules/require-prompt-file-metadata.js.map +1 -0
- package/dist/rules/require-qualified-agent-handoff-models.d.ts +4 -0
- package/dist/rules/require-qualified-agent-handoff-models.d.ts.map +1 -0
- package/dist/rules/require-qualified-agent-handoff-models.js +78 -0
- package/dist/rules/require-qualified-agent-handoff-models.js.map +1 -0
- package/dist/rules/require-relative-agent-hook-cwd.d.ts +4 -0
- package/dist/rules/require-relative-agent-hook-cwd.d.ts.map +1 -0
- package/dist/rules/require-relative-agent-hook-cwd.js +70 -0
- package/dist/rules/require-relative-agent-hook-cwd.js.map +1 -0
- package/dist/rules/require-relative-agent-links.d.ts +4 -0
- package/dist/rules/require-relative-agent-links.d.ts.map +1 -0
- package/dist/rules/require-relative-agent-links.js +58 -0
- package/dist/rules/require-relative-agent-links.js.map +1 -0
- package/dist/rules/require-relative-instructions-links.d.ts +4 -0
- package/dist/rules/require-relative-instructions-links.d.ts.map +1 -0
- package/dist/rules/require-relative-instructions-links.js +58 -0
- package/dist/rules/require-relative-instructions-links.js.map +1 -0
- package/dist/rules/require-relative-prompt-links.d.ts +4 -0
- package/dist/rules/require-relative-prompt-links.d.ts.map +1 -0
- package/dist/rules/require-relative-prompt-links.js +82 -0
- package/dist/rules/require-relative-prompt-links.js.map +1 -0
- package/dist/rules/require-relative-repository-hook-cwd.d.ts +4 -0
- package/dist/rules/require-relative-repository-hook-cwd.d.ts.map +1 -0
- package/dist/rules/require-relative-repository-hook-cwd.js +63 -0
- package/dist/rules/require-relative-repository-hook-cwd.js.map +1 -0
- package/dist/rules/require-relative-skill-links.d.ts +4 -0
- package/dist/rules/require-relative-skill-links.d.ts.map +1 -0
- package/dist/rules/require-relative-skill-links.js +58 -0
- package/dist/rules/require-relative-skill-links.js.map +1 -0
- package/dist/rules/require-repository-hook-arrays.d.ts +4 -0
- package/dist/rules/require-repository-hook-arrays.d.ts.map +1 -0
- package/dist/rules/require-repository-hook-arrays.js +54 -0
- package/dist/rules/require-repository-hook-arrays.js.map +1 -0
- package/dist/rules/require-repository-hook-command-shell.d.ts +4 -0
- package/dist/rules/require-repository-hook-command-shell.d.ts.map +1 -0
- package/dist/rules/require-repository-hook-command-shell.js +57 -0
- package/dist/rules/require-repository-hook-command-shell.js.map +1 -0
- package/dist/rules/require-repository-hooks-object.d.ts +4 -0
- package/dist/rules/require-repository-hooks-object.d.ts.map +1 -0
- package/dist/rules/require-repository-hooks-object.js +50 -0
- package/dist/rules/require-repository-hooks-object.js.map +1 -0
- package/dist/rules/require-repository-instructions-file.d.ts +4 -0
- package/dist/rules/require-repository-instructions-file.d.ts.map +1 -0
- package/dist/rules/require-repository-instructions-file.js +50 -0
- package/dist/rules/require-repository-instructions-file.js.map +1 -0
- package/dist/rules/require-skill-file-location.d.ts +4 -0
- package/dist/rules/require-skill-file-location.d.ts.map +1 -0
- package/dist/rules/require-skill-file-location.js +46 -0
- package/dist/rules/require-skill-file-location.js.map +1 -0
- package/dist/rules/require-skill-file-metadata.d.ts +4 -0
- package/dist/rules/require-skill-file-metadata.d.ts.map +1 -0
- package/dist/rules/require-skill-file-metadata.js +60 -0
- package/dist/rules/require-skill-file-metadata.js.map +1 -0
- package/dist/rules/require-skill-md-filename.d.ts +4 -0
- package/dist/rules/require-skill-md-filename.d.ts.map +1 -0
- package/dist/rules/require-skill-md-filename.js +55 -0
- package/dist/rules/require-skill-md-filename.js.map +1 -0
- package/dist/rules/require-skill-name-match-directory.d.ts +4 -0
- package/dist/rules/require-skill-name-match-directory.d.ts.map +1 -0
- package/dist/rules/require-skill-name-match-directory.js +59 -0
- package/dist/rules/require-skill-name-match-directory.js.map +1 -0
- package/dist/rules/require-string-repository-hook-env-values.d.ts +4 -0
- package/dist/rules/require-string-repository-hook-env-values.d.ts.map +1 -0
- package/dist/rules/require-string-repository-hook-env-values.js +59 -0
- package/dist/rules/require-string-repository-hook-env-values.js.map +1 -0
- package/dist/rules/require-valid-agent-argument-hint.d.ts +4 -0
- package/dist/rules/require-valid-agent-argument-hint.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-argument-hint.js +51 -0
- package/dist/rules/require-valid-agent-argument-hint.js.map +1 -0
- package/dist/rules/require-valid-agent-handoff-send.d.ts +4 -0
- package/dist/rules/require-valid-agent-handoff-send.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-handoff-send.js +67 -0
- package/dist/rules/require-valid-agent-handoff-send.js.map +1 -0
- package/dist/rules/require-valid-agent-handoffs.d.ts +4 -0
- package/dist/rules/require-valid-agent-handoffs.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-handoffs.js +78 -0
- package/dist/rules/require-valid-agent-handoffs.js.map +1 -0
- package/dist/rules/require-valid-agent-hook-events.d.ts +4 -0
- package/dist/rules/require-valid-agent-hook-events.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-hook-events.js +68 -0
- package/dist/rules/require-valid-agent-hook-events.js.map +1 -0
- package/dist/rules/require-valid-agent-hook-timeouts.d.ts +4 -0
- package/dist/rules/require-valid-agent-hook-timeouts.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-hook-timeouts.js +83 -0
- package/dist/rules/require-valid-agent-hook-timeouts.js.map +1 -0
- package/dist/rules/require-valid-agent-hooks.d.ts +4 -0
- package/dist/rules/require-valid-agent-hooks.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-hooks.js +86 -0
- package/dist/rules/require-valid-agent-hooks.js.map +1 -0
- package/dist/rules/require-valid-agent-invocation-controls.d.ts +4 -0
- package/dist/rules/require-valid-agent-invocation-controls.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-invocation-controls.js +71 -0
- package/dist/rules/require-valid-agent-invocation-controls.js.map +1 -0
- package/dist/rules/require-valid-agent-mcp-servers.d.ts +4 -0
- package/dist/rules/require-valid-agent-mcp-servers.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-mcp-servers.js +64 -0
- package/dist/rules/require-valid-agent-mcp-servers.js.map +1 -0
- package/dist/rules/require-valid-agent-model.d.ts +4 -0
- package/dist/rules/require-valid-agent-model.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-model.js +64 -0
- package/dist/rules/require-valid-agent-model.js.map +1 -0
- package/dist/rules/require-valid-agent-name.d.ts +4 -0
- package/dist/rules/require-valid-agent-name.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-name.js +51 -0
- package/dist/rules/require-valid-agent-name.js.map +1 -0
- package/dist/rules/require-valid-agent-subagents.d.ts +4 -0
- package/dist/rules/require-valid-agent-subagents.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-subagents.js +79 -0
- package/dist/rules/require-valid-agent-subagents.js.map +1 -0
- package/dist/rules/require-valid-agent-target.d.ts +4 -0
- package/dist/rules/require-valid-agent-target.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-target.js +62 -0
- package/dist/rules/require-valid-agent-target.js.map +1 -0
- package/dist/rules/require-valid-agent-tools.d.ts +4 -0
- package/dist/rules/require-valid-agent-tools.d.ts.map +1 -0
- package/dist/rules/require-valid-agent-tools.js +64 -0
- package/dist/rules/require-valid-agent-tools.js.map +1 -0
- package/dist/rules/require-valid-instructions-apply-to-globs.d.ts +4 -0
- package/dist/rules/require-valid-instructions-apply-to-globs.d.ts.map +1 -0
- package/dist/rules/require-valid-instructions-apply-to-globs.js +79 -0
- package/dist/rules/require-valid-instructions-apply-to-globs.js.map +1 -0
- package/dist/rules/require-valid-prompt-argument-hint.d.ts +4 -0
- package/dist/rules/require-valid-prompt-argument-hint.d.ts.map +1 -0
- package/dist/rules/require-valid-prompt-argument-hint.js +52 -0
- package/dist/rules/require-valid-prompt-argument-hint.js.map +1 -0
- package/dist/rules/require-valid-prompt-model.d.ts +4 -0
- package/dist/rules/require-valid-prompt-model.d.ts.map +1 -0
- package/dist/rules/require-valid-prompt-model.js +77 -0
- package/dist/rules/require-valid-prompt-model.js.map +1 -0
- package/dist/rules/require-valid-prompt-name.d.ts +4 -0
- package/dist/rules/require-valid-prompt-name.d.ts.map +1 -0
- package/dist/rules/require-valid-prompt-name.js +51 -0
- package/dist/rules/require-valid-prompt-name.js.map +1 -0
- package/dist/rules/require-valid-prompt-tools.d.ts +4 -0
- package/dist/rules/require-valid-prompt-tools.d.ts.map +1 -0
- package/dist/rules/require-valid-prompt-tools.js +64 -0
- package/dist/rules/require-valid-prompt-tools.js.map +1 -0
- package/dist/rules/require-valid-repository-hook-command-type.d.ts +4 -0
- package/dist/rules/require-valid-repository-hook-command-type.d.ts.map +1 -0
- package/dist/rules/require-valid-repository-hook-command-type.js +58 -0
- package/dist/rules/require-valid-repository-hook-command-type.js.map +1 -0
- package/dist/rules/require-valid-repository-hook-env.d.ts +4 -0
- package/dist/rules/require-valid-repository-hook-env.d.ts.map +1 -0
- package/dist/rules/require-valid-repository-hook-env.js +57 -0
- package/dist/rules/require-valid-repository-hook-env.js.map +1 -0
- package/dist/rules/require-valid-repository-hook-events.d.ts +4 -0
- package/dist/rules/require-valid-repository-hook-events.d.ts.map +1 -0
- package/dist/rules/require-valid-repository-hook-events.js +55 -0
- package/dist/rules/require-valid-repository-hook-events.js.map +1 -0
- package/dist/rules/require-valid-repository-hook-timeouts.d.ts +4 -0
- package/dist/rules/require-valid-repository-hook-timeouts.d.ts.map +1 -0
- package/dist/rules/require-valid-repository-hook-timeouts.js +59 -0
- package/dist/rules/require-valid-repository-hook-timeouts.js.map +1 -0
- package/dist/rules/require-valid-repository-hook-version.d.ts +4 -0
- package/dist/rules/require-valid-repository-hook-version.d.ts.map +1 -0
- package/dist/rules/require-valid-repository-hook-version.js +53 -0
- package/dist/rules/require-valid-repository-hook-version.js.map +1 -0
- package/dist/rules/require-valid-skill-directory-name.d.ts +4 -0
- package/dist/rules/require-valid-skill-directory-name.d.ts.map +1 -0
- package/dist/rules/require-valid-skill-directory-name.js +50 -0
- package/dist/rules/require-valid-skill-directory-name.js.map +1 -0
- package/dist/rules/require-valid-skill-license.d.ts +4 -0
- package/dist/rules/require-valid-skill-license.d.ts.map +1 -0
- package/dist/rules/require-valid-skill-license.js +47 -0
- package/dist/rules/require-valid-skill-license.js.map +1 -0
- package/dist/rules/require-valid-skill-name.d.ts +4 -0
- package/dist/rules/require-valid-skill-name.d.ts.map +1 -0
- package/dist/rules/require-valid-skill-name.js +57 -0
- package/dist/rules/require-valid-skill-name.js.map +1 -0
- package/docs/rules/getting-started.md +24 -0
- package/docs/rules/guides/copilot-customization-files.md +17 -0
- package/docs/rules/no-blank-customization-body.md +52 -0
- package/docs/rules/no-blank-repository-instructions.md +37 -0
- package/docs/rules/no-blank-skill-body.md +41 -0
- package/docs/rules/no-deprecated-agent-infer.md +42 -0
- package/docs/rules/no-duplicate-agent-names.md +36 -0
- package/docs/rules/no-duplicate-prompt-names.md +36 -0
- package/docs/rules/no-duplicate-skill-names.md +37 -0
- package/docs/rules/no-duplicate-slash-command-names.md +40 -0
- package/docs/rules/no-empty-repository-hook-arrays.md +44 -0
- package/docs/rules/no-legacy-chatmode-files.md +53 -0
- package/docs/rules/overview.md +27 -0
- package/docs/rules/prefer-custom-instructions-under-code-review-limit.md +39 -0
- package/docs/rules/prefer-fast-repository-hooks.md +43 -0
- package/docs/rules/prefer-qualified-tools.md +49 -0
- package/docs/rules/presets/all.md +82 -0
- package/docs/rules/presets/index.md +78 -0
- package/docs/rules/presets/minimal.md +16 -0
- package/docs/rules/presets/recommended.md +67 -0
- package/docs/rules/presets/strict.md +81 -0
- package/docs/rules/require-agent-tool-for-subagents.md +44 -0
- package/docs/rules/require-agents-md-for-cross-surface-agent-instructions.md +39 -0
- package/docs/rules/require-chatmode-file-metadata.md +41 -0
- package/docs/rules/require-existing-agent-hook-cwd.md +51 -0
- package/docs/rules/require-existing-agent-mcp-servers.md +43 -0
- package/docs/rules/require-existing-relative-agent-links.md +41 -0
- package/docs/rules/require-existing-relative-instructions-links.md +43 -0
- package/docs/rules/require-existing-relative-prompt-links.md +41 -0
- package/docs/rules/require-existing-relative-skill-links.md +44 -0
- package/docs/rules/require-existing-repository-hook-cwd.md +45 -0
- package/docs/rules/require-github-copilot-target-for-mcp-servers.md +46 -0
- package/docs/rules/require-instructions-apply-to.md +40 -0
- package/docs/rules/require-json-agent-mcp-servers.md +41 -0
- package/docs/rules/require-prompt-file-metadata.md +45 -0
- package/docs/rules/require-qualified-agent-handoff-models.md +47 -0
- package/docs/rules/require-relative-agent-hook-cwd.md +50 -0
- package/docs/rules/require-relative-agent-links.md +40 -0
- package/docs/rules/require-relative-instructions-links.md +42 -0
- package/docs/rules/require-relative-prompt-links.md +43 -0
- package/docs/rules/require-relative-repository-hook-cwd.md +43 -0
- package/docs/rules/require-relative-skill-links.md +42 -0
- package/docs/rules/require-repository-hook-arrays.md +33 -0
- package/docs/rules/require-repository-hook-command-shell.md +44 -0
- package/docs/rules/require-repository-hooks-object.md +34 -0
- package/docs/rules/require-repository-instructions-file.md +42 -0
- package/docs/rules/require-skill-file-location.md +33 -0
- package/docs/rules/require-skill-file-metadata.md +40 -0
- package/docs/rules/require-skill-md-filename.md +43 -0
- package/docs/rules/require-skill-name-match-directory.md +46 -0
- package/docs/rules/require-string-repository-hook-env-values.md +43 -0
- package/docs/rules/require-valid-agent-argument-hint.md +42 -0
- package/docs/rules/require-valid-agent-handoff-send.md +49 -0
- package/docs/rules/require-valid-agent-handoffs.md +51 -0
- package/docs/rules/require-valid-agent-hook-events.md +47 -0
- package/docs/rules/require-valid-agent-hook-timeouts.md +49 -0
- package/docs/rules/require-valid-agent-hooks.md +49 -0
- package/docs/rules/require-valid-agent-invocation-controls.md +45 -0
- package/docs/rules/require-valid-agent-mcp-servers.md +45 -0
- package/docs/rules/require-valid-agent-model.md +43 -0
- package/docs/rules/require-valid-agent-name.md +42 -0
- package/docs/rules/require-valid-agent-subagents.md +52 -0
- package/docs/rules/require-valid-agent-target.md +44 -0
- package/docs/rules/require-valid-agent-tools.md +43 -0
- package/docs/rules/require-valid-instructions-apply-to-globs.md +45 -0
- package/docs/rules/require-valid-prompt-argument-hint.md +42 -0
- package/docs/rules/require-valid-prompt-model.md +45 -0
- package/docs/rules/require-valid-prompt-name.md +42 -0
- package/docs/rules/require-valid-prompt-tools.md +43 -0
- package/docs/rules/require-valid-repository-hook-command-type.md +45 -0
- package/docs/rules/require-valid-repository-hook-env.md +43 -0
- package/docs/rules/require-valid-repository-hook-events.md +34 -0
- package/docs/rules/require-valid-repository-hook-timeouts.md +43 -0
- package/docs/rules/require-valid-repository-hook-version.md +34 -0
- package/docs/rules/require-valid-skill-directory-name.md +34 -0
- package/docs/rules/require-valid-skill-license.md +45 -0
- package/docs/rules/require-valid-skill-name.md +43 -0
- package/package.json +562 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/plugin.ts", "../package.json", "../src/_internal/copilot-config-references.ts", "../src/_internal/copilot-file-kind.ts", "../src/_internal/create-copilot-rule.ts", "../src/_internal/rule-catalog.ts", "../src/_internal/rule-docs-url.ts", "../src/_internal/frontmatter.ts", "../src/_internal/markdown-rule.ts", "../src/rules/no-blank-customization-body.ts", "../src/rules/no-blank-repository-instructions.ts", "../src/rules/no-blank-skill-body.ts", "../src/rules/no-deprecated-agent-infer.ts", "../src/rules/no-duplicate-agent-names.ts", "../src/_internal/copilot-customization-names.ts", "../src/_internal/duplicate-names.ts", "../src/_internal/file-system.ts", "../src/rules/no-duplicate-prompt-names.ts", "../src/rules/no-duplicate-skill-names.ts", "../src/rules/no-duplicate-slash-command-names.ts", "../src/_internal/repository-hooks-json.ts", "../src/rules/no-empty-repository-hook-arrays.ts", "../src/rules/no-legacy-chatmode-files.ts", "../src/rules/prefer-custom-instructions-under-code-review-limit.ts", "../src/rules/prefer-fast-repository-hooks.ts", "../src/rules/prefer-qualified-tools.ts", "../src/rules/require-agent-tool-for-subagents.ts", "../src/rules/require-agents-md-for-cross-surface-agent-instructions.ts", "../src/rules/require-chatmode-file-metadata.ts", "../src/rules/require-existing-agent-hook-cwd.ts", "../src/rules/require-existing-agent-mcp-servers.ts", "../src/_internal/customization-body.ts", "../src/_internal/markdown-links.ts", "../src/rules/require-existing-relative-agent-links.ts", "../src/rules/require-existing-relative-instructions-links.ts", "../src/rules/require-existing-relative-prompt-links.ts", "../src/rules/require-existing-relative-skill-links.ts", "../src/rules/require-existing-repository-hook-cwd.ts", "../src/rules/require-github-copilot-target-for-mcp-servers.ts", "../src/rules/require-instructions-apply-to.ts", "../src/rules/require-json-agent-mcp-servers.ts", "../src/rules/require-prompt-file-metadata.ts", "../src/rules/require-qualified-agent-handoff-models.ts", "../src/rules/require-relative-agent-hook-cwd.ts", "../src/rules/require-relative-agent-links.ts", "../src/rules/require-relative-instructions-links.ts", "../src/rules/require-relative-prompt-links.ts", "../src/rules/require-relative-repository-hook-cwd.ts", "../src/rules/require-relative-skill-links.ts", "../src/rules/require-repository-hook-arrays.ts", "../src/rules/require-repository-hook-command-shell.ts", "../src/rules/require-repository-hooks-object.ts", "../src/rules/require-repository-instructions-file.ts", "../src/rules/require-skill-file-location.ts", "../src/_internal/skill-files.ts", "../src/rules/require-skill-file-metadata.ts", "../src/rules/require-skill-md-filename.ts", "../src/rules/require-skill-name-match-directory.ts", "../src/rules/require-string-repository-hook-env-values.ts", "../src/rules/require-valid-agent-argument-hint.ts", "../src/rules/require-valid-agent-handoff-send.ts", "../src/rules/require-valid-agent-handoffs.ts", "../src/rules/require-valid-agent-hook-events.ts", "../src/rules/require-valid-agent-hook-timeouts.ts", "../src/rules/require-valid-agent-hooks.ts", "../src/rules/require-valid-agent-invocation-controls.ts", "../src/rules/require-valid-agent-mcp-servers.ts", "../src/rules/require-valid-agent-model.ts", "../src/rules/require-valid-agent-name.ts", "../src/rules/require-valid-agent-subagents.ts", "../src/rules/require-valid-agent-target.ts", "../src/rules/require-valid-agent-tools.ts", "../src/rules/require-valid-instructions-apply-to-globs.ts", "../src/rules/require-valid-prompt-argument-hint.ts", "../src/rules/require-valid-prompt-model.ts", "../src/rules/require-valid-prompt-name.ts", "../src/rules/require-valid-prompt-tools.ts", "../src/rules/require-valid-repository-hook-command-type.ts", "../src/rules/require-valid-repository-hook-env.ts", "../src/rules/require-valid-repository-hook-events.ts", "../src/rules/require-valid-repository-hook-timeouts.ts", "../src/rules/require-valid-repository-hook-version.ts", "../src/rules/require-valid-skill-directory-name.ts", "../src/rules/require-valid-skill-license.ts", "../src/rules/require-valid-skill-name.ts", "../src/_internal/rules-registry.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * @packageDocumentation\n * Public plugin entrypoint for eslint-plugin-copilot.\n */\nimport type { ESLint, Linter } from \"eslint\";\n\nimport json from \"@eslint/json\";\nimport markdown from \"@eslint/markdown\";\n\nimport type { CopilotRuleDocs } from \"./_internal/create-copilot-rule.js\";\n\nimport packageJson from \"../package.json\" with { type: \"json\" };\nimport {\n copilotConfigMetadataByName,\n type CopilotConfigName,\n} from \"./_internal/copilot-config-references.js\";\nimport { copilotRules } from \"./_internal/rules-registry.js\";\n\n/** ESLint severity used by generated preset rule maps. */\nconst ERROR_SEVERITY = \"error\" as const;\n\n/** Markdown files linted by the shipped Copilot presets. */\nconst COPILOT_MARKDOWN_FILES = [\n \".github/copilot-instructions.md\",\n \".github/instructions/**/*.instructions.md\",\n \".github/prompts/**/*.prompt.md\",\n \".github/agents/**/*.agent.md\",\n \".github/chatmodes/**/*.chatmode.md\",\n \".github/skills/**/*.md\",\n \".claude/skills/**/*.md\",\n \"**/SKILL.md\",\n \"**/AGENTS.md\",\n \"**/CLAUDE.md\",\n \"**/GEMINI.md\",\n] as const;\n\n/** Repository hook JSON files linted by the shipped Copilot presets. */\nconst COPILOT_JSON_FILES = [\".github/hooks/**/*.json\"] as const;\n\n/** Hook JSON rules that should only be enabled in the JSON preset layer. */\nconst REPOSITORY_HOOK_JSON_RULE_NAMES = new Set<CopilotRuleName>([\n \"no-empty-repository-hook-arrays\",\n \"prefer-fast-repository-hooks\",\n \"require-existing-repository-hook-cwd\",\n \"require-relative-repository-hook-cwd\",\n \"require-repository-hook-arrays\",\n \"require-repository-hook-command-shell\",\n \"require-repository-hooks-object\",\n \"require-string-repository-hook-env-values\",\n \"require-valid-repository-hook-command-type\",\n \"require-valid-repository-hook-env\",\n \"require-valid-repository-hook-events\",\n \"require-valid-repository-hook-timeouts\",\n \"require-valid-repository-hook-version\",\n]);\n\n/** Flat-config preset layers produced by this plugin. */\nexport type CopilotPresetConfig = CopilotPresetLayer[];\n\n/** Flat-config preset shape produced by this plugin. */\nexport type CopilotPresetLayer = Linter.Config & {\n rules: NonNullable<Linter.Config[\"rules\"]>;\n};\n\n/** Fully qualified Copilot rule ids. */\nexport type CopilotRuleId = `copilot/${CopilotRuleName}`;\n\n/** Unqualified rule names supported by eslint-plugin-copilot. */\nexport type CopilotRuleName = keyof typeof copilotRules;\n\n/** Contract for the exported preset map. */\ntype CopilotConfigsContract = Record<CopilotConfigName, CopilotPresetConfig>;\n\n/** Fully assembled plugin contract used by the runtime default export. */\ntype CopilotPluginContract = Omit<ESLint.Plugin, \"configs\" | \"rules\"> & {\n configs: CopilotConfigsContract;\n meta: {\n name: string;\n namespace: string;\n version: string;\n };\n processors: NonNullable<ESLint.Plugin[\"processors\"]>;\n rules: NonNullable<ESLint.Plugin[\"rules\"]>;\n};\n\n/** Resolve the package version from package.json data. */\nconst getPackageVersion = (pkg: unknown): string => {\n if (typeof pkg !== \"object\" || pkg === null) {\n return \"0.0.0\";\n }\n\n const version = Reflect.get(pkg, \"version\");\n\n return typeof version === \"string\" ? version : \"0.0.0\";\n};\n\n/** Strongly typed ESLint rule map view of the runtime registry. */\nconst eslintRules: NonNullable<ESLint.Plugin[\"rules\"]> & typeof copilotRules =\n copilotRules as NonNullable<ESLint.Plugin[\"rules\"]> & typeof copilotRules;\nconst markdownPlugin = markdown as unknown as ESLint.Plugin;\nconst jsonPlugin = json as unknown as ESLint.Plugin;\n\n/** Stable ordered entries used to derive preset membership. */\nconst copilotRuleEntries = Object.entries(copilotRules).toSorted(\n ([left], [right]) => left.localeCompare(right)\n) as readonly (readonly [\n CopilotRuleName,\n (typeof copilotRules)[CopilotRuleName],\n])[];\n\n/** Create an empty mutable preset-rule bucket map. */\nconst createEmptyPresetRuleMap = (): Record<\n CopilotConfigName,\n CopilotRuleName[]\n> => ({\n all: [],\n minimal: [],\n recommended: [],\n strict: [],\n});\n\n/** Remove duplicates while preserving first-seen ordering. */\nconst dedupeRuleNames = (\n ruleNames: readonly CopilotRuleName[]\n): CopilotRuleName[] => [...new Set(ruleNames)];\n\n/** Derive preset membership directly from static rule docs metadata. */\nconst derivePresetRuleNamesByConfig = (): Readonly<\n Record<CopilotConfigName, readonly CopilotRuleName[]>\n> => {\n const presetRuleMap = createEmptyPresetRuleMap();\n\n for (const [ruleName, ruleModule] of copilotRuleEntries) {\n const docs = ruleModule.meta.docs as CopilotRuleDocs;\n const configNames = docs.copilotConfigNames;\n\n for (const configName of configNames) {\n presetRuleMap[configName].push(ruleName);\n }\n }\n\n return {\n all: dedupeRuleNames(presetRuleMap.all),\n minimal: dedupeRuleNames(presetRuleMap.minimal),\n recommended: dedupeRuleNames(presetRuleMap.recommended),\n strict: dedupeRuleNames(presetRuleMap.strict),\n };\n};\n\n/** Build a flat-config rules map that enables the provided rules at error. */\nconst errorRulesFor = (\n ruleNames: readonly CopilotRuleName[]\n): CopilotPresetLayer[\"rules\"] => {\n const rules: CopilotPresetLayer[\"rules\"] = {};\n\n for (const ruleName of ruleNames) {\n rules[`copilot/${ruleName}`] = ERROR_SEVERITY;\n }\n\n return rules;\n};\n\nconst presetRuleNamesByConfig = derivePresetRuleNamesByConfig();\n\n/** Split preset rule names into markdown-backed and JSON-backed layers. */\nconst partitionRuleNamesByPresetLayer = (\n ruleNames: readonly CopilotRuleName[]\n): Readonly<{\n jsonRuleNames: readonly CopilotRuleName[];\n markdownRuleNames: readonly CopilotRuleName[];\n}> => ({\n jsonRuleNames: ruleNames.filter((ruleName) =>\n REPOSITORY_HOOK_JSON_RULE_NAMES.has(ruleName)\n ),\n markdownRuleNames: ruleNames.filter(\n (ruleName) => !REPOSITORY_HOOK_JSON_RULE_NAMES.has(ruleName)\n ),\n});\n\n/** Build one public preset config as layered flat-config entries. */\nconst createPresetConfig = (\n configName: CopilotConfigName,\n plugin: Readonly<CopilotPluginContract>\n): CopilotPresetConfig => {\n const presetName = copilotConfigMetadataByName[configName].presetName;\n const { jsonRuleNames, markdownRuleNames } =\n partitionRuleNamesByPresetLayer(presetRuleNamesByConfig[configName]);\n const configLayers: CopilotPresetLayer[] = [\n {\n files: [...COPILOT_MARKDOWN_FILES],\n language: \"markdown/gfm\",\n name: `${presetName}:markdown`,\n plugins: {\n copilot: plugin,\n markdown: markdownPlugin,\n },\n rules: errorRulesFor(markdownRuleNames),\n },\n ];\n\n if (jsonRuleNames.length > 0) {\n configLayers.push({\n files: [...COPILOT_JSON_FILES],\n language: \"json/json\",\n name: `${presetName}:json`,\n plugins: {\n copilot: plugin,\n json: jsonPlugin,\n },\n rules: errorRulesFor(jsonRuleNames),\n });\n }\n\n return configLayers;\n};\n\n/** Public ESLint plugin entrypoint, including runtime presets and rule metadata. */\nconst plugin: CopilotPluginContract = {\n configs: {} as CopilotConfigsContract,\n meta: {\n name: \"eslint-plugin-copilot\",\n namespace: \"copilot\",\n version: getPackageVersion(packageJson),\n },\n processors: {},\n rules: eslintRules,\n};\n\nplugin.configs = {\n all: createPresetConfig(\"all\", plugin),\n minimal: createPresetConfig(\"minimal\", plugin),\n recommended: createPresetConfig(\"recommended\", plugin),\n strict: createPresetConfig(\"strict\", plugin),\n};\n\nexport default plugin;\n", "{\n \"$schema\": \"https://www.schemastore.org/package.json\",\n \"name\": \"eslint-plugin-copilot\",\n \"version\": \"1.0.5\",\n \"private\": false,\n \"description\": \"ESLint rules for GitHub Copilot repository customization files.\",\n \"keywords\": [\n \"copilot\",\n \"eslint\",\n \"eslint-plugin\",\n \"eslintplugin\",\n \"github-copilot\",\n \"markdown\"\n ],\n \"homepage\": \"https://github.com/Nick2bad4u/eslint-plugin-copilot\",\n \"bugs\": {\n \"url\": \"https://github.com/Nick2bad4u/eslint-plugin-copilot/issues\",\n \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Nick2bad4u/eslint-plugin-copilot.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Nick2bad4u <20943337+Nick2bad4u@users.noreply.github.com> (https://github.com/Nick2bad4u)\",\n \"contributors\": [\n {\n \"name\": \"Nick2bad4u\",\n \"email\": \"20943337+Nick2bad4u@users.noreply.github.com\",\n \"url\": \"https://github.com/Nick2bad4u\"\n }\n ],\n \"sideEffects\": false,\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/plugin.d.ts\",\n \"default\": \"./dist/plugin.js\"\n },\n \"require\": {\n \"types\": \"./dist/plugin.d.cts\",\n \"default\": \"./dist/plugin.cjs\"\n },\n \"default\": \"./dist/plugin.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/plugin.cjs\",\n \"types\": \"./dist/plugin.d.ts\",\n \"files\": [\n \"dist\",\n \"docs/rules/**\",\n \"CHANGELOG.md\"\n ],\n \"workspaces\": [\n \"docs/docusaurus\"\n ],\n \"scripts\": {\n \"build\": \"tsc -p tsconfig.build.json && npm run build:types:cjs && npm run build:cjs\",\n \"build:cjs\": \"esbuild dist/plugin.js --bundle --format=cjs --platform=node --packages=external --sourcemap --outfile=dist/plugin.cjs --footer:js=\\\"module.exports = module.exports.default;\\\"\",\n \"build:clean\": \"node -e \\\"require('node:fs').rmSync('dist',{recursive:true,force:true})\\\"\",\n \"build:eslint-inspector\": \"npx -y @eslint/config-inspector@1.4.2 build --outDir \\\"docs/docusaurus/static/eslint-inspector\\\" --base \\\"/eslint-plugin-copilot/eslint-inspector/\\\"\",\n \"build:eslint-inspector:local\": \"npx @eslint/config-inspector\",\n \"build:stylelint-inspector\": \"npx -y stylelint-config-inspector@latest build --outDir \\\"docs/docusaurus/static/stylelint-inspector\\\" --base \\\"/eslint-plugin-copilot/stylelint-inspector/\\\"\",\n \"build:stylelint-inspector:local\": \"npx stylelint-config-inspector@latest\",\n \"build:types:cjs\": \"node -e \\\"require('node:fs').copyFileSync('dist/plugin.d.ts','dist/plugin.d.cts')\\\"\",\n \"changelog:generate\": \"git-cliff --config cliff.toml --output CHANGELOG.md\",\n \"changelog:preview\": \"git-cliff --config cliff.toml --unreleased\",\n \"changelog:release-notes\": \"git-cliff --config cliff.toml --latest --strip all\",\n \"clean:cache\": \"rimraf dist coverage cache .cache .vite .turbo\",\n \"clean:cache:coverage\": \"rimraf coverage .coverage\",\n \"clean:cache:dist\": \"rimraf dist release\",\n \"clean:cache:eslint\": \"rimraf .cache/.eslintcache\",\n \"clean:cache:ncu\": \"rimraf .cache/.ncu-cache.json\",\n \"clean:cache:prettier\": \"rimraf .cache/.prettier-cache .prettier-cache .prettiercache\",\n \"clean:cache:stryker\": \"rimraf .stryker-tmp\",\n \"clean:cache:stylelint\": \"rimraf .cache/stylelintcache stylelintcache .stylelintcache\",\n \"clean:cache:temp\": \"rimraf \\\".temp/.**\\\" --glob\",\n \"clean:cache:typescript\": \"rimraf .cache/**.tsbuildinfo .cache/builds\",\n \"clean:cache:vite\": \"rimraf .cache/vite .cache/vitest .cache/vitest-zero-coverage .cache/vite-zero-coverage\",\n \"clean:database\": \"rimraf %appdata%/uptime-watcher/uptime-watcher.sqlite\",\n \"clean:docs\": \"rimraf docs/docusaurus/.docusaurus/** docs/docusaurus/build/** docs/docusaurus/site-docs/developer/api/**\",\n \"clean:docusaurus\": \"npm run clean:docs && npm run --workspace docs/docusaurus clear\",\n \"cognitive-complexity\": \"cognitive-complexity-ts --threshold 10\",\n \"commit\": \"git-cz\",\n \"contrib\": \"all-contributors\",\n \"contrib:add\": \"all-contributors add\",\n \"contrib:check\": \"all-contributors check\",\n \"contrib:compare\": \"npm run contrib:check\",\n \"contrib:generate\": \"all-contributors generate\",\n \"coverage\": \"vitest run --coverage\",\n \"docs:api\": \"npm run --workspace docs/docusaurus docs:api\",\n \"docs:api:local\": \"npm run --workspace docs/docusaurus docs:api:local\",\n \"docs:build\": \"npm run --workspace docs/docusaurus build\",\n \"docs:build:local\": \"npm run --workspace docs/docusaurus build:local\",\n \"docs:check-links\": \"npm run docs:api && node ./scripts/check-doc-links.mjs\",\n \"docs:devtools:metadata\": \"node scripts/generate-devtools-workspace-metadata.mjs\",\n \"docs:serve\": \"npm run --workspace docs/docusaurus serve\",\n \"docs:start\": \"npm run --workspace docs/docusaurus start\",\n \"docs:start:devtools\": \"npm run docs:devtools:metadata && npm run docs:api:local && npm run --workspace docs/docusaurus start:devtools\",\n \"docs:toc\": \"remark docs --use remark-toc --output\",\n \"docs:typecheck\": \"npm run --workspace docs/docusaurus typecheck\",\n \"docs:typedoc\": \"npm run --workspace docs/docusaurus docs:api\",\n \"docs:typedoc:local\": \"npm run --workspace docs/docusaurus docs:api:local\",\n \"docs:validate-links\": \"remark docs --use remark-validate-links --frail\",\n \"knip\": \"cross-env NODE_OPTIONS=--max_old_space_size=4096 NODE_NO_WARNINGS=1 npx knip -c knip.config.ts --include-libs --cache --cache-location .cache/knip --tsConfig tsconfig.json\",\n \"lint\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache\",\n \"lint:action\": \"npm run lint:actions\",\n \"lint:actions\": \"node scripts/lint-actionlint.mjs\",\n \"lint:all\": \"npm run lint && npm run lint:css && npm run lint:prettier && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml && npm run lint:actions && npm run lint:circular\",\n \"lint:all:fix\": \"npm run lint:fix && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular\",\n \"lint:all:fix:quiet\": \"npm run lint:fix:quiet && npm run lint:css:fix && npm run lint:prettier:fix && npm run lint:remark && npm run lint:package && npm run lint:secretlint && npm run lint:yaml:fix && npm run lint:actions && npm run lint:circular\",\n \"lint:circular\": \"npm run madge:circular\",\n \"lint:compat:eslint9\": \"node scripts/eslint9-compat-smoke.mjs\",\n \"lint:config:build\": \"npm run build:eslint-inspector\",\n \"lint:config:inspect\": \"npx eslint --inspect-config\",\n \"lint:css\": \"stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache src/ docs/ --custom-formatter stylelint-formatter-pretty && echo \\\"Stylelint done!\\\"\",\n \"lint:css:fix\": \"stylelint --cache --config stylelint.config.mjs --cache-strategy content --cache-location .cache/stylelintcache src/ docs/ --custom-formatter stylelint-formatter-pretty --fix && echo \\\"Stylelint done!\\\"\",\n \"lint:depcheck\": \"depcheck\",\n \"lint:deps\": \"depcheck && npm run knip\",\n \"lint:dupes\": \"jscpd src/ --config jscpd.json\",\n \"lint:dupes:all\": \"jscpd src/ --config jscpd.json --min-lines 3\",\n \"lint:dupes:skiplocal\": \"jscpd src/ --skipLocal --config jscpd.json\",\n \"lint:dupes:skiplocal:all\": \"jscpd src/ --skipLocal --config jscpd.json --min-lines 3\",\n \"lint:duplicates\": \"npm run lint:dupes\",\n \"lint:exports\": \"ts-unused-exports tsconfig.json src/plugin.ts --excludePathsFromReport=plugin.ts\",\n \"lint:fix\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix\",\n \"lint:fix:quiet\": \"cross-env ESLINT_PROGRESS=off NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix && echo \\\"Eslint fix done!\\\"\",\n \"lint:grype\": \"grype . -c .grype.yaml --name eslint-plugin-copilot\",\n \"lint:knip\": \"npm run knip\",\n \"lint:knip:exports\": \"npm run knip -- --include exports,nsExports,classMembers,types,nsTypes,enumMembers,duplicates\",\n \"lint:knip:unused:exports\": \"npm run knip -- --dependencies --exports\",\n \"lint:leaves\": \"npm run madge:leaves\",\n \"lint:metrics\": \"npm run sloc\",\n \"lint:node-version-files\": \"node scripts/sync-node-version-files.mjs --check\",\n \"lint:orphans\": \"npm run madge:orphans\",\n \"lint:package\": \"npm run lint:node-version-files && npm run lint:package-sort && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n \"lint:package:strict\": \"npm run lint:node-version-files && npm run lint:package-sort && npm run lint:package-check && npm run lint:packagelintrc && echo \\\"Package.json lint done!\\\"\",\n \"lint:package-check\": \"publint && attw --pack .\",\n \"lint:package-check:strict\": \"publint && attw --pack . --profile strict\",\n \"lint:package-sort\": \"sort-package-json \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n \"lint:package-sort-check\": \"sort-package-json --check \\\"./package.json\\\" \\\"./docs/docusaurus/package.json\\\"\",\n \"lint:packagelintrc\": \"npmPkgJsonLint . --config .npmpackagejsonlintrc.json\",\n \"lint:prettier\": \"prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --check\",\n \"lint:prettier:fix\": \"prettier . --log-level warn --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --write\",\n \"lint:publint\": \"publint\",\n \"lint:quiet\": \"cross-env ESLINT_PROGRESS=nofile NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache && echo \\\"Eslint done!\\\"\",\n \"lint:remark\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\" --quiet\",\n \"lint:remark:fix\": \"prettier --log-level warn --ignore-path prettierignore.remark --cache --cache-location=.cache/.prettier-cache --cache-strategy=content --no-error-on-unmatched-pattern --write \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\" && npm run remark:fix\",\n \"lint:secretlint\": \"secretlint --secretlintrc .secretlintrc.json --secretlintignore .secretlintignore \\\"./*\\\" \\\".vscode/**\\\" \\\"assets/**\\\" \\\"src/**\\\" \\\"electron/**\\\" \\\"shared/**\\\" \\\"config/**\\\" \\\"scripts/**\\\" \\\"playwright/**\\\" \\\"storybook/**\\\" \\\".storybook\\\" \\\"tests/**\\\" \\\"benchmarks/**\\\" \\\".devin/**\\\" \\\"public/**\\\" \\\".github/**\\\" \\\"docs/Architecture/**\\\" \\\"docs/*\\\" \\\"docs/assets/**\\\" \\\"docs/Guides/**\\\" \\\"docs/Testing/**\\\" \\\"docs/TSDoc/**\\\" \\\"docs/docusaurus/src/**\\\" \\\"docs/docusaurus/static/**\\\" \\\"docs/docusaurus/blog/**\\\" \\\"docs/docusaurus/docs/**\\\" \\\"docs/docusaurus/docs/*\\\"\",\n \"lint:secrets\": \"detect-secrets scan\",\n \"lint:unused\": \"npm run knip -- --include unlisted,unresolved,duplicates\",\n \"lint:unused-deps\": \"depcheck --ignores='@types/*,@testing-library/*,@vitest/*'\",\n \"lint:yaml\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint done!\\\"\",\n \"lint:yaml:fix\": \"cross-env NODE_OPTIONS=--max_old_space_size=16384 eslint --cache --cache-strategy content --cache-location .cache/.eslintcache --fix \\\"**/*.{yml,yaml}\\\" && echo \\\"YAML lint (fix) done!\\\"\",\n \"madge:circular\": \"madge --circular --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|.cache|coverage|build|eslint-inspector|temp|.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n \"madge:leaves\": \"madge --leaves --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|.cache|coverage|build|eslint-inspector|temp|.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n \"madge:orphans\": \"madge --orphans --no-spinner --ts-config tsconfig.json --extensions ts,tsx,js,jsx,mjs,cjs,cts,mts ./src --exclude \\\"(^|[\\\\/])(test|dist|node_modules|cache|.cache|coverage|build|eslint-inspector|temp|.docusaurus)($|[\\\\/])|\\\\.css$\\\"\",\n \"open:coverage\": \"open-cli coverage/index.html\",\n \"prepublishOnly\": \"npm run release:check\",\n \"release:check\": \"npm run release:verify\",\n \"release:verify\": \"npm run build && npm run lint && npm run typecheck && npm run test && npm run sync:readme-rules-table && npm run sync:presets-rules-matrix && npm run docs:check-links && npm pack --dry-run\",\n \"remark:fix\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail --quiet --output -- \\\"*.{md,mdx}\\\" \\\"docs/**/*.{md,mdx}\\\"\",\n \"remark:test-config\": \"remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail \\\"README.md\\\"\",\n \"sync:node-version-files\": \"node scripts/sync-node-version-files.mjs\",\n \"sync:peer-eslint-range\": \"node scripts/sync-peer-eslint-range.mjs\",\n \"sync:presets-rules-matrix\": \"node scripts/sync-presets-rules-matrix.mjs\",\n \"sync:readme-rules-table\": \"node scripts/sync-readme-rules-table.mjs\",\n \"sync:readme-rules-table:update\": \"npm run build && cross-env COPILOT_UPDATE_GENERATED_DOCS=1 vitest run test/readme-rules-table-sync.test.ts -u\",\n \"sync:readme-rules-table:write\": \"node scripts/sync-readme-rules-table.mjs --write\",\n \"pretest\": \"npm run build\",\n \"test\": \"vitest run\",\n \"test:ci\": \"cross-env CI=true vitest run --reporter=default\",\n \"test:coverage\": \"vitest run --coverage --reporter=default\",\n \"test:coverage:detailed\": \"vitest run --coverage --reporter=verbose\",\n \"test:coverage:minimal\": \"vitest run --coverage --reporter=dot\",\n \"test:coverage:open\": \"npm run test:coverage && npm run open:coverage\",\n \"test:coverage:quiet\": \"vitest run --coverage --reporter=default --silent\",\n \"test:coverage:verbose\": \"vitest run --coverage --reporter=verbose\",\n \"test:detailed\": \"vitest run --reporter=verbose\",\n \"test:minimal\": \"vitest run --reporter=dot\",\n \"test:open\": \"npm run test:coverage && npm run open:coverage\",\n \"test:quiet\": \"vitest run --reporter=default --silent\",\n \"test:serial\": \"cross-env MAX_THREADS=1 vitest run\",\n \"test:stryker\": \"stryker run --ignoreStatic --concurrency 12 --incrementalFile .cache/stryker/incremental-fast.json\",\n \"test:stryker:ci\": \"cross-env CI=true stryker run --ignoreStatic --concurrency 2 --incrementalFile .cache/stryker/incremental-fast-ci.json\",\n \"test:stryker:full\": \"stryker run --concurrency 12 --incrementalFile .cache/stryker/incremental-full.json\",\n \"test:stryker:full:ci\": \"cross-env CI=true stryker run --concurrency 2 --incrementalFile .cache/stryker/incremental-full-ci.json\",\n \"test:verbose\": \"vitest run --reporter=verbose\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.build.json --noEmit && tsc -p tsconfig.eslint.json --noEmit && tsc -p tsconfig.js.json --noEmit && npm run --workspace docs/docusaurus typecheck\",\n \"typecheck:all\": \"npm run typecheck\",\n \"types:update\": \"typesync\",\n \"update-deps\": \"npx ncu -i --install never && npm run sync:peer-eslint-range && npm install --force\",\n \"verify:readme-rules-table\": \"npm run build && npm run sync:readme-rules-table\"\n },\n \"overrides\": {\n \"jsonc-eslint-parser\": \"$jsonc-eslint-parser\"\n },\n \"dependencies\": {\n \"@typescript-eslint/parser\": \"^8.57.1\",\n \"@typescript-eslint/type-utils\": \"^8.57.1\",\n \"@typescript-eslint/utils\": \"^8.57.1\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"^0.18.2\",\n \"@csstools/stylelint-formatter-github\": \"^2.0.0\",\n \"@docusaurus/eslint-plugin\": \"^3.9.2\",\n \"@double-great/remark-lint-alt-text\": \"^1.1.1\",\n \"@double-great/stylelint-a11y\": \"^3.4.6\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.7.1\",\n \"@eslint-react/eslint-plugin\": \"^3.0.0\",\n \"@eslint/compat\": \"^2.0.3\",\n \"@eslint/config-helpers\": \"^0.5.3\",\n \"@eslint/config-inspector\": \"^1.5.0\",\n \"@eslint/css\": \"^1.0.0\",\n \"@eslint/js\": \"^10.0.1\",\n \"@eslint/json\": \"^1.1.0\",\n \"@eslint/markdown\": \"^7.5.1\",\n \"@html-eslint/eslint-plugin\": \"^0.58.1\",\n \"@html-eslint/parser\": \"^0.58.1\",\n \"@microsoft/eslint-plugin-sdl\": \"^1.1.0\",\n \"@microsoft/tsdoc-config\": \"^0.18.1\",\n \"@secretlint/secretlint-rule-anthropic\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-aws\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-database-connection-string\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-gcp\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-github\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-no-dotenv\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-no-homedir\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-npm\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-openai\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-pattern\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-preset-recommend\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-privatekey\": \"^11.3.1\",\n \"@secretlint/secretlint-rule-secp256k1-privatekey\": \"^11.3.1\",\n \"@secretlint/types\": \"^11.3.1\",\n \"@softonus/prettier-plugin-duplicate-remover\": \"^1.1.2\",\n \"@stryker-ignorer/console-all\": \"^0.3.2\",\n \"@stryker-mutator/core\": \"^9.6.0\",\n \"@stryker-mutator/typescript-checker\": \"^9.6.0\",\n \"@stryker-mutator/vitest-runner\": \"^9.6.0\",\n \"@stylelint-types/stylelint-order\": \"^7.0.1\",\n \"@stylelint-types/stylelint-stylistic\": \"^5.0.0\",\n \"@stylistic/eslint-plugin\": \"^5.10.0\",\n \"@stylistic/stylelint-plugin\": \"^5.0.1\",\n \"@types/eslint-plugin-jsx-a11y\": \"^6.10.1\",\n \"@types/eslint-plugin-security\": \"^3.0.1\",\n \"@types/htmlhint\": \"^1.1.5\",\n \"@types/madge\": \"^5.0.3\",\n \"@types/node\": \"^25.5.0\",\n \"@types/postcss-clamp\": \"^4.1.3\",\n \"@types/postcss-flexbugs-fixes\": \"^5.0.3\",\n \"@types/postcss-html\": \"^1.5.3\",\n \"@types/postcss-import\": \"^14.0.3\",\n \"@types/postcss-inline-svg\": \"^5.0.4\",\n \"@types/postcss-normalize\": \"^9.0.4\",\n \"@types/postcss-reporter\": \"^7.0.5\",\n \"@types/sloc\": \"^0.2.3\",\n \"@typescript-eslint/eslint-plugin\": \"^8.57.1\",\n \"@typescript-eslint/rule-tester\": \"^8.57.1\",\n \"@vitest/coverage-v8\": \"^4.1.0\",\n \"@vitest/eslint-plugin\": \"^1.6.12\",\n \"@vitest/ui\": \"^4.1.0\",\n \"actionlint\": \"^2.0.6\",\n \"all-contributors-cli\": \"^6.26.1\",\n \"cognitive-complexity-ts\": \"^0.8.1\",\n \"commitlint\": \"^20.5.0\",\n \"commitlint-config-gitmoji\": \"^2.3.1\",\n \"cross-env\": \"^10.1.0\",\n \"depcheck\": \"^1.4.7\",\n \"detect-secrets\": \"^1.0.6\",\n \"eslint\": \"^10.0.3\",\n \"eslint-config-flat-gitignore\": \"^2.2.1\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-formatter-unix\": \"^9.0.1\",\n \"eslint-import-resolver-typescript\": \"^4.4.4\",\n \"eslint-plugin-array-func\": \"^5.1.1\",\n \"eslint-plugin-canonical\": \"^5.1.3\",\n \"eslint-plugin-case-police\": \"^2.2.0\",\n \"eslint-plugin-comment-length\": \"^2.3.0\",\n \"eslint-plugin-css-modules\": \"^2.12.0\",\n \"eslint-plugin-de-morgan\": \"^2.1.1\",\n \"eslint-plugin-depend\": \"^1.5.0\",\n \"eslint-plugin-eslint-plugin\": \"^7.3.2\",\n \"eslint-plugin-etc\": \"^2.0.3\",\n \"eslint-plugin-etc-misc\": \"^1.0.3\",\n \"eslint-plugin-file-progress-2\": \"^3.4.3\",\n \"eslint-plugin-html\": \"^8.1.4\",\n \"eslint-plugin-import-x\": \"^4.16.2\",\n \"eslint-plugin-jsdoc\": \"^62.8.0\",\n \"eslint-plugin-jsonc\": \"^3.1.2\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-listeners\": \"^1.5.1\",\n \"eslint-plugin-loadable-imports\": \"^1.0.1\",\n \"eslint-plugin-math\": \"^0.13.1\",\n \"eslint-plugin-module-interop\": \"^0.3.1\",\n \"eslint-plugin-n\": \"^17.24.0\",\n \"eslint-plugin-nitpick\": \"^0.12.0\",\n \"eslint-plugin-no-barrel-files\": \"^1.2.2\",\n \"eslint-plugin-no-explicit-type-exports\": \"^0.12.1\",\n \"eslint-plugin-no-function-declare-after-return\": \"^1.1.0\",\n \"eslint-plugin-no-lookahead-lookbehind-regexp\": \"^0.4.0\",\n \"eslint-plugin-no-only-tests\": \"^3.3.0\",\n \"eslint-plugin-no-secrets\": \"^2.3.3\",\n \"eslint-plugin-no-unsanitized\": \"^4.1.5\",\n \"eslint-plugin-no-use-extend-native\": \"^0.7.2\",\n \"eslint-plugin-node-dependencies\": \"^2.2.0\",\n \"eslint-plugin-package-json\": \"^0.91.0\",\n \"eslint-plugin-perfectionist\": \"^5.7.0\",\n \"eslint-plugin-prefer-arrow\": \"^1.2.3\",\n \"eslint-plugin-prettier\": \"^5.5.5\",\n \"eslint-plugin-promise\": \"^7.2.1\",\n \"eslint-plugin-redos\": \"^4.5.0\",\n \"eslint-plugin-regexp\": \"^3.1.0\",\n \"eslint-plugin-require-jsdoc\": \"^1.0.4\",\n \"eslint-plugin-security\": \"^4.0.0\",\n \"eslint-plugin-sonarjs\": \"^4.0.2\",\n \"eslint-plugin-sort-class-members\": \"^1.21.0\",\n \"eslint-plugin-testing-library\": \"^7.16.1\",\n \"eslint-plugin-toml\": \"^1.3.1\",\n \"eslint-plugin-total-functions\": \"^7.1.0\",\n \"eslint-plugin-tsdoc\": \"^0.5.2\",\n \"eslint-plugin-tsdoc-require-2\": \"^1.0.5\",\n \"eslint-plugin-undefined-css-classes\": \"^0.1.5\",\n \"eslint-plugin-unicorn\": \"^63.0.0\",\n \"eslint-plugin-unused-imports\": \"^4.4.1\",\n \"eslint-plugin-write-good-comments\": \"^0.2.0\",\n \"eslint-plugin-yml\": \"^3.3.1\",\n \"eslint-rule-benchmark\": \"^0.8.0\",\n \"fast-check\": \"^4.6.0\",\n \"git-cliff\": \"^2.12.0\",\n \"gitleaks-secret-scanner\": \"^2.1.1\",\n \"globals\": \"^17.4.0\",\n \"htmlhint\": \"^1.9.2\",\n \"jscpd\": \"^4.0.8\",\n \"jsonc-eslint-parser\": \"^3.1.0\",\n \"knip\": \"^5.88.1\",\n \"leasot\": \"^14.4.0\",\n \"madge\": \"^8.0.0\",\n \"markdown-link-check\": \"^3.14.2\",\n \"npm-check-updates\": \"^19.6.5\",\n \"npm-package-json-lint\": \"^9.1.0\",\n \"picocolors\": \"^1.1.1\",\n \"postcss\": \"^8.5.8\",\n \"postcss-assets\": \"^6.0.0\",\n \"postcss-clamp\": \"^4.1.0\",\n \"postcss-combine-duplicated-selectors\": \"^10.0.3\",\n \"postcss-flexbugs-fixes\": \"^5.0.2\",\n \"postcss-html\": \"^1.8.1\",\n \"postcss-import\": \"^16.1.1\",\n \"postcss-inline-svg\": \"^6.0.0\",\n \"postcss-logical\": \"^9.0.0\",\n \"postcss-normalize\": \"^13.0.1\",\n \"postcss-reporter\": \"^7.1.0\",\n \"postcss-round-subpixels\": \"^2.0.0\",\n \"postcss-scss\": \"^4.0.9\",\n \"postcss-sort-media-queries\": \"^6.3.2\",\n \"postcss-styled-jsx\": \"^1.0.1\",\n \"postcss-styled-syntax\": \"^0.7.1\",\n \"postcss-viewport-height-correction\": \"^1.1.1\",\n \"prettier\": \"^3.8.1\",\n \"prettier-plugin-ini\": \"^1.3.0\",\n \"prettier-plugin-interpolated-html-tags\": \"^2.0.1\",\n \"prettier-plugin-jsdoc\": \"^1.8.0\",\n \"prettier-plugin-jsdoc-type\": \"^0.2.0\",\n \"prettier-plugin-merge\": \"^0.10.0\",\n \"prettier-plugin-multiline-arrays\": \"^4.1.5\",\n \"prettier-plugin-packagejson\": \"^3.0.2\",\n \"prettier-plugin-properties\": \"^0.3.1\",\n \"prettier-plugin-sort-json\": \"^4.2.0\",\n \"prettier-plugin-toml\": \"^2.0.6\",\n \"publint\": \"^0.3.18\",\n \"recheck-jar\": \"^4.5.0\",\n \"rehype-katex\": \"^7.0.1\",\n \"remark\": \"^15.0.1\",\n \"remark-cli\": \"^12.0.1\",\n \"remark-directive\": \"^4.0.0\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"remark-ignore\": \"^3.0.0\",\n \"remark-inline-links\": \"^7.0.0\",\n \"remark-lint\": \"^10.0.1\",\n \"remark-lint-blockquote-indentation\": \"^4.0.1\",\n \"remark-lint-check-toc\": \"^1.0.0\",\n \"remark-lint-checkbox-character-style\": \"^5.0.1\",\n \"remark-lint-checkbox-content-indent\": \"^5.0.1\",\n \"remark-lint-code-block-split-list\": \"^1.0.0\",\n \"remark-lint-code-block-style\": \"^4.0.1\",\n \"remark-lint-correct-media-syntax\": \"^1.0.1\",\n \"remark-lint-definition-case\": \"^4.0.1\",\n \"remark-lint-definition-sort\": \"^1.0.1\",\n \"remark-lint-definition-spacing\": \"^4.0.1\",\n \"remark-lint-directive-attribute-sort\": \"^1.0.1\",\n \"remark-lint-directive-collapsed-attribute\": \"^1.0.1\",\n \"remark-lint-directive-quote-style\": \"^1.0.1\",\n \"remark-lint-directive-shortcut-attribute\": \"^1.0.1\",\n \"remark-lint-directive-unique-attribute-name\": \"^1.0.1\",\n \"remark-lint-emphasis-marker\": \"^4.0.1\",\n \"remark-lint-fenced-code-flag\": \"^4.2.0\",\n \"remark-lint-fenced-code-flag-case\": \"^3.0.0\",\n \"remark-lint-fenced-code-marker\": \"^4.0.1\",\n \"remark-lint-file-extension\": \"^3.0.1\",\n \"remark-lint-final-definition\": \"^4.0.2\",\n \"remark-lint-final-newline\": \"^3.0.1\",\n \"remark-lint-first-heading-level\": \"^4.0.1\",\n \"remark-lint-frontmatter-schema\": \"^3.15.4\",\n \"remark-lint-hard-break-spaces\": \"^4.1.1\",\n \"remark-lint-heading-capitalization\": \"^1.3.0\",\n \"remark-lint-heading-increment\": \"^4.0.1\",\n \"remark-lint-heading-style\": \"^4.0.1\",\n \"remark-lint-heading-whitespace\": \"^1.0.0\",\n \"remark-lint-linebreak-style\": \"^4.0.1\",\n \"remark-lint-link-title-style\": \"^4.0.1\",\n \"remark-lint-list-item-bullet-indent\": \"^5.0.1\",\n \"remark-lint-list-item-content-indent\": \"^4.0.1\",\n \"remark-lint-list-item-indent\": \"^4.0.1\",\n \"remark-lint-list-item-spacing\": \"^5.0.1\",\n \"remark-lint-maximum-heading-length\": \"^4.1.1\",\n \"remark-lint-maximum-line-length\": \"^4.1.1\",\n \"remark-lint-mdx-jsx-attribute-sort\": \"^1.0.1\",\n \"remark-lint-mdx-jsx-no-void-children\": \"^1.0.1\",\n \"remark-lint-mdx-jsx-quote-style\": \"^1.0.1\",\n \"remark-lint-mdx-jsx-self-close\": \"^1.0.1\",\n \"remark-lint-mdx-jsx-shorthand-attribute\": \"^1.0.1\",\n \"remark-lint-mdx-jsx-unique-attribute-name\": \"^1.0.1\",\n \"remark-lint-media-style\": \"^1.0.1\",\n \"remark-lint-no-blockquote-without-marker\": \"^6.0.1\",\n \"remark-lint-no-consecutive-blank-lines\": \"^5.0.1\",\n \"remark-lint-no-dead-urls\": \"^2.0.1\",\n \"remark-lint-no-duplicate-defined-urls\": \"^3.0.1\",\n \"remark-lint-no-duplicate-definitions\": \"^4.0.1\",\n \"remark-lint-no-duplicate-headings\": \"^4.0.1\",\n \"remark-lint-no-duplicate-headings-in-section\": \"^4.0.1\",\n \"remark-lint-no-emphasis-as-heading\": \"^4.0.1\",\n \"remark-lint-no-empty-sections\": \"^4.0.0\",\n \"remark-lint-no-empty-url\": \"^4.0.1\",\n \"remark-lint-no-file-name-articles\": \"^3.0.1\",\n \"remark-lint-no-file-name-consecutive-dashes\": \"^3.0.1\",\n \"remark-lint-no-file-name-irregular-characters\": \"^3.0.1\",\n \"remark-lint-no-file-name-mixed-case\": \"^3.0.1\",\n \"remark-lint-no-file-name-outer-dashes\": \"^3.0.1\",\n \"remark-lint-no-heading-content-indent\": \"^5.0.1\",\n \"remark-lint-no-heading-indent\": \"^5.0.1\",\n \"remark-lint-no-heading-like-paragraph\": \"^4.0.1\",\n \"remark-lint-no-heading-punctuation\": \"^4.0.1\",\n \"remark-lint-no-hidden-table-cell\": \"^1.0.1\",\n \"remark-lint-no-html\": \"^4.0.1\",\n \"remark-lint-no-literal-urls\": \"^4.0.1\",\n \"remark-lint-no-missing-blank-lines\": \"^4.0.1\",\n \"remark-lint-no-multiple-toplevel-headings\": \"^4.0.1\",\n \"remark-lint-no-paragraph-content-indent\": \"^5.0.1\",\n \"remark-lint-no-reference-like-url\": \"^4.0.1\",\n \"remark-lint-no-shell-dollars\": \"^4.0.1\",\n \"remark-lint-no-shortcut-reference-image\": \"^4.0.1\",\n \"remark-lint-no-shortcut-reference-link\": \"^4.0.1\",\n \"remark-lint-no-table-indentation\": \"^5.0.1\",\n \"remark-lint-no-tabs\": \"^4.0.1\",\n \"remark-lint-no-undefined-references\": \"^5.0.2\",\n \"remark-lint-no-unneeded-full-reference-image\": \"^4.0.1\",\n \"remark-lint-no-unneeded-full-reference-link\": \"^4.0.1\",\n \"remark-lint-no-unused-definitions\": \"^4.0.2\",\n \"remark-lint-ordered-list-marker-style\": \"^4.0.1\",\n \"remark-lint-ordered-list-marker-value\": \"^4.0.1\",\n \"remark-lint-rule-style\": \"^4.0.1\",\n \"remark-lint-strikethrough-marker\": \"^3.0.1\",\n \"remark-lint-strong-marker\": \"^4.0.1\",\n \"remark-lint-table-cell-padding\": \"^5.1.1\",\n \"remark-lint-table-pipe-alignment\": \"^4.1.1\",\n \"remark-lint-table-pipes\": \"^5.0.1\",\n \"remark-lint-unordered-list-marker-style\": \"^4.0.1\",\n \"remark-lint-write-good\": \"^1.2.0\",\n \"remark-math\": \"^6.0.0\",\n \"remark-preset-lint-consistent\": \"^6.0.1\",\n \"remark-preset-lint-markdown-style-guide\": \"^6.0.1\",\n \"remark-preset-lint-recommended\": \"^7.0.1\",\n \"remark-preset-prettier\": \"^2.0.2\",\n \"remark-toc\": \"^9.0.0\",\n \"remark-validate-links\": \"^13.1.0\",\n \"remark-wiki-link\": \"^2.0.1\",\n \"rimraf\": \"^6.1.3\",\n \"secretlint\": \"^11.3.1\",\n \"sloc\": \"^0.3.2\",\n \"sort-package-json\": \"^3.6.1\",\n \"stylelint\": \"^17.5.0\",\n \"stylelint-actions-formatters\": \"^16.3.1\",\n \"stylelint-checkstyle-formatter\": \"^0.1.2\",\n \"stylelint-codeframe-formatter\": \"^1.2.0\",\n \"stylelint-config-alphabetical-order\": \"^2.0.0\",\n \"stylelint-config-idiomatic-order\": \"^10.0.0\",\n \"stylelint-config-inspector\": \"^2.0.1\",\n \"stylelint-config-recess-order\": \"^7.7.0\",\n \"stylelint-config-recommended\": \"^18.0.0\",\n \"stylelint-config-sass-guidelines\": \"^13.0.0\",\n \"stylelint-config-standard\": \"^40.0.0\",\n \"stylelint-config-standard-scss\": \"^17.0.0\",\n \"stylelint-config-tailwindcss\": \"^1.0.1\",\n \"stylelint-declaration-block-no-ignored-properties\": \"^3.0.0\",\n \"stylelint-declaration-strict-value\": \"^1.11.1\",\n \"stylelint-define-config\": \"^17.2.0\",\n \"stylelint-find-new-rules\": \"^6.0.0\",\n \"stylelint-formatter-gitlab-code-quality-report\": \"^1.1.0\",\n \"stylelint-formatter-pretty\": \"^4.0.1\",\n \"stylelint-gamut\": \"^2.0.0\",\n \"stylelint-group-selectors\": \"^1.0.10\",\n \"stylelint-high-performance-animation\": \"^2.0.0\",\n \"stylelint-media-use-custom-media\": \"^4.1.0\",\n \"stylelint-no-browser-hacks\": \"^2.0.0\",\n \"stylelint-no-indistinguishable-colors\": \"^2.3.1\",\n \"stylelint-no-restricted-syntax\": \"^2.2.1\",\n \"stylelint-no-unresolved-module\": \"^2.5.2\",\n \"stylelint-no-unsupported-browser-features\": \"^8.1.1\",\n \"stylelint-order\": \"^8.1.1\",\n \"stylelint-plugin-defensive-css\": \"^2.8.0\",\n \"stylelint-plugin-logical-css\": \"^2.0.2\",\n \"stylelint-plugin-use-baseline\": \"^1.2.7\",\n \"stylelint-prettier\": \"^5.0.3\",\n \"stylelint-react-native\": \"^2.7.0\",\n \"stylelint-scales\": \"^5.0.0\",\n \"stylelint-selector-bem-pattern\": \"^4.0.1\",\n \"stylelint-use-nesting\": \"^6.0.2\",\n \"stylelint-value-no-unknown-custom-properties\": \"^6.1.1\",\n \"toml-eslint-parser\": \"^1.0.3\",\n \"ts-unused-exports\": \"^11.0.1\",\n \"typedoc\": \"^0.28.17\",\n \"typescript\": \"^5.9.3\",\n \"typescript-eslint\": \"^8.57.1\",\n \"typesync\": \"^0.14.3\",\n \"vfile\": \"^6.0.3\",\n \"vite\": \"^8.0.1\",\n \"vite-tsconfig-paths\": \"^6.1.1\",\n \"vitest\": \"^4.1.0\",\n \"yaml-eslint-parser\": \"^2.0.0\",\n \"yamllint-js\": \"^0.2.4\"\n },\n \"peerDependencies\": {\n \"eslint\": \"^9.0.0 || ^10.0.3\",\n \"typescript\": \">=5.0.0\"\n },\n \"packageManager\": \"npm@11.12.0\",\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"devEngines\": {\n \"runtime\": {\n \"name\": \"node\",\n \"version\": \">=22.0.0\",\n \"onFail\": \"error\"\n },\n \"packageManager\": {\n \"name\": \"npm\",\n \"version\": \">=11.0.0\",\n \"onFail\": \"error\"\n }\n },\n \"publishConfig\": {\n \"provenance\": true,\n \"registry\": \"https://registry.npmjs.org/\"\n },\n \"readme\": \"README.md\"\n}\n", "/**\n * @packageDocumentation\n * Shared Copilot preset/config reference constants and type guards.\n */\n\n/** Canonical flat-config preset keys exposed through `plugin.configs`. */\nexport const copilotConfigNames = [\n \"all\",\n \"minimal\",\n \"recommended\",\n \"strict\",\n] as const;\n\n/** Metadata contract shared across preset wiring, docs, and README rendering. */\nexport type CopilotConfigMetadata = Readonly<{\n icon: string;\n presetName: `copilot:${CopilotConfigName}`;\n readmeOrder: number;\n requiresTypeChecking: boolean;\n}>;\n\n/** Canonical flat-config preset key type exposed through `plugin.configs`. */\nexport type CopilotConfigName = (typeof copilotConfigNames)[number];\n\n/** Fully-qualified preset reference lookup object shape. */\ntype CopilotConfigReferenceMap = Readonly<{\n \"copilot.configs.all\": \"all\";\n \"copilot.configs.minimal\": \"minimal\";\n \"copilot.configs.recommended\": \"recommended\";\n \"copilot.configs.strict\": \"strict\";\n}>;\n\n/** Canonical metadata for every exported `copilot` preset key. */\nexport const copilotConfigMetadataByName: Readonly<\n Record<CopilotConfigName, CopilotConfigMetadata>\n> = {\n all: {\n icon: \"\uD83D\uDFE3\",\n presetName: \"copilot:all\",\n readmeOrder: 4,\n requiresTypeChecking: false,\n },\n minimal: {\n icon: \"\uD83D\uDFE2\",\n presetName: \"copilot:minimal\",\n readmeOrder: 1,\n requiresTypeChecking: false,\n },\n recommended: {\n icon: \"\uD83D\uDFE1\",\n presetName: \"copilot:recommended\",\n readmeOrder: 2,\n requiresTypeChecking: false,\n },\n strict: {\n icon: \"\uD83D\uDD34\",\n presetName: \"copilot:strict\",\n readmeOrder: 3,\n requiresTypeChecking: false,\n },\n};\n\n/** Stable README legend/rendering order for preset icons. */\nexport const copilotConfigNamesByReadmeOrder: readonly CopilotConfigName[] = [\n \"minimal\",\n \"recommended\",\n \"strict\",\n \"all\",\n];\n\n/** Fully-qualified preset reference lookup used by rule docs metadata. */\nexport const copilotConfigReferenceToName: CopilotConfigReferenceMap = {\n \"copilot.configs.all\": \"all\",\n \"copilot.configs.minimal\": \"minimal\",\n \"copilot.configs.recommended\": \"recommended\",\n \"copilot.configs.strict\": \"strict\",\n};\n\n/** Fully-qualified preset reference type accepted in docs metadata. */\nexport type CopilotConfigReference = keyof typeof copilotConfigReferenceToName;\n\n/** Check whether a string is a supported docs preset reference. */\nexport const isCopilotConfigReference: (\n value: string\n) => value is CopilotConfigReference = (\n value\n): value is CopilotConfigReference =>\n Object.hasOwn(copilotConfigReferenceToName, value);\n", "/**\n * @packageDocumentation\n * Path classification helpers for GitHub Copilot repository customization files.\n */\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\n/** Supported GitHub Copilot repository file categories. */\nexport type CopilotFileKind =\n | \"agent-instructions\"\n | \"chatmode\"\n | \"instructions\"\n | \"prompt\"\n | \"repository-hook\"\n | \"repository-instructions\"\n | \"skill\";\n\n/** Normalize a path to slash-separated form for pattern checks. */\nconst normalizeFilePath = (filePath: string): string =>\n path.resolve(filePath).replaceAll(\"\\\\\", \"/\");\n\n/** Check whether a path points to a legacy workspace chat mode file. */\nexport const isLegacyChatmodeFilePath = (filePath: string): boolean => {\n const normalizedFilePath = normalizeFilePath(filePath);\n const basename = path.posix.basename(normalizedFilePath);\n\n return (\n normalizedFilePath.includes(\"/.github/chatmodes/\") &&\n basename.endsWith(\".chatmode.md\")\n );\n};\n\n/** Check whether a path points to a workspace-level custom agent file. */\nexport const isCustomAgentFilePath = (filePath: string): boolean => {\n const normalizedFilePath = normalizeFilePath(filePath);\n const basename = path.posix.basename(normalizedFilePath);\n\n return (\n normalizedFilePath.includes(\"/.github/agents/\") &&\n basename.endsWith(\".agent.md\")\n );\n};\n\n/** Check whether a path points to a supported repository skill directory. */\nconst isSupportedSkillDirectoryPath = (filePath: string): boolean => {\n const normalizedFilePath = normalizeFilePath(filePath);\n\n return (\n normalizedFilePath.includes(\"/.github/skills/\") ||\n normalizedFilePath.includes(\"/.claude/skills/\")\n );\n};\n\n/** Check whether a path points to a Markdown file inside a skill directory. */\nexport const isSkillMarkdownFilePath = (filePath: string): boolean => {\n const normalizedFilePath = normalizeFilePath(filePath);\n\n return (\n isSupportedSkillDirectoryPath(normalizedFilePath) &&\n normalizedFilePath.endsWith(\".md\")\n );\n};\n\n/** Check whether a path points to a `SKILL.md` skill definition file. */\nexport const isSkillFilePath = (filePath: string): boolean => {\n const normalizedFilePath = normalizeFilePath(filePath);\n const basename = path.posix.basename(normalizedFilePath);\n\n return (\n isSupportedSkillDirectoryPath(normalizedFilePath) &&\n basename === \"SKILL.md\"\n );\n};\n\n/** Check whether a path points to a repository hook configuration file. */\nexport const isRepositoryHookFilePath = (filePath: string): boolean => {\n const normalizedFilePath = normalizeFilePath(filePath);\n const basename = path.posix.basename(normalizedFilePath);\n\n return (\n normalizedFilePath.includes(\"/.github/hooks/\") &&\n basename.endsWith(\".json\")\n );\n};\n\n/** Check whether a basename is one of the supported agent instruction names. */\nconst isAgentInstructionsBasename = (basename: string): boolean =>\n basename === \"AGENTS.md\" ||\n basename === \"CLAUDE.md\" ||\n basename === \"GEMINI.md\";\n\n/** Derive the Copilot customization file kind for an absolute or relative path. */\nexport const getCopilotFileKind = (\n filePath: string\n): CopilotFileKind | null => {\n const normalizedFilePath = normalizeFilePath(filePath);\n const basename = path.posix.basename(normalizedFilePath);\n\n if (normalizedFilePath.endsWith(\"/.github/copilot-instructions.md\")) {\n return \"repository-instructions\";\n }\n\n if (\n normalizedFilePath.includes(\"/.github/instructions/\") &&\n basename.endsWith(\".instructions.md\")\n ) {\n return \"instructions\";\n }\n\n if (\n normalizedFilePath.includes(\"/.github/prompts/\") &&\n basename.endsWith(\".prompt.md\")\n ) {\n return \"prompt\";\n }\n\n if (isSkillFilePath(normalizedFilePath)) {\n return \"skill\";\n }\n\n if (isRepositoryHookFilePath(normalizedFilePath)) {\n return \"repository-hook\";\n }\n\n if (\n isLegacyChatmodeFilePath(normalizedFilePath) ||\n isCustomAgentFilePath(normalizedFilePath)\n ) {\n return \"chatmode\";\n }\n\n return isAgentInstructionsBasename(basename) ? \"agent-instructions\" : null;\n};\n\n/** Discover the repository root for the current file path. */\nexport const findRepositoryRoot = (filePath: string): string => {\n const normalizedFilePath = path.resolve(filePath);\n const pathSegments = normalizeFilePath(normalizedFilePath).split(\"/\");\n const githubDirectoryIndex = pathSegments.lastIndexOf(\".github\");\n\n if (githubDirectoryIndex > 0) {\n const rootSegments = pathSegments.slice(0, githubDirectoryIndex);\n const candidateRoot = rootSegments.join(path.sep);\n\n if (candidateRoot.length > 0) {\n return candidateRoot;\n }\n }\n\n let currentDirectory = path.dirname(normalizedFilePath);\n\n while (true) {\n const packageJsonPath = path.join(currentDirectory, \"package.json\");\n const eslintConfigPath = path.join(\n currentDirectory,\n \"eslint.config.mjs\"\n );\n const gitDirectoryPath = path.join(currentDirectory, \".git\");\n\n if (\n fs.existsSync(packageJsonPath) ||\n fs.existsSync(eslintConfigPath) ||\n fs.existsSync(gitDirectoryPath)\n ) {\n return currentDirectory;\n }\n\n const parentDirectory = path.dirname(currentDirectory);\n\n if (parentDirectory === currentDirectory) {\n return path.dirname(normalizedFilePath);\n }\n\n currentDirectory = parentDirectory;\n }\n};\n\n/** Resolve the canonical repository custom instructions file path. */\nexport const getRepositoryInstructionsPath = (filePath: string): string =>\n path.join(\n findRepositoryRoot(filePath),\n \".github\",\n \"copilot-instructions.md\"\n );\n", "/**\n * @packageDocumentation\n * Shared rule creator wrapper used by eslint-plugin-copilot rules.\n */\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type {\n CopilotConfigName,\n CopilotConfigReference,\n} from \"./copilot-config-references.js\";\n\nimport { getRuleCatalogEntryForRuleName } from \"./rule-catalog.js\";\nimport { createRuleDocsUrl } from \"./rule-docs-url.js\";\n\n/** Copilot-specific metadata extensions stored in `meta.docs`. */\nexport type CopilotRuleDocs = Readonly<{\n copilotConfigNames: readonly CopilotConfigName[];\n copilotConfigs: CopilotConfigReference | readonly CopilotConfigReference[];\n description: string;\n frozen: boolean;\n recommended: boolean;\n requiresTypeChecking: boolean;\n ruleId: string;\n ruleNumber: number;\n url: string;\n}>;\n\n/** Public runtime rule module shape emitted by this plugin. */\nexport type CopilotRuleModule = Readonly<{\n name: string;\n}> &\n TSESLint.RuleModule<string, readonly unknown[], CopilotRuleDocs>;\n\ntype BaseRuleCreator = ReturnType<\n typeof ESLintUtils.RuleCreator<CopilotRuleInputDocs>\n>;\n\n/** Authored docs metadata accepted by individual rule modules. */\ntype CopilotRuleInputDocs = Readonly<{\n copilotConfigs: CopilotConfigReference | readonly CopilotConfigReference[];\n description: string;\n frozen: boolean;\n recommended: boolean;\n requiresTypeChecking: boolean;\n}>;\n\nconst baseRuleCreator: BaseRuleCreator =\n ESLintUtils.RuleCreator<CopilotRuleInputDocs>(createRuleDocsUrl);\n\nconst getCopilotConfigNameFromReference = (\n reference: CopilotConfigReference\n): CopilotConfigName => {\n switch (reference) {\n case \"copilot.configs.all\": {\n return \"all\";\n }\n\n case \"copilot.configs.minimal\": {\n return \"minimal\";\n }\n\n case \"copilot.configs.recommended\": {\n return \"recommended\";\n }\n\n case \"copilot.configs.strict\": {\n return \"strict\";\n }\n\n default: {\n throw new TypeError(\n `Unsupported Copilot config reference: ${reference}`\n );\n }\n }\n};\n\n/** Normalize preset references into stable preset-name keys. */\nconst normalizeCopilotConfigNames: (\n value: CopilotConfigReference | readonly CopilotConfigReference[]\n) => readonly CopilotConfigName[] = (\n value: CopilotConfigReference | readonly CopilotConfigReference[]\n) => {\n const references = Array.isArray(value) ? value : [value];\n const normalizedNames = new Set<CopilotConfigName>();\n\n for (const reference of references) {\n normalizedNames.add(getCopilotConfigNameFromReference(reference));\n }\n\n return [...normalizedNames];\n};\n\n/**\n * Shared rule creator that injects canonical docs URLs and stable catalog ids.\n */\nexport const createCopilotRule = <\n Options extends readonly unknown[],\n MessageIds extends string,\n>(\n ruleDefinition: Parameters<typeof baseRuleCreator<Options, MessageIds>>[0]\n): CopilotRuleModule => {\n const createdRule = baseRuleCreator(ruleDefinition);\n const catalogEntry = getRuleCatalogEntryForRuleName(ruleDefinition.name);\n const authoredDocs = ruleDefinition.meta.docs;\n const docs: CopilotRuleDocs = {\n ...authoredDocs,\n copilotConfigNames: normalizeCopilotConfigNames(\n authoredDocs.copilotConfigs\n ),\n ruleId: catalogEntry.ruleId,\n ruleNumber: catalogEntry.ruleNumber,\n url: createRuleDocsUrl(ruleDefinition.name),\n };\n\n return {\n ...createdRule,\n meta: {\n ...createdRule.meta,\n docs,\n },\n name: ruleDefinition.name,\n } satisfies CopilotRuleModule;\n};\n", "/**\n * @packageDocumentation\n * Stable catalog ids for eslint-plugin-copilot rules.\n */\n\n/** Catalog metadata for a single Copilot rule. */\nexport type CopilotRuleCatalogEntry = Readonly<{\n ruleId: CopilotRuleCatalogId;\n ruleName: CopilotRuleNamePattern;\n ruleNumber: number;\n}>;\n\n/** Stable machine-friendly rule id format (for example: `R001`). */\nexport type CopilotRuleCatalogId = `R${string}`;\n\n/** Pattern for unqualified rule names supported by eslint-plugin-copilot. */\ntype CopilotRuleNamePattern =\n | \"no-blank-customization-body\"\n | \"no-blank-repository-instructions\"\n | \"no-blank-skill-body\"\n | \"no-deprecated-agent-infer\"\n | \"no-duplicate-agent-names\"\n | \"no-duplicate-prompt-names\"\n | \"no-duplicate-skill-names\"\n | \"no-duplicate-slash-command-names\"\n | \"no-empty-repository-hook-arrays\"\n | \"no-legacy-chatmode-files\"\n | \"prefer-custom-instructions-under-code-review-limit\"\n | \"prefer-fast-repository-hooks\"\n | \"prefer-qualified-tools\"\n | \"require-agent-tool-for-subagents\"\n | \"require-agents-md-for-cross-surface-agent-instructions\"\n | \"require-chatmode-file-metadata\"\n | \"require-existing-agent-hook-cwd\"\n | \"require-existing-agent-mcp-servers\"\n | \"require-existing-relative-agent-links\"\n | \"require-existing-relative-instructions-links\"\n | \"require-existing-relative-prompt-links\"\n | \"require-existing-relative-skill-links\"\n | \"require-existing-repository-hook-cwd\"\n | \"require-github-copilot-target-for-mcp-servers\"\n | \"require-instructions-apply-to\"\n | \"require-json-agent-mcp-servers\"\n | \"require-prompt-file-metadata\"\n | \"require-qualified-agent-handoff-models\"\n | \"require-relative-agent-hook-cwd\"\n | \"require-relative-agent-links\"\n | \"require-relative-instructions-links\"\n | \"require-relative-prompt-links\"\n | \"require-relative-repository-hook-cwd\"\n | \"require-relative-skill-links\"\n | \"require-repository-hook-arrays\"\n | \"require-repository-hook-command-shell\"\n | \"require-repository-hooks-object\"\n | \"require-repository-instructions-file\"\n | \"require-skill-file-location\"\n | \"require-skill-file-metadata\"\n | \"require-skill-md-filename\"\n | \"require-skill-name-match-directory\"\n | \"require-string-repository-hook-env-values\"\n | \"require-valid-agent-argument-hint\"\n | \"require-valid-agent-handoff-send\"\n | \"require-valid-agent-handoffs\"\n | \"require-valid-agent-hook-events\"\n | \"require-valid-agent-hook-timeouts\"\n | \"require-valid-agent-hooks\"\n | \"require-valid-agent-invocation-controls\"\n | \"require-valid-agent-mcp-servers\"\n | \"require-valid-agent-model\"\n | \"require-valid-agent-name\"\n | \"require-valid-agent-subagents\"\n | \"require-valid-agent-target\"\n | \"require-valid-agent-tools\"\n | \"require-valid-instructions-apply-to-globs\"\n | \"require-valid-prompt-argument-hint\"\n | \"require-valid-prompt-model\"\n | \"require-valid-prompt-name\"\n | \"require-valid-prompt-tools\"\n | \"require-valid-repository-hook-command-type\"\n | \"require-valid-repository-hook-env\"\n | \"require-valid-repository-hook-events\"\n | \"require-valid-repository-hook-timeouts\"\n | \"require-valid-repository-hook-version\"\n | \"require-valid-skill-directory-name\"\n | \"require-valid-skill-license\"\n | \"require-valid-skill-name\";\n\n/** Stable global ordering used for rule catalog ids. */\nconst orderedRuleNames = [\n \"require-instructions-apply-to\",\n \"require-prompt-file-metadata\",\n \"require-chatmode-file-metadata\",\n \"no-blank-repository-instructions\",\n \"require-repository-instructions-file\",\n \"prefer-qualified-tools\",\n \"no-deprecated-agent-infer\",\n \"require-agent-tool-for-subagents\",\n \"no-blank-customization-body\",\n \"require-github-copilot-target-for-mcp-servers\",\n \"no-legacy-chatmode-files\",\n \"require-valid-agent-handoffs\",\n \"require-qualified-agent-handoff-models\",\n \"require-valid-agent-hook-events\",\n \"require-valid-agent-hooks\",\n \"require-valid-agent-hook-timeouts\",\n \"require-valid-agent-subagents\",\n \"require-relative-agent-hook-cwd\",\n \"require-valid-agent-target\",\n \"require-valid-agent-invocation-controls\",\n \"require-valid-agent-handoff-send\",\n \"require-valid-agent-model\",\n \"require-valid-agent-mcp-servers\",\n \"require-relative-prompt-links\",\n \"require-valid-agent-tools\",\n \"require-valid-prompt-model\",\n \"require-valid-prompt-tools\",\n \"require-relative-agent-links\",\n \"require-relative-instructions-links\",\n \"require-existing-relative-prompt-links\",\n \"require-existing-relative-agent-links\",\n \"require-existing-relative-instructions-links\",\n \"require-existing-agent-mcp-servers\",\n \"require-json-agent-mcp-servers\",\n \"require-existing-agent-hook-cwd\",\n \"prefer-custom-instructions-under-code-review-limit\",\n \"require-agents-md-for-cross-surface-agent-instructions\",\n \"no-duplicate-prompt-names\",\n \"no-duplicate-agent-names\",\n \"require-valid-prompt-name\",\n \"require-valid-prompt-argument-hint\",\n \"require-valid-agent-name\",\n \"require-valid-agent-argument-hint\",\n \"require-valid-instructions-apply-to-globs\",\n \"require-skill-file-location\",\n \"require-skill-file-metadata\",\n \"no-blank-skill-body\",\n \"require-valid-skill-name\",\n \"require-valid-skill-directory-name\",\n \"require-skill-name-match-directory\",\n \"require-valid-skill-license\",\n \"require-relative-skill-links\",\n \"require-existing-relative-skill-links\",\n \"no-duplicate-skill-names\",\n \"require-skill-md-filename\",\n \"require-valid-repository-hook-version\",\n \"require-repository-hooks-object\",\n \"require-repository-hook-arrays\",\n \"require-valid-repository-hook-events\",\n \"require-valid-repository-hook-command-type\",\n \"require-repository-hook-command-shell\",\n \"require-relative-repository-hook-cwd\",\n \"require-existing-repository-hook-cwd\",\n \"require-valid-repository-hook-timeouts\",\n \"require-valid-repository-hook-env\",\n \"require-string-repository-hook-env-values\",\n \"no-empty-repository-hook-arrays\",\n \"prefer-fast-repository-hooks\",\n \"no-duplicate-slash-command-names\",\n] as const satisfies readonly CopilotRuleNamePattern[];\n\nconst toRuleCatalogId = (ruleNumber: number): CopilotRuleCatalogId =>\n `R${String(ruleNumber).padStart(3, \"0\")}`;\n\n/** Canonical catalog metadata entries in stable display/order form. */\nexport const copilotRuleCatalogEntries: readonly CopilotRuleCatalogEntry[] =\n orderedRuleNames.map((ruleName, index) => {\n const ruleNumber = index + 1;\n\n return {\n ruleId: toRuleCatalogId(ruleNumber),\n ruleName,\n ruleNumber,\n };\n });\n\n/** Fast lookup map for rule catalog metadata by rule name. */\nconst copilotRuleCatalogByRuleName = new Map(\n copilotRuleCatalogEntries.map((entry) => [entry.ruleName, entry])\n);\n\n/** Resolve stable catalog metadata for a rule name. */\nexport const getRuleCatalogEntryForRuleName = (\n ruleName: string\n): CopilotRuleCatalogEntry => {\n const entry = copilotRuleCatalogByRuleName.get(\n ruleName as CopilotRuleNamePattern\n );\n\n if (entry === undefined) {\n throw new TypeError(\n `Rule '${ruleName}' is missing from the stable rule catalog.`\n );\n }\n\n return entry;\n};\n", "/**\n * @packageDocumentation\n * Canonical rule documentation URL helpers.\n */\n\n/** Stable docs host/prefix for generated rule docs links. */\nexport const RULE_DOCS_URL_BASE =\n \"https://nick2bad4u.github.io/eslint-plugin-copilot/docs/rules/\" as const;\n\n/** Build the canonical documentation URL for one Copilot rule. */\nexport const createRuleDocsUrl = (ruleName: string): string =>\n `${RULE_DOCS_URL_BASE}${ruleName}`;\n", "/**\n * @packageDocumentation\n * Lightweight Markdown frontmatter helpers for Copilot customization files.\n */\n\n/** Parsed frontmatter bundle extracted from the start of a Markdown document. */\nexport type FrontmatterDocument = Readonly<{\n body: string;\n content: string;\n fields: ReadonlyMap<string, FrontmatterField>;\n}>;\n\n/** Parsed frontmatter field variants supported by this plugin. */\nexport type FrontmatterField =\n | Readonly<{\n kind: \"list\";\n values: readonly string[];\n }>\n | Readonly<{\n kind: \"scalar\";\n value: string;\n }>;\n\n/** Parsed object entry from a supported nested frontmatter list block. */\nexport type FrontmatterObjectListEntry = Readonly<Record<string, string>>;\n\n/** Parsed nested object-list groups keyed by a frontmatter subfield name. */\nexport type FrontmatterObjectListGroupMap = ReadonlyMap<\n string,\n readonly FrontmatterObjectListEntry[]\n>;\n\n/** Determine whether a character is an ASCII letter. */\nconst isAsciiLetter = (character: string): boolean =>\n (character >= \"A\" && character <= \"Z\") ||\n (character >= \"a\" && character <= \"z\");\n\n/** Determine whether a character is valid after the first YAML field letter. */\nconst isYamlIdentifierCharacter = (character: string): boolean =>\n isAsciiLetter(character) ||\n (character >= \"0\" && character <= \"9\") ||\n character === \"-\";\n\n/** Validate the limited frontmatter field names this plugin supports. */\nconst isSupportedFrontmatterFieldName = (value: string): boolean => {\n if (value.length === 0 || !isAsciiLetter(value[0] ?? \"\")) {\n return false;\n }\n\n for (const character of value.slice(1)) {\n if (!isYamlIdentifierCharacter(character)) {\n return false;\n }\n }\n\n return true;\n};\n\n/** Parse a supported `key: value` frontmatter line. */\nconst parseFieldLine = (\n line: string\n): null | Readonly<{ key: string; value: string }> => {\n const separatorIndex = line.indexOf(\":\");\n\n if (separatorIndex <= 0) {\n return null;\n }\n\n const key = line.slice(0, separatorIndex).trim();\n\n if (!isSupportedFrontmatterFieldName(key)) {\n return null;\n }\n\n return {\n key,\n value: line.slice(separatorIndex + 1),\n };\n};\n\n/** Read a single line and its ending index from a source string. */\nconst readLine = (\n text: string,\n startIndex: number\n): Readonly<{ line: string; nextIndex: number }> => {\n const lineFeedIndex = text.indexOf(\"\\n\", startIndex);\n\n if (lineFeedIndex === -1) {\n return {\n line: text.endsWith(\"\\r\")\n ? text.slice(startIndex, -1)\n : text.slice(startIndex),\n nextIndex: text.length,\n };\n }\n\n const lineEndIndex =\n text[lineFeedIndex - 1] === \"\\r\" ? lineFeedIndex - 1 : lineFeedIndex;\n\n return {\n line: text.slice(startIndex, lineEndIndex),\n nextIndex: lineFeedIndex + 1,\n };\n};\n\n/** Remove one trailing CRLF or LF sequence when present. */\nconst trimTrailingLineBreak = (value: string): string => {\n if (value.endsWith(\"\\r\\n\")) {\n return value.slice(0, -2);\n }\n\n if (value.endsWith(\"\\n\")) {\n return value.slice(0, -1);\n }\n\n return value;\n};\n\n/** Collect an indented frontmatter block after a top-level field. */\nconst collectIndentedBlockLines = (\n lines: readonly string[],\n startIndex: number\n): Readonly<{ blockLines: readonly string[]; nextIndex: number }> => {\n const blockLines: string[] = [];\n let nextIndex = startIndex;\n\n while (nextIndex < lines.length) {\n const nextLine = lines[nextIndex] ?? \"\";\n\n if (\n nextLine.trim().length > 0 &&\n !nextLine.startsWith(\" \") &&\n !nextLine.startsWith(\"\\t\")\n ) {\n break;\n }\n\n if (nextLine.trim().length > 0) {\n blockLines.push(nextLine);\n }\n\n nextIndex += 1;\n }\n\n return {\n blockLines,\n nextIndex,\n };\n};\n\n/** Strip balanced HTML comments from Markdown body text. */\nconst stripHtmlComments = (text: string): string => {\n let result = \"\";\n let searchIndex = 0;\n\n while (searchIndex < text.length) {\n const commentStartIndex = text.indexOf(\"<!--\", searchIndex);\n\n if (commentStartIndex === -1) {\n result += text.slice(searchIndex);\n break;\n }\n\n result += text.slice(searchIndex, commentStartIndex);\n\n const commentEndIndex = text.indexOf(\"-->\", commentStartIndex + 4);\n\n if (commentEndIndex === -1) {\n result += text.slice(commentStartIndex);\n break;\n }\n\n searchIndex = commentEndIndex + 3;\n }\n\n return result;\n};\n\n/** Count leading spaces or tabs for indentation-sensitive YAML subsets. */\nconst getIndentationWidth = (line: string): number => {\n let width = 0;\n\n for (const character of line) {\n if (character === \" \") {\n width += 1;\n continue;\n }\n\n if (character === \"\\t\") {\n width += 4;\n continue;\n }\n\n break;\n }\n\n return width;\n};\n\n/** Remove balanced single or double quotes from a scalar YAML value. */\nconst stripQuotes = (value: string): string => {\n if (value.length >= 2) {\n const firstCharacter = value.at(0);\n const lastCharacter = value.at(-1);\n\n if (\n (firstCharacter === '\"' && lastCharacter === '\"') ||\n (firstCharacter === \"'\" && lastCharacter === \"'\")\n ) {\n return value.slice(1, -1);\n }\n }\n\n return value;\n};\n\n/** Normalize a scalar-like YAML token into a trimmed string value. */\nfunction normalizeScalarValue(value: string): string {\n return stripQuotes(value.trim()).trim();\n}\n\n/** Assign a parsed YAML `key: value` pair into an object-list entry. */\nconst setObjectEntryField = (\n target: Record<string, string>,\n source: string\n): void => {\n const property = parseFieldLine(source.trim());\n\n if (property === null) {\n return;\n }\n\n target[property.key] = normalizeScalarValue(property.value);\n};\n\n/** Parse a one-line YAML flow sequence such as `[\"a\", \"b\"]`. */\nconst parseInlineList = (value: string): readonly string[] => {\n const trimmedValue = value.trim();\n\n if (!trimmedValue.startsWith(\"[\") || !trimmedValue.endsWith(\"]\")) {\n return [];\n }\n\n const innerValue = trimmedValue.slice(1, -1).trim();\n\n if (innerValue.length === 0) {\n return [];\n }\n\n return innerValue\n .split(\",\")\n .map((item) => normalizeScalarValue(item))\n .filter((item) => item.length > 0);\n};\n\n/** Parse an indented YAML block list of scalar strings. */\nconst parseBlockList = (lines: readonly string[]): readonly string[] =>\n lines\n .map((line) => {\n const trimmedLine = line.trim();\n\n if (!trimmedLine.startsWith(\"-\")) {\n return \"\";\n }\n\n return normalizeScalarValue(trimmedLine.slice(1));\n })\n .filter((value) => value.length > 0);\n\n/** Parse the supported subset of YAML frontmatter fields used by Copilot. */\nconst parseFrontmatterFields = (\n content: string\n): ReadonlyMap<string, FrontmatterField> => {\n const lines = content.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n const fields = new Map<string, FrontmatterField>();\n let index = 0;\n\n while (index < lines.length) {\n const currentLine = lines[index]?.trimEnd() ?? \"\";\n\n if (currentLine.trim().length === 0) {\n index += 1;\n continue;\n }\n\n const field = parseFieldLine(currentLine.trimStart());\n\n if (field === null) {\n index += 1;\n continue;\n }\n\n const normalizedValue = field.value.trim();\n\n if (normalizedValue.length > 0) {\n const inlineList = parseInlineList(normalizedValue);\n\n if (inlineList.length > 0) {\n fields.set(field.key, {\n kind: \"list\",\n values: inlineList,\n });\n index += 1;\n continue;\n }\n\n fields.set(field.key, {\n kind: \"scalar\",\n value: normalizeScalarValue(normalizedValue),\n });\n index += 1;\n continue;\n }\n\n const { blockLines, nextIndex } = collectIndentedBlockLines(\n lines,\n index + 1\n );\n\n const parsedBlockValues = parseBlockList(blockLines);\n\n if (parsedBlockValues.length > 0) {\n fields.set(field.key, {\n kind: \"list\",\n values: parsedBlockValues,\n });\n index = nextIndex;\n continue;\n }\n\n fields.set(field.key, {\n kind: \"scalar\",\n value: \"\",\n });\n\n index = nextIndex;\n }\n\n return fields;\n};\n\n/** Extract top-of-file YAML frontmatter when present. */\nexport const extractFrontmatter = (\n text: string\n): FrontmatterDocument | null => {\n if (!text.startsWith(\"---\")) {\n return null;\n }\n\n const openingLine = readLine(text, 0);\n\n if (openingLine.line !== \"---\" || openingLine.nextIndex >= text.length) {\n return null;\n }\n\n let lineStartIndex = openingLine.nextIndex;\n\n while (lineStartIndex < text.length) {\n const currentLine = readLine(text, lineStartIndex);\n\n if (currentLine.line === \"---\") {\n const content = trimTrailingLineBreak(\n text.slice(openingLine.nextIndex, lineStartIndex)\n );\n\n return {\n body: text.slice(currentLine.nextIndex),\n content,\n fields: parseFrontmatterFields(content),\n };\n }\n\n lineStartIndex = currentLine.nextIndex;\n }\n\n return null;\n};\n\n/** Read a non-empty scalar frontmatter value. */\nexport const getFrontmatterScalar = (\n document: FrontmatterDocument,\n key: string\n): string | undefined => {\n const field = document.fields.get(key);\n\n return field?.kind === \"scalar\" && field.value.length > 0\n ? field.value\n : undefined;\n};\n\n/** Read a non-empty list of scalar frontmatter values. */\nexport const getFrontmatterList = (\n document: FrontmatterDocument,\n key: string\n): readonly string[] | undefined => {\n const field = document.fields.get(key);\n\n return field?.kind === \"list\" && field.values.length > 0\n ? field.values\n : undefined;\n};\n\n/** Determine whether a field exists but is empty or unparsable for our subset. */\nexport const hasFrontmatterField = (\n document: FrontmatterDocument,\n key: string\n): boolean => document.fields.has(key);\n\n/** Read a supported YAML object-list block such as `handoffs:` entries. */\nexport const getFrontmatterObjectList = (\n document: FrontmatterDocument,\n key: string\n): readonly FrontmatterObjectListEntry[] | undefined => {\n const lines = document.content.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n let index = 0;\n\n while (index < lines.length) {\n const currentLine = lines[index] ?? \"\";\n\n if (currentLine.startsWith(\" \") || currentLine.startsWith(\"\\t\")) {\n index += 1;\n continue;\n }\n\n const field = parseFieldLine(currentLine.trimEnd());\n\n if (field === null) {\n index += 1;\n continue;\n }\n\n if (field.key !== key) {\n index += 1;\n continue;\n }\n\n const rawValue = field.value.trim();\n\n if (rawValue === \"[]\") {\n return [];\n }\n\n if (rawValue.length > 0) {\n return undefined;\n }\n\n const { blockLines } = collectIndentedBlockLines(lines, index + 1);\n\n const entries: Record<string, string>[] = [];\n let currentEntry: null | Record<string, string> = null;\n\n for (const blockLine of blockLines) {\n const trimmedLine = blockLine.trim();\n\n if (trimmedLine.startsWith(\"-\")) {\n if (currentEntry !== null) {\n entries.push(currentEntry);\n }\n\n currentEntry = {};\n const inlineProperty = trimmedLine.slice(1).trim();\n\n if (inlineProperty.length > 0) {\n setObjectEntryField(currentEntry, inlineProperty);\n }\n\n continue;\n }\n\n if (currentEntry === null) {\n continue;\n }\n\n setObjectEntryField(currentEntry, trimmedLine);\n }\n\n if (currentEntry !== null) {\n entries.push(currentEntry);\n }\n\n return entries;\n }\n\n return undefined;\n};\n\n/** Read nested YAML mappings of object lists such as `hooks: Event: - ...`. */\nexport const getFrontmatterObjectListGroups = (\n document: FrontmatterDocument,\n key: string\n): FrontmatterObjectListGroupMap | undefined => {\n const lines = document.content.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n let index = 0;\n\n while (index < lines.length) {\n const currentLine = lines[index] ?? \"\";\n\n if (currentLine.startsWith(\" \") || currentLine.startsWith(\"\\t\")) {\n index += 1;\n continue;\n }\n\n const field = parseFieldLine(currentLine.trimEnd());\n\n if (field === null) {\n index += 1;\n continue;\n }\n\n if (field.key !== key) {\n index += 1;\n continue;\n }\n\n const rawValue = field.value.trim();\n\n if (rawValue.length > 0) {\n return undefined;\n }\n\n const { blockLines } = collectIndentedBlockLines(lines, index + 1);\n\n const groups = new Map<string, FrontmatterObjectListEntry[]>();\n let currentGroupName: null | string = null;\n let currentEntry: null | Record<string, string> = null;\n\n const flushCurrentEntry = (): void => {\n if (currentGroupName === null || currentEntry === null) {\n return;\n }\n\n const groupEntries = groups.get(currentGroupName) ?? [];\n groupEntries.push(currentEntry);\n groups.set(currentGroupName, groupEntries);\n currentEntry = null;\n };\n\n for (const blockLine of blockLines) {\n const indentationWidth = getIndentationWidth(blockLine);\n const trimmedLine = blockLine.trim();\n\n if (trimmedLine.length === 0) {\n continue;\n }\n\n if (!trimmedLine.startsWith(\"-\") && indentationWidth <= 4) {\n flushCurrentEntry();\n\n const groupField = parseFieldLine(trimmedLine);\n\n if (groupField === null) {\n currentGroupName = null;\n continue;\n }\n\n currentGroupName = groupField.key;\n\n if (\n currentGroupName !== null &&\n !groups.has(currentGroupName)\n ) {\n groups.set(currentGroupName, []);\n }\n\n continue;\n }\n\n if (trimmedLine.startsWith(\"-\")) {\n flushCurrentEntry();\n\n if (currentGroupName === null) {\n continue;\n }\n\n currentEntry = {};\n const inlineProperty = trimmedLine.slice(1).trim();\n\n if (inlineProperty.length > 0) {\n setObjectEntryField(currentEntry, inlineProperty);\n }\n\n continue;\n }\n\n if (currentEntry === null) {\n continue;\n }\n\n setObjectEntryField(currentEntry, trimmedLine);\n }\n\n flushCurrentEntry();\n\n return groups;\n }\n\n return undefined;\n};\n\n/** Remove HTML comments before checking whether Markdown body content exists. */\nexport const getMeaningfulMarkdownBody = (text: string): string =>\n stripHtmlComments(text).trim();\n", "/**\n * @packageDocumentation\n * Shared helpers for markdown-backed Copilot rules.\n */\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\n/** Common document-start report location used by markdown rules. */\nconst createDocumentStartLocation = (\n context: Readonly<TSESLint.RuleContext<string, readonly unknown[]>>\n): TSESLint.AST.SourceLocation => ({\n end: context.sourceCode.getLocFromIndex(\n Math.min(1, context.sourceCode.text.length)\n ),\n start: context.sourceCode.getLocFromIndex(0),\n});\n\n/** Report a markdown document-level problem at the start of the file. */\nexport const reportAtDocumentStart = <MessageIds extends string>(\n context: Readonly<TSESLint.RuleContext<MessageIds, readonly unknown[]>>,\n options: Readonly<{\n data?: Readonly<Record<string, string>>;\n messageId: MessageIds;\n }>\n): void => {\n context.report({\n ...options,\n loc: createDocumentStartLocation(context),\n });\n};\n\n/** Create a markdown document listener keyed off the root AST node. */\nexport const createMarkdownDocumentListener = (\n lintDocument: () => void\n): TSESLint.RuleListener => ({\n root() {\n lintDocument();\n },\n});\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `no-blank-customization-body`.\n */\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getMeaningfulMarkdownBody,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst noBlankCustomizationBodyRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n const fileKind = getCopilotFileKind(context.filename);\n\n if (fileKind === null || fileKind === \"repository-instructions\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const bodyText = frontmatter?.body ?? context.sourceCode.text;\n\n if (getMeaningfulMarkdownBody(bodyText).length > 0) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"blankBody\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow blank bodies in Copilot customization files other than repository-wide instructions.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n blankBody:\n \"Copilot customization files should include meaningful Markdown instructions in the document body, not only frontmatter or comments.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-blank-customization-body\",\n});\n\nexport default noBlankCustomizationBodyRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `no-blank-repository-instructions`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getMeaningfulMarkdownBody,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst noBlankRepositoryInstructionsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (\n getCopilotFileKind(context.filename) !==\n \"repository-instructions\"\n ) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const body = getMeaningfulMarkdownBody(\n frontmatter?.body ?? context.sourceCode.text\n );\n\n if (body.length > 0) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"blankInstructions\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow empty repository-wide Copilot instructions files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n blankInstructions:\n \"Repository-wide Copilot instructions should contain actionable Markdown guidance instead of being blank.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-blank-repository-instructions\",\n});\n\nexport default noBlankRepositoryInstructionsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `no-blank-skill-body`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { extractFrontmatter } from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst noBlankSkillBodyRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const body = frontmatter?.body ?? context.sourceCode.text;\n\n if (body.trim().length > 0) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"blankSkillBody\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description: \"disallow blank Copilot skill definition bodies.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n blankSkillBody:\n \"Copilot skill definition files should include a non-empty Markdown body with instructions, examples, or guidance.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-blank-skill-body\",\n});\n\nexport default noBlankSkillBodyRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `no-deprecated-agent-infer`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst noDeprecatedAgentInferRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"infer\")\n ) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"deprecatedInfer\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow deprecated `infer` frontmatter in Copilot custom agent files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n deprecatedInfer:\n \"Copilot custom agent files should replace deprecated `infer` frontmatter with `user-invocable` and/or `disable-model-invocation`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-deprecated-agent-infer\",\n});\n\nexport default noDeprecatedAgentInferRule;\n", "/**\n * @packageDocumentation\n * ESLint rule implementation for `no-duplicate-agent-names`.\n */\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nimport type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getAgentName,\n normalizeNameForComparison,\n} from \"../_internal/copilot-customization-names.js\";\nimport {\n findRepositoryRoot,\n isCustomAgentFilePath,\n} from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { collectDuplicateNameGroups } from \"../_internal/duplicate-names.js\";\nimport { listFilesRecursively } from \"../_internal/file-system.js\";\nimport { extractFrontmatter } from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst normalizeRelativeFilePath = (\n repositoryRoot: string,\n filePath: string\n): string => path.relative(repositoryRoot, filePath).replaceAll(\"\\\\\", \"/\");\n\nconst noDuplicateAgentNamesRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const repositoryRoot = findRepositoryRoot(context.filename);\n const agentDirectory = path.join(\n repositoryRoot,\n \".github\",\n \"agents\"\n );\n const agentFiles = listFilesRecursively(\n agentDirectory,\n (filePath) => filePath.endsWith(\".agent.md\")\n );\n const duplicateGroups = collectDuplicateNameGroups(\n agentFiles.map((filePath) => {\n const sourceText =\n context.filename === filePath\n ? context.sourceCode.text\n : fs.readFileSync(filePath, \"utf8\");\n\n return {\n filePath,\n name: getAgentName(\n filePath,\n extractFrontmatter(sourceText)\n ),\n };\n }),\n normalizeNameForComparison\n );\n const currentAgentName = getAgentName(\n context.filename,\n extractFrontmatter(context.sourceCode.text)\n );\n const duplicateGroup = duplicateGroups.get(\n normalizeNameForComparison(currentAgentName)\n );\n\n if (duplicateGroup === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n files: duplicateGroup\n .map((entry) =>\n normalizeRelativeFilePath(\n repositoryRoot,\n entry.filePath\n )\n )\n .join(\", \"),\n name: currentAgentName,\n },\n messageId: \"duplicateAgentName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow duplicate effective custom-agent names across workspace custom-agent files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n duplicateAgentName:\n \"Copilot custom-agent name `{{name}}` is duplicated across agent files: {{files}}.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-duplicate-agent-names\",\n});\n\nexport default noDuplicateAgentNamesRule;\n", "/**\n * @packageDocumentation\n * Shared naming helpers for prompt, agent, and skill customization files.\n */\nimport * as path from \"node:path\";\n\nimport type { FrontmatterDocument } from \"./frontmatter.js\";\n\nimport { getFrontmatterScalar } from \"./frontmatter.js\";\n\nconst normalizeSlashName = (value: string): string => value.trim();\n\nconst getOptionalFrontmatterScalar = (\n frontmatter: FrontmatterDocument | null,\n key: string\n): string | undefined =>\n frontmatter === null ? undefined : getFrontmatterScalar(frontmatter, key);\n\n/** Normalize a command or display name for duplicate comparisons. */\nexport const normalizeNameForComparison = (value: string): string =>\n normalizeSlashName(value).toLowerCase();\n\nconst isAsciiLowercaseAlphaNumeric = (character: string): boolean =>\n (character >= \"0\" && character <= \"9\") ||\n (character >= \"a\" && character <= \"z\");\n\n/**\n * Determine whether a skill identifier matches the documented lowercase-hyphen\n * form.\n */\nexport const isValidSkillIdentifier = (value: string): boolean => {\n const trimmedValue = value.trim();\n\n if (trimmedValue.length === 0) {\n return false;\n }\n\n let previousCharacterWasHyphen = false;\n\n for (const character of trimmedValue) {\n if (character === \"-\") {\n if (previousCharacterWasHyphen) {\n return false;\n }\n\n previousCharacterWasHyphen = true;\n continue;\n }\n\n if (!isAsciiLowercaseAlphaNumeric(character)) {\n return false;\n }\n\n previousCharacterWasHyphen = false;\n }\n\n return !trimmedValue.startsWith(\"-\") && !trimmedValue.endsWith(\"-\");\n};\n\n/** Get the default prompt name derived from a `.prompt.md` file name. */\nexport const getDefaultPromptName = (filePath: string): string =>\n path.basename(filePath).replace(/\\.prompt\\.md$/u, \"\");\n\n/** Get the effective prompt slash-command name. */\nexport const getPromptName = (\n filePath: string,\n frontmatter: FrontmatterDocument | null\n): string =>\n normalizeSlashName(\n getOptionalFrontmatterScalar(frontmatter, \"name\") ??\n getDefaultPromptName(filePath)\n );\n\n/** Get the default custom-agent name derived from the file name. */\nexport const getDefaultAgentName = (filePath: string): string =>\n path\n .basename(filePath)\n .replace(/\\.agent\\.md$/u, \"\")\n .replace(/\\.md$/u, \"\");\n\n/** Get the effective custom-agent name. */\nexport const getAgentName = (\n filePath: string,\n frontmatter: FrontmatterDocument | null\n): string =>\n normalizeSlashName(\n getOptionalFrontmatterScalar(frontmatter, \"name\") ??\n getDefaultAgentName(filePath)\n );\n\n/** Get the parent directory name for a skill file. */\nexport const getSkillDirectoryName = (filePath: string): string =>\n path.basename(path.dirname(filePath));\n\n/** Get the effective skill name when declared. */\nexport const getSkillName = (\n filePath: string,\n frontmatter: FrontmatterDocument | null\n): string =>\n normalizeSlashName(\n getOptionalFrontmatterScalar(frontmatter, \"name\") ??\n getSkillDirectoryName(filePath)\n );\n", "/**\n * @packageDocumentation\n * Shared duplicate-name helpers for Copilot customization files.\n */\n\n/** A named Copilot customization file paired with its normalized display name. */\nexport type NamedCustomizationFile = Readonly<{\n filePath: string;\n name: string;\n}>;\n\n/** Group files by normalized name and keep only duplicate groups. */\nexport const collectDuplicateNameGroups = (\n entries: readonly NamedCustomizationFile[],\n normalizeName: (value: string) => string\n): ReadonlyMap<string, readonly NamedCustomizationFile[]> => {\n const groups = new Map<string, NamedCustomizationFile[]>();\n\n for (const entry of entries) {\n const normalizedName = normalizeName(entry.name);\n\n if (normalizedName.length === 0) {\n continue;\n }\n\n const group = groups.get(normalizedName) ?? [];\n group.push(entry);\n groups.set(normalizedName, group);\n }\n\n return new Map(\n [...groups.entries()]\n .filter(([, group]) => group.length > 1)\n .map(([name, group]) => [\n name,\n group.toSorted((left, right) =>\n left.filePath.localeCompare(right.filePath)\n ),\n ])\n );\n};\n", "/**\n * @packageDocumentation\n * Shared filesystem helpers for Copilot repository rule implementations.\n */\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nconst WINDOWS_ABSOLUTE_PATH_PATTERN = /^[A-Za-z]:[/\\\\]/u;\nconst URI_SCHEME_PATTERN = /^[A-Za-z][+\\-.0-9A-Za-z]*:/u;\n\n/** Normalize a path to absolute slash-separated form. */\nexport const normalizeAbsolutePath = (filePath: string): string =>\n path.resolve(filePath).replaceAll(\"\\\\\", \"/\");\n\n/** Determine whether an absolute or relative path currently exists on disk. */\nexport const pathExists = (filePath: string): boolean =>\n fs.existsSync(filePath);\n\n/** Remove `#fragment` and `?query` suffixes from a Markdown-style path target. */\nexport const stripPathFragmentAndQuery = (value: string): string => {\n const queryIndex = value.indexOf(\"?\");\n const fragmentIndex = value.indexOf(\"#\");\n const cutIndexCandidates = [queryIndex, fragmentIndex].filter(\n (index) => index >= 0\n );\n\n if (cutIndexCandidates.length === 0) {\n return value;\n }\n\n return value.slice(0, Math.min(...cutIndexCandidates));\n};\n\n/** Determine whether a string is a Windows absolute path such as `C:\\repo`. */\nexport const isWindowsAbsolutePath = (value: string): boolean =>\n WINDOWS_ABSOLUTE_PATH_PATTERN.test(value);\n\n/** Determine whether a string starts with a URI-like scheme such as `https:`. */\nexport const hasUriScheme = (value: string): boolean =>\n !isWindowsAbsolutePath(value) && URI_SCHEME_PATTERN.test(value);\n\n/** Determine whether a path token is obviously non-relative for workspace use. */\nexport const isNonRelativeWorkspacePath = (value: string): boolean => {\n const trimmedValue = value.trim();\n const lowercaseValue = trimmedValue.toLowerCase();\n\n if (trimmedValue.length === 0 || trimmedValue.startsWith(\"#\")) {\n return false;\n }\n\n if (\n lowercaseValue.startsWith(\"/\") ||\n lowercaseValue.startsWith(\"\\\\\") ||\n lowercaseValue.startsWith(\"~/\") ||\n lowercaseValue.startsWith(\"~\\\\\") ||\n lowercaseValue.startsWith(\"file:\")\n ) {\n return true;\n }\n\n return isWindowsAbsolutePath(trimmedValue);\n};\n\n/** Determine whether a value is a workspace-relative path-like reference. */\nexport const isRelativeWorkspacePath = (value: string): boolean => {\n const trimmedValue = value.trim();\n\n return (\n trimmedValue.length > 0 &&\n !trimmedValue.startsWith(\"#\") &&\n !hasUriScheme(trimmedValue) &&\n !isNonRelativeWorkspacePath(trimmedValue)\n );\n};\n\n/** Resolve a workspace-relative path from the current file location. */\nexport const resolveRelativeWorkspacePath = (\n currentFilePath: string,\n relativePath: string\n): string =>\n path.resolve(\n path.dirname(currentFilePath),\n stripPathFragmentAndQuery(relativePath)\n );\n\n/** Resolve a repository-root-relative path token. */\nexport const resolveRepositoryRelativePath = (\n repositoryRootPath: string,\n relativePath: string\n): string =>\n path.resolve(repositoryRootPath, stripPathFragmentAndQuery(relativePath));\n\n/** Recursively list files under a directory when it exists. */\nexport const listFilesRecursively = (\n directoryPath: string,\n predicate?: (absoluteFilePath: string) => boolean\n): readonly string[] => {\n if (!pathExists(directoryPath)) {\n return [];\n }\n\n const discoveredFiles: string[] = [];\n const pendingDirectories = [directoryPath];\n\n while (pendingDirectories.length > 0) {\n const currentDirectory = pendingDirectories.pop();\n\n if (currentDirectory === undefined) {\n continue;\n }\n\n for (const entry of fs.readdirSync(currentDirectory, {\n withFileTypes: true,\n })) {\n const absoluteEntryPath = path.join(currentDirectory, entry.name);\n\n if (entry.isDirectory()) {\n pendingDirectories.push(absoluteEntryPath);\n continue;\n }\n\n if (!entry.isFile()) {\n continue;\n }\n\n if (predicate !== undefined && !predicate(absoluteEntryPath)) {\n continue;\n }\n\n discoveredFiles.push(absoluteEntryPath);\n }\n }\n\n return discoveredFiles.toSorted((left, right) => left.localeCompare(right));\n};\n", "import * as fs from \"node:fs\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `no-duplicate-prompt-names`.\n */\nimport * as path from \"node:path\";\n\nimport type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getPromptName,\n normalizeNameForComparison,\n} from \"../_internal/copilot-customization-names.js\";\nimport { findRepositoryRoot } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { collectDuplicateNameGroups } from \"../_internal/duplicate-names.js\";\nimport { listFilesRecursively } from \"../_internal/file-system.js\";\nimport { extractFrontmatter } from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst normalizeRelativeFilePath = (\n repositoryRoot: string,\n filePath: string\n): string => path.relative(repositoryRoot, filePath).replaceAll(\"\\\\\", \"/\");\n\nconst noDuplicatePromptNamesRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!context.filename.endsWith(\".prompt.md\")) {\n return;\n }\n\n const repositoryRoot = findRepositoryRoot(context.filename);\n const promptDirectory = path.join(\n repositoryRoot,\n \".github\",\n \"prompts\"\n );\n const promptFiles = listFilesRecursively(\n promptDirectory,\n (filePath) => filePath.endsWith(\".prompt.md\")\n );\n const duplicateGroups = collectDuplicateNameGroups(\n promptFiles.map((filePath) => {\n const sourceText =\n context.filename === filePath\n ? context.sourceCode.text\n : fs.readFileSync(filePath, \"utf8\");\n\n return {\n filePath,\n name: getPromptName(\n filePath,\n extractFrontmatter(sourceText)\n ),\n };\n }),\n normalizeNameForComparison\n );\n const currentPromptName = getPromptName(\n context.filename,\n extractFrontmatter(context.sourceCode.text)\n );\n const duplicateGroup = duplicateGroups.get(\n normalizeNameForComparison(currentPromptName)\n );\n\n if (duplicateGroup === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n files: duplicateGroup\n .map((entry) =>\n normalizeRelativeFilePath(\n repositoryRoot,\n entry.filePath\n )\n )\n .join(\", \"),\n name: currentPromptName,\n },\n messageId: \"duplicatePromptName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow duplicate effective prompt names across workspace prompt files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n duplicatePromptName:\n \"Copilot prompt name `{{name}}` is duplicated across prompt files: {{files}}.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-duplicate-prompt-names\",\n});\n\nexport default noDuplicatePromptNamesRule;\n", "/**\n * @packageDocumentation\n * ESLint rule implementation for `no-duplicate-skill-names`.\n */\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nimport type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getSkillName,\n normalizeNameForComparison,\n} from \"../_internal/copilot-customization-names.js\";\nimport {\n findRepositoryRoot,\n isSkillFilePath,\n} from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { collectDuplicateNameGroups } from \"../_internal/duplicate-names.js\";\nimport { listFilesRecursively } from \"../_internal/file-system.js\";\nimport { extractFrontmatter } from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst normalizeRelativeFilePath = (\n repositoryRoot: string,\n filePath: string\n): string => path.relative(repositoryRoot, filePath).replaceAll(\"\\\\\", \"/\");\n\nconst noDuplicateSkillNamesRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const repositoryRoot = findRepositoryRoot(context.filename);\n const skillFiles = [\n ...listFilesRecursively(\n path.join(repositoryRoot, \".github\", \"skills\"),\n (filePath) => path.basename(filePath) === \"SKILL.md\"\n ),\n ...listFilesRecursively(\n path.join(repositoryRoot, \".claude\", \"skills\"),\n (filePath) => path.basename(filePath) === \"SKILL.md\"\n ),\n ];\n const duplicateGroups = collectDuplicateNameGroups(\n skillFiles.map((filePath) => {\n const sourceText =\n context.filename === filePath\n ? context.sourceCode.text\n : fs.readFileSync(filePath, \"utf8\");\n\n return {\n filePath,\n name: getSkillName(\n filePath,\n extractFrontmatter(sourceText)\n ),\n };\n }),\n normalizeNameForComparison\n );\n const currentSkillName = getSkillName(\n context.filename,\n extractFrontmatter(context.sourceCode.text)\n );\n const duplicateGroup = duplicateGroups.get(\n normalizeNameForComparison(currentSkillName)\n );\n\n if (duplicateGroup === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n files: duplicateGroup\n .map((entry) =>\n normalizeRelativeFilePath(\n repositoryRoot,\n entry.filePath\n )\n )\n .join(\", \"),\n name: currentSkillName,\n },\n messageId: \"duplicateSkillName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow duplicate effective skill names across project skill definition files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n duplicateSkillName:\n \"Copilot skill name `{{name}}` is duplicated across skill files: {{files}}.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-duplicate-skill-names\",\n});\n\nexport default noDuplicateSkillNamesRule;\n", "/**\n * @packageDocumentation\n * ESLint rule implementation for `no-duplicate-slash-command-names`.\n */\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nimport type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getPromptName,\n getSkillName,\n normalizeNameForComparison,\n} from \"../_internal/copilot-customization-names.js\";\nimport {\n findRepositoryRoot,\n isSkillFilePath,\n} from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { collectDuplicateNameGroups } from \"../_internal/duplicate-names.js\";\nimport { listFilesRecursively } from \"../_internal/file-system.js\";\nimport { extractFrontmatter } from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst isPromptOrSkillCommandFile = (filePath: string): boolean =>\n filePath.endsWith(\".prompt.md\") || isSkillFilePath(filePath);\n\nconst normalizeRelativeFilePath = (\n repositoryRoot: string,\n filePath: string\n): string => path.relative(repositoryRoot, filePath).replaceAll(\"\\\\\", \"/\");\n\nconst noDuplicateSlashCommandNamesRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isPromptOrSkillCommandFile(context.filename)) {\n return;\n }\n\n const repositoryRoot = findRepositoryRoot(context.filename);\n const commandFiles = [\n ...listFilesRecursively(\n path.join(repositoryRoot, \".github\", \"prompts\"),\n (filePath) => filePath.endsWith(\".prompt.md\")\n ),\n ...listFilesRecursively(\n path.join(repositoryRoot, \".github\", \"skills\"),\n (filePath) => path.basename(filePath) === \"SKILL.md\"\n ),\n ...listFilesRecursively(\n path.join(repositoryRoot, \".claude\", \"skills\"),\n (filePath) => path.basename(filePath) === \"SKILL.md\"\n ),\n ];\n const duplicateGroups = collectDuplicateNameGroups(\n commandFiles.map((filePath) => {\n const sourceText =\n context.filename === filePath\n ? context.sourceCode.text\n : fs.readFileSync(filePath, \"utf8\");\n const frontmatter = extractFrontmatter(sourceText);\n\n return {\n filePath,\n name: filePath.endsWith(\".prompt.md\")\n ? getPromptName(filePath, frontmatter)\n : getSkillName(filePath, frontmatter),\n };\n }),\n normalizeNameForComparison\n );\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const currentCommandName = context.filename.endsWith(\".prompt.md\")\n ? getPromptName(context.filename, frontmatter)\n : getSkillName(context.filename, frontmatter);\n const duplicateGroup = duplicateGroups.get(\n normalizeNameForComparison(currentCommandName)\n );\n\n if (duplicateGroup === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n files: duplicateGroup\n .map((entry) =>\n normalizeRelativeFilePath(\n repositoryRoot,\n entry.filePath\n )\n )\n .join(\", \"),\n name: currentCommandName,\n },\n messageId: \"duplicateSlashCommandName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow duplicate slash-command names across prompt files and skills.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n duplicateSlashCommandName:\n \"Slash command name `{{name}}` is duplicated across prompt or skill files: {{files}}.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-duplicate-slash-command-names\",\n});\n\nexport default noDuplicateSlashCommandNamesRule;\n", "/**\n * @packageDocumentation\n * Shared JSON helpers for repository hook configuration rules.\n */\n\n/** Read-only JSON array value. */\nexport type JsonArray = readonly JsonValue[];\n/** Read-only JSON object value. */\nexport interface JsonObject {\n readonly [key: string]: JsonValue;\n}\n/** JSON primitive scalar value. */\nexport type JsonPrimitive = boolean | null | number | string;\n/** Any supported JSON value. */\nexport type JsonValue = JsonArray | JsonObject | JsonPrimitive;\n\n/** Repository hook entry paired with its source event name and array index. */\nexport type RepositoryHookEntry = Readonly<{\n eventName: string;\n hook: JsonObject;\n index: number;\n}>;\n\n/** Supported repository hook event names. */\nexport type RepositoryHookEventName =\n | \"agentStop\"\n | \"errorOccurred\"\n | \"postToolUse\"\n | \"preToolUse\"\n | \"sessionEnd\"\n | \"sessionStart\"\n | \"subagentStop\"\n | \"userPromptSubmitted\";\n\n/** Supported repository hook transport types. */\nexport type RepositoryHookType = \"command\" | \"prompt\";\n\n/** Default repository hook timeout used by GitHub Copilot. */\nexport const DEFAULT_REPOSITORY_HOOK_TIMEOUT_SECONDS = 30;\n\n/** Known valid repository hook event names. */\nexport const VALID_REPOSITORY_HOOK_EVENT_NAMES: ReadonlySet<RepositoryHookEventName> =\n new Set([\n \"agentStop\",\n \"errorOccurred\",\n \"postToolUse\",\n \"preToolUse\",\n \"sessionEnd\",\n \"sessionStart\",\n \"subagentStop\",\n \"userPromptSubmitted\",\n ]);\n\n/** Known valid repository hook types. */\nexport const VALID_REPOSITORY_HOOK_TYPES: ReadonlySet<RepositoryHookType> =\n new Set([\"command\", \"prompt\"]);\n\n/** Determine whether a string is a supported repository hook event name. */\nexport const isRepositoryHookEventName = (\n value: string\n): value is RepositoryHookEventName =>\n VALID_REPOSITORY_HOOK_EVENT_NAMES.has(value as RepositoryHookEventName);\n\n/** Determine whether a string is a supported repository hook type. */\nexport const isRepositoryHookType = (\n value: string\n): value is RepositoryHookType =>\n VALID_REPOSITORY_HOOK_TYPES.has(value as RepositoryHookType);\n\n/** Determine whether a parsed JSON value is an object. */\nexport const isJsonObject = (\n value: JsonValue | undefined\n): value is JsonObject =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** Determine whether a parsed JSON value is an array. */\nexport const isJsonArray = (value: JsonValue | undefined): value is JsonArray =>\n Array.isArray(value);\n\n/** Determine whether a parsed JSON value is a string. */\nexport const isJsonString = (value: JsonValue | undefined): value is string =>\n typeof value === \"string\";\n\n/** Determine whether a parsed JSON value is a finite number. */\nexport const isJsonNumber = (value: JsonValue | undefined): value is number =>\n typeof value === \"number\" && Number.isFinite(value);\n\n/** Safely parse JSON source text. */\nexport const parseJsonText = (text: string): JsonValue | undefined => {\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return undefined;\n }\n};\n\n/** Get the top-level `hooks` value when present. */\nexport const getRepositoryHooksValue = (\n root: JsonValue | undefined\n): JsonValue | undefined => (isJsonObject(root) ? root[\"hooks\"] : undefined);\n\n/** Get the top-level `version` value when present. */\nexport const getRepositoryHooksVersionValue = (\n root: JsonValue | undefined\n): JsonValue | undefined => (isJsonObject(root) ? root[\"version\"] : undefined);\n\n/** Get key/value entries from the `hooks` object when present. */\nexport const getRepositoryHookEventEntries = (\n root: JsonValue | undefined\n): readonly (readonly [string, JsonValue])[] => {\n const hooksValue = getRepositoryHooksValue(root);\n\n return isJsonObject(hooksValue) ? Object.entries(hooksValue) : [];\n};\n\n/** Collect object-shaped hook entries from hook arrays. */\nexport const getRepositoryHookObjects = (\n root: JsonValue | undefined\n): readonly RepositoryHookEntry[] => {\n const hookEntries: RepositoryHookEntry[] = [];\n\n for (const [eventName, eventValue] of getRepositoryHookEventEntries(root)) {\n if (!isJsonArray(eventValue)) {\n continue;\n }\n\n for (const [index, hookValue] of eventValue.entries()) {\n if (!isJsonObject(hookValue)) {\n continue;\n }\n\n hookEntries.push({\n eventName,\n hook: hookValue,\n index,\n });\n }\n }\n\n return hookEntries;\n};\n\n/** Format a parsed JSON value for diagnostic messages. */\nexport const formatJsonValue = (value: JsonValue | undefined): string => {\n if (value === undefined) {\n return \"(missing)\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n return JSON.stringify(value);\n};\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `no-empty-repository-hook-arrays`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n getRepositoryHookEventEntries,\n isJsonArray,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst noEmptyRepositoryHookArraysRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const emptyEntry = getRepositoryHookEventEntries(root).find(\n ([, eventValue]) =>\n isJsonArray(eventValue) && eventValue.length === 0\n );\n\n if (emptyEntry === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName: emptyEntry[0],\n },\n messageId: \"emptyRepositoryHookArray\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\"copilot.configs.strict\", \"copilot.configs.all\"],\n description:\n \"disallow empty repository hook arrays that opt into an event without any hook definitions.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n emptyRepositoryHookArray:\n \"Repository hook event `{{eventName}}` should not be declared with an empty array.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"no-empty-repository-hook-arrays\",\n});\n\nexport default noEmptyRepositoryHookArraysRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `no-legacy-chatmode-files`.\n */\nimport { isLegacyChatmodeFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst noLegacyChatmodeFilesRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isLegacyChatmodeFilePath(context.filename)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"legacyChatmodeFile\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"disallow legacy Copilot `.chatmode.md` files in favor of modern `.agent.md` custom agents.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n legacyChatmodeFile:\n \"Legacy Copilot `.chatmode.md` files should be migrated to `.github/agents/*.agent.md` custom agents.\",\n },\n schema: [],\n type: \"suggestion\",\n },\n name: \"no-legacy-chatmode-files\",\n});\n\nexport default noLegacyChatmodeFilesRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `prefer-custom-instructions-under-code-review-limit`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst CODE_REVIEW_CUSTOM_INSTRUCTIONS_LIMIT = 4000;\n\nconst preferCustomInstructionsUnderCodeReviewLimitRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n const fileKind = getCopilotFileKind(context.filename);\n\n if (\n fileKind !== \"instructions\" &&\n fileKind !== \"repository-instructions\"\n ) {\n return;\n }\n\n const characterCount = context.sourceCode.text.length;\n\n if (characterCount <= CODE_REVIEW_CUSTOM_INSTRUCTIONS_LIMIT) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n characterCount: String(characterCount),\n maxCharacters: String(\n CODE_REVIEW_CUSTOM_INSTRUCTIONS_LIMIT\n ),\n },\n messageId: \"exceedsCodeReviewLimit\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"enforce repository and path-specific Copilot instruction files staying within the 4,000-character code-review instruction budget.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n exceedsCodeReviewLimit:\n \"Copilot code review only reads roughly the first {{maxCharacters}} characters of custom instructions; this file is {{characterCount}} characters long.\",\n },\n schema: [],\n type: \"suggestion\",\n },\n name: \"prefer-custom-instructions-under-code-review-limit\",\n });\n\nexport default preferCustomInstructionsUnderCodeReviewLimitRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `prefer-fast-repository-hooks`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n DEFAULT_REPOSITORY_HOOK_TIMEOUT_SECONDS,\n getRepositoryHookObjects,\n isJsonNumber,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst preferFastRepositoryHooksRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const slowHook = getRepositoryHookObjects(root).find(\n ({ hook }) => {\n const timeout = hook[\"timeoutSec\"];\n\n return (\n isJsonNumber(timeout) &&\n timeout > DEFAULT_REPOSITORY_HOOK_TIMEOUT_SECONDS\n );\n }\n );\n\n if (slowHook === undefined) {\n return;\n }\n\n const timeout = slowHook.hook[\"timeoutSec\"];\n\n if (!isJsonNumber(timeout)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName: slowHook.eventName,\n timeout: String(timeout),\n },\n messageId: \"slowRepositoryHookTimeout\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\"copilot.configs.strict\", \"copilot.configs.all\"],\n description:\n \"enforce repository hooks staying at or below the default 30-second timeout unless a slower hook is truly necessary.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n slowRepositoryHookTimeout:\n \"Repository hook `timeoutSec` for `{{eventName}}` is {{timeout}} seconds, which exceeds the default 30-second timeout budget.\",\n },\n schema: [],\n type: \"suggestion\",\n },\n name: \"prefer-fast-repository-hooks\",\n});\n\nexport default preferFastRepositoryHooksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `prefer-qualified-tools`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst isQualifiedToolName = (toolName: string): boolean =>\n toolName.includes(\"/\");\n\nconst allowedUnqualifiedToolNames = new Set([\"agent\", \"runSubagent\"]);\n\nconst preferQualifiedToolsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n const fileKind = getCopilotFileKind(context.filename);\n\n if (fileKind !== \"chatmode\" && fileKind !== \"prompt\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const tools = getFrontmatterList(frontmatter, \"tools\");\n\n if (tools === undefined) {\n return;\n }\n\n const firstUnqualifiedTool = tools.find(\n (toolName) =>\n !isQualifiedToolName(toolName) &&\n !allowedUnqualifiedToolNames.has(toolName)\n );\n\n if (firstUnqualifiedTool === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: { toolName: firstUnqualifiedTool },\n messageId: \"preferQualifiedTool\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\"copilot.configs.all\"],\n description:\n \"enforce fully-qualified tool names in Copilot prompt files, custom agents, and legacy chat modes.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n preferQualifiedTool:\n \"Prefer fully-qualified Copilot tool names in `tools` metadata when a documented built-in alias is not required. `{{toolName}}` should include a provider or tool-set prefix such as `search/codebase`.\",\n },\n schema: [],\n type: \"suggestion\",\n },\n name: \"prefer-qualified-tools\",\n});\n\nexport default preferQualifiedToolsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-agent-tool-for-subagents`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst hasAgentTool = (tools: readonly string[] | undefined): boolean =>\n tools?.some((toolName) => toolName.split(\"/\").at(-1) === \"agent\") ?? false;\n\nconst requireAgentToolForSubagentsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n if (!hasFrontmatterField(frontmatter, \"agents\")) {\n return;\n }\n\n const allowedAgents = getFrontmatterList(frontmatter, \"agents\");\n const agentsScalar = getFrontmatterScalar(frontmatter, \"agents\");\n\n if (\n agentsScalar !== \"*\" &&\n (allowedAgents === undefined || allowedAgents.length === 0)\n ) {\n return;\n }\n\n const tools = getFrontmatterList(frontmatter, \"tools\");\n\n if (hasAgentTool(tools)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: hasFrontmatterField(frontmatter, \"tools\")\n ? \"missingAgentTool\"\n : \"missingTools\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require custom agents that declare subagents to also include the `agent` tool.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n missingAgentTool:\n \"Copilot custom agent files that declare `agents` must include the `agent` tool in `tools`.\",\n missingTools:\n \"Copilot custom agent files that declare `agents` must also declare a `tools` list that includes the `agent` tool.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-agent-tool-for-subagents\",\n});\n\nexport default requireAgentToolForSubagentsRule;\n", "/**\n * @packageDocumentation\n * ESLint rule implementation for `require-agents-md-for-cross-surface-agent-instructions`.\n */\nimport * as path from \"node:path\";\n\nimport type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { pathExists } from \"../_internal/file-system.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireAgentsMdForCrossSurfaceAgentInstructionsRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n const basename = path.basename(context.filename);\n\n if (basename !== \"CLAUDE.md\" && basename !== \"GEMINI.md\") {\n return;\n }\n\n const siblingAgentsMdPath = path.join(\n path.dirname(context.filename),\n \"AGENTS.md\"\n );\n\n if (pathExists(siblingAgentsMdPath)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n basename,\n },\n messageId: \"missingAgentsMdSibling\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require `CLAUDE.md` and `GEMINI.md` agent-instructions files to be paired with a sibling `AGENTS.md` for broader cross-surface support.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingAgentsMdSibling:\n \"`{{basename}}` is less portable across Copilot surfaces without a sibling `AGENTS.md` file in the same directory.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-agents-md-for-cross-surface-agent-instructions\",\n });\n\nexport default requireAgentsMdForCrossSurfaceAgentInstructionsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-chatmode-file-metadata`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireChatmodeFileMetadataRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"chatmode\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n reportAtDocumentStart(context, {\n messageId: \"missingFrontmatter\",\n });\n return;\n }\n\n const description = getFrontmatterScalar(\n frontmatter,\n \"description\"\n );\n\n if (description !== undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: hasFrontmatterField(frontmatter, \"description\")\n ? \"emptyDescription\"\n : \"missingDescription\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.minimal\",\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require custom Copilot agent files and legacy chat mode files to declare a non-empty description in frontmatter.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n emptyDescription:\n \"Copilot custom agent and legacy chat mode files must define a non-empty `description` frontmatter value.\",\n missingDescription:\n \"Copilot custom agent and legacy chat mode files must define a `description` frontmatter value.\",\n missingFrontmatter:\n \"Copilot custom agent and legacy chat mode files must start with YAML frontmatter that declares at least `description`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-chatmode-file-metadata\",\n});\n\nexport default requireChatmodeFileMetadataRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-existing-agent-hook-cwd`.\n */\nimport {\n findRepositoryRoot,\n isCustomAgentFilePath,\n} from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n isRelativeWorkspacePath,\n pathExists,\n resolveRepositoryRelativePath,\n} from \"../_internal/file-system.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectListGroups,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireExistingAgentHookCwdRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const hookGroups =\n frontmatter === null\n ? undefined\n : getFrontmatterObjectListGroups(frontmatter, \"hooks\");\n\n if (hookGroups === undefined || hookGroups.size === 0) {\n return;\n }\n\n const repositoryRoot = findRepositoryRoot(context.filename);\n\n for (const entries of hookGroups.values()) {\n const missingCwd = entries.find((entry) => {\n const cwd = entry[\"cwd\"]?.trim();\n\n return (\n typeof cwd === \"string\" &&\n cwd.length > 0 &&\n isRelativeWorkspacePath(cwd) &&\n !pathExists(\n resolveRepositoryRelativePath(repositoryRoot, cwd)\n )\n );\n })?.[\"cwd\"];\n\n if (missingCwd === undefined) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: {\n cwd: missingCwd,\n },\n messageId: \"missingAgentHookCwd\",\n });\n\n return;\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\"copilot.configs.strict\", \"copilot.configs.all\"],\n description:\n \"require Copilot custom-agent hook `cwd` entries to resolve to existing repository directories.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingAgentHookCwd:\n \"Copilot custom-agent hook `cwd` value `{{cwd}}` does not resolve to an existing repository path.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-existing-agent-hook-cwd\",\n});\n\nexport default requireExistingAgentHookCwdRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-existing-agent-mcp-servers`.\n */\nimport {\n findRepositoryRoot,\n isCustomAgentFilePath,\n} from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n pathExists,\n resolveRepositoryRelativePath,\n} from \"../_internal/file-system.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireExistingAgentMcpServersRule: CopilotRuleModule = createCopilotRule(\n {\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const mcpServers =\n frontmatter === null\n ? undefined\n : getFrontmatterList(frontmatter, \"mcp-servers\");\n\n if (mcpServers === undefined) {\n return;\n }\n\n const repositoryRoot = findRepositoryRoot(context.filename);\n const missingServer = mcpServers.find(\n (serverPath) =>\n !pathExists(\n resolveRepositoryRelativePath(\n repositoryRoot,\n serverPath\n )\n )\n );\n\n if (missingServer === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n mcpServer: missingServer,\n },\n messageId: \"missingAgentMcpServer\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `mcp-servers` entries to resolve to existing repository files.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingAgentMcpServer:\n \"Copilot custom-agent `mcp-servers` entry `{{mcpServer}}` does not resolve to an existing repository file.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-existing-agent-mcp-servers\",\n }\n);\n\nexport default requireExistingAgentMcpServersRule;\n", "/**\n * @packageDocumentation\n * Helpers for working with Markdown customization file bodies.\n */\nimport { extractFrontmatter } from \"./frontmatter.js\";\n\n/** Extract the Markdown body and its absolute character offset. */\nexport const getCustomizationBodyWithOffset = (\n sourceText: string\n): Readonly<{\n body: string;\n offset: number;\n}> => {\n const frontmatter = extractFrontmatter(sourceText);\n const body = frontmatter?.body ?? sourceText;\n\n return {\n body,\n offset: sourceText.length - body.length,\n };\n};\n", "/**\n * @packageDocumentation\n * Shared Markdown link extraction helpers for Copilot customization files.\n */\nimport {\n isNonRelativeWorkspacePath,\n isRelativeWorkspacePath,\n resolveRelativeWorkspacePath,\n} from \"./file-system.js\";\n\nconst FENCED_BACKTICK_CODE_BLOCK_PATTERN = /```[\\s\\S]*?```/gu;\nconst FENCED_TILDE_CODE_BLOCK_PATTERN = /~~~[\\s\\S]*?~~~/gu;\nconst INLINE_CODE_PATTERN = /`[^\\n\\r`]+`/gu;\n\n/** Extracted Markdown link plus its source range. */\nexport type MarkdownLinkMatch = Readonly<{\n destination: string;\n end: number;\n rawDestination: string;\n start: number;\n text: string;\n}>;\n\n/** Replace code spans and fences so link matching ignores code content. */\nexport const maskMarkdownCode = (text: string): string =>\n text\n .replaceAll(FENCED_BACKTICK_CODE_BLOCK_PATTERN, (match) =>\n match.replaceAll(/[^\\n\\r]/gu, \" \")\n )\n .replaceAll(FENCED_TILDE_CODE_BLOCK_PATTERN, (match) =>\n match.replaceAll(/[^\\n\\r]/gu, \" \")\n )\n .replaceAll(INLINE_CODE_PATTERN, (match) =>\n match.replaceAll(/[^\\n\\r]/gu, \" \")\n );\n\n/** Normalize a raw Markdown link destination by removing wrappers and titles. */\nexport const extractMarkdownLinkDestination = (\n rawDestination: string\n): string => {\n const trimmedDestination = rawDestination.trim();\n\n if (\n trimmedDestination.startsWith(\"<\") &&\n trimmedDestination.endsWith(\">\")\n ) {\n return trimmedDestination.slice(1, -1).trim();\n }\n\n const [destination] = trimmedDestination.split(/\\s+/u, 1);\n\n return destination?.trim() ?? \"\";\n};\n\n/** Extract Markdown links from text while ignoring code spans and fences. */\nexport const extractMarkdownLinks = (\n text: string,\n offset = 0\n): readonly MarkdownLinkMatch[] => {\n const maskedText = maskMarkdownCode(text);\n const links: MarkdownLinkMatch[] = [];\n let searchOffset = 0;\n\n while (searchOffset < maskedText.length) {\n const textStart = maskedText.indexOf(\"[\", searchOffset);\n\n if (textStart === -1) {\n break;\n }\n\n if (textStart > 0 && maskedText[textStart - 1] === \"!\") {\n searchOffset = textStart + 1;\n continue;\n }\n\n const textEnd = maskedText.indexOf(\"](\", textStart + 1);\n\n if (textEnd === -1) {\n break;\n }\n\n const linkText = maskedText.slice(textStart + 1, textEnd);\n\n if (\n linkText.length === 0 ||\n linkText.includes(\"]\") ||\n linkText.includes(\"\\n\") ||\n linkText.includes(\"\\r\")\n ) {\n searchOffset = textStart + 1;\n continue;\n }\n\n const destinationStart = textEnd + 2;\n const destinationEnd = maskedText.indexOf(\")\", destinationStart);\n\n if (destinationEnd === -1) {\n break;\n }\n\n const rawDestination = maskedText.slice(\n destinationStart,\n destinationEnd\n );\n\n if (\n rawDestination.length === 0 ||\n rawDestination.includes(\"\\n\") ||\n rawDestination.includes(\"\\r\")\n ) {\n searchOffset = textStart + 1;\n continue;\n }\n\n const matchedText = maskedText.slice(textStart, destinationEnd + 1);\n const start = offset + textStart;\n\n links.push({\n destination: extractMarkdownLinkDestination(rawDestination),\n end: start + matchedText.length,\n rawDestination,\n start,\n text: matchedText,\n });\n\n searchOffset = destinationEnd + 1;\n }\n\n return links;\n};\n\n/** Determine whether a Markdown link target is a non-relative workspace path. */\nexport const isInvalidWorkspaceLinkDestination = (\n destination: string\n): boolean => isNonRelativeWorkspacePath(destination);\n\n/** Determine whether a Markdown link target is a relative workspace path. */\nexport const isRelativeWorkspaceLinkDestination = (\n destination: string\n): boolean => isRelativeWorkspacePath(destination);\n\n/** Resolve a relative Markdown workspace link from a file path. */\nexport const resolveMarkdownWorkspaceLink = (\n currentFilePath: string,\n destination: string\n): string => resolveRelativeWorkspacePath(currentFilePath, destination);\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-existing-relative-agent-links`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { getCustomizationBodyWithOffset } from \"../_internal/customization-body.js\";\nimport { pathExists } from \"../_internal/file-system.js\";\nimport {\n extractMarkdownLinks,\n isRelativeWorkspaceLinkDestination,\n resolveMarkdownWorkspaceLink,\n} from \"../_internal/markdown-links.js\";\n\nconst requireExistingRelativeAgentLinksRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n root() {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const { body, offset } = getCustomizationBodyWithOffset(\n context.sourceCode.text\n );\n\n for (const link of extractMarkdownLinks(body, offset)) {\n if (\n !isRelativeWorkspaceLinkDestination(\n link.destination\n )\n ) {\n continue;\n }\n\n if (\n pathExists(\n resolveMarkdownWorkspaceLink(\n context.filename,\n link.destination\n )\n )\n ) {\n continue;\n }\n\n context.report({\n data: {\n destination: link.destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(\n link.end\n ),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"missingAgentLinkTarget\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require relative Markdown links in Copilot custom agents to resolve to existing workspace targets.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingAgentLinkTarget:\n \"Copilot custom-agent relative link `{{destination}}` does not resolve to an existing workspace path.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-existing-relative-agent-links\",\n });\n\nexport default requireExistingRelativeAgentLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-existing-relative-instructions-links`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { getCustomizationBodyWithOffset } from \"../_internal/customization-body.js\";\nimport { pathExists } from \"../_internal/file-system.js\";\nimport {\n extractMarkdownLinks,\n isRelativeWorkspaceLinkDestination,\n resolveMarkdownWorkspaceLink,\n} from \"../_internal/markdown-links.js\";\n\nconst requireExistingRelativeInstructionsLinksRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n root() {\n if (\n getCopilotFileKind(context.filename) !== \"instructions\"\n ) {\n return;\n }\n\n const { body, offset } = getCustomizationBodyWithOffset(\n context.sourceCode.text\n );\n\n for (const link of extractMarkdownLinks(body, offset)) {\n if (\n !isRelativeWorkspaceLinkDestination(\n link.destination\n )\n ) {\n continue;\n }\n\n if (\n pathExists(\n resolveMarkdownWorkspaceLink(\n context.filename,\n link.destination\n )\n )\n ) {\n continue;\n }\n\n context.report({\n data: {\n destination: link.destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(\n link.end\n ),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"missingInstructionsLinkTarget\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require relative Markdown links in path-specific Copilot instructions files to resolve to existing workspace targets.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingInstructionsLinkTarget:\n \"Copilot instructions relative link `{{destination}}` does not resolve to an existing workspace path.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-existing-relative-instructions-links\",\n });\n\nexport default requireExistingRelativeInstructionsLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-existing-relative-prompt-links`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { getCustomizationBodyWithOffset } from \"../_internal/customization-body.js\";\nimport { pathExists } from \"../_internal/file-system.js\";\nimport {\n extractMarkdownLinks,\n isRelativeWorkspaceLinkDestination,\n resolveMarkdownWorkspaceLink,\n} from \"../_internal/markdown-links.js\";\n\nconst requireExistingRelativePromptLinksRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n root() {\n if (getCopilotFileKind(context.filename) !== \"prompt\") {\n return;\n }\n\n const { body, offset } = getCustomizationBodyWithOffset(\n context.sourceCode.text\n );\n\n for (const link of extractMarkdownLinks(body, offset)) {\n if (\n !isRelativeWorkspaceLinkDestination(\n link.destination\n )\n ) {\n continue;\n }\n\n if (\n pathExists(\n resolveMarkdownWorkspaceLink(\n context.filename,\n link.destination\n )\n )\n ) {\n continue;\n }\n\n context.report({\n data: {\n destination: link.destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(\n link.end\n ),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"missingPromptLinkTarget\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require relative Markdown links in Copilot prompt files to resolve to existing workspace targets.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingPromptLinkTarget:\n \"Copilot prompt-file relative link `{{destination}}` does not resolve to an existing workspace path.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-existing-relative-prompt-links\",\n });\n\nexport default requireExistingRelativePromptLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-existing-relative-skill-links`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { getCustomizationBodyWithOffset } from \"../_internal/customization-body.js\";\nimport { pathExists } from \"../_internal/file-system.js\";\nimport {\n extractMarkdownLinks,\n isRelativeWorkspaceLinkDestination,\n resolveMarkdownWorkspaceLink,\n} from \"../_internal/markdown-links.js\";\n\nconst requireExistingRelativeSkillLinksRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n root() {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const { body, offset } = getCustomizationBodyWithOffset(\n context.sourceCode.text\n );\n\n for (const link of extractMarkdownLinks(body, offset)) {\n if (\n !isRelativeWorkspaceLinkDestination(\n link.destination\n )\n ) {\n continue;\n }\n\n if (\n pathExists(\n resolveMarkdownWorkspaceLink(\n context.filename,\n link.destination\n )\n )\n ) {\n continue;\n }\n\n context.report({\n data: {\n destination: link.destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(\n link.end\n ),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"missingSkillLinkTarget\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require relative Markdown links in Copilot skill definition files to resolve to existing workspace resources.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingSkillLinkTarget:\n \"Copilot skill relative link `{{destination}}` does not resolve to an existing workspace path.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-existing-relative-skill-links\",\n });\n\nexport default requireExistingRelativeSkillLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-existing-repository-hook-cwd`.\n */\nimport {\n findRepositoryRoot,\n isRepositoryHookFilePath,\n} from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n isRelativeWorkspacePath,\n pathExists,\n resolveRepositoryRelativePath,\n} from \"../_internal/file-system.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n getRepositoryHookObjects,\n isJsonString,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireExistingRepositoryHookCwdRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const repositoryRoot = findRepositoryRoot(context.filename);\n const root = parseJsonText(context.sourceCode.text);\n const invalidHook = getRepositoryHookObjects(root).find(\n ({ hook }) => {\n const cwd = hook[\"cwd\"];\n\n return (\n isJsonString(cwd) &&\n cwd.trim().length > 0 &&\n isRelativeWorkspacePath(cwd) &&\n !pathExists(\n resolveRepositoryRelativePath(\n repositoryRoot,\n cwd\n )\n )\n );\n }\n );\n\n if (invalidHook === undefined) {\n return;\n }\n\n const cwd = invalidHook.hook[\"cwd\"];\n\n if (!isJsonString(cwd)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n cwd,\n eventName: invalidHook.eventName,\n },\n messageId: \"missingRepositoryHookCwd\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook `cwd` values to resolve to existing repository paths.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingRepositoryHookCwd:\n \"Repository hook `cwd` value `{{cwd}}` for `{{eventName}}` does not resolve to an existing repository path.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-existing-repository-hook-cwd\",\n });\n\nexport default requireExistingRepositoryHookCwdRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-github-copilot-target-for-mcp-servers`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireGithubCopilotTargetForMcpServersRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"mcp-servers\")\n ) {\n return;\n }\n\n const target = getFrontmatterScalar(frontmatter, \"target\");\n\n if (target === \"github-copilot\") {\n return;\n }\n\n if (target === undefined) {\n reportAtDocumentStart(context, {\n messageId: hasFrontmatterField(frontmatter, \"target\")\n ? \"emptyTarget\"\n : \"missingTarget\",\n });\n\n return;\n }\n\n reportAtDocumentStart(context, {\n data: { target },\n messageId: \"invalidTarget\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require custom agents that declare `mcp-servers` to set `target: github-copilot`.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n emptyTarget:\n \"Copilot custom agent files that declare `mcp-servers` must define a non-empty `target: github-copilot` frontmatter value.\",\n invalidTarget:\n \"Copilot custom agent files that declare `mcp-servers` must set `target: github-copilot` (current target: `{{target}}`).\",\n missingTarget:\n \"Copilot custom agent files that declare `mcp-servers` must also declare `target: github-copilot`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-github-copilot-target-for-mcp-servers\",\n });\n\nexport default requireGithubCopilotTargetForMcpServersRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-instructions-apply-to`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireInstructionsApplyToRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"instructions\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n reportAtDocumentStart(context, {\n messageId: \"missingFrontmatter\",\n });\n return;\n }\n\n const applyToScalar = getFrontmatterScalar(frontmatter, \"applyTo\");\n const applyToList = getFrontmatterList(frontmatter, \"applyTo\");\n\n if (applyToScalar !== undefined || applyToList !== undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: hasFrontmatterField(frontmatter, \"applyTo\")\n ? \"emptyApplyTo\"\n : \"missingApplyTo\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.minimal\",\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require path-specific Copilot instructions files to declare a non-empty `applyTo` frontmatter glob.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n emptyApplyTo:\n \"Copilot instructions files must define a non-empty `applyTo` frontmatter value.\",\n missingApplyTo:\n \"Copilot instructions files must define an `applyTo` frontmatter value so they can be auto-attached for matching files.\",\n missingFrontmatter:\n \"Copilot instructions files must start with YAML frontmatter that declares at least `applyTo`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-instructions-apply-to\",\n});\n\nexport default requireInstructionsApplyToRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-json-agent-mcp-servers`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst JSON_FILE_EXTENSION_PATTERN = /\\.json$/iu;\n\nconst requireJsonAgentMcpServersRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const mcpServers =\n frontmatter === null\n ? undefined\n : getFrontmatterList(frontmatter, \"mcp-servers\");\n\n if (mcpServers === undefined) {\n return;\n }\n\n const invalidServer = mcpServers.find(\n (serverPath) =>\n !JSON_FILE_EXTENSION_PATTERN.test(serverPath.trim())\n );\n\n if (invalidServer === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n mcpServer: invalidServer,\n },\n messageId: \"nonJsonAgentMcpServer\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `mcp-servers` entries to reference JSON config files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n nonJsonAgentMcpServer:\n \"Copilot custom-agent `mcp-servers` entry `{{mcpServer}}` should reference a `.json` config file.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-json-agent-mcp-servers\",\n});\n\nexport default requireJsonAgentMcpServersRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-prompt-file-metadata`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst VALID_BUILT_IN_PROMPT_AGENTS = new Set([\n \"agent\",\n \"ask\",\n \"plan\",\n]);\n\nconst requirePromptFileMetadataRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"prompt\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n reportAtDocumentStart(context, {\n messageId: \"missingFrontmatter\",\n });\n return;\n }\n\n const description = getFrontmatterScalar(\n frontmatter,\n \"description\"\n );\n\n if (description === undefined) {\n reportAtDocumentStart(context, {\n messageId: hasFrontmatterField(frontmatter, \"description\")\n ? \"emptyDescription\"\n : \"missingDescription\",\n });\n return;\n }\n\n if (hasFrontmatterField(frontmatter, \"mode\")) {\n reportAtDocumentStart(context, {\n messageId: \"deprecatedMode\",\n });\n return;\n }\n\n const agent = getFrontmatterScalar(frontmatter, \"agent\");\n\n if (agent === undefined) {\n reportAtDocumentStart(context, {\n messageId: hasFrontmatterField(frontmatter, \"agent\")\n ? \"emptyAgent\"\n : \"missingAgent\",\n });\n return;\n }\n\n const tools = getFrontmatterList(frontmatter, \"tools\");\n\n if (agent === \"agent\") {\n if (tools !== undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: hasFrontmatterField(frontmatter, \"tools\")\n ? \"emptyTools\"\n : \"missingTools\",\n });\n return;\n }\n\n if (\n VALID_BUILT_IN_PROMPT_AGENTS.has(agent) &&\n hasFrontmatterField(frontmatter, \"tools\")\n ) {\n reportAtDocumentStart(context, {\n data: { agent },\n messageId: \"unexpectedTools\",\n });\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.minimal\",\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require reusable Copilot prompt files to declare description, agent, and built-in agent-mode tools metadata.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n deprecatedMode:\n \"Copilot prompt files should use `agent` instead of the deprecated `mode` frontmatter key.\",\n emptyAgent:\n \"Copilot prompt files must define a non-empty `agent` frontmatter value.\",\n emptyDescription:\n \"Copilot prompt files must define a non-empty `description` frontmatter value.\",\n emptyTools:\n \"Built-in `agent` Copilot prompt files must define a non-empty `tools` frontmatter list.\",\n missingAgent:\n \"Copilot prompt files must define an `agent` frontmatter value.\",\n missingDescription:\n \"Copilot prompt files must define a `description` frontmatter value.\",\n missingFrontmatter:\n \"Copilot prompt files must start with YAML frontmatter that declares at least `description` and `agent`.\",\n missingTools:\n \"Built-in `agent` Copilot prompt files must define a `tools` frontmatter list.\",\n unexpectedTools:\n \"Copilot prompt files should only declare `tools` when `agent` is the built-in `agent` mode (current agent: `{{agent}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-prompt-file-metadata\",\n});\n\nexport default requirePromptFileMetadataRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-qualified-agent-handoff-models`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectList,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst isQualifiedModelName = (value: string): boolean => {\n const trimmedValue = value.trim();\n\n if (!trimmedValue.endsWith(\")\")) {\n return false;\n }\n\n const separatorIndex = trimmedValue.lastIndexOf(\" (\");\n\n if (separatorIndex <= 0) {\n return false;\n }\n\n const qualifier = trimmedValue.slice(separatorIndex + 2, -1).trim();\n\n return (\n qualifier.length > 0 &&\n !qualifier.includes(\"(\") &&\n !qualifier.includes(\")\")\n );\n};\n\nconst requireQualifiedAgentHandoffModelsRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const handoffs = getFrontmatterObjectList(\n frontmatter,\n \"handoffs\"\n );\n\n if (handoffs === undefined || handoffs.length === 0) {\n return;\n }\n\n for (const [index, handoff] of handoffs.entries()) {\n const model = handoff[\"model\"]?.trim();\n\n if (\n model === undefined ||\n model.length === 0 ||\n isQualifiedModelName(model)\n ) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: {\n handoffNumber: String(index + 1),\n model,\n },\n messageId: \"unqualifiedHandoffModel\",\n });\n\n return;\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent handoff models to use qualified `Model Name (vendor)` names.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n unqualifiedHandoffModel:\n \"Copilot custom agent handoff #{{handoffNumber}} should use a qualified `handoffs.model` name like `GPT-5 (copilot)`, not `{{model}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-qualified-agent-handoff-models\",\n });\n\nexport default requireQualifiedAgentHandoffModelsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-relative-agent-hook-cwd`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { isRelativeWorkspacePath } from \"../_internal/file-system.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectListGroups,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst isValidRelativeHookCwd = (cwd: string): boolean => {\n const trimmedCwd = cwd.trim();\n\n return trimmedCwd.length > 0 && isRelativeWorkspacePath(trimmedCwd);\n};\n\nconst requireRelativeAgentHookCwdRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const hookGroups = getFrontmatterObjectListGroups(\n frontmatter,\n \"hooks\"\n );\n\n if (hookGroups === undefined || hookGroups.size === 0) {\n return;\n }\n\n for (const [eventName, hooks] of hookGroups) {\n for (const [index, hook] of hooks.entries()) {\n const cwd = hook[\"cwd\"]?.trim();\n\n if (cwd === undefined || isValidRelativeHookCwd(cwd)) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: {\n currentValue: cwd.length > 0 ? cwd : \"(empty)\",\n eventName,\n hookNumber: String(index + 1),\n },\n messageId: \"invalidHookCwd\",\n });\n\n return;\n }\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent hook `cwd` values to stay relative to the repository root.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidHookCwd:\n \"Copilot custom agent hook #{{hookNumber}} in `{{eventName}}` must use a non-empty repository-relative `cwd` value, not `{{currentValue}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-relative-agent-hook-cwd\",\n});\n\nexport default requireRelativeAgentHookCwdRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-relative-agent-links`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { getCustomizationBodyWithOffset } from \"../_internal/customization-body.js\";\nimport {\n extractMarkdownLinks,\n isInvalidWorkspaceLinkDestination,\n} from \"../_internal/markdown-links.js\";\n\nconst requireRelativeAgentLinksRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n root() {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const { body, offset } = getCustomizationBodyWithOffset(\n context.sourceCode.text\n );\n\n for (const link of extractMarkdownLinks(body, offset)) {\n if (!isInvalidWorkspaceLinkDestination(link.destination)) {\n continue;\n }\n\n context.report({\n data: {\n destination: link.destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(link.end),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"nonRelativeAgentLink\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom agents to use relative Markdown links for workspace files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n nonRelativeAgentLink:\n \"Copilot custom agents should reference workspace files with relative Markdown links, not `{{destination}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-relative-agent-links\",\n});\n\nexport default requireRelativeAgentLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-relative-instructions-links`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { getCustomizationBodyWithOffset } from \"../_internal/customization-body.js\";\nimport {\n extractMarkdownLinks,\n isInvalidWorkspaceLinkDestination,\n} from \"../_internal/markdown-links.js\";\n\nconst requireRelativeInstructionsLinksRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n root() {\n if (\n getCopilotFileKind(context.filename) !== \"instructions\"\n ) {\n return;\n }\n\n const { body, offset } = getCustomizationBodyWithOffset(\n context.sourceCode.text\n );\n\n for (const link of extractMarkdownLinks(body, offset)) {\n if (\n !isInvalidWorkspaceLinkDestination(link.destination)\n ) {\n continue;\n }\n\n context.report({\n data: {\n destination: link.destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(\n link.end\n ),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"nonRelativeInstructionsLink\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require path-specific Copilot instructions files to use relative Markdown links for workspace files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n nonRelativeInstructionsLink:\n \"Copilot instructions files should reference workspace files with relative Markdown links, not `{{destination}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-relative-instructions-links\",\n });\n\nexport default requireRelativeInstructionsLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-relative-prompt-links`.\n */\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { extractFrontmatter } from \"../_internal/frontmatter.js\";\nimport {\n extractMarkdownLinks,\n isInvalidWorkspaceLinkDestination,\n} from \"../_internal/markdown-links.js\";\n\nconst isInvalidPromptWorkspaceLinkDestination = (\n destination: string\n): boolean => {\n const normalizedDestination = destination.trim();\n\n if (normalizedDestination.length === 0) {\n return false;\n }\n\n const lowercaseDestination = normalizedDestination.toLowerCase();\n\n if (\n lowercaseDestination.startsWith(\"#\") ||\n lowercaseDestination.startsWith(\"./\") ||\n lowercaseDestination.startsWith(\"../\")\n ) {\n return false;\n }\n\n if (\n lowercaseDestination.startsWith(\"/\") ||\n lowercaseDestination.startsWith(\"\\\\\") ||\n lowercaseDestination.startsWith(\"~/\") ||\n lowercaseDestination.startsWith(\"~\\\\\") ||\n lowercaseDestination.startsWith(\"file:\")\n ) {\n return true;\n }\n\n return isInvalidWorkspaceLinkDestination(normalizedDestination);\n};\n\nconst requireRelativePromptLinksRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n root() {\n if (getCopilotFileKind(context.filename) !== \"prompt\") {\n return;\n }\n\n const sourceText = context.sourceCode.text;\n const frontmatter = extractFrontmatter(sourceText);\n const body = frontmatter?.body ?? sourceText;\n const bodyOffset = sourceText.length - body.length;\n\n for (const link of extractMarkdownLinks(body, bodyOffset)) {\n const { destination } = link;\n\n if (!isInvalidPromptWorkspaceLinkDestination(destination)) {\n continue;\n }\n\n context.report({\n data: {\n destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(link.end),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"nonRelativePromptLink\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot prompt files to use relative Markdown links for workspace files.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n nonRelativePromptLink:\n \"Copilot prompt files should reference workspace files with relative Markdown links, not `{{destination}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-relative-prompt-links\",\n});\n\nexport default requireRelativePromptLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-relative-repository-hook-cwd`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { isNonRelativeWorkspacePath } from \"../_internal/file-system.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n getRepositoryHookObjects,\n isJsonString,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireRelativeRepositoryHookCwdRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidHook = getRepositoryHookObjects(root).find(\n ({ hook }) => {\n const cwd = hook[\"cwd\"];\n\n return (\n isJsonString(cwd) &&\n isNonRelativeWorkspacePath(cwd)\n );\n }\n );\n\n if (invalidHook === undefined) {\n return;\n }\n\n const cwd = invalidHook.hook[\"cwd\"];\n\n if (!isJsonString(cwd)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n cwd,\n eventName: invalidHook.eventName,\n },\n messageId: \"nonRelativeRepositoryHookCwd\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook `cwd` values to use repository-relative paths.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n nonRelativeRepositoryHookCwd:\n \"Repository hook `cwd` values for `{{eventName}}` should use repository-relative paths, not `{{cwd}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-relative-repository-hook-cwd\",\n });\n\nexport default requireRelativeRepositoryHookCwdRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-relative-skill-links`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { getCustomizationBodyWithOffset } from \"../_internal/customization-body.js\";\nimport {\n extractMarkdownLinks,\n isInvalidWorkspaceLinkDestination,\n} from \"../_internal/markdown-links.js\";\n\nconst requireRelativeSkillLinksRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n root() {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const { body, offset } = getCustomizationBodyWithOffset(\n context.sourceCode.text\n );\n\n for (const link of extractMarkdownLinks(body, offset)) {\n if (!isInvalidWorkspaceLinkDestination(link.destination)) {\n continue;\n }\n\n context.report({\n data: {\n destination: link.destination,\n },\n loc: {\n end: context.sourceCode.getLocFromIndex(link.end),\n start: context.sourceCode.getLocFromIndex(\n link.start\n ),\n },\n messageId: \"nonRelativeSkillLink\",\n });\n }\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot skill definition files to use relative Markdown links for workspace resources.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n nonRelativeSkillLink:\n \"Copilot skill definition files should reference workspace resources with relative Markdown links, not `{{destination}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-relative-skill-links\",\n});\n\nexport default requireRelativeSkillLinksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-repository-hook-arrays`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n formatJsonValue,\n getRepositoryHookEventEntries,\n isJsonArray,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireRepositoryHookArraysRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidEntry = getRepositoryHookEventEntries(root).find(\n ([, eventValue]) => !isJsonArray(eventValue)\n );\n\n if (invalidEntry === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName: invalidEntry[0],\n value: formatJsonValue(invalidEntry[1]),\n },\n messageId: \"invalidRepositoryHookArray\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require each repository hook event entry in `hooks` to be an array.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidRepositoryHookArray:\n \"Repository hook event `{{eventName}}` must map to an array of hook definitions (current value: `{{value}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-repository-hook-arrays\",\n});\n\nexport default requireRepositoryHookArraysRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-repository-hook-command-shell`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n getRepositoryHookObjects,\n isJsonString,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst hasHookShellCommand = (value: unknown): boolean =>\n typeof value === \"string\" && value.trim().length > 0;\n\nconst requireRepositoryHookCommandShellRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidHook = getRepositoryHookObjects(root).find(\n ({ hook }) =>\n isJsonString(hook[\"type\"]) &&\n hook[\"type\"] === \"command\" &&\n !hasHookShellCommand(hook[\"bash\"]) &&\n !hasHookShellCommand(hook[\"powershell\"])\n );\n\n if (invalidHook === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName: invalidHook.eventName,\n },\n messageId: \"missingRepositoryHookShellCommand\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository `command` hook definitions to declare at least one shell command under `bash` or `powershell`.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n missingRepositoryHookShellCommand:\n \"Repository `command` hooks for `{{eventName}}` must declare a non-empty `bash` or `powershell` command.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-repository-hook-command-shell\",\n });\n\nexport default requireRepositoryHookCommandShellRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-repository-hooks-object`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n getRepositoryHooksValue,\n isJsonObject,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireRepositoryHooksObjectRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const hooksValue = getRepositoryHooksValue(root);\n\n if (isJsonObject(hooksValue)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"invalidRepositoryHooksObject\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook configuration files to declare a top-level `hooks` object.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidRepositoryHooksObject:\n \"Repository hook configuration files must declare a top-level `hooks` object.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-repository-hooks-object\",\n});\n\nexport default requireRepositoryHooksObjectRule;\n", "/**\n * @packageDocumentation\n * ESLint rule implementation for `require-repository-instructions-file`.\n */\nimport * as fs from \"node:fs\";\n\nimport type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getCopilotFileKind,\n getRepositoryInstructionsPath,\n} from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireRepositoryInstructionsFileRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n const fileKind = getCopilotFileKind(context.filename);\n\n if (\n fileKind !== \"agent-instructions\" &&\n fileKind !== \"chatmode\" &&\n fileKind !== \"instructions\" &&\n fileKind !== \"prompt\"\n ) {\n return;\n }\n\n const repositoryInstructionsPath =\n getRepositoryInstructionsPath(context.filename);\n\n if (fs.existsSync(repositoryInstructionsPath)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"missingRepositoryInstructions\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repositories that define Copilot customization assets to also provide `.github/copilot-instructions.md`.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n missingRepositoryInstructions:\n \"Repositories that define Copilot prompts, custom agents, legacy chat modes, agent instructions, or path-specific instructions should also provide `.github/copilot-instructions.md` for baseline repository guidance.\",\n },\n schema: [],\n type: \"suggestion\",\n },\n name: \"require-repository-instructions-file\",\n });\n\nexport default requireRepositoryInstructionsFileRule;\n", "/**\n * @packageDocumentation\n * ESLint rule implementation for `require-skill-file-location`.\n */\nimport * as path from \"node:path\";\n\nimport type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\nimport { isValidSkillDefinitionLocation } from \"../_internal/skill-files.js\";\n\nconst requireSkillFileLocationRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (path.basename(context.filename) !== \"SKILL.md\") {\n return;\n }\n\n if (isValidSkillDefinitionLocation(context.filename)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"invalidSkillLocation\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require project skill definition files to live at a documented `.github/skills/<skill>/SKILL.md` or `.claude/skills/<skill>/SKILL.md` path.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidSkillLocation:\n \"Copilot skill definition files should live at `.github/skills/<skill>/SKILL.md` or `.claude/skills/<skill>/SKILL.md`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-skill-file-location\",\n});\n\nexport default requireSkillFileLocationRule;\n", "/**\n * @packageDocumentation\n * Shared skill-file helpers for Copilot skill rules.\n */\nimport * as path from \"node:path\";\n\nimport type { FrontmatterDocument } from \"./frontmatter.js\";\n\nimport { normalizeAbsolutePath } from \"./file-system.js\";\nimport { hasFrontmatterField } from \"./frontmatter.js\";\n\nconst VALID_SKILL_FILE_LOCATION_PATTERN =\n /\\/(?:\\.github|\\.claude)\\/skills\\/[^/]+\\/SKILL\\.md$/u;\n\n/** Determine whether a file path is at a documented project-skill location. */\nexport const isValidSkillDefinitionLocation = (filePath: string): boolean =>\n VALID_SKILL_FILE_LOCATION_PATTERN.test(normalizeAbsolutePath(filePath));\n\n/** Determine whether a Markdown file looks like a skill definition draft. */\nexport const looksLikeSkillDefinitionDocument = (\n frontmatter: FrontmatterDocument | null\n): boolean =>\n frontmatter !== null &&\n (hasFrontmatterField(frontmatter, \"name\") ||\n hasFrontmatterField(frontmatter, \"description\") ||\n hasFrontmatterField(frontmatter, \"license\"));\n\n/** Get the markdown basename for a skill-related file. */\nexport const getSkillFileBasename = (filePath: string): string =>\n path.basename(filePath);\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-skill-file-metadata`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireSkillFileMetadataRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n reportAtDocumentStart(context, {\n messageId: \"missingSkillFrontmatter\",\n });\n return;\n }\n\n if (getFrontmatterScalar(frontmatter, \"name\") === undefined) {\n reportAtDocumentStart(context, {\n messageId: \"missingSkillName\",\n });\n return;\n }\n\n if (\n getFrontmatterScalar(frontmatter, \"description\") === undefined\n ) {\n reportAtDocumentStart(context, {\n messageId: \"missingSkillDescription\",\n });\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot skill definition files to declare `name` and `description` frontmatter.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n missingSkillDescription:\n \"Copilot skill definition files must declare a non-empty `description` frontmatter value.\",\n missingSkillFrontmatter:\n \"Copilot skill definition files must start with YAML frontmatter that declares at least `name` and `description`.\",\n missingSkillName:\n \"Copilot skill definition files must declare a non-empty `name` frontmatter value.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-skill-file-metadata\",\n});\n\nexport default requireSkillFileMetadataRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isSkillMarkdownFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-skill-md-filename`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { extractFrontmatter } from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\nimport {\n getSkillFileBasename,\n looksLikeSkillDefinitionDocument,\n} from \"../_internal/skill-files.js\";\n\nconst requireSkillMdFilenameRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillMarkdownFilePath(context.filename)) {\n return;\n }\n\n const basename = getSkillFileBasename(context.filename);\n\n if (basename === \"SKILL.md\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (!looksLikeSkillDefinitionDocument(frontmatter)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n basename,\n },\n messageId: \"invalidSkillDefinitionFilename\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require markdown files that declare skill-definition frontmatter to use the documented `SKILL.md` filename.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidSkillDefinitionFilename:\n \"Skill-definition markdown files should be named `SKILL.md`, not `{{basename}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-skill-md-filename\",\n});\n\nexport default requireSkillMdFilenameRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getSkillDirectoryName,\n getSkillName,\n} from \"../_internal/copilot-customization-names.js\";\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-skill-name-match-directory`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireSkillNameMatchDirectoryRule: CopilotRuleModule = createCopilotRule(\n {\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n const explicitSkillName =\n frontmatter === null\n ? undefined\n : getFrontmatterScalar(frontmatter, \"name\");\n\n if (explicitSkillName === undefined) {\n return;\n }\n\n const skillName = getSkillName(context.filename, frontmatter);\n const directoryName = getSkillDirectoryName(context.filename);\n\n if (skillName === directoryName) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n directoryName,\n name: skillName,\n },\n messageId: \"skillNameDoesNotMatchDirectory\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot skill `name` metadata to match the skill directory name.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n skillNameDoesNotMatchDirectory:\n \"Copilot skill `name` value `{{name}}` should match its directory name `{{directoryName}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-skill-name-match-directory\",\n }\n);\n\nexport default requireSkillNameMatchDirectoryRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-string-repository-hook-env-values`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n formatJsonValue,\n getRepositoryHookObjects,\n isJsonObject,\n isJsonString,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireStringRepositoryHookEnvValuesRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidHook = getRepositoryHookObjects(root).find(\n ({ hook }) => {\n const env = hook[\"env\"];\n\n return (\n isJsonObject(env) &&\n Object.values(env).some(\n (value) => !isJsonString(value)\n )\n );\n }\n );\n\n if (invalidHook === undefined) {\n return;\n }\n\n const env = invalidHook.hook[\"env\"];\n\n reportAtDocumentStart(context, {\n data: {\n env: formatJsonValue(env),\n eventName: invalidHook.eventName,\n },\n messageId: \"nonStringRepositoryHookEnvValue\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook `env` objects to use string values.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n nonStringRepositoryHookEnvValue:\n \"Repository hook `env` for `{{eventName}}` must use string values only (current value: `{{env}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-string-repository-hook-env-values\",\n });\n\nexport default requireStringRepositoryHookEnvValuesRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-argument-hint`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidAgentArgumentHintRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"argument-hint\")\n ) {\n return;\n }\n\n if (\n getFrontmatterScalar(frontmatter, \"argument-hint\") !== undefined\n ) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"invalidAgentArgumentHint\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `argument-hint` metadata to be a non-empty scalar when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidAgentArgumentHint:\n \"Copilot custom-agent `argument-hint` metadata must be a non-empty scalar when present.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-argument-hint\",\n});\n\nexport default requireValidAgentArgumentHintRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-handoff-send`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectList,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst VALID_BOOLEAN_FIELD_VALUES = new Set([\"false\", \"true\"]);\n\nconst requireValidAgentHandoffSendRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const handoffs = getFrontmatterObjectList(frontmatter, \"handoffs\");\n\n if (handoffs === undefined || handoffs.length === 0) {\n return;\n }\n\n for (const [index, handoff] of handoffs.entries()) {\n const rawSend = handoff[\"send\"];\n\n if (rawSend === undefined) {\n continue;\n }\n\n const normalizedSend = rawSend.trim().toLowerCase();\n\n if (VALID_BOOLEAN_FIELD_VALUES.has(normalizedSend)) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: {\n handoffNumber: String(index + 1),\n sendValue:\n rawSend.trim().length > 0 ? rawSend : \"(empty)\",\n },\n messageId: \"invalidHandoffSend\",\n });\n\n return;\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent handoff `send` values to use documented boolean metadata when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidHandoffSend:\n \"Copilot custom agent handoff #{{handoffNumber}} must use a boolean `send` value (`true` or `false`), not `{{sendValue}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-handoff-send\",\n});\n\nexport default requireValidAgentHandoffSendRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-handoffs`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectList,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidAgentHandoffsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const handoffs = getFrontmatterObjectList(frontmatter, \"handoffs\");\n\n if (handoffs === undefined || handoffs.length === 0) {\n return;\n }\n\n for (const [index, handoff] of handoffs.entries()) {\n const handoffNumber = String(index + 1);\n const label = handoff[\"label\"]?.trim() ?? \"\";\n const agent = handoff[\"agent\"]?.trim() ?? \"\";\n const prompt = handoff[\"prompt\"]?.trim() ?? \"\";\n const send = handoff[\"send\"]?.trim().toLowerCase() ?? \"\";\n\n if (label.length === 0) {\n reportAtDocumentStart(context, {\n data: { handoffNumber },\n messageId: \"missingLabel\",\n });\n\n return;\n }\n\n if (agent.length === 0) {\n reportAtDocumentStart(context, {\n data: { handoffNumber },\n messageId: \"missingAgent\",\n });\n\n return;\n }\n\n if (send === \"true\" && prompt.length === 0) {\n reportAtDocumentStart(context, {\n data: { handoffNumber },\n messageId: \"missingPromptForAutoSend\",\n });\n\n return;\n }\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent handoffs to define the metadata needed for usable guided transitions.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n missingAgent:\n \"Copilot custom agent handoff #{{handoffNumber}} must define a non-empty `agent` target.\",\n missingLabel:\n \"Copilot custom agent handoff #{{handoffNumber}} must define a non-empty `label`.\",\n missingPromptForAutoSend:\n \"Copilot custom agent handoff #{{handoffNumber}} with `send: true` must also define a non-empty `prompt`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-handoffs\",\n});\n\nexport default requireValidAgentHandoffsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-hook-events`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectListGroups,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst VALID_HOOK_EVENT_NAMES = new Set([\n \"PostToolUse\",\n \"PreCompact\",\n \"PreToolUse\",\n \"SessionStart\",\n \"Stop\",\n \"SubagentStart\",\n \"SubagentStop\",\n \"UserPromptSubmit\",\n]);\n\nconst requireValidAgentHookEventsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const hookGroups = getFrontmatterObjectListGroups(\n frontmatter,\n \"hooks\"\n );\n\n if (hookGroups === undefined || hookGroups.size === 0) {\n return;\n }\n\n for (const eventName of hookGroups.keys()) {\n if (VALID_HOOK_EVENT_NAMES.has(eventName)) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: { eventName },\n messageId: \"invalidHookEvent\",\n });\n\n return;\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent hooks to use supported VS Code hook event names.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidHookEvent:\n \"Copilot custom agent hooks should use a supported event name, not `{{eventName}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-hook-events\",\n});\n\nexport default requireValidAgentHookEventsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-hook-timeouts`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectListGroups,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst isNumericTimeoutValue = (value: string): boolean => {\n let decimalPointCount = 0;\n\n for (const character of value) {\n if (character === \".\") {\n decimalPointCount += 1;\n\n if (decimalPointCount > 1) {\n return false;\n }\n\n continue;\n }\n\n if (character < \"0\" || character > \"9\") {\n return false;\n }\n }\n\n return value.length > 0 && !value.startsWith(\".\") && !value.endsWith(\".\");\n};\n\nconst requireValidAgentHookTimeoutsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const hookGroups = getFrontmatterObjectListGroups(\n frontmatter,\n \"hooks\"\n );\n\n if (hookGroups === undefined || hookGroups.size === 0) {\n return;\n }\n\n for (const [eventName, hooks] of hookGroups) {\n for (const [index, hook] of hooks.entries()) {\n const timeout = hook[\"timeout\"]?.trim();\n\n if (\n timeout === undefined ||\n timeout.length === 0 ||\n isNumericTimeoutValue(timeout)\n ) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName,\n hookNumber: String(index + 1),\n timeout,\n },\n messageId: \"invalidHookTimeout\",\n });\n\n return;\n }\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent hook `timeout` values to be numeric seconds when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidHookTimeout:\n \"Copilot custom agent hook #{{hookNumber}} in `{{eventName}}` should use a numeric `timeout` value in seconds, not `{{timeout}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-hook-timeouts\",\n});\n\nexport default requireValidAgentHookTimeoutsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-hooks`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterObjectListGroups,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst hasAnyHookCommand = (hook: Readonly<Record<string, string>>): boolean =>\n [\n \"command\",\n \"windows\",\n \"linux\",\n \"osx\",\n ].some((key) => {\n const value = hook[key];\n\n return typeof value === \"string\" && value.trim().length > 0;\n });\n\nconst requireValidAgentHooksRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n const hookGroups = getFrontmatterObjectListGroups(\n frontmatter,\n \"hooks\"\n );\n\n if (hookGroups === undefined || hookGroups.size === 0) {\n return;\n }\n\n for (const [eventName, hooks] of hookGroups) {\n for (const [index, hook] of hooks.entries()) {\n const hookNumber = String(index + 1);\n const type = hook[\"type\"]?.trim() ?? \"\";\n\n if (type !== \"command\") {\n reportAtDocumentStart(context, {\n data: {\n eventName,\n hookNumber,\n type: type.length === 0 ? \"(missing)\" : type,\n },\n messageId: \"invalidHookType\",\n });\n\n return;\n }\n\n if (hasAnyHookCommand(hook)) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName,\n hookNumber,\n },\n messageId: \"missingHookCommand\",\n });\n\n return;\n }\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent hooks to use `type: command` and define at least one command property.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidHookType:\n \"Copilot custom agent hook #{{hookNumber}} in `{{eventName}}` must use `type: command` (current value: `{{type}}`).\",\n missingHookCommand:\n \"Copilot custom agent hook #{{hookNumber}} in `{{eventName}}` must define at least one command property (`command`, `windows`, `linux`, or `osx`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-hooks\",\n});\n\nexport default requireValidAgentHooksRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-invocation-controls`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst VALID_BOOLEAN_FIELD_VALUES = new Set([\"false\", \"true\"]);\n\nconst INVOCATION_CONTROL_FIELDS = [\n \"disable-model-invocation\",\n \"user-invocable\",\n] as const;\n\nconst requireValidAgentInvocationControlsRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (frontmatter === null) {\n return;\n }\n\n for (const fieldName of INVOCATION_CONTROL_FIELDS) {\n if (!hasFrontmatterField(frontmatter, fieldName)) {\n continue;\n }\n\n const fieldValue = getFrontmatterScalar(\n frontmatter,\n fieldName\n );\n const normalizedValue = fieldValue?.trim().toLowerCase();\n\n if (\n normalizedValue !== undefined &&\n VALID_BOOLEAN_FIELD_VALUES.has(normalizedValue)\n ) {\n continue;\n }\n\n reportAtDocumentStart(context, {\n data: {\n currentValue:\n fieldValue === undefined ||\n fieldValue.trim().length === 0\n ? \"(empty)\"\n : fieldValue,\n fieldName,\n },\n messageId: \"invalidInvocationControl\",\n });\n\n return;\n }\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent invocation-control flags to use documented boolean values when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidInvocationControl:\n \"Copilot custom agent `{{fieldName}}` must use a boolean `true` or `false` value (current value: `{{currentValue}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-invocation-controls\",\n });\n\nexport default requireValidAgentInvocationControlsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-mcp-servers`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst formatMcpServersValue = (\n scalarValue: string | undefined,\n listValue: readonly string[] | undefined\n): string => {\n if (scalarValue !== undefined) {\n return scalarValue;\n }\n\n if (listValue !== undefined) {\n return `[${listValue.join(\", \")}]`;\n }\n\n return \"(empty)\";\n};\n\nconst requireValidAgentMcpServersRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"mcp-servers\")\n ) {\n return;\n }\n\n const mcpServers = getFrontmatterList(frontmatter, \"mcp-servers\");\n\n if (mcpServers !== undefined && mcpServers.length > 0) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n mcpServersValue: formatMcpServersValue(\n getFrontmatterScalar(frontmatter, \"mcp-servers\"),\n mcpServers\n ),\n },\n messageId: \"invalidMcpServersField\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `mcp-servers` metadata to be a non-empty list when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidMcpServersField:\n \"Copilot custom agent `mcp-servers` metadata must be a non-empty list of MCP server config names (current value: `{{mcpServersValue}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-mcp-servers\",\n});\n\nexport default requireValidAgentMcpServersRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-model`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst INLINE_LIST_LITERAL_PATTERN = /^\\s*\\[.*\\]\\s*$/u;\n\nconst requireValidAgentModelRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"model\")\n ) {\n return;\n }\n\n const modelList = getFrontmatterList(frontmatter, \"model\");\n\n if (modelList !== undefined && modelList.length > 0) {\n return;\n }\n\n const model = getFrontmatterScalar(frontmatter, \"model\");\n\n if (\n model !== undefined &&\n model.length > 0 &&\n !INLINE_LIST_LITERAL_PATTERN.test(model)\n ) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n modelValue:\n model === undefined || model.trim().length === 0\n ? \"(empty)\"\n : model,\n },\n messageId: \"invalidAgentModel\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `model` metadata to be a non-empty model name or non-empty prioritized model list when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidAgentModel:\n \"Copilot custom agent `model` must be a non-empty model name or non-empty prioritized list of model names (current value: `{{modelValue}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-model\",\n});\n\nexport default requireValidAgentModelRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-name`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidAgentNameRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"name\")\n ) {\n return;\n }\n\n if (getFrontmatterScalar(frontmatter, \"name\") !== undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"invalidAgentName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `name` metadata to be a non-empty scalar when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidAgentName:\n \"Copilot custom-agent `name` metadata must be a non-empty scalar when present.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-name\",\n});\n\nexport default requireValidAgentNameRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-subagents`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst EMPTY_ARRAY_LITERAL = \"[]\";\nconst WILDCARD_AGENTS_LITERAL = \"*\";\n\nconst isValidExplicitAgentName = (value: string): boolean => {\n const trimmedValue = value.trim();\n\n return (\n trimmedValue.length > 0 &&\n trimmedValue !== EMPTY_ARRAY_LITERAL &&\n trimmedValue !== WILDCARD_AGENTS_LITERAL\n );\n};\n\nconst formatAgentsValue = (\n scalarValue: string | undefined,\n listValue: readonly string[] | undefined\n): string => {\n if (scalarValue !== undefined) {\n return scalarValue;\n }\n\n if (listValue !== undefined) {\n return `[${listValue.join(\", \")}]`;\n }\n\n return \"(empty)\";\n};\n\nconst requireValidAgentSubagentsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"agents\")\n ) {\n return;\n }\n\n const agentsScalar = getFrontmatterScalar(frontmatter, \"agents\");\n const allowedAgents = getFrontmatterList(frontmatter, \"agents\");\n\n if (\n agentsScalar === WILDCARD_AGENTS_LITERAL ||\n agentsScalar === EMPTY_ARRAY_LITERAL\n ) {\n return;\n }\n\n if (\n allowedAgents !== undefined &&\n allowedAgents.length > 0 &&\n allowedAgents.every((agentName) =>\n isValidExplicitAgentName(agentName)\n )\n ) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n agentsValue: formatAgentsValue(agentsScalar, allowedAgents),\n },\n messageId: \"invalidAgentsField\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `agents` metadata to be `*`, `[]`, or a non-empty list of explicit agent names.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidAgentsField:\n \"Copilot custom agent `agents` metadata must be `*`, `[]`, or a non-empty list of agent names (current value: `{{agentsValue}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-subagents\",\n});\n\nexport default requireValidAgentSubagentsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-target`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst VALID_AGENT_TARGETS = new Set([\"github-copilot\", \"vscode\"]);\n\nconst requireValidAgentTargetRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n hasFrontmatterField(frontmatter, \"mcp-servers\") ||\n !hasFrontmatterField(frontmatter, \"target\")\n ) {\n return;\n }\n\n const target = getFrontmatterScalar(frontmatter, \"target\");\n\n if (target === undefined) {\n reportAtDocumentStart(context, {\n messageId: \"emptyTarget\",\n });\n\n return;\n }\n\n if (VALID_AGENT_TARGETS.has(target)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: { target },\n messageId: \"invalidTarget\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `target` metadata to use a documented target value when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n emptyTarget:\n \"Copilot custom agent files that declare `target` must use a non-empty documented value (`vscode` or `github-copilot`).\",\n invalidTarget:\n \"Copilot custom agent `target` must be `vscode` or `github-copilot` (current value: `{{target}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-target\",\n});\n\nexport default requireValidAgentTargetRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-agent-tools`.\n */\nimport { isCustomAgentFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst formatToolsValue = (\n scalarValue: string | undefined,\n listValue: readonly string[] | undefined\n): string => {\n if (scalarValue !== undefined) {\n return scalarValue;\n }\n\n if (listValue !== undefined) {\n return `[${listValue.join(\", \")}]`;\n }\n\n return \"(empty)\";\n};\n\nconst requireValidAgentToolsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isCustomAgentFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"tools\")\n ) {\n return;\n }\n\n const tools = getFrontmatterList(frontmatter, \"tools\");\n\n if (tools !== undefined && tools.length > 0) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n toolsValue: formatToolsValue(\n getFrontmatterScalar(frontmatter, \"tools\"),\n tools\n ),\n },\n messageId: \"invalidAgentTools\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot custom-agent `tools` metadata to be a non-empty list of tool or tool-set names when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidAgentTools:\n \"Copilot custom agent `tools` metadata must be a non-empty list of tool or tool-set names when present (current value: `{{toolsValue}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-agent-tools\",\n});\n\nexport default requireValidAgentToolsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-instructions-apply-to-globs`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n hasUriScheme,\n isWindowsAbsolutePath,\n} from \"../_internal/file-system.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst isValidApplyToGlob = (value: string): boolean => {\n const trimmedValue = value.trim();\n const lowercaseValue = trimmedValue.toLowerCase();\n\n return (\n trimmedValue.length > 0 &&\n trimmedValue !== \".\" &&\n trimmedValue !== \"..\" &&\n !trimmedValue.startsWith(\"./\") &&\n !trimmedValue.startsWith(\"../\") &&\n !trimmedValue.startsWith(\"#\") &&\n !trimmedValue.includes(\"\\\\\") &&\n !lowercaseValue.startsWith(\"/\") &&\n !lowercaseValue.startsWith(\"~/\") &&\n !lowercaseValue.startsWith(\"~\\\\\") &&\n !isWindowsAbsolutePath(trimmedValue) &&\n !hasUriScheme(trimmedValue)\n );\n};\n\nconst requireValidInstructionsApplyToGlobsRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"instructions\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"applyTo\")\n ) {\n return;\n }\n\n const applyToValues = [\n ...(getFrontmatterList(frontmatter, \"applyTo\") ?? []),\n ];\n const applyToScalar = getFrontmatterScalar(\n frontmatter,\n \"applyTo\"\n );\n\n if (applyToScalar !== undefined) {\n applyToValues.push(applyToScalar);\n }\n\n const invalidValue = applyToValues.find(\n (value) => !isValidApplyToGlob(value)\n );\n\n if (invalidValue === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n applyTo: invalidValue,\n },\n messageId: \"invalidApplyToGlob\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require path-specific Copilot instructions `applyTo` metadata to use repository-relative glob patterns.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidApplyToGlob:\n \"Copilot instructions `applyTo` metadata should use repository-relative glob patterns, not `{{applyTo}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-instructions-apply-to-globs\",\n });\n\nexport default requireValidInstructionsApplyToGlobsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-prompt-argument-hint`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidPromptArgumentHintRule: CopilotRuleModule = createCopilotRule(\n {\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"prompt\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"argument-hint\")\n ) {\n return;\n }\n\n if (\n getFrontmatterScalar(frontmatter, \"argument-hint\") !==\n undefined\n ) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"invalidPromptArgumentHint\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot prompt-file `argument-hint` metadata to be a non-empty scalar when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidPromptArgumentHint:\n \"Copilot prompt-file `argument-hint` metadata must be a non-empty scalar when present.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-prompt-argument-hint\",\n }\n);\n\nexport default requireValidPromptArgumentHintRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-prompt-model`.\n */\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst INLINE_LIST_LITERAL_PATTERN = /^\\s*\\[.*\\]\\s*$/u;\n\nconst formatPromptModelValue = (\n scalarValue: string | undefined,\n listValue: readonly string[] | undefined\n): string => {\n if (scalarValue !== undefined) {\n return scalarValue;\n }\n\n if (listValue !== undefined) {\n return `[${listValue.join(\", \")}]`;\n }\n\n return \"(empty)\";\n};\n\nconst requireValidPromptModelRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"prompt\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"model\")\n ) {\n return;\n }\n\n const modelList = getFrontmatterList(frontmatter, \"model\");\n\n if (modelList !== undefined) {\n reportAtDocumentStart(context, {\n data: {\n modelValue: formatPromptModelValue(\n undefined,\n modelList\n ),\n },\n messageId: \"invalidPromptModel\",\n });\n return;\n }\n\n const model = getFrontmatterScalar(frontmatter, \"model\");\n\n if (\n model !== undefined &&\n model.length > 0 &&\n !INLINE_LIST_LITERAL_PATTERN.test(model)\n ) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n modelValue: formatPromptModelValue(model, modelList),\n },\n messageId: \"invalidPromptModel\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot prompt-file `model` metadata to be a non-empty single model name when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidPromptModel:\n \"Copilot prompt-file `model` metadata must be a non-empty single model name when present (current value: `{{modelValue}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-prompt-model\",\n});\n\nexport default requireValidPromptModelRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-prompt-name`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidPromptNameRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"prompt\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"name\")\n ) {\n return;\n }\n\n if (getFrontmatterScalar(frontmatter, \"name\") !== undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"invalidPromptName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot prompt-file `name` metadata to be a non-empty scalar when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidPromptName:\n \"Copilot prompt-file `name` metadata must be a non-empty scalar when present.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-prompt-name\",\n});\n\nexport default requireValidPromptNameRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { getCopilotFileKind } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-prompt-tools`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterList,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst formatToolsValue = (\n scalarValue: string | undefined,\n listValue: readonly string[] | undefined\n): string => {\n if (scalarValue !== undefined) {\n return scalarValue;\n }\n\n if (listValue !== undefined) {\n return `[${listValue.join(\", \")}]`;\n }\n\n return \"(empty)\";\n};\n\nconst requireValidPromptToolsRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (getCopilotFileKind(context.filename) !== \"prompt\") {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"tools\")\n ) {\n return;\n }\n\n const tools = getFrontmatterList(frontmatter, \"tools\");\n\n if (tools !== undefined && tools.length > 0) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n toolsValue: formatToolsValue(\n getFrontmatterScalar(frontmatter, \"tools\"),\n tools\n ),\n },\n messageId: \"invalidPromptTools\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot prompt-file `tools` metadata to be a non-empty list of tool or tool-set names when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidPromptTools:\n \"Copilot prompt-file `tools` metadata must be a non-empty list of tool or tool-set names when present (current value: `{{toolsValue}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-prompt-tools\",\n});\n\nexport default requireValidPromptToolsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-repository-hook-command-type`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n formatJsonValue,\n getRepositoryHookObjects,\n isJsonString,\n isRepositoryHookType,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireValidRepositoryHookCommandTypeRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidHook = getRepositoryHookObjects(root).find(\n ({ hook }) => {\n const typeValue = hook[\"type\"];\n\n return (\n !isJsonString(typeValue) ||\n !isRepositoryHookType(typeValue)\n );\n }\n );\n\n if (invalidHook === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName: invalidHook.eventName,\n type: formatJsonValue(invalidHook.hook[\"type\"]),\n },\n messageId: \"invalidRepositoryHookType\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook definitions to declare a supported `type` value such as `command` or `prompt`.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidRepositoryHookType:\n \"Repository hook definitions for `{{eventName}}` must declare a supported `type` such as `command` or `prompt` (current value: `{{type}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-repository-hook-command-type\",\n });\n\nexport default requireValidRepositoryHookCommandTypeRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-repository-hook-env`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n formatJsonValue,\n getRepositoryHookObjects,\n isJsonObject,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireValidRepositoryHookEnvRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidHook = getRepositoryHookObjects(root).find(\n ({ hook }) => {\n const env = hook[\"env\"];\n\n return env !== undefined && !isJsonObject(env);\n }\n );\n\n if (invalidHook === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n env: formatJsonValue(invalidHook.hook[\"env\"]),\n eventName: invalidHook.eventName,\n },\n messageId: \"invalidRepositoryHookEnv\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook `env` values to be JSON objects when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidRepositoryHookEnv:\n \"Repository hook `env` for `{{eventName}}` must be a JSON object when present (current value: `{{env}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-repository-hook-env\",\n});\n\nexport default requireValidRepositoryHookEnvRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-repository-hook-events`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n getRepositoryHookEventEntries,\n isRepositoryHookEventName,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireValidRepositoryHookEventsRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidEventName = getRepositoryHookEventEntries(root)\n .map(([eventName]) => eventName)\n .find(\n (eventName) => !isRepositoryHookEventName(eventName)\n );\n\n if (invalidEventName === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName: invalidEventName,\n },\n messageId: \"invalidRepositoryHookEvent\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook configuration files to use supported hook event names.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidRepositoryHookEvent:\n \"Repository hook configuration files should use a supported hook event name, not `{{eventName}}`.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-repository-hook-events\",\n });\n\nexport default requireValidRepositoryHookEventsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-repository-hook-timeouts`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n formatJsonValue,\n getRepositoryHookObjects,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst isValidTimeoutSeconds = (value: unknown): value is number =>\n typeof value === \"number\" && Number.isInteger(value) && value > 0;\n\nconst requireValidRepositoryHookTimeoutsRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const invalidHook = getRepositoryHookObjects(root).find(\n ({ hook }) => {\n const timeout = hook[\"timeoutSec\"];\n\n return (\n timeout !== undefined &&\n !isValidTimeoutSeconds(timeout)\n );\n }\n );\n\n if (invalidHook === undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n eventName: invalidHook.eventName,\n timeout: formatJsonValue(\n invalidHook.hook[\"timeoutSec\"]\n ),\n },\n messageId: \"invalidRepositoryHookTimeout\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook `timeoutSec` values to be positive integers when present.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidRepositoryHookTimeout:\n \"Repository hook `timeoutSec` for `{{eventName}}` must be a positive integer when present (current value: `{{timeout}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-repository-hook-timeouts\",\n });\n\nexport default requireValidRepositoryHookTimeoutsRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-repository-hook-version`.\n */\nimport { isRepositoryHookFilePath } from \"../_internal/copilot-file-kind.js\";\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport { reportAtDocumentStart } from \"../_internal/markdown-rule.js\";\nimport {\n formatJsonValue,\n getRepositoryHooksVersionValue,\n parseJsonText,\n} from \"../_internal/repository-hooks-json.js\";\n\nconst requireValidRepositoryHookVersionRule: CopilotRuleModule =\n createCopilotRule({\n create(context) {\n return {\n Document() {\n if (!isRepositoryHookFilePath(context.filename)) {\n return;\n }\n\n const root = parseJsonText(context.sourceCode.text);\n const versionValue = getRepositoryHooksVersionValue(root);\n\n if (versionValue === 1) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n version: formatJsonValue(versionValue),\n },\n messageId: \"invalidRepositoryHookVersion\",\n });\n },\n };\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require repository hook configuration files to declare `version: 1`.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidRepositoryHookVersion:\n \"Repository hook configuration files must declare `version: 1` (current value: `{{version}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-repository-hook-version\",\n });\n\nexport default requireValidRepositoryHookVersionRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getSkillDirectoryName,\n isValidSkillIdentifier,\n} from \"../_internal/copilot-customization-names.js\";\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-skill-directory-name`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidSkillDirectoryNameRule: CopilotRuleModule = createCopilotRule(\n {\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const directoryName = getSkillDirectoryName(context.filename);\n\n if (isValidSkillIdentifier(directoryName)) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n directoryName,\n },\n messageId: \"invalidSkillDirectoryName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot skill directory names to use the documented lowercase-hyphen form.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidSkillDirectoryName:\n \"Copilot skill directory names must use lowercase letters, digits, and hyphens only (current directory: `{{directoryName}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-skill-directory-name\",\n }\n);\n\nexport default requireValidSkillDirectoryNameRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-skill-license`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidSkillLicenseRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"license\")\n ) {\n return;\n }\n\n if (getFrontmatterScalar(frontmatter, \"license\") !== undefined) {\n return;\n }\n\n reportAtDocumentStart(context, {\n messageId: \"invalidSkillLicense\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\"copilot.configs.strict\", \"copilot.configs.all\"],\n description:\n \"require optional Copilot skill `license` metadata to be a non-empty scalar when present.\",\n frozen: false,\n recommended: false,\n requiresTypeChecking: false,\n },\n messages: {\n invalidSkillLicense:\n \"Copilot skill `license` metadata must be a non-empty scalar when present.\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-skill-license\",\n});\n\nexport default requireValidSkillLicenseRule;\n", "import type { CopilotRuleModule } from \"../_internal/create-copilot-rule.js\";\n\nimport {\n getSkillName,\n isValidSkillIdentifier,\n} from \"../_internal/copilot-customization-names.js\";\nimport { isSkillFilePath } from \"../_internal/copilot-file-kind.js\";\n/**\n * @packageDocumentation\n * ESLint rule implementation for `require-valid-skill-name`.\n */\nimport { createCopilotRule } from \"../_internal/create-copilot-rule.js\";\nimport {\n extractFrontmatter,\n getFrontmatterScalar,\n hasFrontmatterField,\n} from \"../_internal/frontmatter.js\";\nimport {\n createMarkdownDocumentListener,\n reportAtDocumentStart,\n} from \"../_internal/markdown-rule.js\";\n\nconst requireValidSkillNameRule: CopilotRuleModule = createCopilotRule({\n create(context) {\n return createMarkdownDocumentListener(() => {\n if (!isSkillFilePath(context.filename)) {\n return;\n }\n\n const frontmatter = extractFrontmatter(context.sourceCode.text);\n\n if (\n frontmatter === null ||\n !hasFrontmatterField(frontmatter, \"name\")\n ) {\n return;\n }\n\n const skillName = getFrontmatterScalar(frontmatter, \"name\");\n\n if (\n skillName !== undefined &&\n isValidSkillIdentifier(\n getSkillName(context.filename, frontmatter)\n )\n ) {\n return;\n }\n\n reportAtDocumentStart(context, {\n data: {\n name: skillName ?? \"(empty)\",\n },\n messageId: \"invalidSkillName\",\n });\n });\n },\n defaultOptions: [],\n meta: {\n deprecated: false,\n docs: {\n copilotConfigs: [\n \"copilot.configs.recommended\",\n \"copilot.configs.strict\",\n \"copilot.configs.all\",\n ],\n description:\n \"require Copilot skill `name` metadata to use the documented lowercase-hyphen identifier form.\",\n frozen: false,\n recommended: true,\n requiresTypeChecking: false,\n },\n messages: {\n invalidSkillName:\n \"Copilot skill `name` values must use lowercase letters, digits, and hyphens only (current value: `{{name}}`).\",\n },\n schema: [],\n type: \"problem\",\n },\n name: \"require-valid-skill-name\",\n});\n\nexport default requireValidSkillNameRule;\n", "/**\n * @packageDocumentation\n * Canonical runtime registry of all rule modules shipped by eslint-plugin-copilot.\n */\nimport type { CopilotRuleModule } from \"./create-copilot-rule.js\";\n\nimport noBlankCustomizationBodyRule from \"../rules/no-blank-customization-body.js\";\nimport noBlankRepositoryInstructionsRule from \"../rules/no-blank-repository-instructions.js\";\nimport noBlankSkillBodyRule from \"../rules/no-blank-skill-body.js\";\nimport noDeprecatedAgentInferRule from \"../rules/no-deprecated-agent-infer.js\";\nimport noDuplicateAgentNamesRule from \"../rules/no-duplicate-agent-names.js\";\nimport noDuplicatePromptNamesRule from \"../rules/no-duplicate-prompt-names.js\";\nimport noDuplicateSkillNamesRule from \"../rules/no-duplicate-skill-names.js\";\nimport noDuplicateSlashCommandNamesRule from \"../rules/no-duplicate-slash-command-names.js\";\nimport noEmptyRepositoryHookArraysRule from \"../rules/no-empty-repository-hook-arrays.js\";\nimport noLegacyChatmodeFilesRule from \"../rules/no-legacy-chatmode-files.js\";\nimport preferCustomInstructionsUnderCodeReviewLimitRule from \"../rules/prefer-custom-instructions-under-code-review-limit.js\";\nimport preferFastRepositoryHooksRule from \"../rules/prefer-fast-repository-hooks.js\";\nimport preferQualifiedToolsRule from \"../rules/prefer-qualified-tools.js\";\nimport requireAgentToolForSubagentsRule from \"../rules/require-agent-tool-for-subagents.js\";\nimport requireAgentsMdForCrossSurfaceAgentInstructionsRule from \"../rules/require-agents-md-for-cross-surface-agent-instructions.js\";\nimport requireChatmodeFileMetadataRule from \"../rules/require-chatmode-file-metadata.js\";\nimport requireExistingAgentHookCwdRule from \"../rules/require-existing-agent-hook-cwd.js\";\nimport requireExistingAgentMcpServersRule from \"../rules/require-existing-agent-mcp-servers.js\";\nimport requireExistingRelativeAgentLinksRule from \"../rules/require-existing-relative-agent-links.js\";\nimport requireExistingRelativeInstructionsLinksRule from \"../rules/require-existing-relative-instructions-links.js\";\nimport requireExistingRelativePromptLinksRule from \"../rules/require-existing-relative-prompt-links.js\";\nimport requireExistingRelativeSkillLinksRule from \"../rules/require-existing-relative-skill-links.js\";\nimport requireExistingRepositoryHookCwdRule from \"../rules/require-existing-repository-hook-cwd.js\";\nimport requireGithubCopilotTargetForMcpServersRule from \"../rules/require-github-copilot-target-for-mcp-servers.js\";\nimport requireInstructionsApplyToRule from \"../rules/require-instructions-apply-to.js\";\nimport requireJsonAgentMcpServersRule from \"../rules/require-json-agent-mcp-servers.js\";\nimport requirePromptFileMetadataRule from \"../rules/require-prompt-file-metadata.js\";\nimport requireQualifiedAgentHandoffModelsRule from \"../rules/require-qualified-agent-handoff-models.js\";\nimport requireRelativeAgentHookCwdRule from \"../rules/require-relative-agent-hook-cwd.js\";\nimport requireRelativeAgentLinksRule from \"../rules/require-relative-agent-links.js\";\nimport requireRelativeInstructionsLinksRule from \"../rules/require-relative-instructions-links.js\";\nimport requireRelativePromptLinksRule from \"../rules/require-relative-prompt-links.js\";\nimport requireRelativeRepositoryHookCwdRule from \"../rules/require-relative-repository-hook-cwd.js\";\nimport requireRelativeSkillLinksRule from \"../rules/require-relative-skill-links.js\";\nimport requireRepositoryHookArraysRule from \"../rules/require-repository-hook-arrays.js\";\nimport requireRepositoryHookCommandShellRule from \"../rules/require-repository-hook-command-shell.js\";\nimport requireRepositoryHooksObjectRule from \"../rules/require-repository-hooks-object.js\";\nimport requireRepositoryInstructionsFileRule from \"../rules/require-repository-instructions-file.js\";\nimport requireSkillFileLocationRule from \"../rules/require-skill-file-location.js\";\nimport requireSkillFileMetadataRule from \"../rules/require-skill-file-metadata.js\";\nimport requireSkillMdFilenameRule from \"../rules/require-skill-md-filename.js\";\nimport requireSkillNameMatchDirectoryRule from \"../rules/require-skill-name-match-directory.js\";\nimport requireStringRepositoryHookEnvValuesRule from \"../rules/require-string-repository-hook-env-values.js\";\nimport requireValidAgentArgumentHintRule from \"../rules/require-valid-agent-argument-hint.js\";\nimport requireValidAgentHandoffSendRule from \"../rules/require-valid-agent-handoff-send.js\";\nimport requireValidAgentHandoffsRule from \"../rules/require-valid-agent-handoffs.js\";\nimport requireValidAgentHookEventsRule from \"../rules/require-valid-agent-hook-events.js\";\nimport requireValidAgentHookTimeoutsRule from \"../rules/require-valid-agent-hook-timeouts.js\";\nimport requireValidAgentHooksRule from \"../rules/require-valid-agent-hooks.js\";\nimport requireValidAgentInvocationControlsRule from \"../rules/require-valid-agent-invocation-controls.js\";\nimport requireValidAgentMcpServersRule from \"../rules/require-valid-agent-mcp-servers.js\";\nimport requireValidAgentModelRule from \"../rules/require-valid-agent-model.js\";\nimport requireValidAgentNameRule from \"../rules/require-valid-agent-name.js\";\nimport requireValidAgentSubagentsRule from \"../rules/require-valid-agent-subagents.js\";\nimport requireValidAgentTargetRule from \"../rules/require-valid-agent-target.js\";\nimport requireValidAgentToolsRule from \"../rules/require-valid-agent-tools.js\";\nimport requireValidInstructionsApplyToGlobsRule from \"../rules/require-valid-instructions-apply-to-globs.js\";\nimport requireValidPromptArgumentHintRule from \"../rules/require-valid-prompt-argument-hint.js\";\nimport requireValidPromptModelRule from \"../rules/require-valid-prompt-model.js\";\nimport requireValidPromptNameRule from \"../rules/require-valid-prompt-name.js\";\nimport requireValidPromptToolsRule from \"../rules/require-valid-prompt-tools.js\";\nimport requireValidRepositoryHookCommandTypeRule from \"../rules/require-valid-repository-hook-command-type.js\";\nimport requireValidRepositoryHookEnvRule from \"../rules/require-valid-repository-hook-env.js\";\nimport requireValidRepositoryHookEventsRule from \"../rules/require-valid-repository-hook-events.js\";\nimport requireValidRepositoryHookTimeoutsRule from \"../rules/require-valid-repository-hook-timeouts.js\";\nimport requireValidRepositoryHookVersionRule from \"../rules/require-valid-repository-hook-version.js\";\nimport requireValidSkillDirectoryNameRule from \"../rules/require-valid-skill-directory-name.js\";\nimport requireValidSkillLicenseRule from \"../rules/require-valid-skill-license.js\";\nimport requireValidSkillNameRule from \"../rules/require-valid-skill-name.js\";\n\n/** Runtime rule module shape used by registry and preset builders. */\nexport type RuleWithDocs = CopilotRuleModule;\n\n/** Exact runtime rule registry shape. */\ntype CopilotRuleRegistry = Readonly<{\n \"no-blank-customization-body\": RuleWithDocs;\n \"no-blank-repository-instructions\": RuleWithDocs;\n \"no-blank-skill-body\": RuleWithDocs;\n \"no-deprecated-agent-infer\": RuleWithDocs;\n \"no-duplicate-agent-names\": RuleWithDocs;\n \"no-duplicate-prompt-names\": RuleWithDocs;\n \"no-duplicate-skill-names\": RuleWithDocs;\n \"no-duplicate-slash-command-names\": RuleWithDocs;\n \"no-empty-repository-hook-arrays\": RuleWithDocs;\n \"no-legacy-chatmode-files\": RuleWithDocs;\n \"prefer-custom-instructions-under-code-review-limit\": RuleWithDocs;\n \"prefer-fast-repository-hooks\": RuleWithDocs;\n \"prefer-qualified-tools\": RuleWithDocs;\n \"require-agent-tool-for-subagents\": RuleWithDocs;\n \"require-agents-md-for-cross-surface-agent-instructions\": RuleWithDocs;\n \"require-chatmode-file-metadata\": RuleWithDocs;\n \"require-existing-agent-hook-cwd\": RuleWithDocs;\n \"require-existing-agent-mcp-servers\": RuleWithDocs;\n \"require-existing-relative-agent-links\": RuleWithDocs;\n \"require-existing-relative-instructions-links\": RuleWithDocs;\n \"require-existing-relative-prompt-links\": RuleWithDocs;\n \"require-existing-relative-skill-links\": RuleWithDocs;\n \"require-existing-repository-hook-cwd\": RuleWithDocs;\n \"require-github-copilot-target-for-mcp-servers\": RuleWithDocs;\n \"require-instructions-apply-to\": RuleWithDocs;\n \"require-json-agent-mcp-servers\": RuleWithDocs;\n \"require-prompt-file-metadata\": RuleWithDocs;\n \"require-qualified-agent-handoff-models\": RuleWithDocs;\n \"require-relative-agent-hook-cwd\": RuleWithDocs;\n \"require-relative-agent-links\": RuleWithDocs;\n \"require-relative-instructions-links\": RuleWithDocs;\n \"require-relative-prompt-links\": RuleWithDocs;\n \"require-relative-repository-hook-cwd\": RuleWithDocs;\n \"require-relative-skill-links\": RuleWithDocs;\n \"require-repository-hook-arrays\": RuleWithDocs;\n \"require-repository-hook-command-shell\": RuleWithDocs;\n \"require-repository-hooks-object\": RuleWithDocs;\n \"require-repository-instructions-file\": RuleWithDocs;\n \"require-skill-file-location\": RuleWithDocs;\n \"require-skill-file-metadata\": RuleWithDocs;\n \"require-skill-md-filename\": RuleWithDocs;\n \"require-skill-name-match-directory\": RuleWithDocs;\n \"require-string-repository-hook-env-values\": RuleWithDocs;\n \"require-valid-agent-argument-hint\": RuleWithDocs;\n \"require-valid-agent-handoff-send\": RuleWithDocs;\n \"require-valid-agent-handoffs\": RuleWithDocs;\n \"require-valid-agent-hook-events\": RuleWithDocs;\n \"require-valid-agent-hook-timeouts\": RuleWithDocs;\n \"require-valid-agent-hooks\": RuleWithDocs;\n \"require-valid-agent-invocation-controls\": RuleWithDocs;\n \"require-valid-agent-mcp-servers\": RuleWithDocs;\n \"require-valid-agent-model\": RuleWithDocs;\n \"require-valid-agent-name\": RuleWithDocs;\n \"require-valid-agent-subagents\": RuleWithDocs;\n \"require-valid-agent-target\": RuleWithDocs;\n \"require-valid-agent-tools\": RuleWithDocs;\n \"require-valid-instructions-apply-to-globs\": RuleWithDocs;\n \"require-valid-prompt-argument-hint\": RuleWithDocs;\n \"require-valid-prompt-model\": RuleWithDocs;\n \"require-valid-prompt-name\": RuleWithDocs;\n \"require-valid-prompt-tools\": RuleWithDocs;\n \"require-valid-repository-hook-command-type\": RuleWithDocs;\n \"require-valid-repository-hook-env\": RuleWithDocs;\n \"require-valid-repository-hook-events\": RuleWithDocs;\n \"require-valid-repository-hook-timeouts\": RuleWithDocs;\n \"require-valid-repository-hook-version\": RuleWithDocs;\n \"require-valid-skill-directory-name\": RuleWithDocs;\n \"require-valid-skill-license\": RuleWithDocs;\n \"require-valid-skill-name\": RuleWithDocs;\n}>;\n\n/** Runtime map of all rule modules keyed by unqualified rule name. */\nconst copilotRuleRegistry: CopilotRuleRegistry = {\n \"no-blank-customization-body\": noBlankCustomizationBodyRule,\n \"no-blank-repository-instructions\": noBlankRepositoryInstructionsRule,\n \"no-blank-skill-body\": noBlankSkillBodyRule,\n \"no-deprecated-agent-infer\": noDeprecatedAgentInferRule,\n \"no-duplicate-agent-names\": noDuplicateAgentNamesRule,\n \"no-duplicate-prompt-names\": noDuplicatePromptNamesRule,\n \"no-duplicate-skill-names\": noDuplicateSkillNamesRule,\n \"no-duplicate-slash-command-names\": noDuplicateSlashCommandNamesRule,\n \"no-empty-repository-hook-arrays\": noEmptyRepositoryHookArraysRule,\n \"no-legacy-chatmode-files\": noLegacyChatmodeFilesRule,\n \"prefer-custom-instructions-under-code-review-limit\":\n preferCustomInstructionsUnderCodeReviewLimitRule,\n \"prefer-fast-repository-hooks\": preferFastRepositoryHooksRule,\n \"prefer-qualified-tools\": preferQualifiedToolsRule,\n \"require-agent-tool-for-subagents\": requireAgentToolForSubagentsRule,\n \"require-agents-md-for-cross-surface-agent-instructions\":\n requireAgentsMdForCrossSurfaceAgentInstructionsRule,\n \"require-chatmode-file-metadata\": requireChatmodeFileMetadataRule,\n \"require-existing-agent-hook-cwd\": requireExistingAgentHookCwdRule,\n \"require-existing-agent-mcp-servers\": requireExistingAgentMcpServersRule,\n \"require-existing-relative-agent-links\":\n requireExistingRelativeAgentLinksRule,\n \"require-existing-relative-instructions-links\":\n requireExistingRelativeInstructionsLinksRule,\n \"require-existing-relative-prompt-links\":\n requireExistingRelativePromptLinksRule,\n \"require-existing-relative-skill-links\":\n requireExistingRelativeSkillLinksRule,\n \"require-existing-repository-hook-cwd\":\n requireExistingRepositoryHookCwdRule,\n \"require-github-copilot-target-for-mcp-servers\":\n requireGithubCopilotTargetForMcpServersRule,\n \"require-instructions-apply-to\": requireInstructionsApplyToRule,\n \"require-json-agent-mcp-servers\": requireJsonAgentMcpServersRule,\n \"require-prompt-file-metadata\": requirePromptFileMetadataRule,\n \"require-qualified-agent-handoff-models\":\n requireQualifiedAgentHandoffModelsRule,\n \"require-relative-agent-hook-cwd\": requireRelativeAgentHookCwdRule,\n \"require-relative-agent-links\": requireRelativeAgentLinksRule,\n \"require-relative-instructions-links\": requireRelativeInstructionsLinksRule,\n \"require-relative-prompt-links\": requireRelativePromptLinksRule,\n \"require-relative-repository-hook-cwd\":\n requireRelativeRepositoryHookCwdRule,\n \"require-relative-skill-links\": requireRelativeSkillLinksRule,\n \"require-repository-hook-arrays\": requireRepositoryHookArraysRule,\n \"require-repository-hook-command-shell\":\n requireRepositoryHookCommandShellRule,\n \"require-repository-hooks-object\": requireRepositoryHooksObjectRule,\n \"require-repository-instructions-file\":\n requireRepositoryInstructionsFileRule,\n \"require-skill-file-location\": requireSkillFileLocationRule,\n \"require-skill-file-metadata\": requireSkillFileMetadataRule,\n \"require-skill-md-filename\": requireSkillMdFilenameRule,\n \"require-skill-name-match-directory\": requireSkillNameMatchDirectoryRule,\n \"require-string-repository-hook-env-values\":\n requireStringRepositoryHookEnvValuesRule,\n \"require-valid-agent-argument-hint\": requireValidAgentArgumentHintRule,\n \"require-valid-agent-handoff-send\": requireValidAgentHandoffSendRule,\n \"require-valid-agent-handoffs\": requireValidAgentHandoffsRule,\n \"require-valid-agent-hook-events\": requireValidAgentHookEventsRule,\n \"require-valid-agent-hook-timeouts\": requireValidAgentHookTimeoutsRule,\n \"require-valid-agent-hooks\": requireValidAgentHooksRule,\n \"require-valid-agent-invocation-controls\":\n requireValidAgentInvocationControlsRule,\n \"require-valid-agent-mcp-servers\": requireValidAgentMcpServersRule,\n \"require-valid-agent-model\": requireValidAgentModelRule,\n \"require-valid-agent-name\": requireValidAgentNameRule,\n \"require-valid-agent-subagents\": requireValidAgentSubagentsRule,\n \"require-valid-agent-target\": requireValidAgentTargetRule,\n \"require-valid-agent-tools\": requireValidAgentToolsRule,\n \"require-valid-instructions-apply-to-globs\":\n requireValidInstructionsApplyToGlobsRule,\n \"require-valid-prompt-argument-hint\": requireValidPromptArgumentHintRule,\n \"require-valid-prompt-model\": requireValidPromptModelRule,\n \"require-valid-prompt-name\": requireValidPromptNameRule,\n \"require-valid-prompt-tools\": requireValidPromptToolsRule,\n \"require-valid-repository-hook-command-type\":\n requireValidRepositoryHookCommandTypeRule,\n \"require-valid-repository-hook-env\": requireValidRepositoryHookEnvRule,\n \"require-valid-repository-hook-events\":\n requireValidRepositoryHookEventsRule,\n \"require-valid-repository-hook-timeouts\":\n requireValidRepositoryHookTimeoutsRule,\n \"require-valid-repository-hook-version\":\n requireValidRepositoryHookVersionRule,\n \"require-valid-skill-directory-name\": requireValidSkillDirectoryNameRule,\n \"require-valid-skill-license\": requireValidSkillLicenseRule,\n \"require-valid-skill-name\": requireValidSkillNameRule,\n};\n\n/** Exported typed view consumed by the plugin entrypoint. */\nexport const copilotRules: CopilotRuleRegistry = copilotRuleRegistry;\n\nexport default copilotRules;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;;;kBAAiB;AACjB,sBAAqB;;;ACPrB;AAAA,EACI,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EACA,UAAY;AAAA,EACZ,MAAQ;AAAA,IACJ,KAAO;AAAA,IACP,OAAS;AAAA,EACb;AAAA,EACA,YAAc;AAAA,IACV,MAAQ;AAAA,IACR,KAAO;AAAA,EACX;AAAA,EACA,SAAW;AAAA,EACX,QAAU;AAAA,EACV,cAAgB;AAAA,IACZ;AAAA,MACI,MAAQ;AAAA,MACR,OAAS;AAAA,MACT,KAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,SAAW;AAAA,IACP,KAAK;AAAA,MACD,QAAU;AAAA,QACN,OAAS;AAAA,QACT,SAAW;AAAA,MACf;AAAA,MACA,SAAW;AAAA,QACP,OAAS;AAAA,QACT,SAAW;AAAA,MACf;AAAA,MACA,SAAW;AAAA,IACf;AAAA,IACA,kBAAkB;AAAA,EACtB;AAAA,EACA,MAAQ;AAAA,EACR,OAAS;AAAA,EACT,OAAS;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EACA,YAAc;AAAA,IACV;AAAA,EACJ;AAAA,EACA,SAAW;AAAA,IACP,OAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,IACf,0BAA0B;AAAA,IAC1B,gCAAgC;AAAA,IAChC,6BAA6B;AAAA,IAC7B,mCAAmC;AAAA,IACnC,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,IAC3B,eAAe;AAAA,IACf,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,QAAU;AAAA,IACV,SAAW;AAAA,IACX,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,UAAY;AAAA,IACZ,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,cAAc;AAAA,IACd,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,wBAAwB;AAAA,IACxB,4BAA4B;AAAA,IAC5B,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,IAC3B,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,6BAA6B;AAAA,IAC7B,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,gBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,6BAA6B;AAAA,IAC7B,2BAA2B;AAAA,IAC3B,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,SAAW;AAAA,IACX,MAAQ;AAAA,IACR,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,WAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,6BAA6B;AAAA,EACjC;AAAA,EACA,WAAa;AAAA,IACT,uBAAuB;AAAA,EAC3B;AAAA,EACA,cAAgB;AAAA,IACZ,6BAA6B;AAAA,IAC7B,iCAAiC;AAAA,IACjC,4BAA4B;AAAA,EAChC;AAAA,EACA,iBAAmB;AAAA,IACf,yBAAyB;AAAA,IACzB,wCAAwC;AAAA,IACxC,6BAA6B;AAAA,IAC7B,sCAAsC;AAAA,IACtC,gCAAgC;AAAA,IAChC,mDAAmD;AAAA,IACnD,+BAA+B;AAAA,IAC/B,kBAAkB;AAAA,IAClB,0BAA0B;AAAA,IAC1B,4BAA4B;AAAA,IAC5B,eAAe;AAAA,IACf,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,uBAAuB;AAAA,IACvB,gCAAgC;AAAA,IAChC,2BAA2B;AAAA,IAC3B,yCAAyC;AAAA,IACzC,mCAAmC;AAAA,IACnC,0DAA0D;AAAA,IAC1D,mCAAmC;AAAA,IACnC,sCAAsC;AAAA,IACtC,yCAAyC;AAAA,IACzC,0CAA0C;AAAA,IAC1C,mCAAmC;AAAA,IACnC,sCAAsC;AAAA,IACtC,uCAAuC;AAAA,IACvC,gDAAgD;AAAA,IAChD,0CAA0C;AAAA,IAC1C,oDAAoD;AAAA,IACpD,qBAAqB;AAAA,IACrB,+CAA+C;AAAA,IAC/C,gCAAgC;AAAA,IAChC,yBAAyB;AAAA,IACzB,uCAAuC;AAAA,IACvC,kCAAkC;AAAA,IAClC,oCAAoC;AAAA,IACpC,wCAAwC;AAAA,IACxC,4BAA4B;AAAA,IAC5B,+BAA+B;AAAA,IAC/B,iCAAiC;AAAA,IACjC,iCAAiC;AAAA,IACjC,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,wBAAwB;AAAA,IACxB,iCAAiC;AAAA,IACjC,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,6BAA6B;AAAA,IAC7B,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,IAC3B,eAAe;AAAA,IACf,oCAAoC;AAAA,IACpC,kCAAkC;AAAA,IAClC,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,cAAc;AAAA,IACd,YAAc;AAAA,IACd,wBAAwB;AAAA,IACxB,2BAA2B;AAAA,IAC3B,YAAc;AAAA,IACd,6BAA6B;AAAA,IAC7B,aAAa;AAAA,IACb,UAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,QAAU;AAAA,IACV,gCAAgC;AAAA,IAChC,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,qCAAqC;AAAA,IACrC,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,IAC3B,6BAA6B;AAAA,IAC7B,gCAAgC;AAAA,IAChC,6BAA6B;AAAA,IAC7B,2BAA2B;AAAA,IAC3B,wBAAwB;AAAA,IACxB,+BAA+B;AAAA,IAC/B,qBAAqB;AAAA,IACrB,0BAA0B;AAAA,IAC1B,iCAAiC;AAAA,IACjC,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,IAC1B,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,0BAA0B;AAAA,IAC1B,2BAA2B;AAAA,IAC3B,kCAAkC;AAAA,IAClC,sBAAsB;AAAA,IACtB,gCAAgC;AAAA,IAChC,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,iCAAiC;AAAA,IACjC,0CAA0C;AAAA,IAC1C,kDAAkD;AAAA,IAClD,gDAAgD;AAAA,IAChD,+BAA+B;AAAA,IAC/B,4BAA4B;AAAA,IAC5B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA,IACtC,mCAAmC;AAAA,IACnC,8BAA8B;AAAA,IAC9B,+BAA+B;AAAA,IAC/B,8BAA8B;AAAA,IAC9B,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,+BAA+B;AAAA,IAC/B,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,oCAAoC;AAAA,IACpC,iCAAiC;AAAA,IACjC,sBAAsB;AAAA,IACtB,iCAAiC;AAAA,IACjC,uBAAuB;AAAA,IACvB,iCAAiC;AAAA,IACjC,uCAAuC;AAAA,IACvC,yBAAyB;AAAA,IACzB,gCAAgC;AAAA,IAChC,qCAAqC;AAAA,IACrC,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,2BAA2B;AAAA,IAC3B,SAAW;AAAA,IACX,UAAY;AAAA,IACZ,OAAS;AAAA,IACT,uBAAuB;AAAA,IACvB,MAAQ;AAAA,IACR,QAAU;AAAA,IACV,OAAS;AAAA,IACT,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,YAAc;AAAA,IACd,SAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,wCAAwC;AAAA,IACxC,0BAA0B;AAAA,IAC1B,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,2BAA2B;AAAA,IAC3B,gBAAgB;AAAA,IAChB,8BAA8B;AAAA,IAC9B,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,sCAAsC;AAAA,IACtC,UAAY;AAAA,IACZ,uBAAuB;AAAA,IACvB,0CAA0C;AAAA,IAC1C,yBAAyB;AAAA,IACzB,8BAA8B;AAAA,IAC9B,yBAAyB;AAAA,IACzB,oCAAoC;AAAA,IACpC,+BAA+B;AAAA,IAC/B,8BAA8B;AAAA,IAC9B,6BAA6B;AAAA,IAC7B,wBAAwB;AAAA,IACxB,SAAW;AAAA,IACX,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,QAAU;AAAA,IACV,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,eAAe;AAAA,IACf,sCAAsC;AAAA,IACtC,yBAAyB;AAAA,IACzB,wCAAwC;AAAA,IACxC,uCAAuC;AAAA,IACvC,qCAAqC;AAAA,IACrC,gCAAgC;AAAA,IAChC,oCAAoC;AAAA,IACpC,+BAA+B;AAAA,IAC/B,+BAA+B;AAAA,IAC/B,kCAAkC;AAAA,IAClC,wCAAwC;AAAA,IACxC,6CAA6C;AAAA,IAC7C,qCAAqC;AAAA,IACrC,4CAA4C;AAAA,IAC5C,+CAA+C;AAAA,IAC/C,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,qCAAqC;AAAA,IACrC,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,gCAAgC;AAAA,IAChC,6BAA6B;AAAA,IAC7B,mCAAmC;AAAA,IACnC,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,sCAAsC;AAAA,IACtC,iCAAiC;AAAA,IACjC,6BAA6B;AAAA,IAC7B,kCAAkC;AAAA,IAClC,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,uCAAuC;AAAA,IACvC,wCAAwC;AAAA,IACxC,gCAAgC;AAAA,IAChC,iCAAiC;AAAA,IACjC,sCAAsC;AAAA,IACtC,mCAAmC;AAAA,IACnC,sCAAsC;AAAA,IACtC,wCAAwC;AAAA,IACxC,mCAAmC;AAAA,IACnC,kCAAkC;AAAA,IAClC,2CAA2C;AAAA,IAC3C,6CAA6C;AAAA,IAC7C,2BAA2B;AAAA,IAC3B,4CAA4C;AAAA,IAC5C,0CAA0C;AAAA,IAC1C,4BAA4B;AAAA,IAC5B,yCAAyC;AAAA,IACzC,wCAAwC;AAAA,IACxC,qCAAqC;AAAA,IACrC,gDAAgD;AAAA,IAChD,sCAAsC;AAAA,IACtC,iCAAiC;AAAA,IACjC,4BAA4B;AAAA,IAC5B,qCAAqC;AAAA,IACrC,+CAA+C;AAAA,IAC/C,iDAAiD;AAAA,IACjD,uCAAuC;AAAA,IACvC,yCAAyC;AAAA,IACzC,yCAAyC;AAAA,IACzC,iCAAiC;AAAA,IACjC,yCAAyC;AAAA,IACzC,sCAAsC;AAAA,IACtC,oCAAoC;AAAA,IACpC,uBAAuB;AAAA,IACvB,+BAA+B;AAAA,IAC/B,sCAAsC;AAAA,IACtC,6CAA6C;AAAA,IAC7C,2CAA2C;AAAA,IAC3C,qCAAqC;AAAA,IACrC,gCAAgC;AAAA,IAChC,2CAA2C;AAAA,IAC3C,0CAA0C;AAAA,IAC1C,oCAAoC;AAAA,IACpC,uBAAuB;AAAA,IACvB,uCAAuC;AAAA,IACvC,gDAAgD;AAAA,IAChD,+CAA+C;AAAA,IAC/C,qCAAqC;AAAA,IACrC,yCAAyC;AAAA,IACzC,yCAAyC;AAAA,IACzC,0BAA0B;AAAA,IAC1B,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,kCAAkC;AAAA,IAClC,oCAAoC;AAAA,IACpC,2BAA2B;AAAA,IAC3B,2CAA2C;AAAA,IAC3C,0BAA0B;AAAA,IAC1B,eAAe;AAAA,IACf,iCAAiC;AAAA,IACjC,2CAA2C;AAAA,IAC3C,kCAAkC;AAAA,IAClC,0BAA0B;AAAA,IAC1B,cAAc;AAAA,IACd,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,QAAU;AAAA,IACV,YAAc;AAAA,IACd,MAAQ;AAAA,IACR,qBAAqB;AAAA,IACrB,WAAa;AAAA,IACb,gCAAgC;AAAA,IAChC,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,uCAAuC;AAAA,IACvC,oCAAoC;AAAA,IACpC,8BAA8B;AAAA,IAC9B,iCAAiC;AAAA,IACjC,gCAAgC;AAAA,IAChC,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,kCAAkC;AAAA,IAClC,gCAAgC;AAAA,IAChC,qDAAqD;AAAA,IACrD,sCAAsC;AAAA,IACtC,2BAA2B;AAAA,IAC3B,4BAA4B;AAAA,IAC5B,kDAAkD;AAAA,IAClD,8BAA8B;AAAA,IAC9B,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,IAC7B,wCAAwC;AAAA,IACxC,oCAAoC;AAAA,IACpC,8BAA8B;AAAA,IAC9B,yCAAyC;AAAA,IACzC,kCAAkC;AAAA,IAClC,kCAAkC;AAAA,IAClC,6CAA6C;AAAA,IAC7C,mBAAmB;AAAA,IACnB,kCAAkC;AAAA,IAClC,gCAAgC;AAAA,IAChC,iCAAiC;AAAA,IACjC,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,IAC1B,oBAAoB;AAAA,IACpB,kCAAkC;AAAA,IAClC,yBAAyB;AAAA,IACzB,gDAAgD;AAAA,IAChD,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,SAAW;AAAA,IACX,YAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,UAAY;AAAA,IACZ,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,uBAAuB;AAAA,IACvB,QAAU;AAAA,IACV,sBAAsB;AAAA,IACtB,eAAe;AAAA,EACnB;AAAA,EACA,kBAAoB;AAAA,IAChB,QAAU;AAAA,IACV,YAAc;AAAA,EAClB;AAAA,EACA,gBAAkB;AAAA,EAClB,SAAW;AAAA,IACP,MAAQ;AAAA,EACZ;AAAA,EACA,YAAc;AAAA,IACV,SAAW;AAAA,MACP,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,QAAU;AAAA,IACd;AAAA,IACA,gBAAkB;AAAA,MACd,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,QAAU;AAAA,IACd;AAAA,EACJ;AAAA,EACA,eAAiB;AAAA,IACb,YAAc;AAAA,IACd,UAAY;AAAA,EAChB;AAAA,EACA,QAAU;AACd;;;AChhBO,IAAM,8BAET;EACA,KAAK;IACD,MAAM;IACN,YAAY;IACZ,aAAa;IACb,sBAAsB;;EAE1B,SAAS;IACL,MAAM;IACN,YAAY;IACZ,aAAa;IACb,sBAAsB;;EAE1B,aAAa;IACT,MAAM;IACN,YAAY;IACZ,aAAa;IACb,sBAAsB;;EAE1B,QAAQ;IACJ,MAAM;IACN,YAAY;IACZ,aAAa;IACb,sBAAsB;;;;;ACtD9B,SAAoB;AACpB,WAAsB;AAatB,IAAM,oBAAoB,CAAC,aAClB,aAAQ,QAAQ,EAAE,WAAW,MAAM,GAAG;AAGxC,IAAM,2BAA2B,CAAC,aAA6B;AAClE,QAAM,qBAAqB,kBAAkB,QAAQ;AACrD,QAAMA,YAAgB,WAAM,SAAS,kBAAkB;AAEvD,SACI,mBAAmB,SAAS,qBAAqB,KACjDA,UAAS,SAAS,cAAc;AAExC;AAGO,IAAM,wBAAwB,CAAC,aAA6B;AAC/D,QAAM,qBAAqB,kBAAkB,QAAQ;AACrD,QAAMA,YAAgB,WAAM,SAAS,kBAAkB;AAEvD,SACI,mBAAmB,SAAS,kBAAkB,KAC9CA,UAAS,SAAS,WAAW;AAErC;AAGA,IAAM,gCAAgC,CAAC,aAA6B;AAChE,QAAM,qBAAqB,kBAAkB,QAAQ;AAErD,SACI,mBAAmB,SAAS,kBAAkB,KAC9C,mBAAmB,SAAS,kBAAkB;AAEtD;AAGO,IAAM,0BAA0B,CAAC,aAA6B;AACjE,QAAM,qBAAqB,kBAAkB,QAAQ;AAErD,SACI,8BAA8B,kBAAkB,KAChD,mBAAmB,SAAS,KAAK;AAEzC;AAGO,IAAM,kBAAkB,CAAC,aAA6B;AACzD,QAAM,qBAAqB,kBAAkB,QAAQ;AACrD,QAAMA,YAAgB,WAAM,SAAS,kBAAkB;AAEvD,SACI,8BAA8B,kBAAkB,KAChDA,cAAa;AAErB;AAGO,IAAM,2BAA2B,CAAC,aAA6B;AAClE,QAAM,qBAAqB,kBAAkB,QAAQ;AACrD,QAAMA,YAAgB,WAAM,SAAS,kBAAkB;AAEvD,SACI,mBAAmB,SAAS,iBAAiB,KAC7CA,UAAS,SAAS,OAAO;AAEjC;AAGA,IAAM,8BAA8B,CAACA,cACjCA,cAAa,eACbA,cAAa,eACbA,cAAa;AAGV,IAAM,qBAAqB,CAC9B,aACwB;AACxB,QAAM,qBAAqB,kBAAkB,QAAQ;AACrD,QAAMA,YAAgB,WAAM,SAAS,kBAAkB;AAEvD,MAAI,mBAAmB,SAAS,kCAAkC,GAAG;AACjE,WAAO;EACX;AAEA,MACI,mBAAmB,SAAS,wBAAwB,KACpDA,UAAS,SAAS,kBAAkB,GACtC;AACE,WAAO;EACX;AAEA,MACI,mBAAmB,SAAS,mBAAmB,KAC/CA,UAAS,SAAS,YAAY,GAChC;AACE,WAAO;EACX;AAEA,MAAI,gBAAgB,kBAAkB,GAAG;AACrC,WAAO;EACX;AAEA,MAAI,yBAAyB,kBAAkB,GAAG;AAC9C,WAAO;EACX;AAEA,MACI,yBAAyB,kBAAkB,KAC3C,sBAAsB,kBAAkB,GAC1C;AACE,WAAO;EACX;AAEA,SAAO,4BAA4BA,SAAQ,IAAI,uBAAuB;AAC1E;AAGO,IAAM,qBAAqB,CAAC,aAA4B;AAC3D,QAAM,qBAA0B,aAAQ,QAAQ;AAChD,QAAM,eAAe,kBAAkB,kBAAkB,EAAE,MAAM,GAAG;AACpE,QAAM,uBAAuB,aAAa,YAAY,SAAS;AAE/D,MAAI,uBAAuB,GAAG;AAC1B,UAAM,eAAe,aAAa,MAAM,GAAG,oBAAoB;AAC/D,UAAM,gBAAgB,aAAa,KAAU,QAAG;AAEhD,QAAI,cAAc,SAAS,GAAG;AAC1B,aAAO;IACX;EACJ;AAEA,MAAI,mBAAwB,aAAQ,kBAAkB;AAEtD,SAAO,MAAM;AACT,UAAM,kBAAuB,UAAK,kBAAkB,cAAc;AAClE,UAAM,mBAAwB,UAC1B,kBACA,mBAAmB;AAEvB,UAAM,mBAAwB,UAAK,kBAAkB,MAAM;AAE3D,QACO,cAAW,eAAe,KAC1B,cAAW,gBAAgB,KAC3B,cAAW,gBAAgB,GAChC;AACE,aAAO;IACX;AAEA,UAAM,kBAAuB,aAAQ,gBAAgB;AAErD,QAAI,oBAAoB,kBAAkB;AACtC,aAAY,aAAQ,kBAAkB;IAC1C;AAEA,uBAAmB;EACvB;AACJ;AAGO,IAAM,gCAAgC,CAAC,aACrC,UACD,mBAAmB,QAAQ,GAC3B,WACA,yBAAyB;;;AChLjC,mBAA4B;;;ACkF5B,IAAM,mBAAmB;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ,IAAM,kBAAkB,CAAC,eACrB,IAAI,OAAO,UAAU,EAAE,SAAS,GAAG,GAAG,CAAC;AAGpC,IAAM,4BACT,iBAAiB,IAAI,CAAC,UAAU,UAAS;AACrC,QAAM,aAAa,QAAQ;AAE3B,SAAO;IACH,QAAQ,gBAAgB,UAAU;IAClC;IACA;;AAER,CAAC;AAGL,IAAM,+BAA+B,IAAI,IACrC,0BAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,UAAU,KAAK,CAAC,CAAC;AAI9D,IAAM,iCAAiC,CAC1C,aACyB;AACzB,QAAM,QAAQ,6BAA6B,IACvC,QAAkC;AAGtC,MAAI,UAAU,QAAW;AACrB,UAAM,IAAI,UACN,SAAS,QAAQ,4CAA4C;EAErE;AAEA,SAAO;AACX;;;AC7LO,IAAM,qBACT;AAGG,IAAM,oBAAoB,CAAC,aAC9B,GAAG,kBAAkB,GAAG,QAAQ;;;AFqCpC,IAAM,kBACF,yBAAY,YAAkC,iBAAiB;AAEnE,IAAM,oCAAoC,CACtC,cACmB;AACnB,UAAQ,WAAW;IACf,KAAK,uBAAuB;AACxB,aAAO;IACX;IAEA,KAAK,2BAA2B;AAC5B,aAAO;IACX;IAEA,KAAK,+BAA+B;AAChC,aAAO;IACX;IAEA,KAAK,0BAA0B;AAC3B,aAAO;IACX;IAEA,SAAS;AACL,YAAM,IAAI,UACN,yCAAyC,SAAS,EAAE;IAE5D;EACJ;AACJ;AAGA,IAAM,8BAE8B,CAChC,UACA;AACA,QAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACxD,QAAM,kBAAkB,oBAAI,IAAG;AAE/B,aAAW,aAAa,YAAY;AAChC,oBAAgB,IAAI,kCAAkC,SAAS,CAAC;EACpE;AAEA,SAAO,CAAC,GAAG,eAAe;AAC9B;AAKO,IAAM,oBAAoB,CAI7B,mBACmB;AACnB,QAAM,cAAc,gBAAgB,cAAc;AAClD,QAAM,eAAe,+BAA+B,eAAe,IAAI;AACvE,QAAM,eAAe,eAAe,KAAK;AACzC,QAAM,OAAwB;IAC1B,GAAG;IACH,oBAAoB,4BAChB,aAAa,cAAc;IAE/B,QAAQ,aAAa;IACrB,YAAY,aAAa;IACzB,KAAK,kBAAkB,eAAe,IAAI;;AAG9C,SAAO;IACH,GAAG;IACH,MAAM;MACF,GAAG,YAAY;MACf;;IAEJ,MAAM,eAAe;;AAE7B;;;AG5FA,IAAM,gBAAgB,CAAC,cAClB,aAAa,OAAO,aAAa,OACjC,aAAa,OAAO,aAAa;AAGtC,IAAM,4BAA4B,CAAC,cAC/B,cAAc,SAAS,KACtB,aAAa,OAAO,aAAa,OAClC,cAAc;AAGlB,IAAM,kCAAkC,CAAC,UAA0B;AAC/D,MAAI,MAAM,WAAW,KAAK,CAAC,cAAc,MAAM,CAAC,KAAK,EAAE,GAAG;AACtD,WAAO;EACX;AAEA,aAAW,aAAa,MAAM,MAAM,CAAC,GAAG;AACpC,QAAI,CAAC,0BAA0B,SAAS,GAAG;AACvC,aAAO;IACX;EACJ;AAEA,SAAO;AACX;AAGA,IAAM,iBAAiB,CACnB,SACiD;AACjD,QAAM,iBAAiB,KAAK,QAAQ,GAAG;AAEvC,MAAI,kBAAkB,GAAG;AACrB,WAAO;EACX;AAEA,QAAM,MAAM,KAAK,MAAM,GAAG,cAAc,EAAE,KAAI;AAE9C,MAAI,CAAC,gCAAgC,GAAG,GAAG;AACvC,WAAO;EACX;AAEA,SAAO;IACH;IACA,OAAO,KAAK,MAAM,iBAAiB,CAAC;;AAE5C;AAGA,IAAM,WAAW,CACb,MACA,eAC+C;AAC/C,QAAM,gBAAgB,KAAK,QAAQ,MAAM,UAAU;AAEnD,MAAI,kBAAkB,IAAI;AACtB,WAAO;MACH,MAAM,KAAK,SAAS,IAAI,IAClB,KAAK,MAAM,YAAY,EAAE,IACzB,KAAK,MAAM,UAAU;MAC3B,WAAW,KAAK;;EAExB;AAEA,QAAM,eACF,KAAK,gBAAgB,CAAC,MAAM,OAAO,gBAAgB,IAAI;AAE3D,SAAO;IACH,MAAM,KAAK,MAAM,YAAY,YAAY;IACzC,WAAW,gBAAgB;;AAEnC;AAGA,IAAM,wBAAwB,CAAC,UAAyB;AACpD,MAAI,MAAM,SAAS,MAAM,GAAG;AACxB,WAAO,MAAM,MAAM,GAAG,EAAE;EAC5B;AAEA,MAAI,MAAM,SAAS,IAAI,GAAG;AACtB,WAAO,MAAM,MAAM,GAAG,EAAE;EAC5B;AAEA,SAAO;AACX;AAGA,IAAM,4BAA4B,CAC9B,OACA,eACgE;AAChE,QAAM,aAAuB,CAAA;AAC7B,MAAI,YAAY;AAEhB,SAAO,YAAY,MAAM,QAAQ;AAC7B,UAAM,WAAW,MAAM,SAAS,KAAK;AAErC,QACI,SAAS,KAAI,EAAG,SAAS,KACzB,CAAC,SAAS,WAAW,GAAG,KACxB,CAAC,SAAS,WAAW,GAAI,GAC3B;AACE;IACJ;AAEA,QAAI,SAAS,KAAI,EAAG,SAAS,GAAG;AAC5B,iBAAW,KAAK,QAAQ;IAC5B;AAEA,iBAAa;EACjB;AAEA,SAAO;IACH;IACA;;AAER;AAGA,IAAM,oBAAoB,CAAC,SAAwB;AAC/C,MAAI,SAAS;AACb,MAAI,cAAc;AAElB,SAAO,cAAc,KAAK,QAAQ;AAC9B,UAAM,oBAAoB,KAAK,QAAQ,QAAQ,WAAW;AAE1D,QAAI,sBAAsB,IAAI;AAC1B,gBAAU,KAAK,MAAM,WAAW;AAChC;IACJ;AAEA,cAAU,KAAK,MAAM,aAAa,iBAAiB;AAEnD,UAAM,kBAAkB,KAAK,QAAQ,OAAO,oBAAoB,CAAC;AAEjE,QAAI,oBAAoB,IAAI;AACxB,gBAAU,KAAK,MAAM,iBAAiB;AACtC;IACJ;AAEA,kBAAc,kBAAkB;EACpC;AAEA,SAAO;AACX;AAGA,IAAM,sBAAsB,CAAC,SAAwB;AACjD,MAAI,QAAQ;AAEZ,aAAW,aAAa,MAAM;AAC1B,QAAI,cAAc,KAAK;AACnB,eAAS;AACT;IACJ;AAEA,QAAI,cAAc,KAAM;AACpB,eAAS;AACT;IACJ;AAEA;EACJ;AAEA,SAAO;AACX;AAGA,IAAM,cAAc,CAAC,UAAyB;AAC1C,MAAI,MAAM,UAAU,GAAG;AACnB,UAAM,iBAAiB,MAAM,GAAG,CAAC;AACjC,UAAM,gBAAgB,MAAM,GAAG,EAAE;AAEjC,QACK,mBAAmB,OAAO,kBAAkB,OAC5C,mBAAmB,OAAO,kBAAkB,KAC/C;AACE,aAAO,MAAM,MAAM,GAAG,EAAE;IAC5B;EACJ;AAEA,SAAO;AACX;AAGA,SAAS,qBAAqB,OAAa;AACvC,SAAO,YAAY,MAAM,KAAI,CAAE,EAAE,KAAI;AACzC;AAGA,IAAM,sBAAsB,CACxB,QACA,WACM;AACN,QAAM,WAAW,eAAe,OAAO,KAAI,CAAE;AAE7C,MAAI,aAAa,MAAM;AACnB;EACJ;AAEA,SAAO,SAAS,GAAG,IAAI,qBAAqB,SAAS,KAAK;AAC9D;AAGA,IAAM,kBAAkB,CAAC,UAAoC;AACzD,QAAM,eAAe,MAAM,KAAI;AAE/B,MAAI,CAAC,aAAa,WAAW,GAAG,KAAK,CAAC,aAAa,SAAS,GAAG,GAAG;AAC9D,WAAO,CAAA;EACX;AAEA,QAAM,aAAa,aAAa,MAAM,GAAG,EAAE,EAAE,KAAI;AAEjD,MAAI,WAAW,WAAW,GAAG;AACzB,WAAO,CAAA;EACX;AAEA,SAAO,WACF,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,qBAAqB,IAAI,CAAC,EACxC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACzC;AAGA,IAAM,iBAAiB,CAAC,UACpB,MACK,IAAI,CAAC,SAAQ;AACV,QAAM,cAAc,KAAK,KAAI;AAE7B,MAAI,CAAC,YAAY,WAAW,GAAG,GAAG;AAC9B,WAAO;EACX;AAEA,SAAO,qBAAqB,YAAY,MAAM,CAAC,CAAC;AACpD,CAAC,EACA,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AAG3C,IAAM,yBAAyB,CAC3B,YACuC;AACvC,QAAM,QAAQ,QAAQ,WAAW,QAAQ,IAAI,EAAE,MAAM,IAAI;AACzD,QAAM,SAAS,oBAAI,IAAG;AACtB,MAAI,QAAQ;AAEZ,SAAO,QAAQ,MAAM,QAAQ;AACzB,UAAM,cAAc,MAAM,KAAK,GAAG,QAAO,KAAM;AAE/C,QAAI,YAAY,KAAI,EAAG,WAAW,GAAG;AACjC,eAAS;AACT;IACJ;AAEA,UAAM,QAAQ,eAAe,YAAY,UAAS,CAAE;AAEpD,QAAI,UAAU,MAAM;AAChB,eAAS;AACT;IACJ;AAEA,UAAM,kBAAkB,MAAM,MAAM,KAAI;AAExC,QAAI,gBAAgB,SAAS,GAAG;AAC5B,YAAM,aAAa,gBAAgB,eAAe;AAElD,UAAI,WAAW,SAAS,GAAG;AACvB,eAAO,IAAI,MAAM,KAAK;UAClB,MAAM;UACN,QAAQ;SACX;AACD,iBAAS;AACT;MACJ;AAEA,aAAO,IAAI,MAAM,KAAK;QAClB,MAAM;QACN,OAAO,qBAAqB,eAAe;OAC9C;AACD,eAAS;AACT;IACJ;AAEA,UAAM,EAAE,YAAY,UAAS,IAAK,0BAC9B,OACA,QAAQ,CAAC;AAGb,UAAM,oBAAoB,eAAe,UAAU;AAEnD,QAAI,kBAAkB,SAAS,GAAG;AAC9B,aAAO,IAAI,MAAM,KAAK;QAClB,MAAM;QACN,QAAQ;OACX;AACD,cAAQ;AACR;IACJ;AAEA,WAAO,IAAI,MAAM,KAAK;MAClB,MAAM;MACN,OAAO;KACV;AAED,YAAQ;EACZ;AAEA,SAAO;AACX;AAGO,IAAM,qBAAqB,CAC9B,SAC4B;AAC5B,MAAI,CAAC,KAAK,WAAW,KAAK,GAAG;AACzB,WAAO;EACX;AAEA,QAAM,cAAc,SAAS,MAAM,CAAC;AAEpC,MAAI,YAAY,SAAS,SAAS,YAAY,aAAa,KAAK,QAAQ;AACpE,WAAO;EACX;AAEA,MAAI,iBAAiB,YAAY;AAEjC,SAAO,iBAAiB,KAAK,QAAQ;AACjC,UAAM,cAAc,SAAS,MAAM,cAAc;AAEjD,QAAI,YAAY,SAAS,OAAO;AAC5B,YAAM,UAAU,sBACZ,KAAK,MAAM,YAAY,WAAW,cAAc,CAAC;AAGrD,aAAO;QACH,MAAM,KAAK,MAAM,YAAY,SAAS;QACtC;QACA,QAAQ,uBAAuB,OAAO;;IAE9C;AAEA,qBAAiB,YAAY;EACjC;AAEA,SAAO;AACX;AAGO,IAAM,uBAAuB,CAChC,UACA,QACoB;AACpB,QAAM,QAAQ,SAAS,OAAO,IAAI,GAAG;AAErC,SAAO,OAAO,SAAS,YAAY,MAAM,MAAM,SAAS,IAClD,MAAM,QACN;AACV;AAGO,IAAM,qBAAqB,CAC9B,UACA,QAC+B;AAC/B,QAAM,QAAQ,SAAS,OAAO,IAAI,GAAG;AAErC,SAAO,OAAO,SAAS,UAAU,MAAM,OAAO,SAAS,IACjD,MAAM,SACN;AACV;AAGO,IAAM,sBAAsB,CAC/B,UACA,QACU,SAAS,OAAO,IAAI,GAAG;AAG9B,IAAM,2BAA2B,CACpC,UACA,QACmD;AACnD,QAAM,QAAQ,SAAS,QAAQ,WAAW,QAAQ,IAAI,EAAE,MAAM,IAAI;AAClE,MAAI,QAAQ;AAEZ,SAAO,QAAQ,MAAM,QAAQ;AACzB,UAAM,cAAc,MAAM,KAAK,KAAK;AAEpC,QAAI,YAAY,WAAW,GAAG,KAAK,YAAY,WAAW,GAAI,GAAG;AAC7D,eAAS;AACT;IACJ;AAEA,UAAM,QAAQ,eAAe,YAAY,QAAO,CAAE;AAElD,QAAI,UAAU,MAAM;AAChB,eAAS;AACT;IACJ;AAEA,QAAI,MAAM,QAAQ,KAAK;AACnB,eAAS;AACT;IACJ;AAEA,UAAM,WAAW,MAAM,MAAM,KAAI;AAEjC,QAAI,aAAa,MAAM;AACnB,aAAO,CAAA;IACX;AAEA,QAAI,SAAS,SAAS,GAAG;AACrB,aAAO;IACX;AAEA,UAAM,EAAE,WAAU,IAAK,0BAA0B,OAAO,QAAQ,CAAC;AAEjE,UAAM,UAAoC,CAAA;AAC1C,QAAI,eAA8C;AAElD,eAAW,aAAa,YAAY;AAChC,YAAM,cAAc,UAAU,KAAI;AAElC,UAAI,YAAY,WAAW,GAAG,GAAG;AAC7B,YAAI,iBAAiB,MAAM;AACvB,kBAAQ,KAAK,YAAY;QAC7B;AAEA,uBAAe,CAAA;AACf,cAAM,iBAAiB,YAAY,MAAM,CAAC,EAAE,KAAI;AAEhD,YAAI,eAAe,SAAS,GAAG;AAC3B,8BAAoB,cAAc,cAAc;QACpD;AAEA;MACJ;AAEA,UAAI,iBAAiB,MAAM;AACvB;MACJ;AAEA,0BAAoB,cAAc,WAAW;IACjD;AAEA,QAAI,iBAAiB,MAAM;AACvB,cAAQ,KAAK,YAAY;IAC7B;AAEA,WAAO;EACX;AAEA,SAAO;AACX;AAGO,IAAM,iCAAiC,CAC1C,UACA,QAC2C;AAC3C,QAAM,QAAQ,SAAS,QAAQ,WAAW,QAAQ,IAAI,EAAE,MAAM,IAAI;AAClE,MAAI,QAAQ;AAEZ,SAAO,QAAQ,MAAM,QAAQ;AACzB,UAAM,cAAc,MAAM,KAAK,KAAK;AAEpC,QAAI,YAAY,WAAW,GAAG,KAAK,YAAY,WAAW,GAAI,GAAG;AAC7D,eAAS;AACT;IACJ;AAEA,UAAM,QAAQ,eAAe,YAAY,QAAO,CAAE;AAElD,QAAI,UAAU,MAAM;AAChB,eAAS;AACT;IACJ;AAEA,QAAI,MAAM,QAAQ,KAAK;AACnB,eAAS;AACT;IACJ;AAEA,UAAM,WAAW,MAAM,MAAM,KAAI;AAEjC,QAAI,SAAS,SAAS,GAAG;AACrB,aAAO;IACX;AAEA,UAAM,EAAE,WAAU,IAAK,0BAA0B,OAAO,QAAQ,CAAC;AAEjE,UAAM,SAAS,oBAAI,IAAG;AACtB,QAAI,mBAAkC;AACtC,QAAI,eAA8C;AAElD,UAAM,oBAAoB,MAAW;AACjC,UAAI,qBAAqB,QAAQ,iBAAiB,MAAM;AACpD;MACJ;AAEA,YAAM,eAAe,OAAO,IAAI,gBAAgB,KAAK,CAAA;AACrD,mBAAa,KAAK,YAAY;AAC9B,aAAO,IAAI,kBAAkB,YAAY;AACzC,qBAAe;IACnB;AAEA,eAAW,aAAa,YAAY;AAChC,YAAM,mBAAmB,oBAAoB,SAAS;AACtD,YAAM,cAAc,UAAU,KAAI;AAElC,UAAI,YAAY,WAAW,GAAG;AAC1B;MACJ;AAEA,UAAI,CAAC,YAAY,WAAW,GAAG,KAAK,oBAAoB,GAAG;AACvD,0BAAiB;AAEjB,cAAM,aAAa,eAAe,WAAW;AAE7C,YAAI,eAAe,MAAM;AACrB,6BAAmB;AACnB;QACJ;AAEA,2BAAmB,WAAW;AAE9B,YACI,qBAAqB,QACrB,CAAC,OAAO,IAAI,gBAAgB,GAC9B;AACE,iBAAO,IAAI,kBAAkB,CAAA,CAAE;QACnC;AAEA;MACJ;AAEA,UAAI,YAAY,WAAW,GAAG,GAAG;AAC7B,0BAAiB;AAEjB,YAAI,qBAAqB,MAAM;AAC3B;QACJ;AAEA,uBAAe,CAAA;AACf,cAAM,iBAAiB,YAAY,MAAM,CAAC,EAAE,KAAI;AAEhD,YAAI,eAAe,SAAS,GAAG;AAC3B,8BAAoB,cAAc,cAAc;QACpD;AAEA;MACJ;AAEA,UAAI,iBAAiB,MAAM;AACvB;MACJ;AAEA,0BAAoB,cAAc,WAAW;IACjD;AAEA,sBAAiB;AAEjB,WAAO;EACX;AAEA,SAAO;AACX;AAGO,IAAM,4BAA4B,CAAC,SACtC,kBAAkB,IAAI,EAAE,KAAI;;;ACllBhC,IAAM,8BAA8B,CAChC,aAC+B;EAC/B,KAAK,QAAQ,WAAW,gBACpB,KAAK,IAAI,GAAG,QAAQ,WAAW,KAAK,MAAM,CAAC;EAE/C,OAAO,QAAQ,WAAW,gBAAgB,CAAC;;AAIxC,IAAM,wBAAwB,CACjC,SACA,YAIM;AACN,UAAQ,OAAO;IACX,GAAG;IACH,KAAK,4BAA4B,OAAO;GAC3C;AACL;AAGO,IAAM,iCAAiC,CAC1C,kBACyB;EACzB,OAAI;AACA,iBAAY;EAChB;;;;ACnBJ,IAAM,+BAAkD,kBAAkB;EACtE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,YAAM,WAAW,mBAAmB,QAAQ,QAAQ;AAEpD,UAAI,aAAa,QAAQ,aAAa,2BAA2B;AAC7D;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,WAAW,aAAa,QAAQ,QAAQ,WAAW;AAEzD,UAAI,0BAA0B,QAAQ,EAAE,SAAS,GAAG;AAChD;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,WACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,sCAAe;;;AC9Cf,IAAM,oCAAuD,kBAAkB;EAC3E,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UACI,mBAAmB,QAAQ,QAAQ,MACnC,2BACF;AACE;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,OAAO,0BACT,aAAa,QAAQ,QAAQ,WAAW,IAAI;AAGhD,UAAI,KAAK,SAAS,GAAG;AACjB;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,mBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,2CAAe;;;ACpDf,IAAM,uBAA0C,kBAAkB;EAC9D,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,OAAO,aAAa,QAAQ,QAAQ,WAAW;AAErD,UAAI,KAAK,KAAI,EAAG,SAAS,GAAG;AACxB;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aAAa;MACb,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,gBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,8BAAe;;;ACxCf,IAAM,6BAAgD,kBAAkB;EACpE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,OAAO,GAC3C;AACE;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,iBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,oCAAe;;;AC3Df,IAAAC,MAAoB;AACpB,IAAAC,QAAsB;;;ACDtB,IAAAC,QAAsB;AAMtB,IAAM,qBAAqB,CAAC,UAA0B,MAAM,KAAI;AAEhE,IAAM,+BAA+B,CACjC,aACA,QAEA,gBAAgB,OAAO,SAAY,qBAAqB,aAAa,GAAG;AAGrE,IAAM,6BAA6B,CAAC,UACvC,mBAAmB,KAAK,EAAE,YAAW;AAEzC,IAAM,+BAA+B,CAAC,cACjC,aAAa,OAAO,aAAa,OACjC,aAAa,OAAO,aAAa;AAM/B,IAAM,yBAAyB,CAAC,UAA0B;AAC7D,QAAM,eAAe,MAAM,KAAI;AAE/B,MAAI,aAAa,WAAW,GAAG;AAC3B,WAAO;EACX;AAEA,MAAI,6BAA6B;AAEjC,aAAW,aAAa,cAAc;AAClC,QAAI,cAAc,KAAK;AACnB,UAAI,4BAA4B;AAC5B,eAAO;MACX;AAEA,mCAA6B;AAC7B;IACJ;AAEA,QAAI,CAAC,6BAA6B,SAAS,GAAG;AAC1C,aAAO;IACX;AAEA,iCAA6B;EACjC;AAEA,SAAO,CAAC,aAAa,WAAW,GAAG,KAAK,CAAC,aAAa,SAAS,GAAG;AACtE;AAGO,IAAM,uBAAuB,CAAC,aAC5B,eAAS,QAAQ,EAAE,QAAQ,kBAAkB,EAAE;AAGjD,IAAM,gBAAgB,CACzB,UACA,gBAEA,mBACI,6BAA6B,aAAa,MAAM,KAC5C,qBAAqB,QAAQ,CAAC;AAInC,IAAM,sBAAsB,CAAC,aAE3B,eAAS,QAAQ,EACjB,QAAQ,iBAAiB,EAAE,EAC3B,QAAQ,UAAU,EAAE;AAGtB,IAAM,eAAe,CACxB,UACA,gBAEA,mBACI,6BAA6B,aAAa,MAAM,KAC5C,oBAAoB,QAAQ,CAAC;AAIlC,IAAM,wBAAwB,CAAC,aAC7B,eAAc,cAAQ,QAAQ,CAAC;AAGjC,IAAM,eAAe,CACxB,UACA,gBAEA,mBACI,6BAA6B,aAAa,MAAM,KAC5C,sBAAsB,QAAQ,CAAC;;;ACzFpC,IAAM,6BAA6B,CACtC,SACA,kBACwD;AACxD,QAAM,SAAS,oBAAI,IAAG;AAEtB,aAAW,SAAS,SAAS;AACzB,UAAM,iBAAiB,cAAc,MAAM,IAAI;AAE/C,QAAI,eAAe,WAAW,GAAG;AAC7B;IACJ;AAEA,UAAM,QAAQ,OAAO,IAAI,cAAc,KAAK,CAAA;AAC5C,UAAM,KAAK,KAAK;AAChB,WAAO,IAAI,gBAAgB,KAAK;EACpC;AAEA,SAAO,IAAI,IACP,CAAC,GAAG,OAAO,QAAO,CAAE,EACf,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,MAAM,SAAS,CAAC,EACtC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;IACpB;IACA,MAAM,SAAS,CAAC,MAAM,UAClB,KAAK,SAAS,cAAc,MAAM,QAAQ,CAAC;GAElD,CAAC;AAEd;;;ACpCA,IAAAC,MAAoB;AACpB,IAAAC,QAAsB;AAEtB,IAAM,gCAAgC;AACtC,IAAM,qBAAqB;AAGpB,IAAM,wBAAwB,CAAC,aAC7B,cAAQ,QAAQ,EAAE,WAAW,MAAM,GAAG;AAGxC,IAAM,aAAa,CAAC,aACpB,eAAW,QAAQ;AAGnB,IAAM,4BAA4B,CAAC,UAAyB;AAC/D,QAAM,aAAa,MAAM,QAAQ,GAAG;AACpC,QAAM,gBAAgB,MAAM,QAAQ,GAAG;AACvC,QAAM,qBAAqB,CAAC,YAAY,aAAa,EAAE,OACnD,CAAC,UAAU,SAAS,CAAC;AAGzB,MAAI,mBAAmB,WAAW,GAAG;AACjC,WAAO;EACX;AAEA,SAAO,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,kBAAkB,CAAC;AACzD;AAGO,IAAM,wBAAwB,CAAC,UAClC,8BAA8B,KAAK,KAAK;AAGrC,IAAM,eAAe,CAAC,UACzB,CAAC,sBAAsB,KAAK,KAAK,mBAAmB,KAAK,KAAK;AAG3D,IAAM,6BAA6B,CAAC,UAA0B;AACjE,QAAM,eAAe,MAAM,KAAI;AAC/B,QAAM,iBAAiB,aAAa,YAAW;AAE/C,MAAI,aAAa,WAAW,KAAK,aAAa,WAAW,GAAG,GAAG;AAC3D,WAAO;EACX;AAEA,MACI,eAAe,WAAW,GAAG,KAC7B,eAAe,WAAW,IAAI,KAC9B,eAAe,WAAW,IAAI,KAC9B,eAAe,WAAW,KAAK,KAC/B,eAAe,WAAW,OAAO,GACnC;AACE,WAAO;EACX;AAEA,SAAO,sBAAsB,YAAY;AAC7C;AAGO,IAAM,0BAA0B,CAAC,UAA0B;AAC9D,QAAM,eAAe,MAAM,KAAI;AAE/B,SACI,aAAa,SAAS,KACtB,CAAC,aAAa,WAAW,GAAG,KAC5B,CAAC,aAAa,YAAY,KAC1B,CAAC,2BAA2B,YAAY;AAEhD;AAGO,IAAM,+BAA+B,CACxC,iBACA,iBAEK,cACI,cAAQ,eAAe,GAC5B,0BAA0B,YAAY,CAAC;AAIxC,IAAM,gCAAgC,CACzC,oBACA,iBAEK,cAAQ,oBAAoB,0BAA0B,YAAY,CAAC;AAGrE,IAAM,uBAAuB,CAChC,eACA,cACmB;AACnB,MAAI,CAAC,WAAW,aAAa,GAAG;AAC5B,WAAO,CAAA;EACX;AAEA,QAAM,kBAA4B,CAAA;AAClC,QAAM,qBAAqB,CAAC,aAAa;AAEzC,SAAO,mBAAmB,SAAS,GAAG;AAClC,UAAM,mBAAmB,mBAAmB,IAAG;AAE/C,QAAI,qBAAqB,QAAW;AAChC;IACJ;AAEA,eAAW,SAAY,gBAAY,kBAAkB;MACjD,eAAe;KAClB,GAAG;AACA,YAAM,oBAAyB,WAAK,kBAAkB,MAAM,IAAI;AAEhE,UAAI,MAAM,YAAW,GAAI;AACrB,2BAAmB,KAAK,iBAAiB;AACzC;MACJ;AAEA,UAAI,CAAC,MAAM,OAAM,GAAI;AACjB;MACJ;AAEA,UAAI,cAAc,UAAa,CAAC,UAAU,iBAAiB,GAAG;AAC1D;MACJ;AAEA,sBAAgB,KAAK,iBAAiB;IAC1C;EACJ;AAEA,SAAO,gBAAgB,SAAS,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AAC9E;;;AH5GA,IAAM,4BAA4B,CAC9B,gBACA,aACc,eAAS,gBAAgB,QAAQ,EAAE,WAAW,MAAM,GAAG;AAEzE,IAAM,4BAA+C,kBAAkB;EACnE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,iBAAiB,mBAAmB,QAAQ,QAAQ;AAC1D,YAAM,iBAAsB,WACxB,gBACA,WACA,QAAQ;AAEZ,YAAM,aAAa,qBACf,gBACA,CAAC,aAAa,SAAS,SAAS,WAAW,CAAC;AAEhD,YAAM,kBAAkB,2BACpB,WAAW,IAAI,CAAC,aAAY;AACxB,cAAM,aACF,QAAQ,aAAa,WACf,QAAQ,WAAW,OAChB,iBAAa,UAAU,MAAM;AAE1C,eAAO;UACH;UACA,MAAM,aACF,UACA,mBAAmB,UAAU,CAAC;;MAG1C,CAAC,GACD,0BAA0B;AAE9B,YAAM,mBAAmB,aACrB,QAAQ,UACR,mBAAmB,QAAQ,WAAW,IAAI,CAAC;AAE/C,YAAM,iBAAiB,gBAAgB,IACnC,2BAA2B,gBAAgB,CAAC;AAGhD,UAAI,mBAAmB,QAAW;AAC9B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,OAAO,eACF,IAAI,CAAC,UACF,0BACI,gBACA,MAAM,QAAQ,CACjB,EAEJ,KAAK,IAAI;UACd,MAAM;;QAEV,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,mCAAe;;;AItHf,IAAAC,MAAoB;AAKpB,IAAAC,QAAsB;AAkBtB,IAAMC,6BAA4B,CAC9B,gBACA,aACc,eAAS,gBAAgB,QAAQ,EAAE,WAAW,MAAM,GAAG;AAEzE,IAAM,6BAAgD,kBAAkB;EACpE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,QAAQ,SAAS,SAAS,YAAY,GAAG;AAC1C;MACJ;AAEA,YAAM,iBAAiB,mBAAmB,QAAQ,QAAQ;AAC1D,YAAM,kBAAuB,WACzB,gBACA,WACA,SAAS;AAEb,YAAM,cAAc,qBAChB,iBACA,CAAC,aAAa,SAAS,SAAS,YAAY,CAAC;AAEjD,YAAM,kBAAkB,2BACpB,YAAY,IAAI,CAAC,aAAY;AACzB,cAAM,aACF,QAAQ,aAAa,WACf,QAAQ,WAAW,OAChB,iBAAa,UAAU,MAAM;AAE1C,eAAO;UACH;UACA,MAAM,cACF,UACA,mBAAmB,UAAU,CAAC;;MAG1C,CAAC,GACD,0BAA0B;AAE9B,YAAM,oBAAoB,cACtB,QAAQ,UACR,mBAAmB,QAAQ,WAAW,IAAI,CAAC;AAE/C,YAAM,iBAAiB,gBAAgB,IACnC,2BAA2B,iBAAiB,CAAC;AAGjD,UAAI,mBAAmB,QAAW;AAC9B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,OAAO,eACF,IAAI,CAAC,UACFA,2BACI,gBACA,MAAM,QAAQ,CACjB,EAEJ,KAAK,IAAI;UACd,MAAM;;QAEV,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,qBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,oCAAe;;;AC/Gf,IAAAC,MAAoB;AACpB,IAAAC,QAAsB;AAqBtB,IAAMC,6BAA4B,CAC9B,gBACA,aACc,eAAS,gBAAgB,QAAQ,EAAE,WAAW,MAAM,GAAG;AAEzE,IAAM,4BAA+C,kBAAkB;EACnE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;MACJ;AAEA,YAAM,iBAAiB,mBAAmB,QAAQ,QAAQ;AAC1D,YAAM,aAAa;QACf,GAAG,qBACM,WAAK,gBAAgB,WAAW,QAAQ,GAC7C,CAAC,aAAkB,eAAS,QAAQ,MAAM,UAAU;QAExD,GAAG,qBACM,WAAK,gBAAgB,WAAW,QAAQ,GAC7C,CAAC,aAAkB,eAAS,QAAQ,MAAM,UAAU;;AAG5D,YAAM,kBAAkB,2BACpB,WAAW,IAAI,CAAC,aAAY;AACxB,cAAM,aACF,QAAQ,aAAa,WACf,QAAQ,WAAW,OAChB,iBAAa,UAAU,MAAM;AAE1C,eAAO;UACH;UACA,MAAM,aACF,UACA,mBAAmB,UAAU,CAAC;;MAG1C,CAAC,GACD,0BAA0B;AAE9B,YAAM,mBAAmB,aACrB,QAAQ,UACR,mBAAmB,QAAQ,WAAW,IAAI,CAAC;AAE/C,YAAM,iBAAiB,gBAAgB,IACnC,2BAA2B,gBAAgB,CAAC;AAGhD,UAAI,mBAAmB,QAAW;AAC9B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,OAAO,eACF,IAAI,CAAC,UACFA,2BACI,gBACA,MAAM,QAAQ,CACjB,EAEJ,KAAK,IAAI;UACd,MAAM;;QAEV,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,mCAAe;;;ACnHf,IAAAC,MAAoB;AACpB,IAAAC,QAAsB;AAsBtB,IAAM,6BAA6B,CAAC,aAChC,SAAS,SAAS,YAAY,KAAK,gBAAgB,QAAQ;AAE/D,IAAMC,6BAA4B,CAC9B,gBACA,aACc,eAAS,gBAAgB,QAAQ,EAAE,WAAW,MAAM,GAAG;AAEzE,IAAM,mCAAsD,kBAAkB;EAC1E,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,2BAA2B,QAAQ,QAAQ,GAAG;AAC/C;MACJ;AAEA,YAAM,iBAAiB,mBAAmB,QAAQ,QAAQ;AAC1D,YAAM,eAAe;QACjB,GAAG,qBACM,WAAK,gBAAgB,WAAW,SAAS,GAC9C,CAAC,aAAa,SAAS,SAAS,YAAY,CAAC;QAEjD,GAAG,qBACM,WAAK,gBAAgB,WAAW,QAAQ,GAC7C,CAAC,aAAkB,eAAS,QAAQ,MAAM,UAAU;QAExD,GAAG,qBACM,WAAK,gBAAgB,WAAW,QAAQ,GAC7C,CAAC,aAAkB,eAAS,QAAQ,MAAM,UAAU;;AAG5D,YAAM,kBAAkB,2BACpB,aAAa,IAAI,CAAC,aAAY;AAC1B,cAAM,aACF,QAAQ,aAAa,WACf,QAAQ,WAAW,OAChB,iBAAa,UAAU,MAAM;AAC1C,cAAMC,eAAc,mBAAmB,UAAU;AAEjD,eAAO;UACH;UACA,MAAM,SAAS,SAAS,YAAY,IAC9B,cAAc,UAAUA,YAAW,IACnC,aAAa,UAAUA,YAAW;;MAEhD,CAAC,GACD,0BAA0B;AAE9B,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,qBAAqB,QAAQ,SAAS,SAAS,YAAY,IAC3D,cAAc,QAAQ,UAAU,WAAW,IAC3C,aAAa,QAAQ,UAAU,WAAW;AAChD,YAAM,iBAAiB,gBAAgB,IACnC,2BAA2B,kBAAkB,CAAC;AAGlD,UAAI,mBAAmB,QAAW;AAC9B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,OAAO,eACF,IAAI,CAAC,UACFD,2BACI,gBACA,MAAM,QAAQ,CACjB,EAEJ,KAAK,IAAI;UACd,MAAM;;QAEV,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,2BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,2CAAe;;;ACzFR,IAAM,0CAA0C;AAGhD,IAAM,oCACT,oBAAI,IAAI;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH;AAGE,IAAM,8BACT,oBAAI,IAAI,CAAC,WAAW,QAAQ,CAAC;AAG1B,IAAM,4BAA4B,CACrC,UAEA,kCAAkC,IAAI,KAAgC;AAGnE,IAAM,uBAAuB,CAChC,UAEA,4BAA4B,IAAI,KAA2B;AAGxD,IAAM,eAAe,CACxB,UAEA,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAGhE,IAAM,cAAc,CAAC,UACxB,MAAM,QAAQ,KAAK;AAGhB,IAAM,eAAe,CAAC,UACzB,OAAO,UAAU;AAGd,IAAM,eAAe,CAAC,UACzB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAG/C,IAAM,gBAAgB,CAAC,SAAuC;AACjE,MAAI;AACA,WAAO,KAAK,MAAM,IAAI;EAC1B,QAAQ;AACJ,WAAO;EACX;AACJ;AAGO,IAAM,0BAA0B,CACnC,SACyB,aAAa,IAAI,IAAI,KAAK,OAAO,IAAI;AAG3D,IAAM,iCAAiC,CAC1C,SACyB,aAAa,IAAI,IAAI,KAAK,SAAS,IAAI;AAG7D,IAAM,gCAAgC,CACzC,SAC2C;AAC3C,QAAM,aAAa,wBAAwB,IAAI;AAE/C,SAAO,aAAa,UAAU,IAAI,OAAO,QAAQ,UAAU,IAAI,CAAA;AACnE;AAGO,IAAM,2BAA2B,CACpC,SACgC;AAChC,QAAM,cAAqC,CAAA;AAE3C,aAAW,CAAC,WAAW,UAAU,KAAK,8BAA8B,IAAI,GAAG;AACvE,QAAI,CAAC,YAAY,UAAU,GAAG;AAC1B;IACJ;AAEA,eAAW,CAAC,OAAO,SAAS,KAAK,WAAW,QAAO,GAAI;AACnD,UAAI,CAAC,aAAa,SAAS,GAAG;AAC1B;MACJ;AAEA,kBAAY,KAAK;QACb;QACA,MAAM;QACN;OACH;IACL;EACJ;AAEA,SAAO;AACX;AAGO,IAAM,kBAAkB,CAAC,UAAwC;AACpE,MAAI,UAAU,QAAW;AACrB,WAAO;EACX;AAEA,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO;EACX;AAEA,SAAO,KAAK,UAAU,KAAK;AAC/B;;;AC1IA,IAAM,kCAAqD,kBAAkB;EACzE,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,aAAa,8BAA8B,IAAI,EAAE,KACnD,CAAC,CAAC,EAAE,UAAU,MACV,YAAY,UAAU,KAAK,WAAW,WAAW,CAAC;AAG1D,YAAI,eAAe,QAAW;AAC1B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,WAAW,WAAW,CAAC;;UAE3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB,CAAC,0BAA0B,qBAAqB;MAChE,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,0BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,0CAAe;;;AClDf,IAAM,4BAA+C,kBAAkB;EACnE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,mCAAe;;;ACrCf,IAAM,wCAAwC;AAE9C,IAAM,mDACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,YAAM,WAAW,mBAAmB,QAAQ,QAAQ;AAEpD,UACI,aAAa,kBACb,aAAa,2BACf;AACE;MACJ;AAEA,YAAM,iBAAiB,QAAQ,WAAW,KAAK;AAE/C,UAAI,kBAAkB,uCAAuC;AACzD;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,gBAAgB,OAAO,cAAc;UACrC,eAAe,OACX,qCAAqC;;QAG7C,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,wBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,6DAAe;;;ACrDf,IAAM,gCAAmD,kBAAkB;EACvE,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,WAAW,yBAAyB,IAAI,EAAE,KAC5C,CAAC,EAAE,KAAI,MAAM;AACT,gBAAME,WAAU,KAAK,YAAY;AAEjC,iBACI,aAAaA,QAAO,KACpBA,WAAU;QAElB,CAAC;AAGL,YAAI,aAAa,QAAW;AACxB;QACJ;AAEA,cAAM,UAAU,SAAS,KAAK,YAAY;AAE1C,YAAI,CAAC,aAAa,OAAO,GAAG;AACxB;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,WAAW,SAAS;YACpB,SAAS,OAAO,OAAO;;UAE3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB,CAAC,0BAA0B,qBAAqB;MAChE,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,2BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,uCAAe;;;AC5Df,IAAM,sBAAsB,CAAC,aACzB,SAAS,SAAS,GAAG;AAEzB,IAAM,8BAA8B,oBAAI,IAAI,CAAC,SAAS,aAAa,CAAC;AAEpE,IAAM,2BAA8C,kBAAkB;EAClE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,YAAM,WAAW,mBAAmB,QAAQ,QAAQ;AAEpD,UAAI,aAAa,cAAc,aAAa,UAAU;AAClD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,QAAQ,mBAAmB,aAAa,OAAO;AAErD,UAAI,UAAU,QAAW;AACrB;MACJ;AAEA,YAAM,uBAAuB,MAAM,KAC/B,CAAC,aACG,CAAC,oBAAoB,QAAQ,KAC7B,CAAC,4BAA4B,IAAI,QAAQ,CAAC;AAGlD,UAAI,yBAAyB,QAAW;AACpC;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM,EAAE,UAAU,qBAAoB;QACtC,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB,CAAC,qBAAqB;MACtC,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,qBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,iCAAe;;;AC7Df,IAAM,eAAe,CAAC,UAClB,OAAO,KAAK,CAAC,aAAa,SAAS,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,KAAK;AAEzE,IAAM,mCAAsD,kBAAkB;EAC1E,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,UAAI,CAAC,oBAAoB,aAAa,QAAQ,GAAG;AAC7C;MACJ;AAEA,YAAM,gBAAgB,mBAAmB,aAAa,QAAQ;AAC9D,YAAM,eAAe,qBAAqB,aAAa,QAAQ;AAE/D,UACI,iBAAiB,QAChB,kBAAkB,UAAa,cAAc,WAAW,IAC3D;AACE;MACJ;AAEA,YAAM,QAAQ,mBAAmB,aAAa,OAAO;AAErD,UAAI,aAAa,KAAK,GAAG;AACrB;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW,oBAAoB,aAAa,OAAO,IAC7C,qBACA;OACT;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,kBACI;MACJ,cACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,2CAAe;;;ACrFf,IAAAC,QAAsB;AAWtB,IAAM,sDACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,YAAMC,YAAgB,eAAS,QAAQ,QAAQ;AAE/C,UAAIA,cAAa,eAAeA,cAAa,aAAa;AACtD;MACJ;AAEA,YAAM,sBAA2B,WACxB,cAAQ,QAAQ,QAAQ,GAC7B,WAAW;AAGf,UAAI,WAAW,mBAAmB,GAAG;AACjC;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,UAAAA;;QAEJ,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,wBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,iEAAe;;;AChDf,IAAM,kCAAqD,kBAAkB;EACzE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,YAAY;AACrD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB,8BAAsB,SAAS;UAC3B,WAAW;SACd;AACD;MACJ;AAEA,YAAM,cAAc,qBAChB,aACA,aAAa;AAGjB,UAAI,gBAAgB,QAAW;AAC3B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW,oBAAoB,aAAa,aAAa,IACnD,qBACA;OACT;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,kBACI;MACJ,oBACI;MACJ,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,yCAAe;;;ACvDf,IAAM,kCAAqD,kBAAkB;EACzE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,aACF,gBAAgB,OACV,SACA,+BAA+B,aAAa,OAAO;AAE7D,UAAI,eAAe,UAAa,WAAW,SAAS,GAAG;AACnD;MACJ;AAEA,YAAM,iBAAiB,mBAAmB,QAAQ,QAAQ;AAE1D,iBAAW,WAAW,WAAW,OAAM,GAAI;AACvC,cAAM,aAAa,QAAQ,KAAK,CAAC,UAAS;AACtC,gBAAM,MAAM,MAAM,KAAK,GAAG,KAAI;AAE9B,iBACI,OAAO,QAAQ,YACf,IAAI,SAAS,KACb,wBAAwB,GAAG,KAC3B,CAAC,WACG,8BAA8B,gBAAgB,GAAG,CAAC;QAG9D,CAAC,IAAI,KAAK;AAEV,YAAI,eAAe,QAAW;AAC1B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,KAAK;;UAET,WAAW;SACd;AAED;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB,CAAC,0BAA0B,qBAAqB;MAChE,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,qBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,0CAAe;;;ACtEf,IAAM,qCAAwD,kBAC1D;EACI,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,aACF,gBAAgB,OACV,SACA,mBAAmB,aAAa,aAAa;AAEvD,UAAI,eAAe,QAAW;AAC1B;MACJ;AAEA,YAAM,iBAAiB,mBAAmB,QAAQ,QAAQ;AAC1D,YAAM,gBAAgB,WAAW,KAC7B,CAAC,eACG,CAAC,WACG,8BACI,gBACA,UAAU,CACb,CACJ;AAGT,UAAI,kBAAkB,QAAW;AAC7B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,WAAW;;QAEf,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,uBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAGL,IAAA,6CAAe;;;ACnFR,IAAM,iCAAiC,CAC1C,eAIC;AACD,QAAM,cAAc,mBAAmB,UAAU;AACjD,QAAM,OAAO,aAAa,QAAQ;AAElC,SAAO;IACH;IACA,QAAQ,WAAW,SAAS,KAAK;;AAEzC;;;ACVA,IAAM,qCAAqC;AAC3C,IAAM,kCAAkC;AACxC,IAAM,sBAAsB;AAYrB,IAAM,mBAAmB,CAAC,SAC7B,KACK,WAAW,oCAAoC,CAAC,UAC7C,MAAM,WAAW,aAAa,GAAG,CAAC,EAErC,WAAW,iCAAiC,CAAC,UAC1C,MAAM,WAAW,aAAa,GAAG,CAAC,EAErC,WAAW,qBAAqB,CAAC,UAC9B,MAAM,WAAW,aAAa,GAAG,CAAC;AAIvC,IAAM,iCAAiC,CAC1C,mBACQ;AACR,QAAM,qBAAqB,eAAe,KAAI;AAE9C,MACI,mBAAmB,WAAW,GAAG,KACjC,mBAAmB,SAAS,GAAG,GACjC;AACE,WAAO,mBAAmB,MAAM,GAAG,EAAE,EAAE,KAAI;EAC/C;AAEA,QAAM,CAAC,WAAW,IAAI,mBAAmB,MAAM,QAAQ,CAAC;AAExD,SAAO,aAAa,KAAI,KAAM;AAClC;AAGO,IAAM,uBAAuB,CAChC,MACA,SAAS,MACqB;AAC9B,QAAM,aAAa,iBAAiB,IAAI;AACxC,QAAM,QAA6B,CAAA;AACnC,MAAI,eAAe;AAEnB,SAAO,eAAe,WAAW,QAAQ;AACrC,UAAM,YAAY,WAAW,QAAQ,KAAK,YAAY;AAEtD,QAAI,cAAc,IAAI;AAClB;IACJ;AAEA,QAAI,YAAY,KAAK,WAAW,YAAY,CAAC,MAAM,KAAK;AACpD,qBAAe,YAAY;AAC3B;IACJ;AAEA,UAAM,UAAU,WAAW,QAAQ,MAAM,YAAY,CAAC;AAEtD,QAAI,YAAY,IAAI;AAChB;IACJ;AAEA,UAAM,WAAW,WAAW,MAAM,YAAY,GAAG,OAAO;AAExD,QACI,SAAS,WAAW,KACpB,SAAS,SAAS,GAAG,KACrB,SAAS,SAAS,IAAI,KACtB,SAAS,SAAS,IAAI,GACxB;AACE,qBAAe,YAAY;AAC3B;IACJ;AAEA,UAAM,mBAAmB,UAAU;AACnC,UAAM,iBAAiB,WAAW,QAAQ,KAAK,gBAAgB;AAE/D,QAAI,mBAAmB,IAAI;AACvB;IACJ;AAEA,UAAM,iBAAiB,WAAW,MAC9B,kBACA,cAAc;AAGlB,QACI,eAAe,WAAW,KAC1B,eAAe,SAAS,IAAI,KAC5B,eAAe,SAAS,IAAI,GAC9B;AACE,qBAAe,YAAY;AAC3B;IACJ;AAEA,UAAM,cAAc,WAAW,MAAM,WAAW,iBAAiB,CAAC;AAClE,UAAM,QAAQ,SAAS;AAEvB,UAAM,KAAK;MACP,aAAa,+BAA+B,cAAc;MAC1D,KAAK,QAAQ,YAAY;MACzB;MACA;MACA,MAAM;KACT;AAED,mBAAe,iBAAiB;EACpC;AAEA,SAAO;AACX;AAGO,IAAM,oCAAoC,CAC7C,gBACU,2BAA2B,WAAW;AAG7C,IAAM,qCAAqC,CAC9C,gBACU,wBAAwB,WAAW;AAG1C,IAAM,+BAA+B,CACxC,iBACA,gBACS,6BAA6B,iBAAiB,WAAW;;;ACjItE,IAAM,wCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;QACJ;AAEA,cAAM,EAAE,MAAM,OAAM,IAAK,+BACrB,QAAQ,WAAW,IAAI;AAG3B,mBAAW,QAAQ,qBAAqB,MAAM,MAAM,GAAG;AACnD,cACI,CAAC,mCACG,KAAK,WAAW,GAEtB;AACE;UACJ;AAEA,cACI,WACI,6BACI,QAAQ,UACR,KAAK,WAAW,CACnB,GAEP;AACE;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF,aAAa,KAAK;;YAEtB,KAAK;cACD,KAAK,QAAQ,WAAW,gBACpB,KAAK,GAAG;cAEZ,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,wBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,gDAAe;;;AC3Ef,IAAM,+CACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YACI,mBAAmB,QAAQ,QAAQ,MAAM,gBAC3C;AACE;QACJ;AAEA,cAAM,EAAE,MAAM,OAAM,IAAK,+BACrB,QAAQ,WAAW,IAAI;AAG3B,mBAAW,QAAQ,qBAAqB,MAAM,MAAM,GAAG;AACnD,cACI,CAAC,mCACG,KAAK,WAAW,GAEtB;AACE;UACJ;AAEA,cACI,WACI,6BACI,QAAQ,UACR,KAAK,WAAW,CACnB,GAEP;AACE;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF,aAAa,KAAK;;YAEtB,KAAK;cACD,KAAK,QAAQ,WAAW,gBACpB,KAAK,GAAG;cAEZ,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,+BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,uDAAe;;;AC7Ef,IAAM,yCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YAAI,mBAAmB,QAAQ,QAAQ,MAAM,UAAU;AACnD;QACJ;AAEA,cAAM,EAAE,MAAM,OAAM,IAAK,+BACrB,QAAQ,WAAW,IAAI;AAG3B,mBAAW,QAAQ,qBAAqB,MAAM,MAAM,GAAG;AACnD,cACI,CAAC,mCACG,KAAK,WAAW,GAEtB;AACE;UACJ;AAEA,cACI,WACI,6BACI,QAAQ,UACR,KAAK,WAAW,CACnB,GAEP;AACE;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF,aAAa,KAAK;;YAEtB,KAAK;cACD,KAAK,QAAQ,WAAW,gBACpB,KAAK,GAAG;cAEZ,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,yBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,iDAAe;;;AC3Ef,IAAM,wCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;QACJ;AAEA,cAAM,EAAE,MAAM,OAAM,IAAK,+BACrB,QAAQ,WAAW,IAAI;AAG3B,mBAAW,QAAQ,qBAAqB,MAAM,MAAM,GAAG;AACnD,cACI,CAAC,mCACG,KAAK,WAAW,GAEtB;AACE;UACJ;AAEA,cACI,WACI,6BACI,QAAQ,UACR,KAAK,WAAW,CACnB,GAEP;AACE;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF,aAAa,KAAK;;YAEtB,KAAK;cACD,KAAK,QAAQ,WAAW,gBACpB,KAAK,GAAG;cAEZ,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,wBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,gDAAe;;;ACpEf,IAAM,uCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,iBAAiB,mBAAmB,QAAQ,QAAQ;AAC1D,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,cAAc,yBAAyB,IAAI,EAAE,KAC/C,CAAC,EAAE,KAAI,MAAM;AACT,gBAAMC,OAAM,KAAK,KAAK;AAEtB,iBACI,aAAaA,IAAG,KAChBA,KAAI,KAAI,EAAG,SAAS,KACpB,wBAAwBA,IAAG,KAC3B,CAAC,WACG,8BACI,gBACAA,IAAG,CACN;QAGb,CAAC;AAGL,YAAI,gBAAgB,QAAW;AAC3B;QACJ;AAEA,cAAM,MAAM,YAAY,KAAK,KAAK;AAElC,YAAI,CAAC,aAAa,GAAG,GAAG;AACpB;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF;YACA,WAAW,YAAY;;UAE3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,0BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,+CAAe;;;AC9Ef,IAAM,8CACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,aAAa,GACjD;AACE;MACJ;AAEA,YAAM,SAAS,qBAAqB,aAAa,QAAQ;AAEzD,UAAI,WAAW,kBAAkB;AAC7B;MACJ;AAEA,UAAI,WAAW,QAAW;AACtB,8BAAsB,SAAS;UAC3B,WAAW,oBAAoB,aAAa,QAAQ,IAC9C,gBACA;SACT;AAED;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM,EAAE,OAAM;QACd,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,aACI;MACJ,eACI;MACJ,eACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,wDAAe;;;ACnEf,IAAM,iCAAoD,kBAAkB;EACxE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,gBAAgB;AACzD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB,8BAAsB,SAAS;UAC3B,WAAW;SACd;AACD;MACJ;AAEA,YAAM,gBAAgB,qBAAqB,aAAa,SAAS;AACjE,YAAM,cAAc,mBAAmB,aAAa,SAAS;AAE7D,UAAI,kBAAkB,UAAa,gBAAgB,QAAW;AAC1D;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW,oBAAoB,aAAa,SAAS,IAC/C,iBACA;OACT;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,cACI;MACJ,gBACI;MACJ,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,wCAAe;;;AC9Df,IAAM,8BAA8B;AAEpC,IAAM,iCAAoD,kBAAkB;EACxE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,aACF,gBAAgB,OACV,SACA,mBAAmB,aAAa,aAAa;AAEvD,UAAI,eAAe,QAAW;AAC1B;MACJ;AAEA,YAAM,gBAAgB,WAAW,KAC7B,CAAC,eACG,CAAC,4BAA4B,KAAK,WAAW,KAAI,CAAE,CAAC;AAG5D,UAAI,kBAAkB,QAAW;AAC7B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,WAAW;;QAEf,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,uBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,yCAAe;;;AC3Df,IAAM,+BAA+B,oBAAI,IAAI;EACzC;EACA;EACA;CACH;AAED,IAAM,gCAAmD,kBAAkB;EACvE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,UAAU;AACnD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB,8BAAsB,SAAS;UAC3B,WAAW;SACd;AACD;MACJ;AAEA,YAAM,cAAc,qBAChB,aACA,aAAa;AAGjB,UAAI,gBAAgB,QAAW;AAC3B,8BAAsB,SAAS;UAC3B,WAAW,oBAAoB,aAAa,aAAa,IACnD,qBACA;SACT;AACD;MACJ;AAEA,UAAI,oBAAoB,aAAa,MAAM,GAAG;AAC1C,8BAAsB,SAAS;UAC3B,WAAW;SACd;AACD;MACJ;AAEA,YAAM,QAAQ,qBAAqB,aAAa,OAAO;AAEvD,UAAI,UAAU,QAAW;AACrB,8BAAsB,SAAS;UAC3B,WAAW,oBAAoB,aAAa,OAAO,IAC7C,eACA;SACT;AACD;MACJ;AAEA,YAAM,QAAQ,mBAAmB,aAAa,OAAO;AAErD,UAAI,UAAU,SAAS;AACnB,YAAI,UAAU,QAAW;AACrB;QACJ;AAEA,8BAAsB,SAAS;UAC3B,WAAW,oBAAoB,aAAa,OAAO,IAC7C,eACA;SACT;AACD;MACJ;AAEA,UACI,6BAA6B,IAAI,KAAK,KACtC,oBAAoB,aAAa,OAAO,GAC1C;AACE,8BAAsB,SAAS;UAC3B,MAAM,EAAE,MAAK;UACb,WAAW;SACd;MACL;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,gBACI;MACJ,YACI;MACJ,kBACI;MACJ,YACI;MACJ,cACI;MACJ,oBACI;MACJ,oBACI;MACJ,cACI;MACJ,iBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,uCAAe;;;AC5Hf,IAAM,uBAAuB,CAAC,UAA0B;AACpD,QAAM,eAAe,MAAM,KAAI;AAE/B,MAAI,CAAC,aAAa,SAAS,GAAG,GAAG;AAC7B,WAAO;EACX;AAEA,QAAM,iBAAiB,aAAa,YAAY,IAAI;AAEpD,MAAI,kBAAkB,GAAG;AACrB,WAAO;EACX;AAEA,QAAM,YAAY,aAAa,MAAM,iBAAiB,GAAG,EAAE,EAAE,KAAI;AAEjE,SACI,UAAU,SAAS,KACnB,CAAC,UAAU,SAAS,GAAG,KACvB,CAAC,UAAU,SAAS,GAAG;AAE/B;AAEA,IAAM,yCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,WAAW,yBACb,aACA,UAAU;AAGd,UAAI,aAAa,UAAa,SAAS,WAAW,GAAG;AACjD;MACJ;AAEA,iBAAW,CAAC,OAAO,OAAO,KAAK,SAAS,QAAO,GAAI;AAC/C,cAAM,QAAQ,QAAQ,OAAO,GAAG,KAAI;AAEpC,YACI,UAAU,UACV,MAAM,WAAW,KACjB,qBAAqB,KAAK,GAC5B;AACE;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,eAAe,OAAO,QAAQ,CAAC;YAC/B;;UAEJ,WAAW;SACd;AAED;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,yBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,iDAAe;;;AC5Ff,IAAM,yBAAyB,CAAC,QAAwB;AACpD,QAAM,aAAa,IAAI,KAAI;AAE3B,SAAO,WAAW,SAAS,KAAK,wBAAwB,UAAU;AACtE;AAEA,IAAM,kCAAqD,kBAAkB;EACzE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,aAAa,+BACf,aACA,OAAO;AAGX,UAAI,eAAe,UAAa,WAAW,SAAS,GAAG;AACnD;MACJ;AAEA,iBAAW,CAAC,WAAW,KAAK,KAAK,YAAY;AACzC,mBAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAO,GAAI;AACzC,gBAAM,MAAM,KAAK,KAAK,GAAG,KAAI;AAE7B,cAAI,QAAQ,UAAa,uBAAuB,GAAG,GAAG;AAClD;UACJ;AAEA,gCAAsB,SAAS;YAC3B,MAAM;cACF,cAAc,IAAI,SAAS,IAAI,MAAM;cACrC;cACA,YAAY,OAAO,QAAQ,CAAC;;YAEhC,WAAW;WACd;AAED;QACJ;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,gBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,0CAAe;;;AC/Ef,IAAM,gCAAmD,kBAAkB;EACvE,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;QACJ;AAEA,cAAM,EAAE,MAAM,OAAM,IAAK,+BACrB,QAAQ,WAAW,IAAI;AAG3B,mBAAW,QAAQ,qBAAqB,MAAM,MAAM,GAAG;AACnD,cAAI,CAAC,kCAAkC,KAAK,WAAW,GAAG;AACtD;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF,aAAa,KAAK;;YAEtB,KAAK;cACD,KAAK,QAAQ,WAAW,gBAAgB,KAAK,GAAG;cAChD,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,sBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,uCAAe;;;AC1Df,IAAM,uCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YACI,mBAAmB,QAAQ,QAAQ,MAAM,gBAC3C;AACE;QACJ;AAEA,cAAM,EAAE,MAAM,OAAM,IAAK,+BACrB,QAAQ,WAAW,IAAI;AAG3B,mBAAW,QAAQ,qBAAqB,MAAM,MAAM,GAAG;AACnD,cACI,CAAC,kCAAkC,KAAK,WAAW,GACrD;AACE;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF,aAAa,KAAK;;YAEtB,KAAK;cACD,KAAK,QAAQ,WAAW,gBACpB,KAAK,GAAG;cAEZ,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,6BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,8CAAe;;;ACjEf,IAAM,0CAA0C,CAC5C,gBACS;AACT,QAAM,wBAAwB,YAAY,KAAI;AAE9C,MAAI,sBAAsB,WAAW,GAAG;AACpC,WAAO;EACX;AAEA,QAAM,uBAAuB,sBAAsB,YAAW;AAE9D,MACI,qBAAqB,WAAW,GAAG,KACnC,qBAAqB,WAAW,IAAI,KACpC,qBAAqB,WAAW,KAAK,GACvC;AACE,WAAO;EACX;AAEA,MACI,qBAAqB,WAAW,GAAG,KACnC,qBAAqB,WAAW,IAAI,KACpC,qBAAqB,WAAW,IAAI,KACpC,qBAAqB,WAAW,KAAK,KACrC,qBAAqB,WAAW,OAAO,GACzC;AACE,WAAO;EACX;AAEA,SAAO,kCAAkC,qBAAqB;AAClE;AAEA,IAAM,iCAAoD,kBAAkB;EACxE,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YAAI,mBAAmB,QAAQ,QAAQ,MAAM,UAAU;AACnD;QACJ;AAEA,cAAM,aAAa,QAAQ,WAAW;AACtC,cAAM,cAAc,mBAAmB,UAAU;AACjD,cAAM,OAAO,aAAa,QAAQ;AAClC,cAAM,aAAa,WAAW,SAAS,KAAK;AAE5C,mBAAW,QAAQ,qBAAqB,MAAM,UAAU,GAAG;AACvD,gBAAM,EAAE,YAAW,IAAK;AAExB,cAAI,CAAC,wCAAwC,WAAW,GAAG;AACvD;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF;;YAEJ,KAAK;cACD,KAAK,QAAQ,WAAW,gBAAgB,KAAK,GAAG;cAChD,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,uBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,wCAAe;;;AC3Ff,IAAM,uCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,cAAc,yBAAyB,IAAI,EAAE,KAC/C,CAAC,EAAE,KAAI,MAAM;AACT,gBAAMC,OAAM,KAAK,KAAK;AAEtB,iBACI,aAAaA,IAAG,KAChB,2BAA2BA,IAAG;QAEtC,CAAC;AAGL,YAAI,gBAAgB,QAAW;AAC3B;QACJ;AAEA,cAAM,MAAM,YAAY,KAAK,KAAK;AAElC,YAAI,CAAC,aAAa,GAAG,GAAG;AACpB;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF;YACA,WAAW,YAAY;;UAE3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,8BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,+CAAe;;;ACpEf,IAAM,gCAAmD,kBAAkB;EACvE,OAAO,SAAO;AACV,WAAO;MACH,OAAI;AACA,YAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;QACJ;AAEA,cAAM,EAAE,MAAM,OAAM,IAAK,+BACrB,QAAQ,WAAW,IAAI;AAG3B,mBAAW,QAAQ,qBAAqB,MAAM,MAAM,GAAG;AACnD,cAAI,CAAC,kCAAkC,KAAK,WAAW,GAAG;AACtD;UACJ;AAEA,kBAAQ,OAAO;YACX,MAAM;cACF,aAAa,KAAK;;YAEtB,KAAK;cACD,KAAK,QAAQ,WAAW,gBAAgB,KAAK,GAAG;cAChD,OAAO,QAAQ,WAAW,gBACtB,KAAK,KAAK;;YAGlB,WAAW;WACd;QACL;MACJ;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,sBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,uCAAe;;;ACxDf,IAAM,kCAAqD,kBAAkB;EACzE,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,eAAe,8BAA8B,IAAI,EAAE,KACrD,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,YAAY,UAAU,CAAC;AAGhD,YAAI,iBAAiB,QAAW;AAC5B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,WAAW,aAAa,CAAC;YACzB,OAAO,gBAAgB,aAAa,CAAC,CAAC;;UAE1C,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,4BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,yCAAe;;;ACrDf,IAAM,sBAAsB,CAAC,UACzB,OAAO,UAAU,YAAY,MAAM,KAAI,EAAG,SAAS;AAEvD,IAAM,wCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,cAAc,yBAAyB,IAAI,EAAE,KAC/C,CAAC,EAAE,KAAI,MACH,aAAa,KAAK,MAAM,CAAC,KACzB,KAAK,MAAM,MAAM,aACjB,CAAC,oBAAoB,KAAK,MAAM,CAAC,KACjC,CAAC,oBAAoB,KAAK,YAAY,CAAC,CAAC;AAGhD,YAAI,gBAAgB,QAAW;AAC3B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,WAAW,YAAY;;UAE3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,mCACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,gDAAe;;;AC3Df,IAAM,mCAAsD,kBAAkB;EAC1E,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,aAAa,wBAAwB,IAAI;AAE/C,YAAI,aAAa,UAAU,GAAG;AAC1B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,8BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,0CAAe;;;ACzDf,IAAAC,MAAoB;AAcpB,IAAM,wCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,YAAM,WAAW,mBAAmB,QAAQ,QAAQ;AAEpD,UACI,aAAa,wBACb,aAAa,cACb,aAAa,kBACb,aAAa,UACf;AACE;MACJ;AAEA,YAAM,6BACF,8BAA8B,QAAQ,QAAQ;AAElD,UAAO,eAAW,0BAA0B,GAAG;AAC3C;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,+BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,+CAAe;;;ACjEf,IAAAC,SAAsB;;;ACAtB,IAAAC,QAAsB;AAOtB,IAAM,oCACF;AAGG,IAAM,iCAAiC,CAAC,aAC3C,kCAAkC,KAAK,sBAAsB,QAAQ,CAAC;AAGnE,IAAM,mCAAmC,CAC5C,gBAEA,gBAAgB,SACf,oBAAoB,aAAa,MAAM,KACpC,oBAAoB,aAAa,aAAa,KAC9C,oBAAoB,aAAa,SAAS;AAG3C,IAAM,uBAAuB,CAAC,aAC5B,eAAS,QAAQ;;;ADd1B,IAAM,+BAAkD,kBAAkB;EACtE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAS,gBAAS,QAAQ,QAAQ,MAAM,YAAY;AAChD;MACJ;AAEA,UAAI,+BAA+B,QAAQ,QAAQ,GAAG;AAClD;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,sBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,sCAAe;;;AEvCf,IAAM,+BAAkD,kBAAkB;EACtE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB,8BAAsB,SAAS;UAC3B,WAAW;SACd;AACD;MACJ;AAEA,UAAI,qBAAqB,aAAa,MAAM,MAAM,QAAW;AACzD,8BAAsB,SAAS;UAC3B,WAAW;SACd;AACD;MACJ;AAEA,UACI,qBAAqB,aAAa,aAAa,MAAM,QACvD;AACE,8BAAsB,SAAS;UAC3B,WAAW;SACd;MACL;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,yBACI;MACJ,yBACI;MACJ,kBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,sCAAe;;;AC5Df,IAAM,6BAAgD,kBAAkB;EACpE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,wBAAwB,QAAQ,QAAQ,GAAG;AAC5C;MACJ;AAEA,YAAMC,YAAW,qBAAqB,QAAQ,QAAQ;AAEtD,UAAIA,cAAa,YAAY;AACzB;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,CAAC,iCAAiC,WAAW,GAAG;AAChD;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,UAAAA;;QAEJ,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,gCACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,oCAAe;;;ACjDf,IAAM,qCAAwD,kBAC1D;EACI,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAC9D,YAAM,oBACF,gBAAgB,OACV,SACA,qBAAqB,aAAa,MAAM;AAElD,UAAI,sBAAsB,QAAW;AACjC;MACJ;AAEA,YAAM,YAAY,aAAa,QAAQ,UAAU,WAAW;AAC5D,YAAM,gBAAgB,sBAAsB,QAAQ,QAAQ;AAE5D,UAAI,cAAc,eAAe;AAC7B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF;UACA,MAAM;;QAEV,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,gCACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAGL,IAAA,6CAAe;;;AC/Df,IAAM,2CACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,cAAc,yBAAyB,IAAI,EAAE,KAC/C,CAAC,EAAE,KAAI,MAAM;AACT,gBAAMC,OAAM,KAAK,KAAK;AAEtB,iBACI,aAAaA,IAAG,KAChB,OAAO,OAAOA,IAAG,EAAE,KACf,CAAC,UAAU,CAAC,aAAa,KAAK,CAAC;QAG3C,CAAC;AAGL,YAAI,gBAAgB,QAAW;AAC3B;QACJ;AAEA,cAAM,MAAM,YAAY,KAAK,KAAK;AAElC,8BAAsB,SAAS;UAC3B,MAAM;YACF,KAAK,gBAAgB,GAAG;YACxB,WAAW,YAAY;;UAE3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,iCACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,oDAAe;;;AC/Df,IAAM,oCAAuD,kBAAkB;EAC3E,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,eAAe,GACnD;AACE;MACJ;AAEA,UACI,qBAAqB,aAAa,eAAe,MAAM,QACzD;AACE;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,0BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,4CAAe;;;ACrDf,IAAM,6BAA6B,oBAAI,IAAI,CAAC,SAAS,MAAM,CAAC;AAE5D,IAAM,mCAAsD,kBAAkB;EAC1E,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,WAAW,yBAAyB,aAAa,UAAU;AAEjE,UAAI,aAAa,UAAa,SAAS,WAAW,GAAG;AACjD;MACJ;AAEA,iBAAW,CAAC,OAAO,OAAO,KAAK,SAAS,QAAO,GAAI;AAC/C,cAAM,UAAU,QAAQ,MAAM;AAE9B,YAAI,YAAY,QAAW;AACvB;QACJ;AAEA,cAAM,iBAAiB,QAAQ,KAAI,EAAG,YAAW;AAEjD,YAAI,2BAA2B,IAAI,cAAc,GAAG;AAChD;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,eAAe,OAAO,QAAQ,CAAC;YAC/B,WACI,QAAQ,KAAI,EAAG,SAAS,IAAI,UAAU;;UAE9C,WAAW;SACd;AAED;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,2CAAe;;;ACxEf,IAAM,gCAAmD,kBAAkB;EACvE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,WAAW,yBAAyB,aAAa,UAAU;AAEjE,UAAI,aAAa,UAAa,SAAS,WAAW,GAAG;AACjD;MACJ;AAEA,iBAAW,CAAC,OAAO,OAAO,KAAK,SAAS,QAAO,GAAI;AAC/C,cAAM,gBAAgB,OAAO,QAAQ,CAAC;AACtC,cAAM,QAAQ,QAAQ,OAAO,GAAG,KAAI,KAAM;AAC1C,cAAM,QAAQ,QAAQ,OAAO,GAAG,KAAI,KAAM;AAC1C,cAAM,SAAS,QAAQ,QAAQ,GAAG,KAAI,KAAM;AAC5C,cAAM,OAAO,QAAQ,MAAM,GAAG,KAAI,EAAG,YAAW,KAAM;AAEtD,YAAI,MAAM,WAAW,GAAG;AACpB,gCAAsB,SAAS;YAC3B,MAAM,EAAE,cAAa;YACrB,WAAW;WACd;AAED;QACJ;AAEA,YAAI,MAAM,WAAW,GAAG;AACpB,gCAAsB,SAAS;YAC3B,MAAM,EAAE,cAAa;YACrB,WAAW;WACd;AAED;QACJ;AAEA,YAAI,SAAS,UAAU,OAAO,WAAW,GAAG;AACxC,gCAAsB,SAAS;YAC3B,MAAM,EAAE,cAAa;YACrB,WAAW;WACd;AAED;QACJ;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,cACI;MACJ,cACI;MACJ,0BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,uCAAe;;;ACpFf,IAAM,yBAAyB,oBAAI,IAAI;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH;AAED,IAAM,kCAAqD,kBAAkB;EACzE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,aAAa,+BACf,aACA,OAAO;AAGX,UAAI,eAAe,UAAa,WAAW,SAAS,GAAG;AACnD;MACJ;AAEA,iBAAW,aAAa,WAAW,KAAI,GAAI;AACvC,YAAI,uBAAuB,IAAI,SAAS,GAAG;AACvC;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM,EAAE,UAAS;UACjB,WAAW;SACd;AAED;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,kBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,0CAAe;;;ACxEf,IAAM,wBAAwB,CAAC,UAA0B;AACrD,MAAI,oBAAoB;AAExB,aAAW,aAAa,OAAO;AAC3B,QAAI,cAAc,KAAK;AACnB,2BAAqB;AAErB,UAAI,oBAAoB,GAAG;AACvB,eAAO;MACX;AAEA;IACJ;AAEA,QAAI,YAAY,OAAO,YAAY,KAAK;AACpC,aAAO;IACX;EACJ;AAEA,SAAO,MAAM,SAAS,KAAK,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,SAAS,GAAG;AAC5E;AAEA,IAAM,oCAAuD,kBAAkB;EAC3E,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,aAAa,+BACf,aACA,OAAO;AAGX,UAAI,eAAe,UAAa,WAAW,SAAS,GAAG;AACnD;MACJ;AAEA,iBAAW,CAAC,WAAW,KAAK,KAAK,YAAY;AACzC,mBAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAO,GAAI;AACzC,gBAAM,UAAU,KAAK,SAAS,GAAG,KAAI;AAErC,cACI,YAAY,UACZ,QAAQ,WAAW,KACnB,sBAAsB,OAAO,GAC/B;AACE;UACJ;AAEA,gCAAsB,SAAS;YAC3B,MAAM;cACF;cACA,YAAY,OAAO,QAAQ,CAAC;cAC5B;;YAEJ,WAAW;WACd;AAED;QACJ;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,4CAAe;;;AC/Ff,IAAM,oBAAoB,CAAC,SACvB;EACI;EACA;EACA;EACA;EACF,KAAK,CAAC,QAAO;AACX,QAAM,QAAQ,KAAK,GAAG;AAEtB,SAAO,OAAO,UAAU,YAAY,MAAM,KAAI,EAAG,SAAS;AAC9D,CAAC;AAEL,IAAM,6BAAgD,kBAAkB;EACpE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,YAAM,aAAa,+BACf,aACA,OAAO;AAGX,UAAI,eAAe,UAAa,WAAW,SAAS,GAAG;AACnD;MACJ;AAEA,iBAAW,CAAC,WAAW,KAAK,KAAK,YAAY;AACzC,mBAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAO,GAAI;AACzC,gBAAM,aAAa,OAAO,QAAQ,CAAC;AACnC,gBAAM,OAAO,KAAK,MAAM,GAAG,KAAI,KAAM;AAErC,cAAI,SAAS,WAAW;AACpB,kCAAsB,SAAS;cAC3B,MAAM;gBACF;gBACA;gBACA,MAAM,KAAK,WAAW,IAAI,cAAc;;cAE5C,WAAW;aACd;AAED;UACJ;AAEA,cAAI,kBAAkB,IAAI,GAAG;AACzB;UACJ;AAEA,gCAAsB,SAAS;YAC3B,MAAM;cACF;cACA;;YAEJ,WAAW;WACd;AAED;QACJ;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,iBACI;MACJ,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,oCAAe;;;AC/Ff,IAAMC,8BAA6B,oBAAI,IAAI,CAAC,SAAS,MAAM,CAAC;AAE5D,IAAM,4BAA4B;EAC9B;EACA;;AAGJ,IAAM,0CACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UAAI,gBAAgB,MAAM;AACtB;MACJ;AAEA,iBAAW,aAAa,2BAA2B;AAC/C,YAAI,CAAC,oBAAoB,aAAa,SAAS,GAAG;AAC9C;QACJ;AAEA,cAAM,aAAa,qBACf,aACA,SAAS;AAEb,cAAM,kBAAkB,YAAY,KAAI,EAAG,YAAW;AAEtD,YACI,oBAAoB,UACpBA,4BAA2B,IAAI,eAAe,GAChD;AACE;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,cACI,eAAe,UACf,WAAW,KAAI,EAAG,WAAW,IACvB,YACA;YACV;;UAEJ,WAAW;SACd;AAED;MACJ;IACJ,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,0BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,kDAAe;;;AC/Ef,IAAM,wBAAwB,CAC1B,aACA,cACQ;AACR,MAAI,gBAAgB,QAAW;AAC3B,WAAO;EACX;AAEA,MAAI,cAAc,QAAW;AACzB,WAAO,IAAI,UAAU,KAAK,IAAI,CAAC;EACnC;AAEA,SAAO;AACX;AAEA,IAAM,kCAAqD,kBAAkB;EACzE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,aAAa,GACjD;AACE;MACJ;AAEA,YAAM,aAAa,mBAAmB,aAAa,aAAa;AAEhE,UAAI,eAAe,UAAa,WAAW,SAAS,GAAG;AACnD;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,iBAAiB,sBACb,qBAAqB,aAAa,aAAa,GAC/C,UAAU;;QAGlB,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,wBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,0CAAe;;;ACzEf,IAAM,8BAA8B;AAEpC,IAAM,6BAAgD,kBAAkB;EACpE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,OAAO,GAC3C;AACE;MACJ;AAEA,YAAM,YAAY,mBAAmB,aAAa,OAAO;AAEzD,UAAI,cAAc,UAAa,UAAU,SAAS,GAAG;AACjD;MACJ;AAEA,YAAM,QAAQ,qBAAqB,aAAa,OAAO;AAEvD,UACI,UAAU,UACV,MAAM,SAAS,KACf,CAAC,4BAA4B,KAAK,KAAK,GACzC;AACE;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,YACI,UAAU,UAAa,MAAM,KAAI,EAAG,WAAW,IACzC,YACA;;QAEd,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,mBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,oCAAe;;;ACvEf,IAAM,4BAA+C,kBAAkB;EACnE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,MAAM,GAC1C;AACE;MACJ;AAEA,UAAI,qBAAqB,aAAa,MAAM,MAAM,QAAW;AACzD;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,kBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,mCAAe;;;ACjDf,IAAM,sBAAsB;AAC5B,IAAM,0BAA0B;AAEhC,IAAM,2BAA2B,CAAC,UAA0B;AACxD,QAAM,eAAe,MAAM,KAAI;AAE/B,SACI,aAAa,SAAS,KACtB,iBAAiB,uBACjB,iBAAiB;AAEzB;AAEA,IAAM,oBAAoB,CACtB,aACA,cACQ;AACR,MAAI,gBAAgB,QAAW;AAC3B,WAAO;EACX;AAEA,MAAI,cAAc,QAAW;AACzB,WAAO,IAAI,UAAU,KAAK,IAAI,CAAC;EACnC;AAEA,SAAO;AACX;AAEA,IAAM,iCAAoD,kBAAkB;EACxE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,QAAQ,GAC5C;AACE;MACJ;AAEA,YAAM,eAAe,qBAAqB,aAAa,QAAQ;AAC/D,YAAM,gBAAgB,mBAAmB,aAAa,QAAQ;AAE9D,UACI,iBAAiB,2BACjB,iBAAiB,qBACnB;AACE;MACJ;AAEA,UACI,kBAAkB,UAClB,cAAc,SAAS,KACvB,cAAc,MAAM,CAAC,cACjB,yBAAyB,SAAS,CAAC,GAEzC;AACE;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,aAAa,kBAAkB,cAAc,aAAa;;QAE9D,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,wCAAe;;;AClGf,IAAM,sBAAsB,oBAAI,IAAI,CAAC,kBAAkB,QAAQ,CAAC;AAEhE,IAAM,8BAAiD,kBAAkB;EACrE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,oBAAoB,aAAa,aAAa,KAC9C,CAAC,oBAAoB,aAAa,QAAQ,GAC5C;AACE;MACJ;AAEA,YAAM,SAAS,qBAAqB,aAAa,QAAQ;AAEzD,UAAI,WAAW,QAAW;AACtB,8BAAsB,SAAS;UAC3B,WAAW;SACd;AAED;MACJ;AAEA,UAAI,oBAAoB,IAAI,MAAM,GAAG;AACjC;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM,EAAE,OAAM;QACd,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,aACI;MACJ,eACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,qCAAe;;;ACjEf,IAAM,mBAAmB,CACrB,aACA,cACQ;AACR,MAAI,gBAAgB,QAAW;AAC3B,WAAO;EACX;AAEA,MAAI,cAAc,QAAW;AACzB,WAAO,IAAI,UAAU,KAAK,IAAI,CAAC;EACnC;AAEA,SAAO;AACX;AAEA,IAAM,6BAAgD,kBAAkB;EACpE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,sBAAsB,QAAQ,QAAQ,GAAG;AAC1C;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,OAAO,GAC3C;AACE;MACJ;AAEA,YAAM,QAAQ,mBAAmB,aAAa,OAAO;AAErD,UAAI,UAAU,UAAa,MAAM,SAAS,GAAG;AACzC;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,YAAY,iBACR,qBAAqB,aAAa,OAAO,GACzC,KAAK;;QAGb,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,mBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,oCAAe;;;ACrEf,IAAM,qBAAqB,CAAC,UAA0B;AAClD,QAAM,eAAe,MAAM,KAAI;AAC/B,QAAM,iBAAiB,aAAa,YAAW;AAE/C,SACI,aAAa,SAAS,KACtB,iBAAiB,OACjB,iBAAiB,QACjB,CAAC,aAAa,WAAW,IAAI,KAC7B,CAAC,aAAa,WAAW,KAAK,KAC9B,CAAC,aAAa,WAAW,GAAG,KAC5B,CAAC,aAAa,SAAS,IAAI,KAC3B,CAAC,eAAe,WAAW,GAAG,KAC9B,CAAC,eAAe,WAAW,IAAI,KAC/B,CAAC,eAAe,WAAW,KAAK,KAChC,CAAC,sBAAsB,YAAY,KACnC,CAAC,aAAa,YAAY;AAElC;AAEA,IAAM,2CACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,gBAAgB;AACzD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,SAAS,GAC7C;AACE;MACJ;AAEA,YAAM,gBAAgB;QAClB,GAAI,mBAAmB,aAAa,SAAS,KAAK,CAAA;;AAEtD,YAAM,gBAAgB,qBAClB,aACA,SAAS;AAGb,UAAI,kBAAkB,QAAW;AAC7B,sBAAc,KAAK,aAAa;MACpC;AAEA,YAAM,eAAe,cAAc,KAC/B,CAAC,UAAU,CAAC,mBAAmB,KAAK,CAAC;AAGzC,UAAI,iBAAiB,QAAW;AAC5B;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,SAAS;;QAEb,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,oDAAe;;;AC/Ff,IAAM,qCAAwD,kBAC1D;EACI,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,UAAU;AACnD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,eAAe,GACnD;AACE;MACJ;AAEA,UACI,qBAAqB,aAAa,eAAe,MACjD,QACF;AACE;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,2BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAGL,IAAA,6CAAe;;;ACtDf,IAAMC,+BAA8B;AAEpC,IAAM,yBAAyB,CAC3B,aACA,cACQ;AACR,MAAI,gBAAgB,QAAW;AAC3B,WAAO;EACX;AAEA,MAAI,cAAc,QAAW;AACzB,WAAO,IAAI,UAAU,KAAK,IAAI,CAAC;EACnC;AAEA,SAAO;AACX;AAEA,IAAM,8BAAiD,kBAAkB;EACrE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,UAAU;AACnD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,OAAO,GAC3C;AACE;MACJ;AAEA,YAAM,YAAY,mBAAmB,aAAa,OAAO;AAEzD,UAAI,cAAc,QAAW;AACzB,8BAAsB,SAAS;UAC3B,MAAM;YACF,YAAY,uBACR,QACA,SAAS;;UAGjB,WAAW;SACd;AACD;MACJ;AAEA,YAAM,QAAQ,qBAAqB,aAAa,OAAO;AAEvD,UACI,UAAU,UACV,MAAM,SAAS,KACf,CAACA,6BAA4B,KAAK,KAAK,GACzC;AACE;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,YAAY,uBAAuB,OAAO,SAAS;;QAEvD,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,qCAAe;;;AC5Ff,IAAM,6BAAgD,kBAAkB;EACpE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,UAAU;AACnD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,MAAM,GAC1C;AACE;MACJ;AAEA,UAAI,qBAAqB,aAAa,MAAM,MAAM,QAAW;AACzD;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,mBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,oCAAe;;;ACjDf,IAAMC,oBAAmB,CACrB,aACA,cACQ;AACR,MAAI,gBAAgB,QAAW;AAC3B,WAAO;EACX;AAEA,MAAI,cAAc,QAAW;AACzB,WAAO,IAAI,UAAU,KAAK,IAAI,CAAC;EACnC;AAEA,SAAO;AACX;AAEA,IAAM,8BAAiD,kBAAkB;EACrE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,mBAAmB,QAAQ,QAAQ,MAAM,UAAU;AACnD;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,OAAO,GAC3C;AACE;MACJ;AAEA,YAAM,QAAQ,mBAAmB,aAAa,OAAO;AAErD,UAAI,UAAU,UAAa,MAAM,SAAS,GAAG;AACzC;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,YAAYA,kBACR,qBAAqB,aAAa,OAAO,GACzC,KAAK;;QAGb,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,oBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,qCAAe;;;AC3Ef,IAAM,4CACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,cAAc,yBAAyB,IAAI,EAAE,KAC/C,CAAC,EAAE,KAAI,MAAM;AACT,gBAAM,YAAY,KAAK,MAAM;AAE7B,iBACI,CAAC,aAAa,SAAS,KACvB,CAAC,qBAAqB,SAAS;QAEvC,CAAC;AAGL,YAAI,gBAAgB,QAAW;AAC3B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,WAAW,YAAY;YACvB,MAAM,gBAAgB,YAAY,KAAK,MAAM,CAAC;;UAElD,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,2BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,qDAAe;;;AC7Df,IAAM,oCAAuD,kBAAkB;EAC3E,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,cAAc,yBAAyB,IAAI,EAAE,KAC/C,CAAC,EAAE,KAAI,MAAM;AACT,gBAAM,MAAM,KAAK,KAAK;AAEtB,iBAAO,QAAQ,UAAa,CAAC,aAAa,GAAG;QACjD,CAAC;AAGL,YAAI,gBAAgB,QAAW;AAC3B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,KAAK,gBAAgB,YAAY,KAAK,KAAK,CAAC;YAC5C,WAAW,YAAY;;UAE3B,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,0BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,4CAAe;;;ACzDf,IAAM,uCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,mBAAmB,8BAA8B,IAAI,EACtD,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAC9B,KACG,CAAC,cAAc,CAAC,0BAA0B,SAAS,CAAC;AAG5D,YAAI,qBAAqB,QAAW;AAChC;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,WAAW;;UAEf,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,4BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,+CAAe;;;ACtDf,IAAM,wBAAwB,CAAC,UAC3B,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,KAAK,QAAQ;AAEpE,IAAM,yCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,cAAc,yBAAyB,IAAI,EAAE,KAC/C,CAAC,EAAE,KAAI,MAAM;AACT,gBAAM,UAAU,KAAK,YAAY;AAEjC,iBACI,YAAY,UACZ,CAAC,sBAAsB,OAAO;QAEtC,CAAC;AAGL,YAAI,gBAAgB,QAAW;AAC3B;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,WAAW,YAAY;YACvB,SAAS,gBACL,YAAY,KAAK,YAAY,CAAC;;UAGtC,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,8BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,iDAAe;;;ACjEf,IAAM,wCACF,kBAAkB;EACd,OAAO,SAAO;AACV,WAAO;MACH,WAAQ;AACJ,YAAI,CAAC,yBAAyB,QAAQ,QAAQ,GAAG;AAC7C;QACJ;AAEA,cAAM,OAAO,cAAc,QAAQ,WAAW,IAAI;AAClD,cAAM,eAAe,+BAA+B,IAAI;AAExD,YAAI,iBAAiB,GAAG;AACpB;QACJ;AAEA,8BAAsB,SAAS;UAC3B,MAAM;YACF,SAAS,gBAAgB,YAAY;;UAEzC,WAAW;SACd;MACL;;EAER;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,8BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAEL,IAAA,gDAAe;;;AChDf,IAAM,qCAAwD,kBAC1D;EACI,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;MACJ;AAEA,YAAM,gBAAgB,sBAAsB,QAAQ,QAAQ;AAE5D,UAAI,uBAAuB,aAAa,GAAG;AACvC;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF;;QAEJ,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,2BACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAGL,IAAA,6CAAe;;;AC/Cf,IAAM,+BAAkD,kBAAkB;EACtE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,SAAS,GAC7C;AACE;MACJ;AAEA,UAAI,qBAAqB,aAAa,SAAS,MAAM,QAAW;AAC5D;MACJ;AAEA,4BAAsB,SAAS;QAC3B,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB,CAAC,0BAA0B,qBAAqB;MAChE,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,qBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,sCAAe;;;AC1Cf,IAAM,4BAA+C,kBAAkB;EACnE,OAAO,SAAO;AACV,WAAO,+BAA+B,MAAK;AACvC,UAAI,CAAC,gBAAgB,QAAQ,QAAQ,GAAG;AACpC;MACJ;AAEA,YAAM,cAAc,mBAAmB,QAAQ,WAAW,IAAI;AAE9D,UACI,gBAAgB,QAChB,CAAC,oBAAoB,aAAa,MAAM,GAC1C;AACE;MACJ;AAEA,YAAM,YAAY,qBAAqB,aAAa,MAAM;AAE1D,UACI,cAAc,UACd,uBACI,aAAa,QAAQ,UAAU,WAAW,CAAC,GAEjD;AACE;MACJ;AAEA,4BAAsB,SAAS;QAC3B,MAAM;UACF,MAAM,aAAa;;QAEvB,WAAW;OACd;IACL,CAAC;EACL;EACA,gBAAgB,CAAA;EAChB,MAAM;IACF,YAAY;IACZ,MAAM;MACF,gBAAgB;QACZ;QACA;QACA;;MAEJ,aACI;MACJ,QAAQ;MACR,aAAa;MACb,sBAAsB;;IAE1B,UAAU;MACN,kBACI;;IAER,QAAQ,CAAA;IACR,MAAM;;EAEV,MAAM;CACT;AAED,IAAA,mCAAe;;;ACuEf,IAAM,sBAA2C;EAC7C,+BAA+B;EAC/B,oCAAoC;EACpC,uBAAuB;EACvB,6BAA6B;EAC7B,4BAA4B;EAC5B,6BAA6B;EAC7B,4BAA4B;EAC5B,oCAAoC;EACpC,mCAAmC;EACnC,4BAA4B;EAC5B,sDACI;EACJ,gCAAgC;EAChC,0BAA0B;EAC1B,oCAAoC;EACpC,0DACI;EACJ,kCAAkC;EAClC,mCAAmC;EACnC,sCAAsC;EACtC,yCACI;EACJ,gDACI;EACJ,0CACI;EACJ,yCACI;EACJ,wCACI;EACJ,iDACI;EACJ,iCAAiC;EACjC,kCAAkC;EAClC,gCAAgC;EAChC,0CACI;EACJ,mCAAmC;EACnC,gCAAgC;EAChC,uCAAuC;EACvC,iCAAiC;EACjC,wCACI;EACJ,gCAAgC;EAChC,kCAAkC;EAClC,yCACI;EACJ,mCAAmC;EACnC,wCACI;EACJ,+BAA+B;EAC/B,+BAA+B;EAC/B,6BAA6B;EAC7B,sCAAsC;EACtC,6CACI;EACJ,qCAAqC;EACrC,oCAAoC;EACpC,gCAAgC;EAChC,mCAAmC;EACnC,qCAAqC;EACrC,6BAA6B;EAC7B,2CACI;EACJ,mCAAmC;EACnC,6BAA6B;EAC7B,4BAA4B;EAC5B,iCAAiC;EACjC,8BAA8B;EAC9B,6BAA6B;EAC7B,6CACI;EACJ,sCAAsC;EACtC,8BAA8B;EAC9B,6BAA6B;EAC7B,8BAA8B;EAC9B,8CACI;EACJ,qCAAqC;EACrC,wCACI;EACJ,0CACI;EACJ,yCACI;EACJ,sCAAsC;EACtC,+BAA+B;EAC/B,4BAA4B;;AAIzB,IAAM,eAAoC;;;ArFlOjD,IAAM,iBAAiB;AAGvB,IAAM,yBAAyB;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ,IAAM,qBAAqB,CAAC,yBAAyB;AAGrD,IAAM,kCAAkC,oBAAI,IAAqB;EAC7D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH;AAgCD,IAAM,oBAAoB,CAAC,QAAwB;AAC/C,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AACzC,WAAO;EACX;AAEA,QAAM,UAAU,QAAQ,IAAI,KAAK,SAAS;AAE1C,SAAO,OAAO,YAAY,WAAW,UAAU;AACnD;AAGA,IAAM,cACF;AACJ,IAAM,iBAAiB,gBAAAC;AACvB,IAAM,aAAa,YAAAC;AAGnB,IAAM,qBAAqB,OAAO,QAAQ,YAAY,EAAE,SACpD,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC;AAOlD,IAAM,2BAA2B,OAG3B;EACF,KAAK,CAAA;EACL,SAAS,CAAA;EACT,aAAa,CAAA;EACb,QAAQ,CAAA;;AAIZ,IAAM,kBAAkB,CACpB,cACoB,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC;AAG9C,IAAM,gCAAgC,MAElC;AACA,QAAM,gBAAgB,yBAAwB;AAE9C,aAAW,CAAC,UAAU,UAAU,KAAK,oBAAoB;AACrD,UAAM,OAAO,WAAW,KAAK;AAC7B,UAAM,cAAc,KAAK;AAEzB,eAAW,cAAc,aAAa;AAClC,oBAAc,UAAU,EAAE,KAAK,QAAQ;IAC3C;EACJ;AAEA,SAAO;IACH,KAAK,gBAAgB,cAAc,GAAG;IACtC,SAAS,gBAAgB,cAAc,OAAO;IAC9C,aAAa,gBAAgB,cAAc,WAAW;IACtD,QAAQ,gBAAgB,cAAc,MAAM;;AAEpD;AAGA,IAAM,gBAAgB,CAClB,cAC6B;AAC7B,QAAM,QAAqC,CAAA;AAE3C,aAAW,YAAY,WAAW;AAC9B,UAAM,WAAW,QAAQ,EAAE,IAAI;EACnC;AAEA,SAAO;AACX;AAEA,IAAM,0BAA0B,8BAA6B;AAG7D,IAAM,kCAAkC,CACpC,eAIG;EACH,eAAe,UAAU,OAAO,CAAC,aAC7B,gCAAgC,IAAI,QAAQ,CAAC;EAEjD,mBAAmB,UAAU,OACzB,CAAC,aAAa,CAAC,gCAAgC,IAAI,QAAQ,CAAC;;AAKpE,IAAM,qBAAqB,CACvB,YACAC,YACqB;AACrB,QAAM,aAAa,4BAA4B,UAAU,EAAE;AAC3D,QAAM,EAAE,eAAe,kBAAiB,IACpC,gCAAgC,wBAAwB,UAAU,CAAC;AACvE,QAAM,eAAqC;IACvC;MACI,OAAO,CAAC,GAAG,sBAAsB;MACjC,UAAU;MACV,MAAM,GAAG,UAAU;MACnB,SAAS;QACL,SAASA;QACT,UAAU;;MAEd,OAAO,cAAc,iBAAiB;;;AAI9C,MAAI,cAAc,SAAS,GAAG;AAC1B,iBAAa,KAAK;MACd,OAAO,CAAC,GAAG,kBAAkB;MAC7B,UAAU;MACV,MAAM,GAAG,UAAU;MACnB,SAAS;QACL,SAASA;QACT,MAAM;;MAEV,OAAO,cAAc,aAAa;KACrC;EACL;AAEA,SAAO;AACX;AAGA,IAAM,SAAgC;EAClC,SAAS,CAAA;EACT,MAAM;IACF,MAAM;IACN,WAAW;IACX,SAAS,kBAAkB,eAAW;;EAE1C,YAAY,CAAA;EACZ,OAAO;;AAGX,OAAO,UAAU;EACb,KAAK,mBAAmB,OAAO,MAAM;EACrC,SAAS,mBAAmB,WAAW,MAAM;EAC7C,aAAa,mBAAmB,eAAe,MAAM;EACrD,QAAQ,mBAAmB,UAAU,MAAM;;AAG/C,IAAA,iBAAe;",
|
|
6
|
+
"names": ["basename", "fs", "path", "path", "fs", "path", "fs", "path", "normalizeRelativeFilePath", "fs", "path", "normalizeRelativeFilePath", "fs", "path", "normalizeRelativeFilePath", "frontmatter", "timeout", "path", "basename", "cwd", "cwd", "fs", "path", "path", "basename", "env", "VALID_BOOLEAN_FIELD_VALUES", "INLINE_LIST_LITERAL_PATTERN", "formatToolsValue", "markdown", "json", "plugin"]
|
|
7
|
+
}
|