@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.
Files changed (380) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -0
  3. package/out/mcp-server.js +17323 -0
  4. package/package.json +36 -0
  5. package/resources/claude-customizations/.claude/agent-memory/orchestrator/MEMORY.md +3 -0
  6. package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_repo_root_is_source_of_truth.md +11 -0
  7. package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_vsce_verify_package_location.md +19 -0
  8. package/resources/claude-customizations/.claude/agent-memory/orchestrator/project_extension_location.md +11 -0
  9. package/resources/claude-customizations/.claude/agent-memory/prd-feature/MEMORY.md +1 -0
  10. package/resources/claude-customizations/.claude/agent-memory/prd-feature/project_push_down_pattern.md +13 -0
  11. package/resources/claude-customizations/.claude/agent-memory/task-researcher/MEMORY.md +3 -0
  12. package/resources/claude-customizations/.claude/agent-memory/task-researcher/project_push_down_claude_dir.md +11 -0
  13. package/resources/claude-customizations/.claude/agents/atomic-executor.md +135 -0
  14. package/resources/claude-customizations/.claude/agents/atomic-planner.md +71 -0
  15. package/resources/claude-customizations/.claude/agents/csharp-typed-engineer.md +69 -0
  16. package/resources/claude-customizations/.claude/agents/epic-review.md +40 -0
  17. package/resources/claude-customizations/.claude/agents/feature-review.md +136 -0
  18. package/resources/claude-customizations/.claude/agents/orchestrator.md +83 -0
  19. package/resources/claude-customizations/.claude/agents/powershell-typed-engineer.md +80 -0
  20. package/resources/claude-customizations/.claude/agents/prd-feature.md +42 -0
  21. package/resources/claude-customizations/.claude/agents/python-typed-engineer.md +72 -0
  22. package/resources/claude-customizations/.claude/agents/staged-review.md +41 -0
  23. package/resources/claude-customizations/.claude/agents/status-updater.md +41 -0
  24. package/resources/claude-customizations/.claude/agents/task-researcher.md +81 -0
  25. package/resources/claude-customizations/.claude/agents/typescript-engineer.md +24 -0
  26. package/resources/claude-customizations/.claude/hooks/check-powershell-test-purity.ps1 +111 -0
  27. package/resources/claude-customizations/.claude/hooks/check-python-test-purity.ps1 +146 -0
  28. package/resources/claude-customizations/.claude/hooks/enforce-evidence-locations.ps1 +150 -0
  29. package/resources/claude-customizations/.claude/hooks/enforce-powershell-batch-budget.ps1 +238 -0
  30. package/resources/claude-customizations/.claude/hooks/enforce-promotion-mcp-only.ps1 +147 -0
  31. package/resources/claude-customizations/.claude/hooks/enforce-python-batch-budget.ps1 +235 -0
  32. package/resources/claude-customizations/.claude/hooks/validate-bash.ps1 +69 -0
  33. package/resources/claude-customizations/.claude/hooks/validate-executor-output.ps1 +296 -0
  34. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage.ps1 +389 -0
  35. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output.ps1 +141 -0
  36. package/resources/claude-customizations/.claude/hooks/validate-planner-output.ps1 +288 -0
  37. package/resources/claude-customizations/.claude/hooks/validate-required-artifact-output.ps1 +171 -0
  38. package/resources/claude-customizations/.claude/hooks/validate-task-researcher-output.ps1 +142 -0
  39. package/resources/claude-customizations/.claude/rules/csharp.md +62 -0
  40. package/resources/claude-customizations/.claude/rules/general-code-change.md +71 -0
  41. package/resources/claude-customizations/.claude/rules/general-unit-test.md +60 -0
  42. package/resources/claude-customizations/.claude/rules/powershell.md +97 -0
  43. package/resources/claude-customizations/.claude/rules/python-suppressions.md +143 -0
  44. package/resources/claude-customizations/.claude/rules/python.md +99 -0
  45. package/resources/claude-customizations/.claude/rules/self-explanatory-code-commenting.md +97 -0
  46. package/resources/claude-customizations/.claude/rules/tonality.md +80 -0
  47. package/resources/claude-customizations/.claude/rules/typescript-suppressions.md +66 -0
  48. package/resources/claude-customizations/.claude/rules/typescript.md +45 -0
  49. package/resources/claude-customizations/.claude/settings.json +144 -0
  50. package/resources/claude-customizations/.claude/skills/acceptance-criteria-tracking/SKILL.md +102 -0
  51. package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +189 -0
  52. package/resources/claude-customizations/.claude/skills/commit-message/SKILL.md +65 -0
  53. package/resources/claude-customizations/.claude/skills/csharp-change-budget-router/SKILL.md +90 -0
  54. package/resources/claude-customizations/.claude/skills/csharp-orchestration-state-machine/SKILL.md +58 -0
  55. package/resources/claude-customizations/.claude/skills/csharp-qa-gate/SKILL.md +77 -0
  56. package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +164 -0
  57. package/resources/claude-customizations/.claude/skills/execute-hard-lock/SKILL.md +82 -0
  58. package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +115 -0
  59. package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +167 -0
  60. package/resources/claude-customizations/.claude/skills/fill-feature-docs/SKILL.md +22 -0
  61. package/resources/claude-customizations/.claude/skills/invoke-csharp-engineer/SKILL.md +64 -0
  62. package/resources/claude-customizations/.claude/skills/invoke-powershell-engineer/SKILL.md +65 -0
  63. package/resources/claude-customizations/.claude/skills/invoke-python-engineer/SKILL.md +64 -0
  64. package/resources/claude-customizations/.claude/skills/make-skill-template/SKILL.md +147 -0
  65. package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +132 -0
  66. package/resources/claude-customizations/.claude/skills/policy-audit-template-usage/SKILL.md +49 -0
  67. package/resources/claude-customizations/.claude/skills/policy-compliance-order/SKILL.md +40 -0
  68. package/resources/claude-customizations/.claude/skills/powershell-change-budget-router/SKILL.md +49 -0
  69. package/resources/claude-customizations/.claude/skills/powershell-orchestration-state-machine/SKILL.md +58 -0
  70. package/resources/claude-customizations/.claude/skills/powershell-qa-gate/SKILL.md +77 -0
  71. package/resources/claude-customizations/.claude/skills/pr-author/SKILL.md +50 -0
  72. package/resources/claude-customizations/.claude/skills/pr-base-branch-merge-base/SKILL.md +56 -0
  73. package/resources/claude-customizations/.claude/skills/pr-context-artifacts/SKILL.md +30 -0
  74. package/resources/claude-customizations/.claude/skills/python-change-budget-router/SKILL.md +79 -0
  75. package/resources/claude-customizations/.claude/skills/python-qa-gate/SKILL.md +77 -0
  76. package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +40 -0
  77. package/resources/claude-customizations/.claude/skills/research-issue/SKILL.md +67 -0
  78. package/resources/claude-customizations/.claude/skills/review-epic/SKILL.md +21 -0
  79. package/resources/claude-customizations/.claude/skills/review-feature/SKILL.md +25 -0
  80. package/resources/claude-customizations/.claude/skills/review-staged/SKILL.md +21 -0
  81. package/resources/claude-customizations/.claude/skills/skill-canonical-location-audit/SKILL.md +49 -0
  82. package/resources/claude-customizations/.claude/skills/translate-copilot-to-claude/SKILL.md +295 -0
  83. package/resources/claude-customizations/.claude/skills/update-status/SKILL.md +21 -0
  84. package/resources/claude-dir-customizations/.mcp.json +8 -0
  85. package/resources/codex-and-agents-customizations/.agents/README.md +86 -0
  86. package/resources/codex-and-agents-customizations/.agents/skills/README.md +49 -0
  87. package/resources/codex-and-agents-customizations/.agents/skills/acceptance-criteria-tracking/SKILL.md +107 -0
  88. package/resources/codex-and-agents-customizations/.agents/skills/atomic-executor/SKILL.md +73 -0
  89. package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +194 -0
  90. package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +87 -0
  91. package/resources/codex-and-agents-customizations/.agents/skills/commit-message/SKILL.md +70 -0
  92. package/resources/codex-and-agents-customizations/.agents/skills/commit-message-conventions/SKILL.md +95 -0
  93. package/resources/codex-and-agents-customizations/.agents/skills/csharp/SKILL.md +67 -0
  94. package/resources/codex-and-agents-customizations/.agents/skills/csharp-change-budget-router/SKILL.md +94 -0
  95. package/resources/codex-and-agents-customizations/.agents/skills/csharp-orchestration-state-machine/SKILL.md +64 -0
  96. package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +82 -0
  97. package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +168 -0
  98. package/resources/codex-and-agents-customizations/.agents/skills/execute-hard-lock/SKILL.md +88 -0
  99. package/resources/codex-and-agents-customizations/.agents/skills/feature-promotion-lifecycle/SKILL.md +129 -0
  100. package/resources/codex-and-agents-customizations/.agents/skills/feature-review/SKILL.md +106 -0
  101. package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +181 -0
  102. package/resources/codex-and-agents-customizations/.agents/skills/fill-feature-docs/SKILL.md +27 -0
  103. package/resources/codex-and-agents-customizations/.agents/skills/invoke-csharp-engineer/SKILL.md +73 -0
  104. package/resources/codex-and-agents-customizations/.agents/skills/invoke-powershell-engineer/SKILL.md +74 -0
  105. package/resources/codex-and-agents-customizations/.agents/skills/invoke-python-engineer/SKILL.md +73 -0
  106. package/resources/codex-and-agents-customizations/.agents/skills/make-skill-template/SKILL.md +152 -0
  107. package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +143 -0
  108. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +317 -0
  109. package/resources/codex-and-agents-customizations/.agents/skills/policy-audit-template-usage/SKILL.md +53 -0
  110. package/resources/codex-and-agents-customizations/.agents/skills/policy-compliance-order/SKILL.md +49 -0
  111. package/resources/codex-and-agents-customizations/.agents/skills/powershell/SKILL.md +102 -0
  112. package/resources/codex-and-agents-customizations/.agents/skills/powershell-change-budget-router/SKILL.md +53 -0
  113. package/resources/codex-and-agents-customizations/.agents/skills/powershell-orchestration-state-machine/SKILL.md +64 -0
  114. package/resources/codex-and-agents-customizations/.agents/skills/powershell-qa-gate/SKILL.md +83 -0
  115. package/resources/codex-and-agents-customizations/.agents/skills/pr-author/SKILL.md +55 -0
  116. package/resources/codex-and-agents-customizations/.agents/skills/pr-authoring/SKILL.md +124 -0
  117. package/resources/codex-and-agents-customizations/.agents/skills/pr-base-branch-merge-base/SKILL.md +60 -0
  118. package/resources/codex-and-agents-customizations/.agents/skills/pr-context-artifacts/SKILL.md +34 -0
  119. package/resources/codex-and-agents-customizations/.agents/skills/python/SKILL.md +104 -0
  120. package/resources/codex-and-agents-customizations/.agents/skills/python-change-budget-router/SKILL.md +84 -0
  121. package/resources/codex-and-agents-customizations/.agents/skills/python-qa-gate/SKILL.md +82 -0
  122. package/resources/codex-and-agents-customizations/.agents/skills/python-suppressions/SKILL.md +148 -0
  123. package/resources/codex-and-agents-customizations/.agents/skills/remediation-handoff-atomic-planner/SKILL.md +49 -0
  124. package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/SKILL.md +142 -0
  125. package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/agents/openai.yaml +5 -0
  126. package/resources/codex-and-agents-customizations/.agents/skills/research-issue/SKILL.md +72 -0
  127. package/resources/codex-and-agents-customizations/.agents/skills/review-epic/SKILL.md +26 -0
  128. package/resources/codex-and-agents-customizations/.agents/skills/review-feature/SKILL.md +30 -0
  129. package/resources/codex-and-agents-customizations/.agents/skills/review-staged/SKILL.md +26 -0
  130. package/resources/codex-and-agents-customizations/.agents/skills/self-explanatory-code-commenting/SKILL.md +102 -0
  131. package/resources/codex-and-agents-customizations/.agents/skills/skill-canonical-location-audit/SKILL.md +52 -0
  132. package/resources/codex-and-agents-customizations/.agents/skills/translate-copilot-to-claude/SKILL.md +317 -0
  133. package/resources/codex-and-agents-customizations/.agents/skills/typescript/SKILL.md +50 -0
  134. package/resources/codex-and-agents-customizations/.agents/skills/typescript-suppressions/SKILL.md +71 -0
  135. package/resources/codex-and-agents-customizations/.agents/skills/update-status/SKILL.md +26 -0
  136. package/resources/codex-and-agents-customizations/.codex/agents/5.1-beast-adjusted.toml +23 -0
  137. package/resources/codex-and-agents-customizations/.codex/agents/5.1-thinking-beast-mode-adjusted.toml +23 -0
  138. package/resources/codex-and-agents-customizations/.codex/agents/api-architect.toml +23 -0
  139. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +151 -0
  140. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +93 -0
  141. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planning.toml +24 -0
  142. package/resources/codex-and-agents-customizations/.codex/agents/commentary-remediation.toml +23 -0
  143. package/resources/codex-and-agents-customizations/.codex/agents/commit-steward.toml +20 -0
  144. package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-executor.toml +24 -0
  145. package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-planning.toml +25 -0
  146. package/resources/codex-and-agents-customizations/.codex/agents/csharp-orchestrator.toml +56 -0
  147. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer.toml +97 -0
  148. package/resources/codex-and-agents-customizations/.codex/agents/epic-review.toml +52 -0
  149. package/resources/codex-and-agents-customizations/.codex/agents/expert-nextjs-developer.toml +23 -0
  150. package/resources/codex-and-agents-customizations/.codex/agents/expert-react-frontend-engineer.toml +23 -0
  151. package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +149 -0
  152. package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer.toml +60 -0
  153. package/resources/codex-and-agents-customizations/.codex/agents/gpt-5-beast-mode.toml +23 -0
  154. package/resources/codex-and-agents-customizations/.codex/agents/hlbpa.toml +23 -0
  155. package/resources/codex-and-agents-customizations/.codex/agents/mentor.toml +23 -0
  156. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator.toml +121 -0
  157. package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-executor.toml +24 -0
  158. package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-planning.toml +25 -0
  159. package/resources/codex-and-agents-customizations/.codex/agents/powershell-di-unit-test-engineer.toml +24 -0
  160. package/resources/codex-and-agents-customizations/.codex/agents/powershell-orchestrator.toml +56 -0
  161. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer.toml +108 -0
  162. package/resources/codex-and-agents-customizations/.codex/agents/pr-author.toml +26 -0
  163. package/resources/codex-and-agents-customizations/.codex/agents/prd-feature.toml +53 -0
  164. package/resources/codex-and-agents-customizations/.codex/agents/prd.toml +23 -0
  165. package/resources/codex-and-agents-customizations/.codex/agents/pytest-unit-test-coding.toml +24 -0
  166. package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-executor.toml +24 -0
  167. package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-planning.toml +25 -0
  168. package/resources/codex-and-agents-customizations/.codex/agents/python-execution-only-typed.toml +24 -0
  169. package/resources/codex-and-agents-customizations/.codex/agents/python-orchestrator.toml +54 -0
  170. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer.toml +100 -0
  171. package/resources/codex-and-agents-customizations/.codex/agents/staged-review.toml +53 -0
  172. package/resources/codex-and-agents-customizations/.codex/agents/status-updater.toml +53 -0
  173. package/resources/codex-and-agents-customizations/.codex/agents/task-researcher.toml +103 -0
  174. package/resources/codex-and-agents-customizations/.codex/agents/tdd-green.toml +23 -0
  175. package/resources/codex-and-agents-customizations/.codex/agents/tdd-red.toml +23 -0
  176. package/resources/codex-and-agents-customizations/.codex/agents/tdd-refactor.toml +23 -0
  177. package/resources/codex-and-agents-customizations/.codex/agents/typescript-engineer.toml +48 -0
  178. package/resources/codex-and-agents-customizations/.codex/agents/voidbeast-gpt41enhanced.toml +23 -0
  179. package/resources/codex-and-agents-customizations/.codex/codex-web-setup.plan.md +26 -0
  180. package/resources/codex-and-agents-customizations/.codex/codex-web-setup.sh +384 -0
  181. package/resources/codex-and-agents-customizations/.codex/config.toml +137 -0
  182. package/resources/codex-and-agents-customizations/.codex/hooks/check-powershell-test-purity.ps1 +113 -0
  183. package/resources/codex-and-agents-customizations/.codex/hooks/check-python-test-purity.ps1 +149 -0
  184. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-evidence-locations.ps1 +153 -0
  185. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-powershell-batch-budget.ps1 +241 -0
  186. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +150 -0
  187. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-python-batch-budget.ps1 +238 -0
  188. package/resources/codex-and-agents-customizations/.codex/hooks/validate-bash.ps1 +72 -0
  189. package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +265 -0
  190. package/resources/codex-and-agents-customizations/.codex/prompts/feature-review-remediate.md +10 -0
  191. package/resources/codex-and-agents-customizations/.codex/prompts/generate-commit-message-repo.md +11 -0
  192. package/resources/codex-and-agents-customizations/.codex/prompts/generate-pr.md +15 -0
  193. package/resources/codex-and-agents-customizations/.codex/prompts/orchestrate-work.md +22 -0
  194. package/resources/codex-and-agents-customizations/AGENTS.md +317 -0
  195. package/resources/customizations/.github/agents/5.1-Beast-adjusted.agent.md +181 -0
  196. package/resources/customizations/.github/agents/5.1-Thinking-Beast-Mode-adjusted.agent.md +361 -0
  197. package/resources/customizations/.github/agents/Powershell DI Unit Test Engineer.agent.md +192 -0
  198. package/resources/customizations/.github/agents/api-architect.agent.md +40 -0
  199. package/resources/customizations/.github/agents/atomic_executor.agent.md +251 -0
  200. package/resources/customizations/.github/agents/atomic_planning.agent.md +658 -0
  201. package/resources/customizations/.github/agents/commentary-remediation.agent.md +35 -0
  202. package/resources/customizations/.github/agents/commit-steward.agent.md +200 -0
  203. package/resources/customizations/.github/agents/csharp-atomic-executor.agent.md +288 -0
  204. package/resources/customizations/.github/agents/csharp-atomic-planning.agent.md +354 -0
  205. package/resources/customizations/.github/agents/csharp-orchestrator.agent.md +375 -0
  206. package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +285 -0
  207. package/resources/customizations/.github/agents/epic-review.agent.md +374 -0
  208. package/resources/customizations/.github/agents/expert-nextjs-developer.agent.md +477 -0
  209. package/resources/customizations/.github/agents/expert-react-frontend-engineer.agent.md +739 -0
  210. package/resources/customizations/.github/agents/feature-review.agent.md +49 -0
  211. package/resources/customizations/.github/agents/gpt-5-beast-mode.agent.md +116 -0
  212. package/resources/customizations/.github/agents/hlbpa.agent.md +219 -0
  213. package/resources/customizations/.github/agents/mentor.agent.md +32 -0
  214. package/resources/customizations/.github/agents/orchestrator.agent.md +449 -0
  215. package/resources/customizations/.github/agents/powershell-atomic-executor.agent.md +287 -0
  216. package/resources/customizations/.github/agents/powershell-atomic-planning.agent.md +647 -0
  217. package/resources/customizations/.github/agents/powershell-orchestrator.agent.md +382 -0
  218. package/resources/customizations/.github/agents/powershell-typed-engineer.agent.md +293 -0
  219. package/resources/customizations/.github/agents/pr-author.agent.md +138 -0
  220. package/resources/customizations/.github/agents/prd-feature.agent.md +52 -0
  221. package/resources/customizations/.github/agents/prd.agent.md +202 -0
  222. package/resources/customizations/.github/agents/pytest-unit-test-coding.agent.md +202 -0
  223. package/resources/customizations/.github/agents/python-atomic-executor.agent.md +289 -0
  224. package/resources/customizations/.github/agents/python-atomic-planning.agent.md +429 -0
  225. package/resources/customizations/.github/agents/python-execution-only-typed.agent.md +217 -0
  226. package/resources/customizations/.github/agents/python-orchestrator.agent.md +380 -0
  227. package/resources/customizations/.github/agents/python-typed-engineer.agent.md +271 -0
  228. package/resources/customizations/.github/agents/staged-review.agent.md +246 -0
  229. package/resources/customizations/.github/agents/status_updater.agent.md +279 -0
  230. package/resources/customizations/.github/agents/task-researcher.agent.md +298 -0
  231. package/resources/customizations/.github/agents/tdd-green.agent.md +60 -0
  232. package/resources/customizations/.github/agents/tdd-red.agent.md +66 -0
  233. package/resources/customizations/.github/agents/tdd-refactor.agent.md +94 -0
  234. package/resources/customizations/.github/agents/typescript-engineer.agent.md +167 -0
  235. package/resources/customizations/.github/agents/voidbeast-gpt41enhanced.agent.md +230 -0
  236. package/resources/customizations/.github/codex/execute-hard-lock.prompt.md +105 -0
  237. package/resources/customizations/.github/codex/resume-hard-lock.prompt.md +92 -0
  238. package/resources/customizations/.github/copilot-instructions.md +7 -0
  239. package/resources/customizations/.github/instructions/csharp-code-change.instructions.md +184 -0
  240. package/resources/customizations/.github/instructions/csharp-unit-test.instructions.md +52 -0
  241. package/resources/customizations/.github/instructions/general-code-change.instructions.md +290 -0
  242. package/resources/customizations/.github/instructions/general-unit-test.instructions.md +106 -0
  243. package/resources/customizations/.github/instructions/github-actions-ci-cd-best-practices.instructions.md +607 -0
  244. package/resources/customizations/.github/instructions/github-actions.instructions.md +23 -0
  245. package/resources/customizations/.github/instructions/powershell-code-change.instructions.md +81 -0
  246. package/resources/customizations/.github/instructions/powershell-unit-test.instructions.md +69 -0
  247. package/resources/customizations/.github/instructions/python-code-change.instructions.md +232 -0
  248. package/resources/customizations/.github/instructions/python-suppressions.instructions.md +609 -0
  249. package/resources/customizations/.github/instructions/python-unit-test.instructions.md +71 -0
  250. package/resources/customizations/.github/instructions/self-explanatory-code-commenting.instructions.md +238 -0
  251. package/resources/customizations/.github/instructions/tonality.instructions.md +133 -0
  252. package/resources/customizations/.github/instructions/typescript-code-change.instructions.md +203 -0
  253. package/resources/customizations/.github/instructions/typescript-suppressions.instructions.md +157 -0
  254. package/resources/customizations/.github/instructions/typescript-unit-test.instructions.md +112 -0
  255. package/resources/customizations/.github/prompts/add-educational-comments.prompt.md +129 -0
  256. package/resources/customizations/.github/prompts/breakdown-bug-prd.prompt.md +29 -0
  257. package/resources/customizations/.github/prompts/breakdown-epic-arch.prompt.md +66 -0
  258. package/resources/customizations/.github/prompts/breakdown-epic-pm.prompt.md +58 -0
  259. package/resources/customizations/.github/prompts/breakdown-feature-implementation.prompt.md +128 -0
  260. package/resources/customizations/.github/prompts/breakdown-feature-prd.prompt.md +61 -0
  261. package/resources/customizations/.github/prompts/code-exemplars-blueprint-generator.prompt.md +126 -0
  262. package/resources/customizations/.github/prompts/drafts/create-github-issues-feature-from-implementation-plan.prompt.md +28 -0
  263. package/resources/customizations/.github/prompts/drafts/create-implementation-plan.prompt.md +158 -0
  264. package/resources/customizations/.github/prompts/drafts/create-technical-spike.prompt.md +231 -0
  265. package/resources/customizations/.github/prompts/drafts/potential-feature-prd.prompt.md +19 -0
  266. package/resources/customizations/.github/prompts/drafts/update-implementation-plan.prompt.md +158 -0
  267. package/resources/customizations/.github/prompts/execute-plan-template.md +21 -0
  268. package/resources/customizations/.github/prompts/export-chat.prompt.md +7 -0
  269. package/resources/customizations/.github/prompts/fillout-prd-feature.prompt.md +46 -0
  270. package/resources/customizations/.github/prompts/generate-atomic-plan.prompt.md +96 -0
  271. package/resources/customizations/.github/prompts/generate-commit-message-repo.prompt.md +108 -0
  272. package/resources/customizations/.github/prompts/generate-pr.prompt.md +151 -0
  273. package/resources/customizations/.github/prompts/javascript-typescript-jest.prompt.md +44 -0
  274. package/resources/customizations/.github/prompts/orchestrate-csharp-work.prompt.md +66 -0
  275. package/resources/customizations/.github/prompts/orchestrate-powershell-work.prompt.md +50 -0
  276. package/resources/customizations/.github/prompts/orchestrate-python-work.prompt.md +50 -0
  277. package/resources/customizations/.github/prompts/orchestrate-work.prompt.md +66 -0
  278. package/resources/customizations/.github/prompts/remediate-comments.prompt.md +53 -0
  279. package/resources/customizations/.github/prompts/research-issue.prompt.md +125 -0
  280. package/resources/customizations/.github/prompts/review-epic.prompt.md +94 -0
  281. package/resources/customizations/.github/prompts/review-feature.prompt.md +130 -0
  282. package/resources/customizations/.github/prompts/review-staged.prompt.md +43 -0
  283. package/resources/customizations/.github/prompts/update_status.prompt.md +68 -0
  284. package/resources/customizations/.github/skills/README.md +26 -0
  285. package/resources/customizations/.github/skills/acceptance-criteria-tracking/SKILL.md +102 -0
  286. package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +174 -0
  287. package/resources/customizations/.github/skills/csharp-change-budget-router/SKILL.md +48 -0
  288. package/resources/customizations/.github/skills/csharp-orchestration-state-machine/SKILL.md +57 -0
  289. package/resources/customizations/.github/skills/evidence-and-timestamp-conventions/SKILL.md +135 -0
  290. package/resources/customizations/.github/skills/feature-promotion-lifecycle/SKILL.md +121 -0
  291. package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +153 -0
  292. package/resources/customizations/.github/skills/make-skill-template/SKILL.md +147 -0
  293. package/resources/customizations/.github/skills/policy-audit-template-usage/SKILL.md +48 -0
  294. package/resources/customizations/.github/skills/policy-compliance-order/SKILL.md +37 -0
  295. package/resources/customizations/.github/skills/powershell-change-budget-router/SKILL.md +48 -0
  296. package/resources/customizations/.github/skills/powershell-orchestration-state-machine/SKILL.md +57 -0
  297. package/resources/customizations/.github/skills/pr-base-branch-merge-base/SKILL.md +55 -0
  298. package/resources/customizations/.github/skills/pr-context-artifacts/SKILL.md +29 -0
  299. package/resources/customizations/.github/skills/remediation-handoff-atomic-planner/SKILL.md +39 -0
  300. package/resources/customizations/.github/skills/skill-canonical-location-audit/SKILL.md +48 -0
  301. package/resources/feature-templates/bug/plan.yyyy-MM-ddTHH-mm.md +44 -0
  302. package/resources/feature-templates/bug/potential_bug.md +59 -0
  303. package/resources/feature-templates/bug/spec.md +99 -0
  304. package/resources/feature-templates/epic/initiative.md +43 -0
  305. package/resources/feature-templates/feature/plan.yyyy-MM-ddTHH-mm.md +53 -0
  306. package/resources/feature-templates/feature/spec.md +66 -0
  307. package/resources/feature-templates/feature/user-story.md +42 -0
  308. package/resources/feature-templates/potential/template.md +33 -0
  309. package/resources/feature-templates/refactor/plan.yyyy-MM-ddTHH-mm.md +52 -0
  310. package/resources/feature-templates/refactor/spec.md +69 -0
  311. package/resources/powershell/PoshQC/PoshQC.Analyzer.psm1 +254 -0
  312. package/resources/powershell/PoshQC/PoshQC.FileDiscovery.psm1 +138 -0
  313. package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +409 -0
  314. package/resources/powershell/PoshQC/PoshQC.psd1 +31 -0
  315. package/resources/powershell/PoshQC/PoshQC.psm1 +101 -0
  316. package/resources/powershell/PoshQC/README.md +80 -0
  317. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +59 -0
  318. package/resources/powershell/PoshQC/settings/pssa.settings.psd1 +55 -0
  319. package/resources/scripts/dev_tools/__init__.py +0 -0
  320. package/resources/scripts/dev_tools/agentic_sync.py +819 -0
  321. package/resources/scripts/dev_tools/codex_native_converter/__init__.py +11 -0
  322. package/resources/scripts/dev_tools/codex_native_converter/__main__.py +6 -0
  323. package/resources/scripts/dev_tools/codex_native_converter/cli.py +11 -0
  324. package/resources/scripts/dev_tools/new_active_feature_folder.py +79 -0
  325. package/resources/scripts/dev_tools/new_active_feature_folder_docs.py +268 -0
  326. package/resources/scripts/dev_tools/new_active_feature_folder_flow.py +366 -0
  327. package/resources/scripts/dev_tools/new_active_feature_folder_io.py +306 -0
  328. package/resources/scripts/dev_tools/new_active_feature_folder_markdown.py +252 -0
  329. package/resources/scripts/dev_tools/new_active_feature_folder_models.py +136 -0
  330. package/resources/scripts/dev_tools/new_potential_bug_entry.py +465 -0
  331. package/resources/scripts/dev_tools/potential_to_issue.py +421 -0
  332. package/resources/scripts/dev_tools/potential_to_issue_content.py +212 -0
  333. package/resources/scripts/dev_tools/pr_context/__init__.py +0 -0
  334. package/resources/scripts/dev_tools/pr_context/collector.py +619 -0
  335. package/resources/scripts/dev_tools/pr_context/feature_docs.py +349 -0
  336. package/resources/scripts/dev_tools/pr_context/git.py +153 -0
  337. package/resources/scripts/dev_tools/pr_context/github.py +549 -0
  338. package/resources/scripts/dev_tools/pr_context/models.py +198 -0
  339. package/resources/scripts/dev_tools/pr_context/render.py +342 -0
  340. package/resources/scripts/dev_tools/pr_context/render_feature_excerpts.py +256 -0
  341. package/resources/scripts/dev_tools/pr_context/render_pr_helpers.py +291 -0
  342. package/resources/scripts/dev_tools/pr_context/summary_helpers.py +386 -0
  343. package/resources/scripts/dev_tools/pr_context/verification_evidence.py +171 -0
  344. package/resources/scripts/dev_tools/prompt_mode_contract.py +152 -0
  345. package/resources/scripts/dev_tools/push_down_claude_customizations.py +188 -0
  346. package/resources/scripts/dev_tools/push_down_codex_and_agents_customizations.py +139 -0
  347. package/resources/scripts/dev_tools/push_down_copilot_customizations.py +504 -0
  348. package/resources/scripts/dev_tools/push_down_copilot_customizations_filesystem.py +217 -0
  349. package/resources/scripts/dev_tools/push_down_copilot_customizations_rewrites.py +293 -0
  350. package/resources/scripts/dev_tools/resolve_file_prompt.py +457 -0
  351. package/resources/scripts/dev_tools/resolve_hard_lock_prompt.py +444 -0
  352. package/resources/scripts/dev_tools/validate_orchestration_artifacts.py +554 -0
  353. package/resources/templates/codex_native_converter.py +35 -0
  354. package/resources/templates/collect_commit_context.py +212 -0
  355. package/resources/templates/collect_pr_context.py +74 -0
  356. package/resources/templates/hello_pwsh.ps1 +3 -0
  357. package/resources/templates/hello_python.py +11 -0
  358. package/resources/templates/link-parent-child.ps1 +480 -0
  359. package/resources/templates/new-claude-worktree-session.ps1 +232 -0
  360. package/resources/templates/new-potential-entry.ps1 +187 -0
  361. package/resources/templates/new_active_feature_folder.py +67 -0
  362. package/resources/templates/new_potential_bug_entry.py +54 -0
  363. package/resources/templates/policy_audit/AGENTS.md +117 -0
  364. package/resources/templates/policy_audit/code-review.yyyy-MM-ddTHH-mm.md +165 -0
  365. package/resources/templates/policy_audit/feature-audit.yyyy-MM-ddTHH-mm.md +124 -0
  366. package/resources/templates/policy_audit/policy-audit.yyyy-MM-ddTHH-mm.md +649 -0
  367. package/resources/templates/potential_to_issue.py +55 -0
  368. package/resources/templates/push_down_claude_customizations.py +188 -0
  369. package/resources/templates/push_down_codex_and_agents_customizations.py +95 -0
  370. package/resources/templates/push_down_copilot_customizations.py +124 -0
  371. package/resources/templates/resolve_atomic_plan_prompt.py +75 -0
  372. package/resources/templates/resolve_hard_lock_prompt.py +65 -0
  373. package/resources/templates/run-poshqc-analyze-autofix.ps1 +16 -0
  374. package/resources/templates/run-poshqc-analyze.ps1 +26 -0
  375. package/resources/templates/run-poshqc-format.ps1 +26 -0
  376. package/resources/templates/run-poshqc-suite.ps1 +24 -0
  377. package/resources/templates/run-poshqc-test.ps1 +32 -0
  378. package/resources/templates/sync-agents-from-instructions.ps1 +400 -0
  379. package/resources/templates/validate_orchestration_artifacts.py +55 -0
  380. package/resources/templates/vscode-cli.helpers.ps1 +63 -0
