claude-autopm 2.8.2 → 2.8.4

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 (391) hide show
  1. package/README.md +399 -637
  2. package/install/install.js +15 -5
  3. package/package.json +2 -1
  4. package/packages/plugin-ai/LICENSE +21 -0
  5. package/packages/plugin-ai/README.md +316 -0
  6. package/packages/plugin-ai/agents/anthropic-claude-expert.md +579 -0
  7. package/packages/plugin-ai/agents/azure-openai-expert.md +1411 -0
  8. package/packages/plugin-ai/agents/gemini-api-expert.md +880 -0
  9. package/packages/plugin-ai/agents/google-a2a-expert.md +1445 -0
  10. package/packages/plugin-ai/agents/huggingface-expert.md +2131 -0
  11. package/packages/plugin-ai/agents/langchain-expert.md +1427 -0
  12. package/packages/plugin-ai/agents/langgraph-workflow-expert.md +520 -0
  13. package/packages/plugin-ai/agents/openai-python-expert.md +1087 -0
  14. package/packages/plugin-ai/commands/a2a-setup.md +886 -0
  15. package/packages/plugin-ai/commands/ai-model-deployment.md +481 -0
  16. package/packages/plugin-ai/commands/anthropic-optimize.md +793 -0
  17. package/packages/plugin-ai/commands/huggingface-deploy.md +789 -0
  18. package/packages/plugin-ai/commands/langchain-optimize.md +807 -0
  19. package/packages/plugin-ai/commands/llm-optimize.md +348 -0
  20. package/packages/plugin-ai/commands/openai-optimize.md +863 -0
  21. package/packages/plugin-ai/commands/rag-optimize.md +841 -0
  22. package/packages/plugin-ai/commands/rag-setup-scaffold.md +382 -0
  23. package/packages/plugin-ai/package.json +66 -0
  24. package/packages/plugin-ai/plugin.json +519 -0
  25. package/packages/plugin-ai/rules/ai-model-standards.md +449 -0
  26. package/packages/plugin-ai/rules/prompt-engineering-standards.md +509 -0
  27. package/packages/plugin-ai/scripts/examples/huggingface-inference-example.py +145 -0
  28. package/packages/plugin-ai/scripts/examples/langchain-rag-example.py +366 -0
  29. package/packages/plugin-ai/scripts/examples/mlflow-tracking-example.py +224 -0
  30. package/packages/plugin-ai/scripts/examples/openai-chat-example.py +425 -0
  31. package/packages/plugin-cloud/README.md +268 -0
  32. package/packages/plugin-cloud/agents/README.md +55 -0
  33. package/packages/plugin-cloud/agents/aws-cloud-architect.md +521 -0
  34. package/packages/plugin-cloud/agents/azure-cloud-architect.md +436 -0
  35. package/packages/plugin-cloud/agents/gcp-cloud-architect.md +385 -0
  36. package/packages/plugin-cloud/agents/gcp-cloud-functions-engineer.md +306 -0
  37. package/packages/plugin-cloud/agents/gemini-api-expert.md +880 -0
  38. package/packages/plugin-cloud/agents/kubernetes-orchestrator.md +566 -0
  39. package/packages/plugin-cloud/agents/openai-python-expert.md +1087 -0
  40. package/packages/plugin-cloud/agents/terraform-infrastructure-expert.md +454 -0
  41. package/packages/plugin-cloud/commands/cloud-cost-optimize.md +243 -0
  42. package/packages/plugin-cloud/commands/cloud-validate.md +196 -0
  43. package/packages/plugin-cloud/commands/infra-deploy.md +38 -0
  44. package/packages/plugin-cloud/commands/k8s-deploy.md +37 -0
  45. package/packages/plugin-cloud/commands/ssh-security.md +65 -0
  46. package/packages/plugin-cloud/commands/traefik-setup.md +65 -0
  47. package/packages/plugin-cloud/hooks/pre-cloud-deploy.js +456 -0
  48. package/packages/plugin-cloud/package.json +64 -0
  49. package/packages/plugin-cloud/plugin.json +338 -0
  50. package/packages/plugin-cloud/rules/cloud-security-compliance.md +313 -0
  51. package/packages/plugin-cloud/rules/infrastructure-pipeline.md +128 -0
  52. package/packages/plugin-cloud/scripts/examples/aws-validate.sh +30 -0
  53. package/packages/plugin-cloud/scripts/examples/azure-setup.sh +33 -0
  54. package/packages/plugin-cloud/scripts/examples/gcp-setup.sh +39 -0
  55. package/packages/plugin-cloud/scripts/examples/k8s-validate.sh +40 -0
  56. package/packages/plugin-cloud/scripts/examples/terraform-init.sh +26 -0
  57. package/packages/plugin-core/README.md +274 -0
  58. package/packages/plugin-core/agents/core/agent-manager.md +296 -0
  59. package/packages/plugin-core/agents/core/code-analyzer.md +131 -0
  60. package/packages/plugin-core/agents/core/file-analyzer.md +162 -0
  61. package/packages/plugin-core/agents/core/test-runner.md +200 -0
  62. package/packages/plugin-core/commands/code-rabbit.md +128 -0
  63. package/packages/plugin-core/commands/prompt.md +9 -0
  64. package/packages/plugin-core/commands/re-init.md +9 -0
  65. package/packages/plugin-core/hooks/context7-reminder.md +29 -0
  66. package/packages/plugin-core/hooks/enforce-agents.js +125 -0
  67. package/packages/plugin-core/hooks/enforce-agents.sh +35 -0
  68. package/packages/plugin-core/hooks/pre-agent-context7.js +224 -0
  69. package/packages/plugin-core/hooks/pre-command-context7.js +229 -0
  70. package/packages/plugin-core/hooks/strict-enforce-agents.sh +39 -0
  71. package/packages/plugin-core/hooks/test-hook.sh +21 -0
  72. package/packages/plugin-core/hooks/unified-context7-enforcement.sh +38 -0
  73. package/packages/plugin-core/package.json +45 -0
  74. package/packages/plugin-core/plugin.json +387 -0
  75. package/packages/plugin-core/rules/agent-coordination.md +549 -0
  76. package/packages/plugin-core/rules/agent-mandatory.md +170 -0
  77. package/packages/plugin-core/rules/ai-integration-patterns.md +219 -0
  78. package/packages/plugin-core/rules/command-pipelines.md +208 -0
  79. package/packages/plugin-core/rules/context-optimization.md +176 -0
  80. package/packages/plugin-core/rules/context7-enforcement.md +327 -0
  81. package/packages/plugin-core/rules/datetime.md +122 -0
  82. package/packages/plugin-core/rules/definition-of-done.md +272 -0
  83. package/packages/plugin-core/rules/development-environments.md +19 -0
  84. package/packages/plugin-core/rules/development-workflow.md +198 -0
  85. package/packages/plugin-core/rules/framework-path-rules.md +180 -0
  86. package/packages/plugin-core/rules/frontmatter-operations.md +64 -0
  87. package/packages/plugin-core/rules/git-strategy.md +237 -0
  88. package/packages/plugin-core/rules/golden-rules.md +181 -0
  89. package/packages/plugin-core/rules/naming-conventions.md +111 -0
  90. package/packages/plugin-core/rules/no-pr-workflow.md +183 -0
  91. package/packages/plugin-core/rules/performance-guidelines.md +403 -0
  92. package/packages/plugin-core/rules/pipeline-mandatory.md +109 -0
  93. package/packages/plugin-core/rules/security-checklist.md +318 -0
  94. package/packages/plugin-core/rules/standard-patterns.md +197 -0
  95. package/packages/plugin-core/rules/strip-frontmatter.md +85 -0
  96. package/packages/plugin-core/rules/tdd.enforcement.md +103 -0
  97. package/packages/plugin-core/rules/use-ast-grep.md +113 -0
  98. package/packages/plugin-core/scripts/lib/datetime-utils.sh +254 -0
  99. package/packages/plugin-core/scripts/lib/frontmatter-utils.sh +294 -0
  100. package/packages/plugin-core/scripts/lib/github-utils.sh +221 -0
  101. package/packages/plugin-core/scripts/lib/logging-utils.sh +199 -0
  102. package/packages/plugin-core/scripts/lib/validation-utils.sh +339 -0
  103. package/packages/plugin-core/scripts/mcp/add.sh +7 -0
  104. package/packages/plugin-core/scripts/mcp/disable.sh +12 -0
  105. package/packages/plugin-core/scripts/mcp/enable.sh +12 -0
  106. package/packages/plugin-core/scripts/mcp/list.sh +7 -0
  107. package/packages/plugin-core/scripts/mcp/sync.sh +8 -0
  108. package/packages/plugin-data/README.md +315 -0
  109. package/packages/plugin-data/agents/airflow-orchestration-expert.md +158 -0
  110. package/packages/plugin-data/agents/kedro-pipeline-expert.md +304 -0
  111. package/packages/plugin-data/agents/langgraph-workflow-expert.md +530 -0
  112. package/packages/plugin-data/commands/airflow-dag-scaffold.md +413 -0
  113. package/packages/plugin-data/commands/kafka-pipeline-scaffold.md +503 -0
  114. package/packages/plugin-data/package.json +66 -0
  115. package/packages/plugin-data/plugin.json +294 -0
  116. package/packages/plugin-data/rules/data-quality-standards.md +373 -0
  117. package/packages/plugin-data/rules/etl-pipeline-standards.md +255 -0
  118. package/packages/plugin-data/scripts/examples/airflow-dag-example.py +245 -0
  119. package/packages/plugin-data/scripts/examples/dbt-transform-example.sql +238 -0
  120. package/packages/plugin-data/scripts/examples/kafka-streaming-example.py +257 -0
  121. package/packages/plugin-data/scripts/examples/pandas-etl-example.py +332 -0
  122. package/packages/plugin-databases/README.md +330 -0
  123. package/packages/plugin-databases/agents/README.md +50 -0
  124. package/packages/plugin-databases/agents/bigquery-expert.md +401 -0
  125. package/packages/plugin-databases/agents/cosmosdb-expert.md +375 -0
  126. package/packages/plugin-databases/agents/mongodb-expert.md +407 -0
  127. package/packages/plugin-databases/agents/postgresql-expert.md +329 -0
  128. package/packages/plugin-databases/agents/redis-expert.md +74 -0
  129. package/packages/plugin-databases/commands/db-optimize.md +612 -0
  130. package/packages/plugin-databases/package.json +60 -0
  131. package/packages/plugin-databases/plugin.json +237 -0
  132. package/packages/plugin-databases/rules/database-management-strategy.md +146 -0
  133. package/packages/plugin-databases/rules/database-pipeline.md +316 -0
  134. package/packages/plugin-databases/scripts/examples/bigquery-cost-analyze.sh +160 -0
  135. package/packages/plugin-databases/scripts/examples/cosmosdb-ru-optimize.sh +163 -0
  136. package/packages/plugin-databases/scripts/examples/mongodb-shard-check.sh +120 -0
  137. package/packages/plugin-databases/scripts/examples/postgres-index-analyze.sh +95 -0
  138. package/packages/plugin-databases/scripts/examples/redis-cache-stats.sh +121 -0
  139. package/packages/plugin-devops/README.md +367 -0
  140. package/packages/plugin-devops/agents/README.md +52 -0
  141. package/packages/plugin-devops/agents/azure-devops-specialist.md +308 -0
  142. package/packages/plugin-devops/agents/docker-containerization-expert.md +298 -0
  143. package/packages/plugin-devops/agents/github-operations-specialist.md +335 -0
  144. package/packages/plugin-devops/agents/mcp-context-manager.md +319 -0
  145. package/packages/plugin-devops/agents/observability-engineer.md +574 -0
  146. package/packages/plugin-devops/agents/ssh-operations-expert.md +1093 -0
  147. package/packages/plugin-devops/agents/traefik-proxy-expert.md +444 -0
  148. package/packages/plugin-devops/commands/ci-pipeline-create.md +581 -0
  149. package/packages/plugin-devops/commands/docker-optimize.md +493 -0
  150. package/packages/plugin-devops/commands/workflow-create.md +42 -0
  151. package/packages/plugin-devops/hooks/pre-docker-build.js +472 -0
  152. package/packages/plugin-devops/package.json +61 -0
  153. package/packages/plugin-devops/plugin.json +302 -0
  154. package/packages/plugin-devops/rules/ci-cd-kubernetes-strategy.md +25 -0
  155. package/packages/plugin-devops/rules/devops-troubleshooting-playbook.md +450 -0
  156. package/packages/plugin-devops/rules/docker-first-development.md +404 -0
  157. package/packages/plugin-devops/rules/github-operations.md +92 -0
  158. package/packages/plugin-devops/scripts/examples/docker-build-multistage.sh +43 -0
  159. package/packages/plugin-devops/scripts/examples/docker-compose-validate.sh +74 -0
  160. package/packages/plugin-devops/scripts/examples/github-workflow-validate.sh +48 -0
  161. package/packages/plugin-devops/scripts/examples/prometheus-health-check.sh +58 -0
  162. package/packages/plugin-devops/scripts/examples/ssh-key-setup.sh +74 -0
  163. package/packages/plugin-frameworks/README.md +309 -0
  164. package/packages/plugin-frameworks/agents/README.md +64 -0
  165. package/packages/plugin-frameworks/agents/e2e-test-engineer.md +579 -0
  166. package/packages/plugin-frameworks/agents/nats-messaging-expert.md +254 -0
  167. package/packages/plugin-frameworks/agents/react-frontend-engineer.md +393 -0
  168. package/packages/plugin-frameworks/agents/react-ui-expert.md +226 -0
  169. package/packages/plugin-frameworks/agents/tailwindcss-expert.md +1021 -0
  170. package/packages/plugin-frameworks/agents/ux-design-expert.md +244 -0
  171. package/packages/plugin-frameworks/commands/app-scaffold.md +50 -0
  172. package/packages/plugin-frameworks/commands/nextjs-optimize.md +692 -0
  173. package/packages/plugin-frameworks/commands/react-optimize.md +583 -0
  174. package/packages/plugin-frameworks/commands/tailwind-system.md +64 -0
  175. package/packages/plugin-frameworks/package.json +59 -0
  176. package/packages/plugin-frameworks/plugin.json +224 -0
  177. package/packages/plugin-frameworks/rules/performance-guidelines.md +403 -0
  178. package/packages/plugin-frameworks/rules/ui-development-standards.md +281 -0
  179. package/packages/plugin-frameworks/rules/ui-framework-rules.md +151 -0
  180. package/packages/plugin-frameworks/scripts/examples/react-component-perf.sh +34 -0
  181. package/packages/plugin-frameworks/scripts/examples/tailwind-optimize.sh +44 -0
  182. package/packages/plugin-frameworks/scripts/examples/vue-composition-check.sh +41 -0
  183. package/packages/plugin-languages/README.md +333 -0
  184. package/packages/plugin-languages/agents/README.md +50 -0
  185. package/packages/plugin-languages/agents/bash-scripting-expert.md +541 -0
  186. package/packages/plugin-languages/agents/javascript-frontend-engineer.md +197 -0
  187. package/packages/plugin-languages/agents/nodejs-backend-engineer.md +226 -0
  188. package/packages/plugin-languages/agents/python-backend-engineer.md +214 -0
  189. package/packages/plugin-languages/agents/python-backend-expert.md +289 -0
  190. package/packages/plugin-languages/commands/javascript-optimize.md +636 -0
  191. package/packages/plugin-languages/commands/nodejs-api-scaffold.md +341 -0
  192. package/packages/plugin-languages/commands/nodejs-optimize.md +689 -0
  193. package/packages/plugin-languages/commands/python-api-scaffold.md +261 -0
  194. package/packages/plugin-languages/commands/python-optimize.md +593 -0
  195. package/packages/plugin-languages/package.json +65 -0
  196. package/packages/plugin-languages/plugin.json +265 -0
  197. package/packages/plugin-languages/rules/code-quality-standards.md +496 -0
  198. package/packages/plugin-languages/rules/testing-standards.md +768 -0
  199. package/packages/plugin-languages/scripts/examples/bash-production-script.sh +520 -0
  200. package/packages/plugin-languages/scripts/examples/javascript-es6-patterns.js +291 -0
  201. package/packages/plugin-languages/scripts/examples/nodejs-async-iteration.js +360 -0
  202. package/packages/plugin-languages/scripts/examples/python-async-patterns.py +289 -0
  203. package/packages/plugin-languages/scripts/examples/typescript-patterns.ts +432 -0
  204. package/packages/plugin-ml/README.md +430 -0
  205. package/packages/plugin-ml/agents/automl-expert.md +326 -0
  206. package/packages/plugin-ml/agents/computer-vision-expert.md +550 -0
  207. package/packages/plugin-ml/agents/gradient-boosting-expert.md +455 -0
  208. package/packages/plugin-ml/agents/neural-network-architect.md +1228 -0
  209. package/packages/plugin-ml/agents/nlp-transformer-expert.md +584 -0
  210. package/packages/plugin-ml/agents/pytorch-expert.md +412 -0
  211. package/packages/plugin-ml/agents/reinforcement-learning-expert.md +2088 -0
  212. package/packages/plugin-ml/agents/scikit-learn-expert.md +228 -0
  213. package/packages/plugin-ml/agents/tensorflow-keras-expert.md +509 -0
  214. package/packages/plugin-ml/agents/time-series-expert.md +303 -0
  215. package/packages/plugin-ml/commands/ml-automl.md +572 -0
  216. package/packages/plugin-ml/commands/ml-train-optimize.md +657 -0
  217. package/packages/plugin-ml/package.json +52 -0
  218. package/packages/plugin-ml/plugin.json +338 -0
  219. package/packages/plugin-pm/README.md +368 -0
  220. package/packages/plugin-pm/claudeautopm-plugin-pm-2.0.0.tgz +0 -0
  221. package/packages/plugin-pm/commands/azure/COMMANDS.md +107 -0
  222. package/packages/plugin-pm/commands/azure/COMMAND_MAPPING.md +252 -0
  223. package/packages/plugin-pm/commands/azure/INTEGRATION_FIX.md +103 -0
  224. package/packages/plugin-pm/commands/azure/README.md +246 -0
  225. package/packages/plugin-pm/commands/azure/active-work.md +198 -0
  226. package/packages/plugin-pm/commands/azure/aliases.md +143 -0
  227. package/packages/plugin-pm/commands/azure/blocked-items.md +287 -0
  228. package/packages/plugin-pm/commands/azure/clean.md +93 -0
  229. package/packages/plugin-pm/commands/azure/docs-query.md +48 -0
  230. package/packages/plugin-pm/commands/azure/feature-decompose.md +380 -0
  231. package/packages/plugin-pm/commands/azure/feature-list.md +61 -0
  232. package/packages/plugin-pm/commands/azure/feature-new.md +115 -0
  233. package/packages/plugin-pm/commands/azure/feature-show.md +205 -0
  234. package/packages/plugin-pm/commands/azure/feature-start.md +130 -0
  235. package/packages/plugin-pm/commands/azure/fix-integration-example.md +93 -0
  236. package/packages/plugin-pm/commands/azure/help.md +150 -0
  237. package/packages/plugin-pm/commands/azure/import-us.md +269 -0
  238. package/packages/plugin-pm/commands/azure/init.md +211 -0
  239. package/packages/plugin-pm/commands/azure/next-task.md +262 -0
  240. package/packages/plugin-pm/commands/azure/search.md +160 -0
  241. package/packages/plugin-pm/commands/azure/sprint-status.md +235 -0
  242. package/packages/plugin-pm/commands/azure/standup.md +260 -0
  243. package/packages/plugin-pm/commands/azure/sync-all.md +99 -0
  244. package/packages/plugin-pm/commands/azure/task-analyze.md +186 -0
  245. package/packages/plugin-pm/commands/azure/task-close.md +329 -0
  246. package/packages/plugin-pm/commands/azure/task-edit.md +145 -0
  247. package/packages/plugin-pm/commands/azure/task-list.md +263 -0
  248. package/packages/plugin-pm/commands/azure/task-new.md +84 -0
  249. package/packages/plugin-pm/commands/azure/task-reopen.md +79 -0
  250. package/packages/plugin-pm/commands/azure/task-show.md +126 -0
  251. package/packages/plugin-pm/commands/azure/task-start.md +301 -0
  252. package/packages/plugin-pm/commands/azure/task-status.md +65 -0
  253. package/packages/plugin-pm/commands/azure/task-sync.md +67 -0
  254. package/packages/plugin-pm/commands/azure/us-edit.md +164 -0
  255. package/packages/plugin-pm/commands/azure/us-list.md +202 -0
  256. package/packages/plugin-pm/commands/azure/us-new.md +265 -0
  257. package/packages/plugin-pm/commands/azure/us-parse.md +253 -0
  258. package/packages/plugin-pm/commands/azure/us-show.md +188 -0
  259. package/packages/plugin-pm/commands/azure/us-status.md +320 -0
  260. package/packages/plugin-pm/commands/azure/validate.md +86 -0
  261. package/packages/plugin-pm/commands/azure/work-item-sync.md +47 -0
  262. package/packages/plugin-pm/commands/blocked.md +28 -0
  263. package/packages/plugin-pm/commands/clean.md +119 -0
  264. package/packages/plugin-pm/commands/context-create.md +136 -0
  265. package/packages/plugin-pm/commands/context-prime.md +170 -0
  266. package/packages/plugin-pm/commands/context-update.md +292 -0
  267. package/packages/plugin-pm/commands/context.md +28 -0
  268. package/packages/plugin-pm/commands/epic-close.md +86 -0
  269. package/packages/plugin-pm/commands/epic-decompose.md +370 -0
  270. package/packages/plugin-pm/commands/epic-edit.md +83 -0
  271. package/packages/plugin-pm/commands/epic-list.md +30 -0
  272. package/packages/plugin-pm/commands/epic-merge.md +222 -0
  273. package/packages/plugin-pm/commands/epic-oneshot.md +119 -0
  274. package/packages/plugin-pm/commands/epic-refresh.md +119 -0
  275. package/packages/plugin-pm/commands/epic-show.md +28 -0
  276. package/packages/plugin-pm/commands/epic-split.md +120 -0
  277. package/packages/plugin-pm/commands/epic-start.md +195 -0
  278. package/packages/plugin-pm/commands/epic-status.md +28 -0
  279. package/packages/plugin-pm/commands/epic-sync-modular.md +338 -0
  280. package/packages/plugin-pm/commands/epic-sync-original.md +473 -0
  281. package/packages/plugin-pm/commands/epic-sync.md +486 -0
  282. package/packages/plugin-pm/commands/github/workflow-create.md +42 -0
  283. package/packages/plugin-pm/commands/help.md +28 -0
  284. package/packages/plugin-pm/commands/import.md +115 -0
  285. package/packages/plugin-pm/commands/in-progress.md +28 -0
  286. package/packages/plugin-pm/commands/init.md +28 -0
  287. package/packages/plugin-pm/commands/issue-analyze.md +202 -0
  288. package/packages/plugin-pm/commands/issue-close.md +119 -0
  289. package/packages/plugin-pm/commands/issue-edit.md +93 -0
  290. package/packages/plugin-pm/commands/issue-reopen.md +87 -0
  291. package/packages/plugin-pm/commands/issue-show.md +41 -0
  292. package/packages/plugin-pm/commands/issue-start.md +234 -0
  293. package/packages/plugin-pm/commands/issue-status.md +95 -0
  294. package/packages/plugin-pm/commands/issue-sync.md +411 -0
  295. package/packages/plugin-pm/commands/next.md +28 -0
  296. package/packages/plugin-pm/commands/prd-edit.md +82 -0
  297. package/packages/plugin-pm/commands/prd-list.md +28 -0
  298. package/packages/plugin-pm/commands/prd-new.md +55 -0
  299. package/packages/plugin-pm/commands/prd-parse.md +42 -0
  300. package/packages/plugin-pm/commands/prd-status.md +28 -0
  301. package/packages/plugin-pm/commands/search.md +28 -0
  302. package/packages/plugin-pm/commands/standup.md +28 -0
  303. package/packages/plugin-pm/commands/status.md +28 -0
  304. package/packages/plugin-pm/commands/sync.md +99 -0
  305. package/packages/plugin-pm/commands/test-reference-update.md +151 -0
  306. package/packages/plugin-pm/commands/validate.md +28 -0
  307. package/packages/plugin-pm/commands/what-next.md +28 -0
  308. package/packages/plugin-pm/package.json +57 -0
  309. package/packages/plugin-pm/plugin.json +503 -0
  310. package/packages/plugin-pm/scripts/pm/analytics.js +425 -0
  311. package/packages/plugin-pm/scripts/pm/blocked.js +164 -0
  312. package/packages/plugin-pm/scripts/pm/blocked.sh +78 -0
  313. package/packages/plugin-pm/scripts/pm/clean.js +464 -0
  314. package/packages/plugin-pm/scripts/pm/context-create.js +216 -0
  315. package/packages/plugin-pm/scripts/pm/context-prime.js +335 -0
  316. package/packages/plugin-pm/scripts/pm/context-update.js +344 -0
  317. package/packages/plugin-pm/scripts/pm/context.js +338 -0
  318. package/packages/plugin-pm/scripts/pm/epic-close.js +347 -0
  319. package/packages/plugin-pm/scripts/pm/epic-edit.js +382 -0
  320. package/packages/plugin-pm/scripts/pm/epic-list.js +273 -0
  321. package/packages/plugin-pm/scripts/pm/epic-list.sh +109 -0
  322. package/packages/plugin-pm/scripts/pm/epic-show.js +291 -0
  323. package/packages/plugin-pm/scripts/pm/epic-show.sh +105 -0
  324. package/packages/plugin-pm/scripts/pm/epic-split.js +522 -0
  325. package/packages/plugin-pm/scripts/pm/epic-start/epic-start.js +183 -0
  326. package/packages/plugin-pm/scripts/pm/epic-start/epic-start.sh +94 -0
  327. package/packages/plugin-pm/scripts/pm/epic-status.js +291 -0
  328. package/packages/plugin-pm/scripts/pm/epic-status.sh +104 -0
  329. package/packages/plugin-pm/scripts/pm/epic-sync/README.md +208 -0
  330. package/packages/plugin-pm/scripts/pm/epic-sync/create-epic-issue.sh +77 -0
  331. package/packages/plugin-pm/scripts/pm/epic-sync/create-task-issues.sh +86 -0
  332. package/packages/plugin-pm/scripts/pm/epic-sync/update-epic-file.sh +79 -0
  333. package/packages/plugin-pm/scripts/pm/epic-sync/update-references.sh +89 -0
  334. package/packages/plugin-pm/scripts/pm/epic-sync.sh +137 -0
  335. package/packages/plugin-pm/scripts/pm/help.js +92 -0
  336. package/packages/plugin-pm/scripts/pm/help.sh +90 -0
  337. package/packages/plugin-pm/scripts/pm/in-progress.js +178 -0
  338. package/packages/plugin-pm/scripts/pm/in-progress.sh +93 -0
  339. package/packages/plugin-pm/scripts/pm/init.js +321 -0
  340. package/packages/plugin-pm/scripts/pm/init.sh +178 -0
  341. package/packages/plugin-pm/scripts/pm/issue-close.js +232 -0
  342. package/packages/plugin-pm/scripts/pm/issue-edit.js +310 -0
  343. package/packages/plugin-pm/scripts/pm/issue-show.js +272 -0
  344. package/packages/plugin-pm/scripts/pm/issue-start.js +181 -0
  345. package/packages/plugin-pm/scripts/pm/issue-sync/format-comment.sh +468 -0
  346. package/packages/plugin-pm/scripts/pm/issue-sync/gather-updates.sh +460 -0
  347. package/packages/plugin-pm/scripts/pm/issue-sync/post-comment.sh +330 -0
  348. package/packages/plugin-pm/scripts/pm/issue-sync/preflight-validation.sh +348 -0
  349. package/packages/plugin-pm/scripts/pm/issue-sync/update-frontmatter.sh +387 -0
  350. package/packages/plugin-pm/scripts/pm/lib/README.md +85 -0
  351. package/packages/plugin-pm/scripts/pm/lib/epic-discovery.js +119 -0
  352. package/packages/plugin-pm/scripts/pm/lib/logger.js +78 -0
  353. package/packages/plugin-pm/scripts/pm/next.js +189 -0
  354. package/packages/plugin-pm/scripts/pm/next.sh +72 -0
  355. package/packages/plugin-pm/scripts/pm/optimize.js +407 -0
  356. package/packages/plugin-pm/scripts/pm/pr-create.js +337 -0
  357. package/packages/plugin-pm/scripts/pm/pr-list.js +257 -0
  358. package/packages/plugin-pm/scripts/pm/prd-list.js +242 -0
  359. package/packages/plugin-pm/scripts/pm/prd-list.sh +103 -0
  360. package/packages/plugin-pm/scripts/pm/prd-new.js +684 -0
  361. package/packages/plugin-pm/scripts/pm/prd-parse.js +547 -0
  362. package/packages/plugin-pm/scripts/pm/prd-status.js +152 -0
  363. package/packages/plugin-pm/scripts/pm/prd-status.sh +63 -0
  364. package/packages/plugin-pm/scripts/pm/release.js +460 -0
  365. package/packages/plugin-pm/scripts/pm/search.js +192 -0
  366. package/packages/plugin-pm/scripts/pm/search.sh +89 -0
  367. package/packages/plugin-pm/scripts/pm/standup.js +362 -0
  368. package/packages/plugin-pm/scripts/pm/standup.sh +95 -0
  369. package/packages/plugin-pm/scripts/pm/status.js +148 -0
  370. package/packages/plugin-pm/scripts/pm/status.sh +59 -0
  371. package/packages/plugin-pm/scripts/pm/sync-batch.js +337 -0
  372. package/packages/plugin-pm/scripts/pm/sync.js +343 -0
  373. package/packages/plugin-pm/scripts/pm/template-list.js +141 -0
  374. package/packages/plugin-pm/scripts/pm/template-new.js +366 -0
  375. package/packages/plugin-pm/scripts/pm/validate.js +274 -0
  376. package/packages/plugin-pm/scripts/pm/validate.sh +106 -0
  377. package/packages/plugin-pm/scripts/pm/what-next.js +660 -0
  378. package/packages/plugin-testing/README.md +401 -0
  379. package/packages/plugin-testing/agents/frontend-testing-engineer.md +768 -0
  380. package/packages/plugin-testing/commands/jest-optimize.md +800 -0
  381. package/packages/plugin-testing/commands/playwright-optimize.md +887 -0
  382. package/packages/plugin-testing/commands/test-coverage.md +512 -0
  383. package/packages/plugin-testing/commands/test-performance.md +1041 -0
  384. package/packages/plugin-testing/commands/test-setup.md +414 -0
  385. package/packages/plugin-testing/package.json +40 -0
  386. package/packages/plugin-testing/plugin.json +197 -0
  387. package/packages/plugin-testing/rules/test-coverage-requirements.md +581 -0
  388. package/packages/plugin-testing/rules/testing-standards.md +529 -0
  389. package/packages/plugin-testing/scripts/examples/react-testing-example.test.jsx +460 -0
  390. package/packages/plugin-testing/scripts/examples/vitest-config-example.js +352 -0
  391. package/packages/plugin-testing/scripts/examples/vue-testing-example.test.js +586 -0
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * PM In-Progress Script - Node.js Implementation
5
+ *
6
+ * Migrated from in-progress.sh to show active work items
7
+ * Maintains full compatibility with the original bash implementation
8
+ */
9
+
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+
13
+ function getInProgressWork() {
14
+ const result = {
15
+ activeIssues: [],
16
+ activeEpics: [],
17
+ totalActive: 0
18
+ };
19
+
20
+ if (!fs.existsSync('.claude/epics')) {
21
+ return result;
22
+ }
23
+
24
+ try {
25
+ const epicDirs = fs.readdirSync('.claude/epics', { withFileTypes: true })
26
+ .filter(dirent => dirent.isDirectory())
27
+ .map(dirent => dirent.name);
28
+
29
+ // Check for active work in updates directories
30
+ for (const epicName of epicDirs) {
31
+ const epicPath = path.join('.claude/epics', epicName);
32
+ const updatesPath = path.join(epicPath, 'updates');
33
+
34
+ if (fs.existsSync(updatesPath)) {
35
+ try {
36
+ const updateDirs = fs.readdirSync(updatesPath, { withFileTypes: true })
37
+ .filter(dirent => dirent.isDirectory())
38
+ .map(dirent => dirent.name);
39
+
40
+ for (const issueNum of updateDirs) {
41
+ const progressFile = path.join(updatesPath, issueNum, 'progress.md');
42
+
43
+ if (fs.existsSync(progressFile)) {
44
+ try {
45
+ const progressContent = fs.readFileSync(progressFile, 'utf8');
46
+
47
+ // Extract completion percentage
48
+ const completionMatch = progressContent.match(/^completion:\s*(.*)$/m);
49
+ const completion = completionMatch ? completionMatch[1].trim() : '0%';
50
+
51
+ // Extract last sync
52
+ const lastSyncMatch = progressContent.match(/^last_sync:\s*(.*)$/m);
53
+ const lastSync = lastSyncMatch ? lastSyncMatch[1].trim() : null;
54
+
55
+ // Get task name from task file
56
+ const taskFile = path.join(epicPath, `${issueNum}.md`);
57
+ let taskName = 'Unknown task';
58
+
59
+ if (fs.existsSync(taskFile)) {
60
+ try {
61
+ const taskContent = fs.readFileSync(taskFile, 'utf8');
62
+ const nameMatch = taskContent.match(/^name:\s*(.*)$/m);
63
+ if (nameMatch) {
64
+ taskName = nameMatch[1].trim();
65
+ }
66
+ } catch (error) {
67
+ // Keep default task name
68
+ }
69
+ }
70
+
71
+ result.activeIssues.push({
72
+ issueNum,
73
+ epicName,
74
+ taskName,
75
+ completion,
76
+ lastSync
77
+ });
78
+
79
+ result.totalActive++;
80
+ } catch (error) {
81
+ // Skip unreadable progress files
82
+ continue;
83
+ }
84
+ }
85
+ }
86
+ } catch (error) {
87
+ // Skip unreadable updates directories
88
+ continue;
89
+ }
90
+ }
91
+ }
92
+
93
+ // Check for active epics
94
+ for (const epicName of epicDirs) {
95
+ const epicFile = path.join('.claude/epics', epicName, 'epic.md');
96
+
97
+ if (fs.existsSync(epicFile)) {
98
+ try {
99
+ const epicContent = fs.readFileSync(epicFile, 'utf8');
100
+
101
+ const statusMatch = epicContent.match(/^status:\s*(.*)$/m);
102
+ const status = statusMatch ? statusMatch[1].trim() : '';
103
+
104
+ if (status === 'in-progress' || status === 'active') {
105
+ const nameMatch = epicContent.match(/^name:\s*(.*)$/m);
106
+ const name = nameMatch ? nameMatch[1].trim() : epicName;
107
+
108
+ const progressMatch = epicContent.match(/^progress:\s*(.*)$/m);
109
+ const progress = progressMatch ? progressMatch[1].trim() : '0%';
110
+
111
+ result.activeEpics.push({
112
+ name,
113
+ status,
114
+ progress
115
+ });
116
+ }
117
+ } catch (error) {
118
+ // Skip unreadable epic files
119
+ continue;
120
+ }
121
+ }
122
+ }
123
+ } catch (error) {
124
+ // Directory doesn't exist or can't be read
125
+ }
126
+
127
+ return result;
128
+ }
129
+
130
+ function formatInProgressOutput(data) {
131
+ let output = 'Getting status...\n\n\n';
132
+ output += '🔄 In Progress Work\n';
133
+ output += '===================\n\n';
134
+
135
+ // Active issues
136
+ if (data.activeIssues.length > 0) {
137
+ for (const issue of data.activeIssues) {
138
+ output += `📝 Issue #${issue.issueNum} - ${issue.taskName}\n`;
139
+ output += ` Epic: ${issue.epicName}\n`;
140
+ output += ` Progress: ${issue.completion} complete\n`;
141
+
142
+ if (issue.lastSync) {
143
+ output += ` Last update: ${issue.lastSync}\n`;
144
+ }
145
+
146
+ output += '\n';
147
+ }
148
+ }
149
+
150
+ // Active epics
151
+ output += '📚 Active Epics:\n';
152
+ if (data.activeEpics.length > 0) {
153
+ for (const epic of data.activeEpics) {
154
+ output += ` • ${epic.name} - ${epic.progress} complete\n`;
155
+ }
156
+ }
157
+
158
+ output += '\n';
159
+
160
+ if (data.totalActive === 0) {
161
+ output += 'No active work items found.\n\n';
162
+ output += '💡 Start work with: /pm:next\n';
163
+ } else {
164
+ output += `📊 Total active items: ${data.totalActive}\n`;
165
+ }
166
+
167
+ return output;
168
+ }
169
+
170
+ // CommonJS export for testing
171
+ module.exports = getInProgressWork;
172
+
173
+ // CLI execution
174
+ if (require.main === module) {
175
+ const data = getInProgressWork();
176
+ console.log(formatInProgressOutput(data));
177
+ process.exit(0);
178
+ }
@@ -0,0 +1,93 @@
1
+ #!/bin/bash
2
+
3
+ # PM In-Progress Script - Wrapper for Node.js implementation
4
+ # This wrapper maintains backward compatibility while delegating to the Node.js version
5
+
6
+ # Get the directory of this script
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+
9
+ # Check if Node.js is available
10
+ if command -v node >/dev/null 2>&1; then
11
+ # Use the Node.js implementation
12
+ node "$SCRIPT_DIR/in-progress.js"
13
+ exit $?
14
+ else
15
+ # Fallback to the original bash implementation if Node.js is not available
16
+ echo "⚠️ Node.js not found, falling back to bash implementation"
17
+ echo ""
18
+
19
+ # Original bash implementation (preserved for fallback)
20
+ echo "Getting status..."
21
+ echo ""
22
+ echo ""
23
+
24
+ echo "🔄 In Progress Work"
25
+ echo "==================="
26
+ echo ""
27
+
28
+ # Check for active work in updates directories
29
+ found=0
30
+
31
+ if [ -d ".claude/epics" ]; then
32
+ for updates_dir in .claude/epics/*/updates/*/; do
33
+ [ -d "$updates_dir" ] || continue
34
+
35
+ issue_num=$(basename "$updates_dir")
36
+ epic_name=$(basename $(dirname $(dirname "$updates_dir")))
37
+
38
+ if [ -f "$updates_dir/progress.md" ]; then
39
+ completion=$(grep "^completion:" "$updates_dir/progress.md" | head -1 | sed 's/^completion: *//')
40
+ [ -z "$completion" ] && completion="0%"
41
+
42
+ # Get task name from the task file
43
+ task_file=".claude/epics/$epic_name/$issue_num.md"
44
+ if [ -f "$task_file" ]; then
45
+ task_name=$(grep "^name:" "$task_file" | head -1 | sed 's/^name: *//')
46
+ else
47
+ task_name="Unknown task"
48
+ fi
49
+
50
+ echo "📝 Issue #$issue_num - $task_name"
51
+ echo " Epic: $epic_name"
52
+ echo " Progress: $completion complete"
53
+
54
+ # Check for recent updates
55
+ if [ -f "$updates_dir/progress.md" ]; then
56
+ last_update=$(grep "^last_sync:" "$updates_dir/progress.md" | head -1 | sed 's/^last_sync: *//')
57
+ [ -n "$last_update" ] && echo " Last update: $last_update"
58
+ fi
59
+
60
+ echo ""
61
+ ((found++))
62
+ fi
63
+ done
64
+ fi
65
+
66
+ # Also check for in-progress epics
67
+ echo "📚 Active Epics:"
68
+ for epic_dir in .claude/epics/*/; do
69
+ [ -d "$epic_dir" ] || continue
70
+ [ -f "$epic_dir/epic.md" ] || continue
71
+
72
+ status=$(grep "^status:" "$epic_dir/epic.md" | head -1 | sed 's/^status: *//')
73
+ if [ "$status" = "in-progress" ] || [ "$status" = "active" ]; then
74
+ epic_name=$(grep "^name:" "$epic_dir/epic.md" | head -1 | sed 's/^name: *//')
75
+ progress=$(grep "^progress:" "$epic_dir/epic.md" | head -1 | sed 's/^progress: *//')
76
+ [ -z "$epic_name" ] && epic_name=$(basename "$epic_dir")
77
+ [ -z "$progress" ] && progress="0%"
78
+
79
+ echo " • $epic_name - $progress complete"
80
+ fi
81
+ done
82
+
83
+ echo ""
84
+ if [ $found -eq 0 ]; then
85
+ echo "No active work items found."
86
+ echo ""
87
+ echo "💡 Start work with: /pm:next"
88
+ else
89
+ echo "📊 Total active items: $found"
90
+ fi
91
+
92
+ exit 0
93
+ fi
@@ -0,0 +1,321 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * PM Init Script - Node.js Implementation
5
+ *
6
+ * Migrated from init.sh to provide system initialization functionality
7
+ * Maintains full compatibility with the original bash implementation
8
+ */
9
+
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+ const { execSync, exec } = require('child_process');
13
+ const { promisify } = require('util');
14
+
15
+ const execAsync = promisify(exec);
16
+
17
+ async function initializeSystem(options = {}) {
18
+ const {
19
+ dryRun = false,
20
+ skipDependencyCheck = false,
21
+ verbose = false
22
+ } = options;
23
+
24
+ const result = {
25
+ dryRun,
26
+ options,
27
+ directories: {
28
+ required: [
29
+ '.claude/prds',
30
+ '.claude/epics',
31
+ '.claude/rules',
32
+ '.claude/agents',
33
+ '.claude/scripts/pm'
34
+ ],
35
+ created: []
36
+ },
37
+ dependencies: {
38
+ gh: false,
39
+ ghAuth: false,
40
+ ghExtensions: []
41
+ },
42
+ git: {
43
+ isRepo: false,
44
+ hasRemote: false,
45
+ remoteUrl: null,
46
+ warnings: []
47
+ },
48
+ claude: {
49
+ exists: false,
50
+ created: false
51
+ },
52
+ summary: {}
53
+ };
54
+
55
+ // Create directory structure
56
+ if (!dryRun) {
57
+ for (const dir of result.directories.required) {
58
+ if (!fs.existsSync(dir)) {
59
+ fs.mkdirSync(dir, { recursive: true });
60
+ result.directories.created.push(dir);
61
+ }
62
+ }
63
+ } else {
64
+ // In dry run, check which directories would be created
65
+ for (const dir of result.directories.required) {
66
+ if (!fs.existsSync(dir)) {
67
+ result.directories.created.push(dir);
68
+ }
69
+ }
70
+ }
71
+
72
+ // Check git repository status
73
+ try {
74
+ execSync('git rev-parse --git-dir', { stdio: 'ignore' });
75
+ result.git.isRepo = true;
76
+
77
+ try {
78
+ const remoteOutput = execSync('git remote -v', { encoding: 'utf8', stdio: 'pipe' });
79
+ if (remoteOutput.includes('origin')) {
80
+ result.git.hasRemote = true;
81
+
82
+ try {
83
+ result.git.remoteUrl = execSync('git remote get-url origin', {
84
+ encoding: 'utf8',
85
+ stdio: 'pipe'
86
+ }).trim();
87
+
88
+ // Check if remote is the AutoPM template repository
89
+ if (result.git.remoteUrl.includes('rlagowski/autopm')) {
90
+ result.git.warnings.push({
91
+ type: 'template_repo',
92
+ message: 'Remote origin points to the AutoPM template repository. Consider updating to your own repository.'
93
+ });
94
+ }
95
+ } catch (error) {
96
+ // Could not get remote URL
97
+ }
98
+ }
99
+ } catch (error) {
100
+ // No remotes configured
101
+ }
102
+ } catch (error) {
103
+ result.git.isRepo = false;
104
+ }
105
+
106
+ // Check dependencies
107
+ if (!skipDependencyCheck) {
108
+ try {
109
+ execSync('gh --version', { stdio: 'ignore' });
110
+ result.dependencies.gh = true;
111
+
112
+ try {
113
+ execSync('gh auth status', { stdio: 'ignore' });
114
+ result.dependencies.ghAuth = true;
115
+ } catch (error) {
116
+ result.dependencies.ghAuth = false;
117
+ }
118
+
119
+ try {
120
+ const extensionsOutput = execSync('gh extension list', {
121
+ encoding: 'utf8',
122
+ stdio: 'pipe'
123
+ });
124
+ result.dependencies.ghExtensions = extensionsOutput
125
+ .split('\n')
126
+ .filter(line => line.trim())
127
+ .map(line => line.split('\t')[0]);
128
+ } catch (error) {
129
+ // No extensions or error listing them
130
+ }
131
+ } catch (error) {
132
+ result.dependencies.gh = false;
133
+ }
134
+ }
135
+
136
+ // Handle CLAUDE.md
137
+ result.claude.exists = fs.existsSync('CLAUDE.md');
138
+
139
+ if (!result.claude.exists && !dryRun) {
140
+ const claudeContent = `# CLAUDE.md
141
+
142
+ > Think carefully and implement the most concise solution that changes as little code as possible.
143
+
144
+ ## Project-Specific Instructions
145
+
146
+ Add your project-specific instructions here.
147
+
148
+ ## Testing
149
+
150
+ Always run tests before committing:
151
+ - \`npm test\` or equivalent for your stack
152
+
153
+ ## Code Style
154
+
155
+ Follow existing patterns in the codebase.
156
+ `;
157
+
158
+ fs.writeFileSync('CLAUDE.md', claudeContent);
159
+ result.claude.created = true;
160
+ } else if (!result.claude.exists && dryRun) {
161
+ result.claude.created = true; // Would be created
162
+ }
163
+
164
+ // Generate summary
165
+ result.summary = {
166
+ directoriesCreated: result.directories.created.length,
167
+ gitConfigured: result.git.isRepo && result.git.hasRemote,
168
+ dependenciesReady: result.dependencies.gh && result.dependencies.ghAuth,
169
+ claudeReady: result.claude.exists || result.claude.created,
170
+ hasWarnings: result.git.warnings.length > 0
171
+ };
172
+
173
+ return result;
174
+ }
175
+
176
+ function displayBanner() {
177
+ return `
178
+ █████╗ ██╗ ██╗████████╗ ██████╗ ██████╗ ███╗ ███╗
179
+ ██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗██╔══██╗████╗ ████║
180
+ ███████║██║ ██║ ██║ ██║ ██║██████╔╝██╔████╔██║
181
+ ██╔══██║██║ ██║ ██║ ██║ ██║██╔═══╝ ██║╚██╔╝██║
182
+ ██║ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ██║ ╚═╝ ██║
183
+ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝
184
+
185
+ ┌─────────────────────────────────┐
186
+ │ Claude Code Project Management │
187
+ │ by https://x.com/aroussi │
188
+ └─────────────────────────────────┘
189
+ https://github.com/rlagowski/autopm
190
+ `;
191
+ }
192
+
193
+ function formatInitOutput(data) {
194
+ let output = 'Initializing...\n\n\n';
195
+ output += displayBanner();
196
+ output += '\n\n';
197
+
198
+ output += '🚀 Initializing Claude Code AutoPM System\n';
199
+ output += '======================================\n\n';
200
+
201
+ // Dependencies check
202
+ output += '🔍 Checking dependencies...\n';
203
+ if (data.dependencies.gh) {
204
+ output += ' ✅ GitHub CLI (gh) installed\n';
205
+ } else {
206
+ output += ' ❌ GitHub CLI (gh) not found\n';
207
+ }
208
+
209
+ output += '\n🔐 Checking GitHub authentication...\n';
210
+ if (data.dependencies.ghAuth) {
211
+ output += ' ✅ GitHub authenticated\n';
212
+ } else {
213
+ output += ' ⚠️ GitHub not authenticated\n';
214
+ }
215
+
216
+ output += '\n📦 Checking gh extensions...\n';
217
+ const hasSubIssue = data.dependencies.ghExtensions.some(ext =>
218
+ ext.includes('gh-sub-issue') || ext.includes('yahsan2/gh-sub-issue'));
219
+
220
+ if (hasSubIssue) {
221
+ output += ' ✅ gh-sub-issue extension installed\n';
222
+ } else {
223
+ output += ' 📥 gh-sub-issue extension needed\n';
224
+ }
225
+
226
+ // Directory structure
227
+ output += '\n📁 Creating directory structure...\n';
228
+ if (data.directories.created.length > 0) {
229
+ output += ' ✅ Directories created\n';
230
+ } else {
231
+ output += ' ✅ Directory structure exists\n';
232
+ }
233
+
234
+ // Git configuration
235
+ output += '\n🔗 Checking Git configuration...\n';
236
+ if (data.git.isRepo) {
237
+ output += ' ✅ Git repository detected\n';
238
+
239
+ if (data.git.hasRemote) {
240
+ output += ` ✅ Remote configured: ${data.git.remoteUrl}\n`;
241
+
242
+ // Show warnings
243
+ for (const warning of data.git.warnings) {
244
+ if (warning.type === 'template_repo') {
245
+ output += '\n ⚠️ WARNING: Your remote origin points to the AutoPM template repository!\n';
246
+ output += ' This means any issues you create will go to the template repo, not your project.\n\n';
247
+ output += ' To fix this:\n';
248
+ output += ' 1. Fork the repository or create your own on GitHub\n';
249
+ output += ' 2. Update your remote:\n';
250
+ output += ' git remote set-url origin https://github.com/YOUR_USERNAME/YOUR_REPO.git\n\n';
251
+ }
252
+ }
253
+ } else {
254
+ output += ' ⚠️ No remote configured\n';
255
+ output += ' Add with: git remote add origin <url>\n';
256
+ }
257
+ } else {
258
+ output += ' ⚠️ Not a git repository\n';
259
+ output += ' Initialize with: git init\n';
260
+ }
261
+
262
+ // CLAUDE.md
263
+ if (data.claude.created) {
264
+ output += '\n📄 Creating CLAUDE.md...\n';
265
+ output += ' ✅ CLAUDE.md created\n';
266
+ } else if (data.claude.exists) {
267
+ output += '\n📄 CLAUDE.md exists\n';
268
+ }
269
+
270
+ // Summary
271
+ output += '\n✅ Initialization Complete!\n';
272
+ output += '==========================\n\n';
273
+
274
+ output += '📊 System Status:\n';
275
+ if (data.dependencies.gh) {
276
+ try {
277
+ const ghVersion = execSync('gh --version', { encoding: 'utf8' }).split('\n')[0];
278
+ output += `${ghVersion}\n`;
279
+ } catch (error) {
280
+ output += 'GitHub CLI: Available\n';
281
+ }
282
+ }
283
+
284
+ output += ` Extensions: ${data.dependencies.ghExtensions.length} installed\n`;
285
+
286
+ if (data.dependencies.ghAuth) {
287
+ output += ' Auth: Authenticated\n';
288
+ } else {
289
+ output += ' Auth: Not authenticated\n';
290
+ }
291
+
292
+ output += '\n🎯 Next Steps:\n';
293
+ output += ' 1. Create your first PRD: /pm:prd-new <feature-name>\n';
294
+ output += ' 2. View help: /pm:help\n';
295
+ output += ' 3. Check status: /pm:status\n\n';
296
+ output += '📚 Documentation: README.md\n';
297
+
298
+ return output;
299
+ }
300
+
301
+ // CommonJS export for testing
302
+ module.exports = {
303
+ initializeSystem,
304
+ displayBanner,
305
+ formatInitOutput
306
+ };
307
+
308
+ // CLI execution
309
+ if (require.main === module) {
310
+ const dryRun = process.argv.includes('--dry-run');
311
+
312
+ module.exports.initializeSystem({ dryRun })
313
+ .then(result => {
314
+ console.log(module.exports.formatInitOutput(result));
315
+ process.exit(0);
316
+ })
317
+ .catch(error => {
318
+ console.error('❌ Initialization failed:', error.message);
319
+ process.exit(1);
320
+ });
321
+ }