@danmoisan/drm-copilot-mcp 0.0.1
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/LICENSE +21 -0
- package/README.md +50 -0
- package/out/mcp-server.js +17323 -0
- package/package.json +36 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/MEMORY.md +3 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_repo_root_is_source_of_truth.md +11 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_vsce_verify_package_location.md +19 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/project_extension_location.md +11 -0
- package/resources/claude-customizations/.claude/agent-memory/prd-feature/MEMORY.md +1 -0
- package/resources/claude-customizations/.claude/agent-memory/prd-feature/project_push_down_pattern.md +13 -0
- package/resources/claude-customizations/.claude/agent-memory/task-researcher/MEMORY.md +3 -0
- package/resources/claude-customizations/.claude/agent-memory/task-researcher/project_push_down_claude_dir.md +11 -0
- package/resources/claude-customizations/.claude/agents/atomic-executor.md +135 -0
- package/resources/claude-customizations/.claude/agents/atomic-planner.md +71 -0
- package/resources/claude-customizations/.claude/agents/csharp-typed-engineer.md +69 -0
- package/resources/claude-customizations/.claude/agents/epic-review.md +40 -0
- package/resources/claude-customizations/.claude/agents/feature-review.md +136 -0
- package/resources/claude-customizations/.claude/agents/orchestrator.md +83 -0
- package/resources/claude-customizations/.claude/agents/powershell-typed-engineer.md +80 -0
- package/resources/claude-customizations/.claude/agents/prd-feature.md +42 -0
- package/resources/claude-customizations/.claude/agents/python-typed-engineer.md +72 -0
- package/resources/claude-customizations/.claude/agents/staged-review.md +41 -0
- package/resources/claude-customizations/.claude/agents/status-updater.md +41 -0
- package/resources/claude-customizations/.claude/agents/task-researcher.md +81 -0
- package/resources/claude-customizations/.claude/agents/typescript-engineer.md +24 -0
- package/resources/claude-customizations/.claude/hooks/check-powershell-test-purity.ps1 +111 -0
- package/resources/claude-customizations/.claude/hooks/check-python-test-purity.ps1 +146 -0
- package/resources/claude-customizations/.claude/hooks/enforce-evidence-locations.ps1 +150 -0
- package/resources/claude-customizations/.claude/hooks/enforce-powershell-batch-budget.ps1 +238 -0
- package/resources/claude-customizations/.claude/hooks/enforce-promotion-mcp-only.ps1 +147 -0
- package/resources/claude-customizations/.claude/hooks/enforce-python-batch-budget.ps1 +235 -0
- package/resources/claude-customizations/.claude/hooks/validate-bash.ps1 +69 -0
- package/resources/claude-customizations/.claude/hooks/validate-executor-output.ps1 +296 -0
- package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage.ps1 +389 -0
- package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output.ps1 +141 -0
- package/resources/claude-customizations/.claude/hooks/validate-planner-output.ps1 +288 -0
- package/resources/claude-customizations/.claude/hooks/validate-required-artifact-output.ps1 +171 -0
- package/resources/claude-customizations/.claude/hooks/validate-task-researcher-output.ps1 +142 -0
- package/resources/claude-customizations/.claude/rules/csharp.md +62 -0
- package/resources/claude-customizations/.claude/rules/general-code-change.md +71 -0
- package/resources/claude-customizations/.claude/rules/general-unit-test.md +60 -0
- package/resources/claude-customizations/.claude/rules/powershell.md +97 -0
- package/resources/claude-customizations/.claude/rules/python-suppressions.md +143 -0
- package/resources/claude-customizations/.claude/rules/python.md +99 -0
- package/resources/claude-customizations/.claude/rules/self-explanatory-code-commenting.md +97 -0
- package/resources/claude-customizations/.claude/rules/tonality.md +80 -0
- package/resources/claude-customizations/.claude/rules/typescript-suppressions.md +66 -0
- package/resources/claude-customizations/.claude/rules/typescript.md +45 -0
- package/resources/claude-customizations/.claude/settings.json +144 -0
- package/resources/claude-customizations/.claude/skills/acceptance-criteria-tracking/SKILL.md +102 -0
- package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +189 -0
- package/resources/claude-customizations/.claude/skills/commit-message/SKILL.md +65 -0
- package/resources/claude-customizations/.claude/skills/csharp-change-budget-router/SKILL.md +90 -0
- package/resources/claude-customizations/.claude/skills/csharp-orchestration-state-machine/SKILL.md +58 -0
- package/resources/claude-customizations/.claude/skills/csharp-qa-gate/SKILL.md +77 -0
- package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +164 -0
- package/resources/claude-customizations/.claude/skills/execute-hard-lock/SKILL.md +82 -0
- package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +115 -0
- package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +167 -0
- package/resources/claude-customizations/.claude/skills/fill-feature-docs/SKILL.md +22 -0
- package/resources/claude-customizations/.claude/skills/invoke-csharp-engineer/SKILL.md +64 -0
- package/resources/claude-customizations/.claude/skills/invoke-powershell-engineer/SKILL.md +65 -0
- package/resources/claude-customizations/.claude/skills/invoke-python-engineer/SKILL.md +64 -0
- package/resources/claude-customizations/.claude/skills/make-skill-template/SKILL.md +147 -0
- package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +132 -0
- package/resources/claude-customizations/.claude/skills/policy-audit-template-usage/SKILL.md +49 -0
- package/resources/claude-customizations/.claude/skills/policy-compliance-order/SKILL.md +40 -0
- package/resources/claude-customizations/.claude/skills/powershell-change-budget-router/SKILL.md +49 -0
- package/resources/claude-customizations/.claude/skills/powershell-orchestration-state-machine/SKILL.md +58 -0
- package/resources/claude-customizations/.claude/skills/powershell-qa-gate/SKILL.md +77 -0
- package/resources/claude-customizations/.claude/skills/pr-author/SKILL.md +50 -0
- package/resources/claude-customizations/.claude/skills/pr-base-branch-merge-base/SKILL.md +56 -0
- package/resources/claude-customizations/.claude/skills/pr-context-artifacts/SKILL.md +30 -0
- package/resources/claude-customizations/.claude/skills/python-change-budget-router/SKILL.md +79 -0
- package/resources/claude-customizations/.claude/skills/python-qa-gate/SKILL.md +77 -0
- package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +40 -0
- package/resources/claude-customizations/.claude/skills/research-issue/SKILL.md +67 -0
- package/resources/claude-customizations/.claude/skills/review-epic/SKILL.md +21 -0
- package/resources/claude-customizations/.claude/skills/review-feature/SKILL.md +25 -0
- package/resources/claude-customizations/.claude/skills/review-staged/SKILL.md +21 -0
- package/resources/claude-customizations/.claude/skills/skill-canonical-location-audit/SKILL.md +49 -0
- package/resources/claude-customizations/.claude/skills/translate-copilot-to-claude/SKILL.md +295 -0
- package/resources/claude-customizations/.claude/skills/update-status/SKILL.md +21 -0
- package/resources/claude-dir-customizations/.mcp.json +8 -0
- package/resources/codex-and-agents-customizations/.agents/README.md +86 -0
- package/resources/codex-and-agents-customizations/.agents/skills/README.md +49 -0
- package/resources/codex-and-agents-customizations/.agents/skills/acceptance-criteria-tracking/SKILL.md +107 -0
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-executor/SKILL.md +73 -0
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +194 -0
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +87 -0
- package/resources/codex-and-agents-customizations/.agents/skills/commit-message/SKILL.md +70 -0
- package/resources/codex-and-agents-customizations/.agents/skills/commit-message-conventions/SKILL.md +95 -0
- package/resources/codex-and-agents-customizations/.agents/skills/csharp/SKILL.md +67 -0
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-change-budget-router/SKILL.md +94 -0
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-orchestration-state-machine/SKILL.md +64 -0
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +82 -0
- package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +168 -0
- package/resources/codex-and-agents-customizations/.agents/skills/execute-hard-lock/SKILL.md +88 -0
- package/resources/codex-and-agents-customizations/.agents/skills/feature-promotion-lifecycle/SKILL.md +129 -0
- package/resources/codex-and-agents-customizations/.agents/skills/feature-review/SKILL.md +106 -0
- package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +181 -0
- package/resources/codex-and-agents-customizations/.agents/skills/fill-feature-docs/SKILL.md +27 -0
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-csharp-engineer/SKILL.md +73 -0
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-powershell-engineer/SKILL.md +74 -0
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-python-engineer/SKILL.md +73 -0
- package/resources/codex-and-agents-customizations/.agents/skills/make-skill-template/SKILL.md +152 -0
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +143 -0
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +317 -0
- package/resources/codex-and-agents-customizations/.agents/skills/policy-audit-template-usage/SKILL.md +53 -0
- package/resources/codex-and-agents-customizations/.agents/skills/policy-compliance-order/SKILL.md +49 -0
- package/resources/codex-and-agents-customizations/.agents/skills/powershell/SKILL.md +102 -0
- package/resources/codex-and-agents-customizations/.agents/skills/powershell-change-budget-router/SKILL.md +53 -0
- package/resources/codex-and-agents-customizations/.agents/skills/powershell-orchestration-state-machine/SKILL.md +64 -0
- package/resources/codex-and-agents-customizations/.agents/skills/powershell-qa-gate/SKILL.md +83 -0
- package/resources/codex-and-agents-customizations/.agents/skills/pr-author/SKILL.md +55 -0
- package/resources/codex-and-agents-customizations/.agents/skills/pr-authoring/SKILL.md +124 -0
- package/resources/codex-and-agents-customizations/.agents/skills/pr-base-branch-merge-base/SKILL.md +60 -0
- package/resources/codex-and-agents-customizations/.agents/skills/pr-context-artifacts/SKILL.md +34 -0
- package/resources/codex-and-agents-customizations/.agents/skills/python/SKILL.md +104 -0
- package/resources/codex-and-agents-customizations/.agents/skills/python-change-budget-router/SKILL.md +84 -0
- package/resources/codex-and-agents-customizations/.agents/skills/python-qa-gate/SKILL.md +82 -0
- package/resources/codex-and-agents-customizations/.agents/skills/python-suppressions/SKILL.md +148 -0
- package/resources/codex-and-agents-customizations/.agents/skills/remediation-handoff-atomic-planner/SKILL.md +49 -0
- package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/SKILL.md +142 -0
- package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/agents/openai.yaml +5 -0
- package/resources/codex-and-agents-customizations/.agents/skills/research-issue/SKILL.md +72 -0
- package/resources/codex-and-agents-customizations/.agents/skills/review-epic/SKILL.md +26 -0
- package/resources/codex-and-agents-customizations/.agents/skills/review-feature/SKILL.md +30 -0
- package/resources/codex-and-agents-customizations/.agents/skills/review-staged/SKILL.md +26 -0
- package/resources/codex-and-agents-customizations/.agents/skills/self-explanatory-code-commenting/SKILL.md +102 -0
- package/resources/codex-and-agents-customizations/.agents/skills/skill-canonical-location-audit/SKILL.md +52 -0
- package/resources/codex-and-agents-customizations/.agents/skills/translate-copilot-to-claude/SKILL.md +317 -0
- package/resources/codex-and-agents-customizations/.agents/skills/typescript/SKILL.md +50 -0
- package/resources/codex-and-agents-customizations/.agents/skills/typescript-suppressions/SKILL.md +71 -0
- package/resources/codex-and-agents-customizations/.agents/skills/update-status/SKILL.md +26 -0
- package/resources/codex-and-agents-customizations/.codex/agents/5.1-beast-adjusted.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/5.1-thinking-beast-mode-adjusted.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/api-architect.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +151 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +93 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planning.toml +24 -0
- package/resources/codex-and-agents-customizations/.codex/agents/commentary-remediation.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/commit-steward.toml +20 -0
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-executor.toml +24 -0
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-planning.toml +25 -0
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-orchestrator.toml +56 -0
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer.toml +97 -0
- package/resources/codex-and-agents-customizations/.codex/agents/epic-review.toml +52 -0
- package/resources/codex-and-agents-customizations/.codex/agents/expert-nextjs-developer.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/expert-react-frontend-engineer.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +149 -0
- package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer.toml +60 -0
- package/resources/codex-and-agents-customizations/.codex/agents/gpt-5-beast-mode.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/hlbpa.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/mentor.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator.toml +121 -0
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-executor.toml +24 -0
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-planning.toml +25 -0
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-di-unit-test-engineer.toml +24 -0
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-orchestrator.toml +56 -0
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer.toml +108 -0
- package/resources/codex-and-agents-customizations/.codex/agents/pr-author.toml +26 -0
- package/resources/codex-and-agents-customizations/.codex/agents/prd-feature.toml +53 -0
- package/resources/codex-and-agents-customizations/.codex/agents/prd.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/pytest-unit-test-coding.toml +24 -0
- package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-executor.toml +24 -0
- package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-planning.toml +25 -0
- package/resources/codex-and-agents-customizations/.codex/agents/python-execution-only-typed.toml +24 -0
- package/resources/codex-and-agents-customizations/.codex/agents/python-orchestrator.toml +54 -0
- package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer.toml +100 -0
- package/resources/codex-and-agents-customizations/.codex/agents/staged-review.toml +53 -0
- package/resources/codex-and-agents-customizations/.codex/agents/status-updater.toml +53 -0
- package/resources/codex-and-agents-customizations/.codex/agents/task-researcher.toml +103 -0
- package/resources/codex-and-agents-customizations/.codex/agents/tdd-green.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/tdd-red.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/tdd-refactor.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/agents/typescript-engineer.toml +48 -0
- package/resources/codex-and-agents-customizations/.codex/agents/voidbeast-gpt41enhanced.toml +23 -0
- package/resources/codex-and-agents-customizations/.codex/codex-web-setup.plan.md +26 -0
- package/resources/codex-and-agents-customizations/.codex/codex-web-setup.sh +384 -0
- package/resources/codex-and-agents-customizations/.codex/config.toml +137 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/check-powershell-test-purity.ps1 +113 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/check-python-test-purity.ps1 +149 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-evidence-locations.ps1 +153 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-powershell-batch-budget.ps1 +241 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +150 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-python-batch-budget.ps1 +238 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/validate-bash.ps1 +72 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +265 -0
- package/resources/codex-and-agents-customizations/.codex/prompts/feature-review-remediate.md +10 -0
- package/resources/codex-and-agents-customizations/.codex/prompts/generate-commit-message-repo.md +11 -0
- package/resources/codex-and-agents-customizations/.codex/prompts/generate-pr.md +15 -0
- package/resources/codex-and-agents-customizations/.codex/prompts/orchestrate-work.md +22 -0
- package/resources/codex-and-agents-customizations/AGENTS.md +317 -0
- package/resources/customizations/.github/agents/5.1-Beast-adjusted.agent.md +181 -0
- package/resources/customizations/.github/agents/5.1-Thinking-Beast-Mode-adjusted.agent.md +361 -0
- package/resources/customizations/.github/agents/Powershell DI Unit Test Engineer.agent.md +192 -0
- package/resources/customizations/.github/agents/api-architect.agent.md +40 -0
- package/resources/customizations/.github/agents/atomic_executor.agent.md +251 -0
- package/resources/customizations/.github/agents/atomic_planning.agent.md +658 -0
- package/resources/customizations/.github/agents/commentary-remediation.agent.md +35 -0
- package/resources/customizations/.github/agents/commit-steward.agent.md +200 -0
- package/resources/customizations/.github/agents/csharp-atomic-executor.agent.md +288 -0
- package/resources/customizations/.github/agents/csharp-atomic-planning.agent.md +354 -0
- package/resources/customizations/.github/agents/csharp-orchestrator.agent.md +375 -0
- package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +285 -0
- package/resources/customizations/.github/agents/epic-review.agent.md +374 -0
- package/resources/customizations/.github/agents/expert-nextjs-developer.agent.md +477 -0
- package/resources/customizations/.github/agents/expert-react-frontend-engineer.agent.md +739 -0
- package/resources/customizations/.github/agents/feature-review.agent.md +49 -0
- package/resources/customizations/.github/agents/gpt-5-beast-mode.agent.md +116 -0
- package/resources/customizations/.github/agents/hlbpa.agent.md +219 -0
- package/resources/customizations/.github/agents/mentor.agent.md +32 -0
- package/resources/customizations/.github/agents/orchestrator.agent.md +449 -0
- package/resources/customizations/.github/agents/powershell-atomic-executor.agent.md +287 -0
- package/resources/customizations/.github/agents/powershell-atomic-planning.agent.md +647 -0
- package/resources/customizations/.github/agents/powershell-orchestrator.agent.md +382 -0
- package/resources/customizations/.github/agents/powershell-typed-engineer.agent.md +293 -0
- package/resources/customizations/.github/agents/pr-author.agent.md +138 -0
- package/resources/customizations/.github/agents/prd-feature.agent.md +52 -0
- package/resources/customizations/.github/agents/prd.agent.md +202 -0
- package/resources/customizations/.github/agents/pytest-unit-test-coding.agent.md +202 -0
- package/resources/customizations/.github/agents/python-atomic-executor.agent.md +289 -0
- package/resources/customizations/.github/agents/python-atomic-planning.agent.md +429 -0
- package/resources/customizations/.github/agents/python-execution-only-typed.agent.md +217 -0
- package/resources/customizations/.github/agents/python-orchestrator.agent.md +380 -0
- package/resources/customizations/.github/agents/python-typed-engineer.agent.md +271 -0
- package/resources/customizations/.github/agents/staged-review.agent.md +246 -0
- package/resources/customizations/.github/agents/status_updater.agent.md +279 -0
- package/resources/customizations/.github/agents/task-researcher.agent.md +298 -0
- package/resources/customizations/.github/agents/tdd-green.agent.md +60 -0
- package/resources/customizations/.github/agents/tdd-red.agent.md +66 -0
- package/resources/customizations/.github/agents/tdd-refactor.agent.md +94 -0
- package/resources/customizations/.github/agents/typescript-engineer.agent.md +167 -0
- package/resources/customizations/.github/agents/voidbeast-gpt41enhanced.agent.md +230 -0
- package/resources/customizations/.github/codex/execute-hard-lock.prompt.md +105 -0
- package/resources/customizations/.github/codex/resume-hard-lock.prompt.md +92 -0
- package/resources/customizations/.github/copilot-instructions.md +7 -0
- package/resources/customizations/.github/instructions/csharp-code-change.instructions.md +184 -0
- package/resources/customizations/.github/instructions/csharp-unit-test.instructions.md +52 -0
- package/resources/customizations/.github/instructions/general-code-change.instructions.md +290 -0
- package/resources/customizations/.github/instructions/general-unit-test.instructions.md +106 -0
- package/resources/customizations/.github/instructions/github-actions-ci-cd-best-practices.instructions.md +607 -0
- package/resources/customizations/.github/instructions/github-actions.instructions.md +23 -0
- package/resources/customizations/.github/instructions/powershell-code-change.instructions.md +81 -0
- package/resources/customizations/.github/instructions/powershell-unit-test.instructions.md +69 -0
- package/resources/customizations/.github/instructions/python-code-change.instructions.md +232 -0
- package/resources/customizations/.github/instructions/python-suppressions.instructions.md +609 -0
- package/resources/customizations/.github/instructions/python-unit-test.instructions.md +71 -0
- package/resources/customizations/.github/instructions/self-explanatory-code-commenting.instructions.md +238 -0
- package/resources/customizations/.github/instructions/tonality.instructions.md +133 -0
- package/resources/customizations/.github/instructions/typescript-code-change.instructions.md +203 -0
- package/resources/customizations/.github/instructions/typescript-suppressions.instructions.md +157 -0
- package/resources/customizations/.github/instructions/typescript-unit-test.instructions.md +112 -0
- package/resources/customizations/.github/prompts/add-educational-comments.prompt.md +129 -0
- package/resources/customizations/.github/prompts/breakdown-bug-prd.prompt.md +29 -0
- package/resources/customizations/.github/prompts/breakdown-epic-arch.prompt.md +66 -0
- package/resources/customizations/.github/prompts/breakdown-epic-pm.prompt.md +58 -0
- package/resources/customizations/.github/prompts/breakdown-feature-implementation.prompt.md +128 -0
- package/resources/customizations/.github/prompts/breakdown-feature-prd.prompt.md +61 -0
- package/resources/customizations/.github/prompts/code-exemplars-blueprint-generator.prompt.md +126 -0
- package/resources/customizations/.github/prompts/drafts/create-github-issues-feature-from-implementation-plan.prompt.md +28 -0
- package/resources/customizations/.github/prompts/drafts/create-implementation-plan.prompt.md +158 -0
- package/resources/customizations/.github/prompts/drafts/create-technical-spike.prompt.md +231 -0
- package/resources/customizations/.github/prompts/drafts/potential-feature-prd.prompt.md +19 -0
- package/resources/customizations/.github/prompts/drafts/update-implementation-plan.prompt.md +158 -0
- package/resources/customizations/.github/prompts/execute-plan-template.md +21 -0
- package/resources/customizations/.github/prompts/export-chat.prompt.md +7 -0
- package/resources/customizations/.github/prompts/fillout-prd-feature.prompt.md +46 -0
- package/resources/customizations/.github/prompts/generate-atomic-plan.prompt.md +96 -0
- package/resources/customizations/.github/prompts/generate-commit-message-repo.prompt.md +108 -0
- package/resources/customizations/.github/prompts/generate-pr.prompt.md +151 -0
- package/resources/customizations/.github/prompts/javascript-typescript-jest.prompt.md +44 -0
- package/resources/customizations/.github/prompts/orchestrate-csharp-work.prompt.md +66 -0
- package/resources/customizations/.github/prompts/orchestrate-powershell-work.prompt.md +50 -0
- package/resources/customizations/.github/prompts/orchestrate-python-work.prompt.md +50 -0
- package/resources/customizations/.github/prompts/orchestrate-work.prompt.md +66 -0
- package/resources/customizations/.github/prompts/remediate-comments.prompt.md +53 -0
- package/resources/customizations/.github/prompts/research-issue.prompt.md +125 -0
- package/resources/customizations/.github/prompts/review-epic.prompt.md +94 -0
- package/resources/customizations/.github/prompts/review-feature.prompt.md +130 -0
- package/resources/customizations/.github/prompts/review-staged.prompt.md +43 -0
- package/resources/customizations/.github/prompts/update_status.prompt.md +68 -0
- package/resources/customizations/.github/skills/README.md +26 -0
- package/resources/customizations/.github/skills/acceptance-criteria-tracking/SKILL.md +102 -0
- package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +174 -0
- package/resources/customizations/.github/skills/csharp-change-budget-router/SKILL.md +48 -0
- package/resources/customizations/.github/skills/csharp-orchestration-state-machine/SKILL.md +57 -0
- package/resources/customizations/.github/skills/evidence-and-timestamp-conventions/SKILL.md +135 -0
- package/resources/customizations/.github/skills/feature-promotion-lifecycle/SKILL.md +121 -0
- package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +153 -0
- package/resources/customizations/.github/skills/make-skill-template/SKILL.md +147 -0
- package/resources/customizations/.github/skills/policy-audit-template-usage/SKILL.md +48 -0
- package/resources/customizations/.github/skills/policy-compliance-order/SKILL.md +37 -0
- package/resources/customizations/.github/skills/powershell-change-budget-router/SKILL.md +48 -0
- package/resources/customizations/.github/skills/powershell-orchestration-state-machine/SKILL.md +57 -0
- package/resources/customizations/.github/skills/pr-base-branch-merge-base/SKILL.md +55 -0
- package/resources/customizations/.github/skills/pr-context-artifacts/SKILL.md +29 -0
- package/resources/customizations/.github/skills/remediation-handoff-atomic-planner/SKILL.md +39 -0
- package/resources/customizations/.github/skills/skill-canonical-location-audit/SKILL.md +48 -0
- package/resources/feature-templates/bug/plan.yyyy-MM-ddTHH-mm.md +44 -0
- package/resources/feature-templates/bug/potential_bug.md +59 -0
- package/resources/feature-templates/bug/spec.md +99 -0
- package/resources/feature-templates/epic/initiative.md +43 -0
- package/resources/feature-templates/feature/plan.yyyy-MM-ddTHH-mm.md +53 -0
- package/resources/feature-templates/feature/spec.md +66 -0
- package/resources/feature-templates/feature/user-story.md +42 -0
- package/resources/feature-templates/potential/template.md +33 -0
- package/resources/feature-templates/refactor/plan.yyyy-MM-ddTHH-mm.md +52 -0
- package/resources/feature-templates/refactor/spec.md +69 -0
- package/resources/powershell/PoshQC/PoshQC.Analyzer.psm1 +254 -0
- package/resources/powershell/PoshQC/PoshQC.FileDiscovery.psm1 +138 -0
- package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +409 -0
- package/resources/powershell/PoshQC/PoshQC.psd1 +31 -0
- package/resources/powershell/PoshQC/PoshQC.psm1 +101 -0
- package/resources/powershell/PoshQC/README.md +80 -0
- package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +59 -0
- package/resources/powershell/PoshQC/settings/pssa.settings.psd1 +55 -0
- package/resources/scripts/dev_tools/__init__.py +0 -0
- package/resources/scripts/dev_tools/agentic_sync.py +819 -0
- package/resources/scripts/dev_tools/codex_native_converter/__init__.py +11 -0
- package/resources/scripts/dev_tools/codex_native_converter/__main__.py +6 -0
- package/resources/scripts/dev_tools/codex_native_converter/cli.py +11 -0
- package/resources/scripts/dev_tools/new_active_feature_folder.py +79 -0
- package/resources/scripts/dev_tools/new_active_feature_folder_docs.py +268 -0
- package/resources/scripts/dev_tools/new_active_feature_folder_flow.py +366 -0
- package/resources/scripts/dev_tools/new_active_feature_folder_io.py +306 -0
- package/resources/scripts/dev_tools/new_active_feature_folder_markdown.py +252 -0
- package/resources/scripts/dev_tools/new_active_feature_folder_models.py +136 -0
- package/resources/scripts/dev_tools/new_potential_bug_entry.py +465 -0
- package/resources/scripts/dev_tools/potential_to_issue.py +421 -0
- package/resources/scripts/dev_tools/potential_to_issue_content.py +212 -0
- package/resources/scripts/dev_tools/pr_context/__init__.py +0 -0
- package/resources/scripts/dev_tools/pr_context/collector.py +619 -0
- package/resources/scripts/dev_tools/pr_context/feature_docs.py +349 -0
- package/resources/scripts/dev_tools/pr_context/git.py +153 -0
- package/resources/scripts/dev_tools/pr_context/github.py +549 -0
- package/resources/scripts/dev_tools/pr_context/models.py +198 -0
- package/resources/scripts/dev_tools/pr_context/render.py +342 -0
- package/resources/scripts/dev_tools/pr_context/render_feature_excerpts.py +256 -0
- package/resources/scripts/dev_tools/pr_context/render_pr_helpers.py +291 -0
- package/resources/scripts/dev_tools/pr_context/summary_helpers.py +386 -0
- package/resources/scripts/dev_tools/pr_context/verification_evidence.py +171 -0
- package/resources/scripts/dev_tools/prompt_mode_contract.py +152 -0
- package/resources/scripts/dev_tools/push_down_claude_customizations.py +188 -0
- package/resources/scripts/dev_tools/push_down_codex_and_agents_customizations.py +139 -0
- package/resources/scripts/dev_tools/push_down_copilot_customizations.py +504 -0
- package/resources/scripts/dev_tools/push_down_copilot_customizations_filesystem.py +217 -0
- package/resources/scripts/dev_tools/push_down_copilot_customizations_rewrites.py +293 -0
- package/resources/scripts/dev_tools/resolve_file_prompt.py +457 -0
- package/resources/scripts/dev_tools/resolve_hard_lock_prompt.py +444 -0
- package/resources/scripts/dev_tools/validate_orchestration_artifacts.py +554 -0
- package/resources/templates/codex_native_converter.py +35 -0
- package/resources/templates/collect_commit_context.py +212 -0
- package/resources/templates/collect_pr_context.py +74 -0
- package/resources/templates/hello_pwsh.ps1 +3 -0
- package/resources/templates/hello_python.py +11 -0
- package/resources/templates/link-parent-child.ps1 +480 -0
- package/resources/templates/new-claude-worktree-session.ps1 +232 -0
- package/resources/templates/new-potential-entry.ps1 +187 -0
- package/resources/templates/new_active_feature_folder.py +67 -0
- package/resources/templates/new_potential_bug_entry.py +54 -0
- package/resources/templates/policy_audit/AGENTS.md +117 -0
- package/resources/templates/policy_audit/code-review.yyyy-MM-ddTHH-mm.md +165 -0
- package/resources/templates/policy_audit/feature-audit.yyyy-MM-ddTHH-mm.md +124 -0
- package/resources/templates/policy_audit/policy-audit.yyyy-MM-ddTHH-mm.md +649 -0
- package/resources/templates/potential_to_issue.py +55 -0
- package/resources/templates/push_down_claude_customizations.py +188 -0
- package/resources/templates/push_down_codex_and_agents_customizations.py +95 -0
- package/resources/templates/push_down_copilot_customizations.py +124 -0
- package/resources/templates/resolve_atomic_plan_prompt.py +75 -0
- package/resources/templates/resolve_hard_lock_prompt.py +65 -0
- package/resources/templates/run-poshqc-analyze-autofix.ps1 +16 -0
- package/resources/templates/run-poshqc-analyze.ps1 +26 -0
- package/resources/templates/run-poshqc-format.ps1 +26 -0
- package/resources/templates/run-poshqc-suite.ps1 +24 -0
- package/resources/templates/run-poshqc-test.ps1 +32 -0
- package/resources/templates/sync-agents-from-instructions.ps1 +400 -0
- package/resources/templates/validate_orchestration_artifacts.py +55 -0
- package/resources/templates/vscode-cli.helpers.ps1 +63 -0
package/resources/codex-and-agents-customizations/.codex/hooks/enforce-python-batch-budget.ps1
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Converted hook
|
|
2
|
+
# Review the generated hook behavior before enabling it.
|
|
3
|
+
|
|
4
|
+
<#
|
|
5
|
+
.SYNOPSIS
|
|
6
|
+
Pre-tool-use hook that enforces the Python per-batch change budget.
|
|
7
|
+
|
|
8
|
+
.DESCRIPTION
|
|
9
|
+
This script is invoked by the Claude Code PreToolUse hook before any Write or Edit
|
|
10
|
+
operation. When the target file is a Python file, it classifies the file as either
|
|
11
|
+
production or test and checks the running count against the per-batch cap:
|
|
12
|
+
- 3 production .py files per batch
|
|
13
|
+
- 3 test .py files per batch
|
|
14
|
+
|
|
15
|
+
A "batch" is scoped to the current Claude Code session. The running count is
|
|
16
|
+
persisted under .claude/state/python-batch-budget.<session_id>.json. Only distinct
|
|
17
|
+
file paths are counted; repeated edits to the same file consume one slot.
|
|
18
|
+
|
|
19
|
+
Test files are those matching:
|
|
20
|
+
- tests/**/*.py
|
|
21
|
+
- test_*.py
|
|
22
|
+
|
|
23
|
+
All other .py files are treated as production files. Non-Python paths pass through.
|
|
24
|
+
|
|
25
|
+
The cap may be overridden per session by setting the environment variable
|
|
26
|
+
CLAUDE_PYTHON_BUDGET_PROD or CLAUDE_PYTHON_BUDGET_TEST to a positive integer before
|
|
27
|
+
the session starts, or by writing {"prodCap": N, "testCap": M} into the state file.
|
|
28
|
+
|
|
29
|
+
When the cap would be exceeded by a new file, the script emits a JSON response with
|
|
30
|
+
'decision': 'block' and exits 0. The session must explicitly reset the counter by
|
|
31
|
+
deleting the state file before starting a new batch. Files already counted are
|
|
32
|
+
always allowed through.
|
|
33
|
+
|
|
34
|
+
.NOTES
|
|
35
|
+
Compatible with PowerShell 7+.
|
|
36
|
+
#>
|
|
37
|
+
[CmdletBinding()]
|
|
38
|
+
param()
|
|
39
|
+
|
|
40
|
+
function Get-PythonBatchBudgetState {
|
|
41
|
+
[CmdletBinding()]
|
|
42
|
+
[OutputType([System.Collections.Specialized.OrderedDictionary])]
|
|
43
|
+
param(
|
|
44
|
+
[Parameter(Mandatory)]
|
|
45
|
+
[int] $ProdCap,
|
|
46
|
+
|
|
47
|
+
[Parameter(Mandatory)]
|
|
48
|
+
[int] $TestCap
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
[ordered]@{
|
|
52
|
+
prodCap = $ProdCap
|
|
53
|
+
testCap = $TestCap
|
|
54
|
+
prodFiles = @()
|
|
55
|
+
testFiles = @()
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function ConvertTo-PythonBatchBudgetState {
|
|
60
|
+
[CmdletBinding()]
|
|
61
|
+
[OutputType([System.Collections.Specialized.OrderedDictionary])]
|
|
62
|
+
param(
|
|
63
|
+
[Parameter(Mandatory)]
|
|
64
|
+
$InputObject,
|
|
65
|
+
|
|
66
|
+
[Parameter(Mandatory)]
|
|
67
|
+
[int] $ProdCap,
|
|
68
|
+
|
|
69
|
+
[Parameter(Mandatory)]
|
|
70
|
+
[int] $TestCap
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
$state = Get-PythonBatchBudgetState -ProdCap $ProdCap -TestCap $TestCap
|
|
74
|
+
if ($null -ne $InputObject.prodCap) { $state.prodCap = [int]$InputObject.prodCap }
|
|
75
|
+
if ($null -ne $InputObject.testCap) { $state.testCap = [int]$InputObject.testCap }
|
|
76
|
+
if ($null -ne $InputObject.prodFiles) { $state.prodFiles = @($InputObject.prodFiles) }
|
|
77
|
+
if ($null -ne $InputObject.testFiles) { $state.testFiles = @($InputObject.testFiles) }
|
|
78
|
+
|
|
79
|
+
return $state
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function Get-PythonBatchBudgetBlockDecision {
|
|
83
|
+
[CmdletBinding()]
|
|
84
|
+
[OutputType([System.Collections.Specialized.OrderedDictionary])]
|
|
85
|
+
param(
|
|
86
|
+
[Parameter(Mandatory)]
|
|
87
|
+
[string] $Reason,
|
|
88
|
+
|
|
89
|
+
[System.Collections.IDictionary] $State
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
$decision = [ordered]@{
|
|
93
|
+
decision = 'block'
|
|
94
|
+
reason = $Reason
|
|
95
|
+
}
|
|
96
|
+
if ($State) {
|
|
97
|
+
$decision.state = $State
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return $decision
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function Invoke-PythonBatchBudgetDecision {
|
|
104
|
+
[CmdletBinding()]
|
|
105
|
+
[OutputType([System.Collections.Specialized.OrderedDictionary])]
|
|
106
|
+
param(
|
|
107
|
+
[Parameter(Mandatory)]
|
|
108
|
+
[string] $FilePath,
|
|
109
|
+
|
|
110
|
+
[Parameter(Mandatory)]
|
|
111
|
+
[System.Collections.IDictionary] $State,
|
|
112
|
+
|
|
113
|
+
[Parameter(Mandatory)]
|
|
114
|
+
[string] $StateFile
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
$normalized = $FilePath -replace '\\', '/'
|
|
118
|
+
if ($normalized -notmatch '\.py$') {
|
|
119
|
+
return [ordered]@{ decision = 'allow'; state = $State; shouldWriteState = $false }
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
$isTestFile = ($normalized -match '(^|/)tests/.*\.py$') -or ($normalized -match '(^|/)test_[^/]+\.py$')
|
|
123
|
+
$targetList = if ($isTestFile) { @($State.testFiles) } else { @($State.prodFiles) }
|
|
124
|
+
$cap = if ($isTestFile) { [int]$State.testCap } else { [int]$State.prodCap }
|
|
125
|
+
$kind = if ($isTestFile) { 'test' } else { 'production' }
|
|
126
|
+
|
|
127
|
+
if ($targetList -contains $normalized) {
|
|
128
|
+
return [ordered]@{ decision = 'allow'; state = $State; shouldWriteState = $false }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if ($targetList.Count -ge $cap) {
|
|
132
|
+
$currentFiles = ($targetList -join ', ')
|
|
133
|
+
$kindUpper = $kind.ToUpperInvariant()
|
|
134
|
+
$reason = "Python per-batch budget exceeded: $kind file cap is $cap and is already full ($currentFiles). Requested new file: $normalized. Split the work into a new batch, raise the cap via CLAUDE_PYTHON_BUDGET_$kindUpper environment variable with approved scope, or reset the batch by deleting $StateFile."
|
|
135
|
+
return Get-PythonBatchBudgetBlockDecision -Reason $reason -State $State
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if ($isTestFile) {
|
|
139
|
+
$State.testFiles = @($State.testFiles) + @($normalized)
|
|
140
|
+
} else {
|
|
141
|
+
$State.prodFiles = @($State.prodFiles) + @($normalized)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return [ordered]@{ decision = 'allow'; state = $State; shouldWriteState = $true }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function Invoke-PythonBatchBudgetHook {
|
|
148
|
+
[CmdletBinding()]
|
|
149
|
+
[OutputType([System.Collections.Specialized.OrderedDictionary])]
|
|
150
|
+
param(
|
|
151
|
+
[string] $ToolInputRaw,
|
|
152
|
+
[string] $SessionId = 'default',
|
|
153
|
+
[string] $Root = (Get-Location).Path,
|
|
154
|
+
[int] $ProdCap = 3,
|
|
155
|
+
[int] $TestCap = 3,
|
|
156
|
+
[scriptblock] $TestPathExists = { param([string] $Path) Test-Path -Path $Path },
|
|
157
|
+
[scriptblock] $EnsureDirectory = { param([string] $Path) New-Item -ItemType Directory -Path $Path -Force | Out-Null },
|
|
158
|
+
[scriptblock] $ReadState = { param([string] $Path) Get-Content -Path $Path -Raw },
|
|
159
|
+
[scriptblock] $WriteState = {
|
|
160
|
+
param([string] $Path, [System.Collections.IDictionary] $State)
|
|
161
|
+
$State | ConvertTo-Json -Depth 5 | Set-Content -Path $Path -Encoding UTF8
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
if (-not $ToolInputRaw) {
|
|
166
|
+
return [ordered]@{ decision = 'allow' }
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
$toolInput = $ToolInputRaw | ConvertFrom-Json -ErrorAction Stop
|
|
171
|
+
} catch {
|
|
172
|
+
return Get-PythonBatchBudgetBlockDecision -Reason 'Python batch-budget hook received malformed JSON in CLAUDE_TOOL_INPUT.'
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
$filePath = $toolInput.file_path
|
|
176
|
+
if (-not $filePath) {
|
|
177
|
+
return [ordered]@{ decision = 'allow' }
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
$normalized = $filePath -replace '\\', '/'
|
|
181
|
+
if ($normalized -notmatch '\.py$') {
|
|
182
|
+
return [ordered]@{ decision = 'allow' }
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
$stateDir = Join-Path -Path $Root -ChildPath '.claude/state'
|
|
186
|
+
if (-not (& $TestPathExists $stateDir)) {
|
|
187
|
+
& $EnsureDirectory $stateDir
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
$stateFile = Join-Path -Path $stateDir -ChildPath ("python-batch-budget.$SessionId.json")
|
|
191
|
+
$state = Get-PythonBatchBudgetState -ProdCap $ProdCap -TestCap $TestCap
|
|
192
|
+
|
|
193
|
+
if (& $TestPathExists $stateFile) {
|
|
194
|
+
try {
|
|
195
|
+
$loaded = & $ReadState $stateFile | ConvertFrom-Json -ErrorAction Stop
|
|
196
|
+
$state = ConvertTo-PythonBatchBudgetState -InputObject $loaded -ProdCap $ProdCap -TestCap $TestCap
|
|
197
|
+
} catch {
|
|
198
|
+
Write-Verbose "Ignoring unreadable Python batch-budget state file '$stateFile': $($_.Exception.Message)"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
$decision = Invoke-PythonBatchBudgetDecision -FilePath $filePath -State $state -StateFile $stateFile
|
|
203
|
+
if ($decision.shouldWriteState) {
|
|
204
|
+
try {
|
|
205
|
+
& $WriteState $stateFile $decision.state
|
|
206
|
+
} catch {
|
|
207
|
+
Write-Verbose "Unable to write Python batch-budget state file '$stateFile': $($_.Exception.Message)"
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return $decision
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if ($MyInvocation.InvocationName -eq '.') {
|
|
215
|
+
return
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
$sessionId = $env:CLAUDE_SESSION_ID
|
|
219
|
+
if (-not $sessionId) {
|
|
220
|
+
$sessionId = 'default'
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
$prodCap = 3
|
|
224
|
+
$testCap = 3
|
|
225
|
+
if ($env:CLAUDE_PYTHON_BUDGET_PROD -match '^\d+$') {
|
|
226
|
+
$prodCap = [int]$env:CLAUDE_PYTHON_BUDGET_PROD
|
|
227
|
+
}
|
|
228
|
+
if ($env:CLAUDE_PYTHON_BUDGET_TEST -match '^\d+$') {
|
|
229
|
+
$testCap = [int]$env:CLAUDE_PYTHON_BUDGET_TEST
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
$decision = Invoke-PythonBatchBudgetHook -ToolInputRaw $env:CLAUDE_TOOL_INPUT -SessionId $sessionId -ProdCap $prodCap -TestCap $testCap
|
|
233
|
+
if ($decision.decision -eq 'block') {
|
|
234
|
+
$decision.Remove('state')
|
|
235
|
+
$decision | ConvertTo-Json -Compress | Write-Output
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
exit 0
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Converted hook
|
|
2
|
+
# Review the generated hook behavior before enabling it.
|
|
3
|
+
|
|
4
|
+
<#
|
|
5
|
+
.SYNOPSIS
|
|
6
|
+
Pre-tool-use hook for Claude Code that blocks dangerous Bash commands.
|
|
7
|
+
|
|
8
|
+
.DESCRIPTION
|
|
9
|
+
This script is invoked by the Claude Code PreToolUse hook before any Bash
|
|
10
|
+
command is executed. It reads the proposed command string from the
|
|
11
|
+
CLAUDE_TOOL_INPUT environment variable (JSON with a 'command' field) or
|
|
12
|
+
falls back to the first positional argument. If the command matches any
|
|
13
|
+
blocked pattern (destructive operations such as forced deletions, forced
|
|
14
|
+
pushes, or hard resets), the script exits with code 1 to prevent execution.
|
|
15
|
+
Safe commands exit with code 0.
|
|
16
|
+
|
|
17
|
+
.NOTES
|
|
18
|
+
Compatible with PowerShell 7+.
|
|
19
|
+
This script must not modify any state; it is a read-only validation gate.
|
|
20
|
+
#>
|
|
21
|
+
[CmdletBinding()]
|
|
22
|
+
param(
|
|
23
|
+
[Parameter(Position = 0, Mandatory = $false)]
|
|
24
|
+
[string]$CommandInput
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Blocked patterns that represent destructive or irreversible operations.
|
|
28
|
+
$blockedPatterns = @(
|
|
29
|
+
'rm -rf',
|
|
30
|
+
'git push --force',
|
|
31
|
+
'git push origin --force',
|
|
32
|
+
'Remove-Item -Recurse -Force',
|
|
33
|
+
'git reset --hard',
|
|
34
|
+
'git push -f'
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Resolve the command string from CLAUDE_TOOL_INPUT JSON or positional argument.
|
|
38
|
+
$commandToCheck = ''
|
|
39
|
+
|
|
40
|
+
if ($env:CLAUDE_TOOL_INPUT) {
|
|
41
|
+
try {
|
|
42
|
+
$parsed = $env:CLAUDE_TOOL_INPUT | ConvertFrom-Json
|
|
43
|
+
if ($parsed.command) {
|
|
44
|
+
$commandToCheck = $parsed.command
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
# If JSON parsing fails, treat the raw environment variable as the command.
|
|
49
|
+
$commandToCheck = $env:CLAUDE_TOOL_INPUT
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# Fall back to positional argument when the environment variable is absent or empty.
|
|
54
|
+
if (-not $commandToCheck -and $CommandInput) {
|
|
55
|
+
$commandToCheck = $CommandInput
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# When no command is provided, allow execution (nothing to validate).
|
|
59
|
+
if (-not $commandToCheck) {
|
|
60
|
+
exit 0
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
# Check the command against each blocked pattern.
|
|
64
|
+
foreach ($pattern in $blockedPatterns) {
|
|
65
|
+
if ($commandToCheck.Contains($pattern)) {
|
|
66
|
+
Write-Error "Blocked dangerous command pattern detected: '$pattern'"
|
|
67
|
+
exit 1
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# Command passed all checks.
|
|
72
|
+
exit 0
|
package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Converted hook
|
|
2
|
+
# Review the generated hook behavior before enabling it.
|
|
3
|
+
|
|
4
|
+
<#
|
|
5
|
+
.SYNOPSIS
|
|
6
|
+
SubagentStop hook that validates feature-review coverage verdicts against the branch diff.
|
|
7
|
+
|
|
8
|
+
.DESCRIPTION
|
|
9
|
+
Runs when the feature-review subagent terminates. Cross-checks the most recent
|
|
10
|
+
policy-audit.<timestamp>.md under docs/features/active/**/ against the PR context
|
|
11
|
+
summary at artifacts/pr_context.summary.txt and against existing coverage artifacts.
|
|
12
|
+
|
|
13
|
+
Validation rules:
|
|
14
|
+
- Enumerate languages that have changed files in the branch diff:
|
|
15
|
+
.ts / .tsx -> TypeScript
|
|
16
|
+
.py -> Python
|
|
17
|
+
.ps1 / .psm1 -> PowerShell
|
|
18
|
+
.cs -> CSharp
|
|
19
|
+
- For each language with one or more changed files, the policy audit must contain
|
|
20
|
+
a coverage-scoped row or line that states an explicit PASS or FAIL verdict for
|
|
21
|
+
that language. Scope-narrowing phrases on those rows are treated as validation
|
|
22
|
+
failures:
|
|
23
|
+
"informational only", "context only", "out of plan scope", "out of scope",
|
|
24
|
+
"not applicable", "N/A", "UNVERIFIED".
|
|
25
|
+
- If the coverage artifact for a language is present, repo-wide line coverage is
|
|
26
|
+
parsed and compared against the 80 percent floor. When repo-wide coverage is
|
|
27
|
+
below 80 percent and the audit does not carry a FAIL verdict on a coverage row
|
|
28
|
+
for that language, validation fails.
|
|
29
|
+
|
|
30
|
+
Coverage artifact paths by language:
|
|
31
|
+
TypeScript coverage/lcov.info (LCOV text)
|
|
32
|
+
Python artifacts/python/lcov.info (LCOV text)
|
|
33
|
+
PowerShell artifacts/pester/powershell-coverage.xml (JaCoCo XML)
|
|
34
|
+
CSharp artifacts/csharp/coverage.xml (JaCoCo XML)
|
|
35
|
+
|
|
36
|
+
On a validation failure the script writes a block decision to stdout and exits 1.
|
|
37
|
+
Read-only: inspects artifacts on disk and never modifies state.
|
|
38
|
+
|
|
39
|
+
.NOTES
|
|
40
|
+
Compatible with PowerShell 7+.
|
|
41
|
+
#>
|
|
42
|
+
[CmdletBinding()]
|
|
43
|
+
param()
|
|
44
|
+
|
|
45
|
+
$ErrorActionPreference = 'Stop'
|
|
46
|
+
|
|
47
|
+
function Get-RepoRoot {
|
|
48
|
+
$start = (Get-Location).Path
|
|
49
|
+
$current = $start
|
|
50
|
+
while ($true) {
|
|
51
|
+
if (Test-Path (Join-Path $current '.claude')) { return $current }
|
|
52
|
+
$parent = Split-Path $current -Parent
|
|
53
|
+
if (-not $parent -or $parent -eq $current) { break }
|
|
54
|
+
$current = $parent
|
|
55
|
+
}
|
|
56
|
+
return $start
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function Get-LatestPolicyAudit {
|
|
60
|
+
[OutputType([System.IO.FileInfo])]
|
|
61
|
+
param([string]$RepoRoot)
|
|
62
|
+
|
|
63
|
+
$activeRoot = Join-Path $RepoRoot 'docs/features/active'
|
|
64
|
+
if (-not (Test-Path $activeRoot)) { return $null }
|
|
65
|
+
|
|
66
|
+
Get-ChildItem -Path $activeRoot -Recurse -File -Filter 'policy-audit.*.md' |
|
|
67
|
+
Sort-Object LastWriteTime -Descending |
|
|
68
|
+
Select-Object -First 1
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function Get-ChangedLanguageSet {
|
|
72
|
+
[OutputType([System.Collections.Hashtable])]
|
|
73
|
+
param([string]$RepoRoot)
|
|
74
|
+
|
|
75
|
+
$prSummary = Join-Path $RepoRoot 'artifacts/pr_context.summary.txt'
|
|
76
|
+
$langs = [ordered]@{}
|
|
77
|
+
if (-not (Test-Path $prSummary)) { return $langs }
|
|
78
|
+
|
|
79
|
+
foreach ($line in Get-Content -Path $prSummary) {
|
|
80
|
+
if ($line -notmatch '^\s*-\s+(\S+)\s+\(\+\d+/-\d+\)\s*$') { continue }
|
|
81
|
+
$path = $matches[1]
|
|
82
|
+
$ext = [IO.Path]::GetExtension($path).ToLowerInvariant()
|
|
83
|
+
switch -Regex ($ext) {
|
|
84
|
+
'^\.(ts|tsx)$' { $langs['TypeScript'] = $true }
|
|
85
|
+
'^\.py$' { $langs['Python'] = $true }
|
|
86
|
+
'^\.(ps1|psm1)$' { $langs['PowerShell'] = $true }
|
|
87
|
+
'^\.cs$' { $langs['CSharp'] = $true }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return $langs
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function Get-LcovRepoCoverage {
|
|
94
|
+
[OutputType([Nullable[double]])]
|
|
95
|
+
param([string]$Path)
|
|
96
|
+
|
|
97
|
+
if (-not (Test-Path $Path)) { return $null }
|
|
98
|
+
|
|
99
|
+
$totalFound = 0
|
|
100
|
+
$totalHit = 0
|
|
101
|
+
foreach ($line in Get-Content -Path $Path) {
|
|
102
|
+
if ($line.StartsWith('LF:')) {
|
|
103
|
+
$totalFound += [int]($line.Substring(3))
|
|
104
|
+
}
|
|
105
|
+
elseif ($line.StartsWith('LH:')) {
|
|
106
|
+
$totalHit += [int]($line.Substring(3))
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if ($totalFound -le 0) { return $null }
|
|
110
|
+
return [math]::Round(($totalHit * 100.0) / $totalFound, 2)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function Get-JacocoRepoCoverage {
|
|
114
|
+
[OutputType([Nullable[double]])]
|
|
115
|
+
param([string]$Path)
|
|
116
|
+
|
|
117
|
+
if (-not (Test-Path $Path)) { return $null }
|
|
118
|
+
|
|
119
|
+
[xml]$doc = Get-Content -Path $Path -Raw
|
|
120
|
+
$counters = $doc.SelectNodes('//counter[@type="LINE"]')
|
|
121
|
+
if (-not $counters -or $counters.Count -eq 0) { return $null }
|
|
122
|
+
|
|
123
|
+
$missed = 0
|
|
124
|
+
$covered = 0
|
|
125
|
+
foreach ($counter in $counters) {
|
|
126
|
+
$missed += [int]$counter.missed
|
|
127
|
+
$covered += [int]$counter.covered
|
|
128
|
+
}
|
|
129
|
+
$total = $missed + $covered
|
|
130
|
+
if ($total -le 0) { return $null }
|
|
131
|
+
return [math]::Round(($covered * 100.0) / $total, 2)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function Get-LanguageRepoCoverage {
|
|
135
|
+
[OutputType([Nullable[double]])]
|
|
136
|
+
param(
|
|
137
|
+
[string]$RepoRoot,
|
|
138
|
+
[string]$Language
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
switch ($Language) {
|
|
142
|
+
'TypeScript' { return Get-LcovRepoCoverage -Path (Join-Path $RepoRoot 'coverage/lcov.info') }
|
|
143
|
+
'Python' { return Get-LcovRepoCoverage -Path (Join-Path $RepoRoot 'artifacts/python/lcov.info') }
|
|
144
|
+
'PowerShell' { return Get-JacocoRepoCoverage -Path (Join-Path $RepoRoot 'artifacts/pester/powershell-coverage.xml') }
|
|
145
|
+
'CSharp' { return Get-JacocoRepoCoverage -Path (Join-Path $RepoRoot 'artifacts/csharp/coverage.xml') }
|
|
146
|
+
}
|
|
147
|
+
return $null
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function Test-LanguageCoverageRow {
|
|
151
|
+
[OutputType([System.Collections.Hashtable])]
|
|
152
|
+
param(
|
|
153
|
+
[string]$AuditText,
|
|
154
|
+
[string]$Language,
|
|
155
|
+
[Nullable[double]]$RepoWidePct
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
$languageLabelMap = @{
|
|
159
|
+
'TypeScript' = @('TypeScript', 'typescript')
|
|
160
|
+
'Python' = @('Python', 'python', 'pytest')
|
|
161
|
+
'PowerShell' = @('PowerShell', 'powershell', 'pester')
|
|
162
|
+
'CSharp' = @('C#', 'CSharp', 'csharp', '\.NET', 'dotnet')
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
$labels = $languageLabelMap[$Language]
|
|
166
|
+
$labelPattern = '(?i)(' + (($labels | ForEach-Object { [regex]::Escape($_) }) -join '|') + ')'
|
|
167
|
+
|
|
168
|
+
$lines = $AuditText -split "`r?`n"
|
|
169
|
+
$languageLines = $lines | Where-Object { $_ -match $labelPattern }
|
|
170
|
+
|
|
171
|
+
if (-not $languageLines -or $languageLines.Count -eq 0) {
|
|
172
|
+
return @{
|
|
173
|
+
Ok = $false
|
|
174
|
+
Reason = "$Language has changed files on the branch but the policy-audit does not mention $Language."
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
$coverageLines = $languageLines | Where-Object { $_ -match '(?i)(coverage|lcov|line[s]?\s+hit|pester)' }
|
|
179
|
+
if (-not $coverageLines -or $coverageLines.Count -eq 0) {
|
|
180
|
+
return @{
|
|
181
|
+
Ok = $false
|
|
182
|
+
Reason = "$Language has changed files on the branch but no coverage-scoped row in the policy-audit mentions $Language."
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
$narrowingPattern = '(?i)(informational only|context only|out of plan scope|out of scope|not applicable|\bN/A\b|\bUNVERIFIED\b)'
|
|
187
|
+
$narrowing = $coverageLines | Where-Object { $_ -match $narrowingPattern }
|
|
188
|
+
if ($narrowing -and $narrowing.Count -gt 0) {
|
|
189
|
+
$first = ($narrowing | Select-Object -First 1).ToString().Trim()
|
|
190
|
+
return @{
|
|
191
|
+
Ok = $false
|
|
192
|
+
Reason = "$Language has changed files on the branch but a coverage-scoped row narrows scope: '$first'. Scope narrowing is not permitted for languages with changed files."
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
$verdictLines = $coverageLines | Where-Object { $_ -match '\b(PASS|FAIL)\b' }
|
|
197
|
+
if (-not $verdictLines -or $verdictLines.Count -eq 0) {
|
|
198
|
+
return @{
|
|
199
|
+
Ok = $false
|
|
200
|
+
Reason = "$Language coverage rows contain neither a PASS nor a FAIL verdict."
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if ($null -ne $RepoWidePct -and $RepoWidePct -lt 80.0) {
|
|
205
|
+
$failLines = $coverageLines | Where-Object { $_ -match '\bFAIL\b' }
|
|
206
|
+
if (-not $failLines -or $failLines.Count -eq 0) {
|
|
207
|
+
return @{
|
|
208
|
+
Ok = $false
|
|
209
|
+
Reason = ("{0} repo-wide coverage is {1}% (below the 80% floor) but the policy-audit contains no FAIL verdict on a coverage row for {0}." -f $Language, $RepoWidePct)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return @{ Ok = $true; Reason = $null }
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function Write-BlockDecision {
|
|
218
|
+
param([string]$Reason)
|
|
219
|
+
|
|
220
|
+
$payload = [ordered]@{
|
|
221
|
+
decision = 'block'
|
|
222
|
+
reason = $Reason
|
|
223
|
+
} | ConvertTo-Json -Compress
|
|
224
|
+
Write-Output $payload
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
try {
|
|
228
|
+
$repoRoot = Get-RepoRoot
|
|
229
|
+
$audit = Get-LatestPolicyAudit -RepoRoot $repoRoot
|
|
230
|
+
if (-not $audit) {
|
|
231
|
+
# No audit to validate. The existing SubagentStop artifact-presence hook covers this case.
|
|
232
|
+
exit 0
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
$auditText = Get-Content -Path $audit.FullName -Raw
|
|
236
|
+
$changedLanguages = Get-ChangedLanguageSet -RepoRoot $repoRoot
|
|
237
|
+
|
|
238
|
+
if ($changedLanguages.Count -eq 0) {
|
|
239
|
+
exit 0
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
$failures = [System.Collections.Generic.List[string]]::new()
|
|
243
|
+
|
|
244
|
+
foreach ($lang in $changedLanguages.Keys) {
|
|
245
|
+
$repoPct = Get-LanguageRepoCoverage -RepoRoot $repoRoot -Language $lang
|
|
246
|
+
$result = Test-LanguageCoverageRow -AuditText $auditText -Language $lang -RepoWidePct $repoPct
|
|
247
|
+
if (-not $result.Ok) {
|
|
248
|
+
$failures.Add($result.Reason)
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if ($failures.Count -gt 0) {
|
|
253
|
+
$header = "Feature-review coverage validation failed against branch diff."
|
|
254
|
+
$body = " - " + ($failures -join "`n - ")
|
|
255
|
+
$footer = "Audit file: $($audit.FullName)`nFix the policy-audit to carry an explicit PASS or FAIL verdict per language with changed files, and reflect repo-wide coverage below 80% as FAIL."
|
|
256
|
+
Write-BlockDecision -Reason ("{0}`n{1}`n{2}" -f $header, $body, $footer)
|
|
257
|
+
exit 1
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
exit 0
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
Write-BlockDecision -Reason ("Feature-review coverage validator error: {0}" -f $_.Exception.Message)
|
|
264
|
+
exit 1
|
|
265
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run feature review and, if needed, remediation planning with executor preflight
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
$feature-review
|
|
6
|
+
Use pr_context as authoritative if present and valid. Only fall back to an explicit base branch if pr_context is missing, stale, or ambiguous.
|
|
7
|
+
If remediation is required, explicitly spawn atomic-planner to create or revise the remediation plan.
|
|
8
|
+
Before atomic-planner finalizes the plan, it must explicitly spawn atomic-executor in preflight-validation-only mode against that same file.
|
|
9
|
+
If atomic-executor returns PREFLIGHT: REVISIONS REQUIRED, atomic-planner must revise the same file and repeat until PREFLIGHT: ALL CLEAR.
|
|
10
|
+
Only then finalize the remediation plan and report all generated artifacts.
|
package/resources/codex-and-agents-customizations/.codex/prompts/generate-commit-message-repo.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate a conventional commit message for the current repository by spawning commit-steward
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Spawn `commit-steward` to generate a single audit-quality conventional commit message for the current repository.
|
|
6
|
+
|
|
7
|
+
Use an explicitly supplied commit-context artifact as the primary input when one is provided.
|
|
8
|
+
If no explicit commit-context artifact is provided, prefer `artifacts/commit_context.txt` when that file exists in the workspace.
|
|
9
|
+
If no commit-context artifact is available, have `commit-steward` inspect staged changes directly and scope the message to staged changes only.
|
|
10
|
+
|
|
11
|
+
Return exactly one fenced `text` code block containing only the commit message.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate a GitHub-ready PR body from the canonical PR-context bundle by spawning pr-author
|
|
3
|
+
argument-hint: Optional notes or PR intent edits to apply while writing the PR body
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Spawn `pr-author` to generate a GitHub-ready pull request body.
|
|
7
|
+
|
|
8
|
+
Use only:
|
|
9
|
+
- the canonical PR-context bundle
|
|
10
|
+
- the additional context files enumerated inside that bundle
|
|
11
|
+
- any explicit user directives supplied with this prompt invocation
|
|
12
|
+
|
|
13
|
+
If the PR-context bundle is missing or stale, refresh it using the canonical mechanism before generating the PR body.
|
|
14
|
+
|
|
15
|
+
Return exactly one fenced `markdown` code block containing only the pull request message.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Route a request through budget-based orchestration and persist until the selected delivery path is complete
|
|
3
|
+
argument-hint: Provide objective, likely files, feature-or-bug hint, constraints, and whether small-path execution should stop after Phase 0 for manual bootstrap
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Spawn `orchestrator` to coordinate the current request from intake through completion.
|
|
7
|
+
|
|
8
|
+
Inputs to provide or infer:
|
|
9
|
+
- request summary and expected outcome
|
|
10
|
+
- likely affected production and test files, when known
|
|
11
|
+
- initial classification hint: `feature` or `bug`, when known
|
|
12
|
+
- constraints, preserved APIs, or forbidden changes
|
|
13
|
+
- whether small-path execution should stop after Phase 0 for manual bootstrap
|
|
14
|
+
|
|
15
|
+
Required behavior:
|
|
16
|
+
- estimate change budget first and choose the correct small or large path
|
|
17
|
+
- maintain and resume from the canonical orchestration checkpoint
|
|
18
|
+
- use migrated Codex subagents when available
|
|
19
|
+
- route host-specific lifecycle automation through the shared adapter rules
|
|
20
|
+
- continue until planning, execution, validation, and review are complete for the selected path, unless the request explicitly requires a manual-bootstrap pause
|
|
21
|
+
|
|
22
|
+
On completion, report the selected route, branch, key variables, `plan-path` when applicable, checkpoint path, created or updated artifact paths, and final readiness summary.
|