@@ -0,0 +1,457 @@
1
+ """Resolve bundled atomic-plan prompt templates against a target plan file.
2
+
3
+ Purpose:
4
+ Provide a destination-workspace-safe copy of the repository prompt resolver
5
+ so the extension can resolve `${...}` placeholders from bundled assets
6
+ without depending on repo-local scripts.
7
+
8
+ Supported variables:
9
+ - `${file}`
10
+ - `${folderpath}`
11
+ - `${name}`
12
+ - `${spec}`
13
+ - `${user-story}`
14
+ - `${research}`
15
+ - `${work-mode}`
16
+ - `${fallback-reason}`
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ import argparse
22
+ import importlib
23
+ import importlib.util
24
+ import re
25
+ import shutil
26
+ import subprocess
27
+ import sys
28
+ import types
29
+ from pathlib import Path
30
+
31
+ from dev_tools.prompt_mode_contract import (
32
+ build_fallback_reason,
33
+ resolve_selected_work_mode,
34
+ )
35
+
36
+
37
+ def _missing_pyperclip_copy(_text: str) -> None:
38
+ """Raise a clear error when optional clipboard support is unavailable."""
39
+ raise RuntimeError(
40
+ "Clipboard support requires the optional 'pyperclip' dependency."
41
+ )
42
+
43
+
44
+ _pyperclip_spec = importlib.util.find_spec("pyperclip")
45
+ if _pyperclip_spec is None:
46
+ pyperclip = types.SimpleNamespace(copy=_missing_pyperclip_copy)
47
+ else:
48
+ pyperclip = importlib.import_module("pyperclip")
49
+
50
+
51
+ def copy_to_clipboard(text: str) -> bool:
52
+ """Attempt to copy text to the clipboard.
53
+
54
+ Purpose:
55
+ Prefer `pyperclip` when available, then fall back to validated native
56
+ clipboard commands so bundled prompt resolution works across common
57
+ desktop environments.
58
+
59
+ Args:
60
+ text (str): The text to copy.
61
+
62
+ Returns:
63
+ bool: `True` when any clipboard mechanism succeeded; otherwise `False`.
64
+
65
+ Raises:
66
+ None directly. Exceptions from clipboard mechanisms are handled as
67
+ fallback signals.
68
+
69
+ Side Effects:
70
+ May invoke a validated clipboard executable via `subprocess.run`.
71
+ """
72
+ pyperclip_exception_type = getattr(pyperclip, "PyperclipException", None)
73
+ exception_types: list[type[BaseException]] = [OSError, RuntimeError]
74
+ if isinstance(pyperclip_exception_type, type) and issubclass(
75
+ pyperclip_exception_type, Exception
76
+ ):
77
+ exception_types.append(pyperclip_exception_type)
78
+ handled_copy_errors = tuple(exception_types)
79
+
80
+ try:
81
+ pyperclip.copy(text)
82
+ return True
83
+ except handled_copy_errors as error:
84
+ pyperclip_error = error
85
+
86
+ commands: tuple[list[str], ...] = (
87
+ ["pbcopy"],
88
+ ["wl-copy"],
89
+ ["xclip", "-selection", "clipboard"],
90
+ ["xsel", "--clipboard", "--input"],
91
+ ["clip"],
92
+ ["clip.exe"],
93
+ )
94
+
95
+ # Try validated clipboard executables in a deterministic order.
96
+ for command in commands:
97
+ executable = shutil.which(command[0])
98
+ if executable is None:
99
+ continue
100
+ try:
101
+ subprocess.run( # noqa: S603 - static analysis can't verify runtime validation
102
+ [executable, *command[1:]],
103
+ input=text,
104
+ text=True,
105
+ check=True,
106
+ )
107
+ return True
108
+ except subprocess.CalledProcessError:
109
+ continue
110
+
111
+ print(f"pyperclip copy failed: {pyperclip_error}", file=sys.stderr)
112
+ return False
113
+
114
+
115
+ def strip_front_matter(content: str) -> str:
116
+ """Remove YAML front matter when the template begins with a front-matter block."""
117
+ lines = content.split("\n")
118
+ if not lines or lines[0].strip() != "---":
119
+ return content
120
+
121
+ for index, line in enumerate(lines[1:], start=1):
122
+ if line.strip() == "---":
123
+ return "\n".join(lines[index + 1 :]).lstrip()
124
+
125
+ return content
126
+
127
+
128
+ def _split_path_platform_agnostic(path_str: str) -> list[str]:
129
+ """Split a path string on either Windows or POSIX separators."""
130
+ return [part for part in re.split(r"[\\/]+", path_str) if part]
131
+
132
+
133
+ def _try_relative_to_workspace(path: Path, workspace_root: Path) -> Path:
134
+ """Return a workspace-relative path when possible, else the original path."""
135
+ try:
136
+ return path.resolve().relative_to(workspace_root.resolve())
137
+ except ValueError:
138
+ return path
139
+
140
+
141
+ def _resolve_folderpath(target_path: Path, workspace_root: Path) -> str:
142
+ """Resolve `${folderpath}` from the target path."""
143
+ return str(_try_relative_to_workspace(target_path, workspace_root).parent)
144
+
145
+
146
+ def _resolve_feature_foldername(folderpath: str) -> str:
147
+ """Resolve the logical feature folder name from `${folderpath}`."""
148
+ parts = _split_path_platform_agnostic(folderpath)
149
+ if not parts:
150
+ raise ValueError("folderpath is empty")
151
+
152
+ leaf = parts[-1]
153
+ if leaf.startswith("v") and len(parts) >= 2:
154
+ return parts[-2]
155
+ return leaf
156
+
157
+
158
+ def _resolve_name_from_feature_foldername(feature_foldername: str) -> str:
159
+ """Extract `${name}` from a dated feature-folder naming convention."""
160
+ parts = feature_foldername.split("-")
161
+ if (
162
+ len(parts) >= 5
163
+ and len(parts[0]) == 4
164
+ and len(parts[1]) == 2
165
+ and len(parts[2]) == 2
166
+ and parts[0].isdigit()
167
+ and parts[1].isdigit()
168
+ and parts[2].isdigit()
169
+ and parts[-1].isdigit()
170
+ ):
171
+ name_parts = parts[3:-1]
172
+ if name_parts:
173
+ return "-".join(name_parts)
174
+ return feature_foldername
175
+
176
+
177
+ def _resolve_spec_path(folderpath: str) -> str:
178
+ """Resolve `${spec}` to `${folderpath}/spec.md`."""
179
+ return str(Path(folderpath) / "spec.md")
180
+
181
+
182
+ def _resolve_user_story_value(folderpath: str, workspace_root: Path) -> str:
183
+ """Resolve `${user-story}` and annotate it when the file is missing."""
184
+ relative_story = Path(folderpath) / "user-story.md"
185
+ full_story = workspace_root / relative_story
186
+ if full_story.exists():
187
+ return str(relative_story)
188
+ return f"{relative_story} (missing)"
189
+
190
+
191
+ def _resolve_research_value(folderpath: str, workspace_root: Path) -> str | None:
192
+ """Resolve `${research}` when `research.md` exists; otherwise return `None`."""
193
+ relative_research = Path(folderpath) / "research.md"
194
+ if (workspace_root / relative_research).exists():
195
+ return str(relative_research)
196
+ return None
197
+
198
+
199
+ def _remove_user_story_clause_when_missing(template: str) -> str:
200
+ """Remove the specific user-story clause used by the planner template."""
201
+ return template.replace(" and the `${user-story}`", "")
202
+
203
+
204
+ def _remove_lines_referencing_variable(template: str, variable_name: str) -> str:
205
+ """Remove any line that references an optional `${variable}` token."""
206
+ token = f"${{{variable_name}}}"
207
+ kept_lines: list[str] = []
208
+
209
+ # Keep only lines that do not reference the optional variable.
210
+ for line in template.splitlines(keepends=True):
211
+ if token in line:
212
+ continue
213
+ kept_lines.append(line)
214
+
215
+ return "".join(kept_lines)
216
+
217
+
218
+ def _insert_after_heading(template: str, heading: str, block: str) -> str:
219
+ """Insert a block immediately after the first exact markdown heading match."""
220
+ lines = template.splitlines(keepends=True)
221
+
222
+ # Insert after the first exact heading match to keep behavior deterministic.
223
+ for index, line in enumerate(lines):
224
+ if line.strip() != heading:
225
+ continue
226
+ insertion = block if block.endswith("\n") else f"{block}\n"
227
+ lines.insert(index + 1, insertion)
228
+ return "".join(lines)
229
+
230
+ return template
231
+
232
+
233
+ def _apply_minor_audit_overrides(template: str) -> str:
234
+ """Apply deterministic minor-audit prompt adjustments."""
235
+ updated = template
236
+ for variable_name in ("spec", "user-story", "research"):
237
+ updated = _remove_lines_referencing_variable(updated, variable_name)
238
+
239
+ mode_block = (
240
+ "\n"
241
+ "### Minor-Audit Mode Overrides (Mandatory)\n"
242
+ "\n"
243
+ "- Use `${folderpath}/issue.md` as the sole requirements source.\n"
244
+ "- Do not require or reference `${spec}`, `${user-story}`, or `${research}`.\n"
245
+ "- Output exactly 3 phases in this order:\n"
246
+ " - Phase 0 — Baseline Capture\n"
247
+ " - Phase 1 — Handoff to small-path planning/development agent\n"
248
+ " - Phase 2 — Final QC loop\n"
249
+ )
250
+ return _insert_after_heading(updated, "## Core Requirements", mode_block)
251
+
252
+
253
+ def _extract_template_variables(template: str) -> set[str]:
254
+ """Extract `${...}` placeholder names from a template string."""
255
+ return {match.group(1) for match in re.finditer(r"\$\{([^}]+)\}", template)}
256
+
257
+
258
+ def _resolve_work_mode_from_issue(
259
+ folderpath: str, workspace_root: Path
260
+ ) -> tuple[str, str]:
261
+ """Resolve `${work-mode}` and `${fallback-reason}` from `issue.md`."""
262
+ issue_path = workspace_root / Path(folderpath) / "issue.md"
263
+ if not issue_path.exists():
264
+ return resolve_selected_work_mode(None), build_fallback_reason(None)
265
+
266
+ try:
267
+ issue_content = issue_path.read_text(encoding="utf-8")
268
+ except OSError:
269
+ return (
270
+ resolve_selected_work_mode(None),
271
+ "issue.md unreadable; fail closed to full-feature",
272
+ )
273
+
274
+ return resolve_selected_work_mode(issue_content), build_fallback_reason(
275
+ issue_content
276
+ )
277
+
278
+
279
+ def _resolve_workspace_root(workspace_argument: str | None) -> Path:
280
+ """Resolve the workspace root used for path substitutions and file lookups.
281
+
282
+ Purpose:
283
+ Honor the extension-provided `--workspace` argument when present so the
284
+ bundled resolver behaves deterministically even when the current process
285
+ directory does not match the intended workspace root.
286
+
287
+ Args:
288
+ workspace_argument (str | None): Optional CLI-provided workspace root.
289
+
290
+ Returns:
291
+ Path: Absolute workspace root path.
292
+
293
+ Raises:
294
+ None.
295
+
296
+ Side Effects:
297
+ None.
298
+ """
299
+ if workspace_argument is None:
300
+ return Path.cwd()
301
+
302
+ return Path(workspace_argument).resolve()
303
+
304
+
305
+ def _resolve_target_path(target_argument: str, workspace_root: Path) -> Path:
306
+ """Resolve the target path against the workspace root when needed.
307
+
308
+ Purpose:
309
+ Preserve workspace-relative target resolution semantics for the bundled
310
+ CLI contract while still supporting absolute target paths emitted by the
311
+ extension service.
312
+
313
+ Args:
314
+ target_argument (str): CLI-provided target path.
315
+ workspace_root (Path): Resolved workspace root for relative targets.
316
+
317
+ Returns:
318
+ Path: Absolute target path when the target is workspace-relative, or the
319
+ original absolute path unchanged.
320
+
321
+ Raises:
322
+ None.
323
+
324
+ Side Effects:
325
+ None.
326
+ """
327
+ target_path = Path(target_argument)
328
+ if target_path.is_absolute():
329
+ return target_path
330
+
331
+ return workspace_root / target_path
332
+
333
+
334
+ def _replace_all_variables(template: str, variables: dict[str, str]) -> str:
335
+ """Replace every referenced placeholder using the provided mapping."""
336
+ referenced = _extract_template_variables(template)
337
+ missing = sorted(variable for variable in referenced if variable not in variables)
338
+ if missing:
339
+ raise ValueError(f"Unresolved template variables: {', '.join(missing)}")
340
+
341
+ resolved = template
342
+ for key in sorted(referenced):
343
+ resolved = resolved.replace(f"${{{key}}}", variables[key])
344
+
345
+ if _extract_template_variables(resolved):
346
+ raise ValueError("Template resolution failed: unresolved placeholders remain")
347
+
348
+ return resolved
349
+
350
+
351
+ def resolve_prompt(template_content: str, target_path: Path, cwd: Path) -> str:
352
+ """Resolve all supported atomic-plan prompt placeholders.
353
+
354
+ Purpose:
355
+ Apply the same prompt substitutions as the repository resolver while
356
+ using the bundled work-mode helper for destination-workspace execution.
357
+
358
+ Args:
359
+ template_content (str): Raw prompt-template content.
360
+ target_path (Path): Target plan file used for relative substitutions.
361
+ cwd (Path): Workspace root used for relative resolution and file lookup.
362
+
363
+ Returns:
364
+ str: Fully resolved prompt content with no remaining placeholders.
365
+
366
+ Raises:
367
+ ValueError: If required placeholders cannot be resolved.
368
+
369
+ Side Effects:
370
+ Reads sibling feature documents for optional substitutions and work-mode
371
+ detection.
372
+ """
373
+ content = strip_front_matter(template_content)
374
+ relative_target = _try_relative_to_workspace(target_path, cwd)
375
+ folderpath = _resolve_folderpath(target_path, cwd)
376
+ feature_foldername = _resolve_feature_foldername(folderpath)
377
+
378
+ variables: dict[str, str] = {
379
+ "file": str(relative_target).replace("\\", "/"),
380
+ "folderpath": folderpath,
381
+ "name": _resolve_name_from_feature_foldername(feature_foldername),
382
+ "spec": _resolve_spec_path(folderpath),
383
+ "user-story": _resolve_user_story_value(folderpath, cwd),
384
+ }
385
+
386
+ selected_work_mode, fallback_reason = _resolve_work_mode_from_issue(folderpath, cwd)
387
+ variables["work-mode"] = selected_work_mode
388
+ variables["fallback-reason"] = fallback_reason
389
+
390
+ # Minor-audit mode intentionally removes spec/story/research requirements.
391
+ if selected_work_mode == "minor-audit":
392
+ content = _apply_minor_audit_overrides(content)
393
+
394
+ research_value = _resolve_research_value(folderpath, cwd)
395
+ if research_value is None:
396
+ content = _remove_lines_referencing_variable(content, "research")
397
+ else:
398
+ variables["research"] = research_value
399
+
400
+ # Remove the template clause that assumes a present user-story file.
401
+ if "(missing)" in variables["user-story"]:
402
+ content = _remove_user_story_clause_when_missing(content)
403
+
404
+ return _replace_all_variables(content, variables)
405
+
406
+
407
+ def main() -> int:
408
+ """Run the bundled prompt resolver CLI."""
409
+ parser = argparse.ArgumentParser(description="Resolve atomic-plan prompt variables")
410
+ parser.add_argument("--template", required=True, help="Path to the prompt template")
411
+ parser.add_argument("--target", required=True, help="Path to the target file")
412
+ parser.add_argument(
413
+ "--workspace",
414
+ required=False,
415
+ help="Workspace root used for relative prompt-resolution substitutions",
416
+ )
417
+ args = parser.parse_args()
418
+
419
+ template_path = Path(args.template)
420
+ workspace_root = _resolve_workspace_root(args.workspace)
421
+ target_path = _resolve_target_path(args.target, workspace_root)
422
+
423
+ if not template_path.exists():
424
+ print(f"Error: Template file not found: {template_path}", file=sys.stderr)
425
+ return 1
426
+
427
+ if not target_path.exists():
428
+ print(f"Error: Target file not found: {target_path}", file=sys.stderr)
429
+ return 1
430
+
431
+ try:
432
+ template_content = template_path.read_text(encoding="utf-8")
433
+ except OSError as error:
434
+ print(f"Error reading template: {error}", file=sys.stderr)
435
+ return 1
436
+
437
+ try:
438
+ resolved_content = resolve_prompt(template_content, target_path, workspace_root)
439
+ except Exception as error: # noqa: BLE001 - CLI top-level error handling
440
+ print(f"Error processing prompt: {error}", file=sys.stderr)
441
+ return 1
442
+
443
+ if copy_to_clipboard(resolved_content):
444
+ print("Successfully resolved prompt and copied to clipboard.")
445
+ print(resolved_content)
446
+ return 0
447
+
448
+ print(
449
+ "Could not copy to clipboard; printing resolved prompt to stdout.",
450
+ file=sys.stderr,
451
+ )
452
+ print(resolved_content)
453
+ return 0
454
+
455
+
456
+ if __name__ == "__main__":
457
+ raise SystemExit(main())