@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
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"""Filesystem abstractions for the push-down customization publisher.
|
|
2
|
+
|
|
3
|
+
Purpose:
|
|
4
|
+
Isolate the publisher's filesystem contract and real-disk adapter so the
|
|
5
|
+
orchestration module can stay focused on validation, rewriting, and summary
|
|
6
|
+
reporting.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING, Protocol
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PushDownFileSystem(Protocol):
|
|
18
|
+
"""
|
|
19
|
+
Define the filesystem operations required by the push-down publisher.
|
|
20
|
+
|
|
21
|
+
Purpose:
|
|
22
|
+
Provide a small, typed seam that keeps the core publisher logic
|
|
23
|
+
deterministic in tests while still allowing the production CLI to work
|
|
24
|
+
against the real filesystem.
|
|
25
|
+
|
|
26
|
+
Usage:
|
|
27
|
+
Pass `RealPushDownFileSystem` in production or a deterministic test
|
|
28
|
+
double in unit tests.
|
|
29
|
+
|
|
30
|
+
Flow:
|
|
31
|
+
The publisher validates the destination, enumerates source files, then
|
|
32
|
+
reads and writes text through this protocol.
|
|
33
|
+
|
|
34
|
+
Invariants / Constraints:
|
|
35
|
+
- `list_files()` returns files that are beneath the requested root.
|
|
36
|
+
- `is_dir()` and `is_file()` reflect the current filesystem state.
|
|
37
|
+
- `read_text()` and `write_text()` operate on UTF-8 repository text.
|
|
38
|
+
|
|
39
|
+
Side Effects:
|
|
40
|
+
Concrete implementations may touch the real filesystem.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def list_files(self, root: Path) -> list[Path]: ...
|
|
44
|
+
|
|
45
|
+
def is_dir(self, path: Path) -> bool: ...
|
|
46
|
+
|
|
47
|
+
def is_file(self, path: Path) -> bool: ...
|
|
48
|
+
|
|
49
|
+
def read_text(self, path: Path) -> str: ...
|
|
50
|
+
|
|
51
|
+
def write_text(self, path: Path, content: str) -> None: ...
|
|
52
|
+
|
|
53
|
+
def ensure_dir(self, path: Path) -> None: ...
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class RealPushDownFileSystem:
|
|
57
|
+
"""
|
|
58
|
+
Implement push-down filesystem operations against the real disk.
|
|
59
|
+
|
|
60
|
+
Purpose:
|
|
61
|
+
Provide the production filesystem behavior for source enumeration,
|
|
62
|
+
destination writes, and summary-artifact emission.
|
|
63
|
+
|
|
64
|
+
Usage:
|
|
65
|
+
Instantiated by `scripts.dev_tools.push_down_copilot_customizations`
|
|
66
|
+
when callers do not inject a test double.
|
|
67
|
+
|
|
68
|
+
Flow:
|
|
69
|
+
Uses `pathlib.Path` primitives for recursive enumeration and UTF-8 text
|
|
70
|
+
I/O.
|
|
71
|
+
|
|
72
|
+
Invariants / Constraints:
|
|
73
|
+
The scoped `.github` trees currently contain repository text content, so
|
|
74
|
+
this adapter reads and writes UTF-8 text.
|
|
75
|
+
|
|
76
|
+
Side Effects:
|
|
77
|
+
Reads from and writes to the real filesystem.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
def list_files(self, root: Path) -> list[Path]:
|
|
81
|
+
"""
|
|
82
|
+
Return all files beneath a root path in sorted order.
|
|
83
|
+
|
|
84
|
+
Purpose:
|
|
85
|
+
Preserve deterministic enumeration for summary artifacts and tests.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
root (Path): Root path to enumerate.
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
list[Path]: Sorted file paths beneath `root`.
|
|
92
|
+
|
|
93
|
+
Raises:
|
|
94
|
+
None.
|
|
95
|
+
|
|
96
|
+
Side Effects:
|
|
97
|
+
Reads directory metadata from disk.
|
|
98
|
+
"""
|
|
99
|
+
if not root.is_dir():
|
|
100
|
+
return []
|
|
101
|
+
|
|
102
|
+
files: list[Path] = []
|
|
103
|
+
# Collect files in stable order so summary artifacts remain deterministic.
|
|
104
|
+
for path in root.rglob("*"):
|
|
105
|
+
if path.is_file():
|
|
106
|
+
files.append(path)
|
|
107
|
+
return sorted(files)
|
|
108
|
+
|
|
109
|
+
def is_dir(self, path: Path) -> bool:
|
|
110
|
+
"""
|
|
111
|
+
Return whether the path is an existing directory.
|
|
112
|
+
|
|
113
|
+
Purpose:
|
|
114
|
+
Support destination validation without leaking `pathlib` directly
|
|
115
|
+
into the orchestration layer.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
path (Path): Path to inspect.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
bool: True when `path` exists and is a directory.
|
|
122
|
+
|
|
123
|
+
Raises:
|
|
124
|
+
None.
|
|
125
|
+
|
|
126
|
+
Side Effects:
|
|
127
|
+
Reads filesystem metadata.
|
|
128
|
+
"""
|
|
129
|
+
return path.is_dir()
|
|
130
|
+
|
|
131
|
+
def is_file(self, path: Path) -> bool:
|
|
132
|
+
"""
|
|
133
|
+
Return whether the path is an existing file.
|
|
134
|
+
|
|
135
|
+
Purpose:
|
|
136
|
+
Let the publisher classify writes as created versus overwritten.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
path (Path): Path to inspect.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
bool: True when `path` exists and is a file.
|
|
143
|
+
|
|
144
|
+
Raises:
|
|
145
|
+
None.
|
|
146
|
+
|
|
147
|
+
Side Effects:
|
|
148
|
+
Reads filesystem metadata.
|
|
149
|
+
"""
|
|
150
|
+
return path.is_file()
|
|
151
|
+
|
|
152
|
+
def read_text(self, path: Path) -> str:
|
|
153
|
+
"""
|
|
154
|
+
Read UTF-8 text from a file path.
|
|
155
|
+
|
|
156
|
+
Purpose:
|
|
157
|
+
Provide the production text-read primitive used by the publisher.
|
|
158
|
+
|
|
159
|
+
Args:
|
|
160
|
+
path (Path): File path to read.
|
|
161
|
+
|
|
162
|
+
Returns:
|
|
163
|
+
str: File content decoded as UTF-8.
|
|
164
|
+
|
|
165
|
+
Raises:
|
|
166
|
+
OSError: Propagated when the file cannot be read.
|
|
167
|
+
|
|
168
|
+
Side Effects:
|
|
169
|
+
Reads file contents from disk.
|
|
170
|
+
"""
|
|
171
|
+
return path.read_text(encoding="utf-8")
|
|
172
|
+
|
|
173
|
+
def write_text(self, path: Path, content: str) -> None:
|
|
174
|
+
"""
|
|
175
|
+
Write UTF-8 text to a file path.
|
|
176
|
+
|
|
177
|
+
Purpose:
|
|
178
|
+
Persist copied customization content and summary artifacts.
|
|
179
|
+
|
|
180
|
+
Args:
|
|
181
|
+
path (Path): Destination file path.
|
|
182
|
+
content (str): UTF-8 text to write.
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
None.
|
|
186
|
+
|
|
187
|
+
Raises:
|
|
188
|
+
OSError: Propagated when the file cannot be written.
|
|
189
|
+
|
|
190
|
+
Side Effects:
|
|
191
|
+
Creates parent directories and writes LF-normalized file content to
|
|
192
|
+
disk.
|
|
193
|
+
"""
|
|
194
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
195
|
+
path.write_text(content, encoding="utf-8", newline="\n")
|
|
196
|
+
|
|
197
|
+
def ensure_dir(self, path: Path) -> None:
|
|
198
|
+
"""
|
|
199
|
+
Ensure a directory exists.
|
|
200
|
+
|
|
201
|
+
Purpose:
|
|
202
|
+
Share one directory-creation primitive between destination writes
|
|
203
|
+
and artifact output.
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
path (Path): Directory path to create.
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
None.
|
|
210
|
+
|
|
211
|
+
Raises:
|
|
212
|
+
OSError: Propagated when the directory cannot be created.
|
|
213
|
+
|
|
214
|
+
Side Effects:
|
|
215
|
+
Creates the directory path on disk when needed.
|
|
216
|
+
"""
|
|
217
|
+
path.mkdir(parents=True, exist_ok=True)
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"""Reference rewrite helpers for the push-down customization publisher.
|
|
2
|
+
|
|
3
|
+
Purpose:
|
|
4
|
+
Keep command-reference normalization and rewrite catalog logic separate from
|
|
5
|
+
the publisher's orchestration flow so each module stays cohesive and easier
|
|
6
|
+
to test.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import re
|
|
12
|
+
from dataclasses import dataclass
|
|
13
|
+
|
|
14
|
+
TRAILING_PUNCTUATION = ".,;:!?)"
|
|
15
|
+
SCRIPT_REFERENCE_PATTERN = re.compile(
|
|
16
|
+
r"(?:(?:poetry\s+run\s+python\s+-m)\s+)?(?:\$\{workspaceFolder\}[\\/])?scripts(?:\.dev_tools\.[A-Za-z0-9_.]+|[\\/](?:dev_tools|dev-tools)[A-Za-z0-9_.\\/-]+)"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass(frozen=True, slots=True)
|
|
21
|
+
class RewriteTarget:
|
|
22
|
+
"""
|
|
23
|
+
Describe how a known script reference maps to a VS Code command.
|
|
24
|
+
|
|
25
|
+
Purpose:
|
|
26
|
+
Keep rewrite metadata explicit so implemented commands and placeholder
|
|
27
|
+
commands render the same stable textual command-reference format.
|
|
28
|
+
|
|
29
|
+
Usage:
|
|
30
|
+
Selected by normalized script-reference keys during text rewriting.
|
|
31
|
+
|
|
32
|
+
Flow:
|
|
33
|
+
A matched reference normalizes to `normalized_key`, then the target is
|
|
34
|
+
rendered through `render_command_reference()`.
|
|
35
|
+
|
|
36
|
+
Invariants / Constraints:
|
|
37
|
+
`command_id` values must match the extension's registered command IDs.
|
|
38
|
+
|
|
39
|
+
Side Effects:
|
|
40
|
+
None.
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
normalized_key (str): Canonical lookup key for a script reference.
|
|
44
|
+
command_id (str): VS Code command identifier.
|
|
45
|
+
title (str): User-facing command title.
|
|
46
|
+
script_reference (str): Original script reference documented by the
|
|
47
|
+
placeholder contract.
|
|
48
|
+
is_placeholder (bool): Whether the command intentionally remains a
|
|
49
|
+
placeholder.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
normalized_key: str
|
|
53
|
+
command_id: str
|
|
54
|
+
title: str
|
|
55
|
+
script_reference: str
|
|
56
|
+
is_placeholder: bool
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def build_rewrite_catalog() -> dict[str, RewriteTarget]:
|
|
60
|
+
"""
|
|
61
|
+
Build the command rewrite catalog for supported script references.
|
|
62
|
+
|
|
63
|
+
Purpose:
|
|
64
|
+
Keep the supported rewrite surface explicit and deterministic.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
None.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
dict[str, RewriteTarget]: Catalog keyed by normalized reference.
|
|
71
|
+
|
|
72
|
+
Raises:
|
|
73
|
+
None.
|
|
74
|
+
|
|
75
|
+
Side Effects:
|
|
76
|
+
None.
|
|
77
|
+
"""
|
|
78
|
+
targets = (
|
|
79
|
+
RewriteTarget(
|
|
80
|
+
normalized_key="scripts.dev_tools.pr_context.collector",
|
|
81
|
+
command_id="drmCopilotExtension.collectPrContext",
|
|
82
|
+
title="drm-copilot: Collect PR Context",
|
|
83
|
+
script_reference="scripts.dev_tools.pr_context.collector",
|
|
84
|
+
is_placeholder=False,
|
|
85
|
+
),
|
|
86
|
+
RewriteTarget(
|
|
87
|
+
normalized_key="scripts.dev_tools.new_active_feature_folder",
|
|
88
|
+
command_id="drmCopilotExtension.newActiveFeatureFolder",
|
|
89
|
+
title="drm-copilot: New Active Feature Folder",
|
|
90
|
+
script_reference="scripts.dev_tools.new_active_feature_folder",
|
|
91
|
+
is_placeholder=False,
|
|
92
|
+
),
|
|
93
|
+
RewriteTarget(
|
|
94
|
+
normalized_key="scripts.dev_tools.potential_to_issue",
|
|
95
|
+
command_id="drmCopilotExtension.potentialToIssue",
|
|
96
|
+
title="drm-copilot: Potential To Issue",
|
|
97
|
+
script_reference="scripts.dev_tools.potential_to_issue",
|
|
98
|
+
is_placeholder=False,
|
|
99
|
+
),
|
|
100
|
+
RewriteTarget(
|
|
101
|
+
normalized_key="scripts/dev_tools/new_potential_bug_entry.py",
|
|
102
|
+
command_id="drmCopilotExtension.newPotentialBugEntry",
|
|
103
|
+
title="drm-copilot: New Potential Bug Entry",
|
|
104
|
+
script_reference="scripts/dev_tools/new_potential_bug_entry.py",
|
|
105
|
+
is_placeholder=False,
|
|
106
|
+
),
|
|
107
|
+
RewriteTarget(
|
|
108
|
+
normalized_key="scripts/dev_tools/new-potential-entry.ps1",
|
|
109
|
+
command_id="drmCopilotExtension.newPotentialEntry",
|
|
110
|
+
title="drm-copilot: New Potential Entry",
|
|
111
|
+
script_reference="scripts/dev-tools/new-potential-entry.ps1",
|
|
112
|
+
is_placeholder=False,
|
|
113
|
+
),
|
|
114
|
+
RewriteTarget(
|
|
115
|
+
normalized_key="scripts.dev_tools.push_down_copilot_customizations",
|
|
116
|
+
command_id="drmCopilotExtension.pushDownCopilotCustomizations",
|
|
117
|
+
title="drm-copilot: Push Down Copilot Customizations",
|
|
118
|
+
script_reference="scripts.dev_tools.push_down_copilot_customizations",
|
|
119
|
+
is_placeholder=False,
|
|
120
|
+
),
|
|
121
|
+
RewriteTarget(
|
|
122
|
+
normalized_key="scripts/dev_tools/sync-agents-from-instructions.ps1",
|
|
123
|
+
command_id="drmCopilotExtension.syncAgentsFromInstructions",
|
|
124
|
+
title="drm-copilot: Sync AGENTS.md from Instructions",
|
|
125
|
+
script_reference="scripts/dev-tools/sync-agents-from-instructions.ps1",
|
|
126
|
+
is_placeholder=False,
|
|
127
|
+
),
|
|
128
|
+
)
|
|
129
|
+
return {target.normalized_key: target for target in targets}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def render_command_reference(target: RewriteTarget) -> str:
|
|
133
|
+
"""
|
|
134
|
+
Render a canonical textual command reference for copied files.
|
|
135
|
+
|
|
136
|
+
Purpose:
|
|
137
|
+
Keep replacement text uniform regardless of whether the destination
|
|
138
|
+
command is implemented or still a placeholder.
|
|
139
|
+
|
|
140
|
+
Args:
|
|
141
|
+
target (RewriteTarget): Catalog entry for the matched reference.
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
str: Stable textual command reference.
|
|
145
|
+
|
|
146
|
+
Raises:
|
|
147
|
+
None.
|
|
148
|
+
|
|
149
|
+
Side Effects:
|
|
150
|
+
None.
|
|
151
|
+
"""
|
|
152
|
+
return f"VS Code command: `{target.title}` (command ID: `{target.command_id}`)"
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def normalize_reference_for_lookup(reference_text: str) -> str:
|
|
156
|
+
"""
|
|
157
|
+
Normalize a matched textual reference before catalog lookup.
|
|
158
|
+
|
|
159
|
+
Purpose:
|
|
160
|
+
Collapse workspace prefixes and slash variants onto canonical lookup
|
|
161
|
+
keys so the rewrite catalog has one stable matching surface.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
reference_text (str): Raw matched script reference.
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
str: Canonical lookup key.
|
|
168
|
+
|
|
169
|
+
Raises:
|
|
170
|
+
None.
|
|
171
|
+
|
|
172
|
+
Side Effects:
|
|
173
|
+
None.
|
|
174
|
+
"""
|
|
175
|
+
normalized = reference_text.strip()
|
|
176
|
+
normalized = re.sub(r"^poetry\s+run\s+python\s+-m\s+", "", normalized)
|
|
177
|
+
normalized = normalized.replace("${workspaceFolder}\\", "")
|
|
178
|
+
normalized = normalized.replace("${workspaceFolder}/", "")
|
|
179
|
+
normalized = normalized.replace("\\", "/")
|
|
180
|
+
normalized = normalized.replace("scripts/dev-tools/", "scripts/dev_tools/")
|
|
181
|
+
return normalized
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def split_trailing_punctuation(reference_text: str) -> tuple[str, str]:
|
|
185
|
+
"""
|
|
186
|
+
Split a matched reference into its core text and trailing punctuation.
|
|
187
|
+
|
|
188
|
+
Purpose:
|
|
189
|
+
Preserve prose punctuation so rewrites do not disturb surrounding
|
|
190
|
+
documentation.
|
|
191
|
+
|
|
192
|
+
Args:
|
|
193
|
+
reference_text (str): Matched reference including surrounding
|
|
194
|
+
punctuation.
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
tuple[str, str]: Core reference text and trailing punctuation.
|
|
198
|
+
|
|
199
|
+
Raises:
|
|
200
|
+
None.
|
|
201
|
+
|
|
202
|
+
Side Effects:
|
|
203
|
+
None.
|
|
204
|
+
"""
|
|
205
|
+
core = reference_text
|
|
206
|
+
suffix = ""
|
|
207
|
+
# Preserve trailing sentence punctuation so rewrites do not disturb prose.
|
|
208
|
+
while core and core[-1] in TRAILING_PUNCTUATION:
|
|
209
|
+
suffix = core[-1] + suffix
|
|
210
|
+
core = core[:-1]
|
|
211
|
+
return core, suffix
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def rewrite_matched_reference(
|
|
215
|
+
reference_text: str,
|
|
216
|
+
catalog: dict[str, RewriteTarget],
|
|
217
|
+
) -> tuple[str, int, int, list[str]]:
|
|
218
|
+
"""
|
|
219
|
+
Rewrite one matched script reference when it belongs to the catalog.
|
|
220
|
+
|
|
221
|
+
Purpose:
|
|
222
|
+
Handle one matched reference so the surrounding regex pass can stay
|
|
223
|
+
focused on streaming replacements and counts.
|
|
224
|
+
|
|
225
|
+
Args:
|
|
226
|
+
reference_text (str): Matched script reference text.
|
|
227
|
+
catalog (dict[str, RewriteTarget]): Lookup table keyed by normalized
|
|
228
|
+
reference.
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
tuple[str, int, int, list[str]]: Replacement text, implemented rewrite
|
|
232
|
+
count, placeholder rewrite count, and unmatched references.
|
|
233
|
+
|
|
234
|
+
Raises:
|
|
235
|
+
None.
|
|
236
|
+
|
|
237
|
+
Side Effects:
|
|
238
|
+
None.
|
|
239
|
+
"""
|
|
240
|
+
core_reference, suffix = split_trailing_punctuation(reference_text)
|
|
241
|
+
normalized_reference = normalize_reference_for_lookup(core_reference)
|
|
242
|
+
target = catalog.get(normalized_reference)
|
|
243
|
+
if target is None:
|
|
244
|
+
return reference_text, 0, 0, [normalized_reference]
|
|
245
|
+
|
|
246
|
+
replacement = render_command_reference(target) + suffix
|
|
247
|
+
if target.is_placeholder:
|
|
248
|
+
return replacement, 0, 1, []
|
|
249
|
+
return replacement, 1, 0, []
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def rewrite_text_references(text: str) -> tuple[str, int, int, list[str]]:
|
|
253
|
+
"""
|
|
254
|
+
Rewrite supported script references within text content.
|
|
255
|
+
|
|
256
|
+
Purpose:
|
|
257
|
+
Apply replacements only to matched script references and report unknown
|
|
258
|
+
references without changing them.
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
text (str): Source text to rewrite.
|
|
262
|
+
|
|
263
|
+
Returns:
|
|
264
|
+
tuple[str, int, int, list[str]]: Rewritten text, implemented rewrite
|
|
265
|
+
count, placeholder rewrite count, and ordered unmatched references.
|
|
266
|
+
|
|
267
|
+
Raises:
|
|
268
|
+
None.
|
|
269
|
+
|
|
270
|
+
Side Effects:
|
|
271
|
+
None.
|
|
272
|
+
"""
|
|
273
|
+
catalog = build_rewrite_catalog()
|
|
274
|
+
rewritten_count = 0
|
|
275
|
+
placeholder_count = 0
|
|
276
|
+
unmatched_references: list[str] = []
|
|
277
|
+
|
|
278
|
+
def replace_match(match: re.Match[str]) -> str:
|
|
279
|
+
"""Rewrite one regex match while accumulating deterministic counters."""
|
|
280
|
+
nonlocal rewritten_count, placeholder_count
|
|
281
|
+
replacement, rewritten_delta, placeholder_delta, unmatched = (
|
|
282
|
+
rewrite_matched_reference(match.group(0), catalog)
|
|
283
|
+
)
|
|
284
|
+
rewritten_count += rewritten_delta
|
|
285
|
+
placeholder_count += placeholder_delta
|
|
286
|
+
# Preserve first-seen order so unmatched reporting stays deterministic.
|
|
287
|
+
for reference in unmatched:
|
|
288
|
+
if reference not in unmatched_references:
|
|
289
|
+
unmatched_references.append(reference)
|
|
290
|
+
return replacement
|
|
291
|
+
|
|
292
|
+
rewritten_text = SCRIPT_REFERENCE_PATTERN.sub(replace_match, text)
|
|
293
|
+
return rewritten_text, rewritten_count, placeholder_count, unmatched_references
|