claude-autopm 2.8.1 → 2.8.2

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 (273) hide show
  1. package/README.md +116 -8
  2. package/bin/autopm.js +2 -0
  3. package/bin/commands/plugin.js +395 -0
  4. package/bin/commands/team.js +184 -10
  5. package/install/install.js +223 -4
  6. package/lib/plugins/PluginManager.js +1328 -0
  7. package/lib/plugins/PluginManager.old.js +400 -0
  8. package/package.json +4 -1
  9. package/scripts/publish-plugins.sh +166 -0
  10. package/autopm/.claude/agents/cloud/README.md +0 -55
  11. package/autopm/.claude/agents/cloud/aws-cloud-architect.md +0 -521
  12. package/autopm/.claude/agents/cloud/azure-cloud-architect.md +0 -436
  13. package/autopm/.claude/agents/cloud/gcp-cloud-architect.md +0 -385
  14. package/autopm/.claude/agents/cloud/gcp-cloud-functions-engineer.md +0 -306
  15. package/autopm/.claude/agents/cloud/gemini-api-expert.md +0 -880
  16. package/autopm/.claude/agents/cloud/kubernetes-orchestrator.md +0 -566
  17. package/autopm/.claude/agents/cloud/openai-python-expert.md +0 -1087
  18. package/autopm/.claude/agents/cloud/terraform-infrastructure-expert.md +0 -454
  19. package/autopm/.claude/agents/core/agent-manager.md +0 -296
  20. package/autopm/.claude/agents/core/code-analyzer.md +0 -131
  21. package/autopm/.claude/agents/core/file-analyzer.md +0 -162
  22. package/autopm/.claude/agents/core/test-runner.md +0 -200
  23. package/autopm/.claude/agents/data/airflow-orchestration-expert.md +0 -52
  24. package/autopm/.claude/agents/data/kedro-pipeline-expert.md +0 -50
  25. package/autopm/.claude/agents/data/langgraph-workflow-expert.md +0 -520
  26. package/autopm/.claude/agents/databases/README.md +0 -50
  27. package/autopm/.claude/agents/databases/bigquery-expert.md +0 -392
  28. package/autopm/.claude/agents/databases/cosmosdb-expert.md +0 -368
  29. package/autopm/.claude/agents/databases/mongodb-expert.md +0 -398
  30. package/autopm/.claude/agents/databases/postgresql-expert.md +0 -321
  31. package/autopm/.claude/agents/databases/redis-expert.md +0 -52
  32. package/autopm/.claude/agents/devops/README.md +0 -52
  33. package/autopm/.claude/agents/devops/azure-devops-specialist.md +0 -308
  34. package/autopm/.claude/agents/devops/docker-containerization-expert.md +0 -298
  35. package/autopm/.claude/agents/devops/github-operations-specialist.md +0 -335
  36. package/autopm/.claude/agents/devops/mcp-context-manager.md +0 -319
  37. package/autopm/.claude/agents/devops/observability-engineer.md +0 -574
  38. package/autopm/.claude/agents/devops/ssh-operations-expert.md +0 -1093
  39. package/autopm/.claude/agents/devops/traefik-proxy-expert.md +0 -444
  40. package/autopm/.claude/agents/frameworks/README.md +0 -64
  41. package/autopm/.claude/agents/frameworks/e2e-test-engineer.md +0 -360
  42. package/autopm/.claude/agents/frameworks/nats-messaging-expert.md +0 -254
  43. package/autopm/.claude/agents/frameworks/react-frontend-engineer.md +0 -217
  44. package/autopm/.claude/agents/frameworks/react-ui-expert.md +0 -226
  45. package/autopm/.claude/agents/frameworks/tailwindcss-expert.md +0 -770
  46. package/autopm/.claude/agents/frameworks/ux-design-expert.md +0 -244
  47. package/autopm/.claude/agents/integration/message-queue-engineer.md +0 -794
  48. package/autopm/.claude/agents/languages/README.md +0 -50
  49. package/autopm/.claude/agents/languages/bash-scripting-expert.md +0 -541
  50. package/autopm/.claude/agents/languages/javascript-frontend-engineer.md +0 -197
  51. package/autopm/.claude/agents/languages/nodejs-backend-engineer.md +0 -226
  52. package/autopm/.claude/agents/languages/python-backend-engineer.md +0 -214
  53. package/autopm/.claude/agents/languages/python-backend-expert.md +0 -289
  54. package/autopm/.claude/agents/testing/frontend-testing-engineer.md +0 -395
  55. package/autopm/.claude/commands/ai/langgraph-workflow.md +0 -65
  56. package/autopm/.claude/commands/ai/openai-chat.md +0 -65
  57. package/autopm/.claude/commands/azure/COMMANDS.md +0 -107
  58. package/autopm/.claude/commands/azure/COMMAND_MAPPING.md +0 -252
  59. package/autopm/.claude/commands/azure/INTEGRATION_FIX.md +0 -103
  60. package/autopm/.claude/commands/azure/README.md +0 -246
  61. package/autopm/.claude/commands/azure/active-work.md +0 -198
  62. package/autopm/.claude/commands/azure/aliases.md +0 -143
  63. package/autopm/.claude/commands/azure/blocked-items.md +0 -287
  64. package/autopm/.claude/commands/azure/clean.md +0 -93
  65. package/autopm/.claude/commands/azure/docs-query.md +0 -48
  66. package/autopm/.claude/commands/azure/feature-decompose.md +0 -380
  67. package/autopm/.claude/commands/azure/feature-list.md +0 -61
  68. package/autopm/.claude/commands/azure/feature-new.md +0 -115
  69. package/autopm/.claude/commands/azure/feature-show.md +0 -205
  70. package/autopm/.claude/commands/azure/feature-start.md +0 -130
  71. package/autopm/.claude/commands/azure/fix-integration-example.md +0 -93
  72. package/autopm/.claude/commands/azure/help.md +0 -150
  73. package/autopm/.claude/commands/azure/import-us.md +0 -269
  74. package/autopm/.claude/commands/azure/init.md +0 -211
  75. package/autopm/.claude/commands/azure/next-task.md +0 -262
  76. package/autopm/.claude/commands/azure/search.md +0 -160
  77. package/autopm/.claude/commands/azure/sprint-status.md +0 -235
  78. package/autopm/.claude/commands/azure/standup.md +0 -260
  79. package/autopm/.claude/commands/azure/sync-all.md +0 -99
  80. package/autopm/.claude/commands/azure/task-analyze.md +0 -186
  81. package/autopm/.claude/commands/azure/task-close.md +0 -329
  82. package/autopm/.claude/commands/azure/task-edit.md +0 -145
  83. package/autopm/.claude/commands/azure/task-list.md +0 -263
  84. package/autopm/.claude/commands/azure/task-new.md +0 -84
  85. package/autopm/.claude/commands/azure/task-reopen.md +0 -79
  86. package/autopm/.claude/commands/azure/task-show.md +0 -126
  87. package/autopm/.claude/commands/azure/task-start.md +0 -301
  88. package/autopm/.claude/commands/azure/task-status.md +0 -65
  89. package/autopm/.claude/commands/azure/task-sync.md +0 -67
  90. package/autopm/.claude/commands/azure/us-edit.md +0 -164
  91. package/autopm/.claude/commands/azure/us-list.md +0 -202
  92. package/autopm/.claude/commands/azure/us-new.md +0 -265
  93. package/autopm/.claude/commands/azure/us-parse.md +0 -253
  94. package/autopm/.claude/commands/azure/us-show.md +0 -188
  95. package/autopm/.claude/commands/azure/us-status.md +0 -320
  96. package/autopm/.claude/commands/azure/validate.md +0 -86
  97. package/autopm/.claude/commands/azure/work-item-sync.md +0 -47
  98. package/autopm/.claude/commands/cloud/infra-deploy.md +0 -38
  99. package/autopm/.claude/commands/github/workflow-create.md +0 -42
  100. package/autopm/.claude/commands/infrastructure/ssh-security.md +0 -65
  101. package/autopm/.claude/commands/infrastructure/traefik-setup.md +0 -65
  102. package/autopm/.claude/commands/kubernetes/deploy.md +0 -37
  103. package/autopm/.claude/commands/playwright/test-scaffold.md +0 -38
  104. package/autopm/.claude/commands/pm/blocked.md +0 -28
  105. package/autopm/.claude/commands/pm/clean.md +0 -119
  106. package/autopm/.claude/commands/pm/context-create.md +0 -136
  107. package/autopm/.claude/commands/pm/context-prime.md +0 -170
  108. package/autopm/.claude/commands/pm/context-update.md +0 -292
  109. package/autopm/.claude/commands/pm/context.md +0 -28
  110. package/autopm/.claude/commands/pm/epic-close.md +0 -86
  111. package/autopm/.claude/commands/pm/epic-decompose.md +0 -370
  112. package/autopm/.claude/commands/pm/epic-edit.md +0 -83
  113. package/autopm/.claude/commands/pm/epic-list.md +0 -30
  114. package/autopm/.claude/commands/pm/epic-merge.md +0 -222
  115. package/autopm/.claude/commands/pm/epic-oneshot.md +0 -119
  116. package/autopm/.claude/commands/pm/epic-refresh.md +0 -119
  117. package/autopm/.claude/commands/pm/epic-show.md +0 -28
  118. package/autopm/.claude/commands/pm/epic-split.md +0 -120
  119. package/autopm/.claude/commands/pm/epic-start.md +0 -195
  120. package/autopm/.claude/commands/pm/epic-status.md +0 -28
  121. package/autopm/.claude/commands/pm/epic-sync-modular.md +0 -338
  122. package/autopm/.claude/commands/pm/epic-sync-original.md +0 -473
  123. package/autopm/.claude/commands/pm/epic-sync.md +0 -486
  124. package/autopm/.claude/commands/pm/help.md +0 -28
  125. package/autopm/.claude/commands/pm/import.md +0 -115
  126. package/autopm/.claude/commands/pm/in-progress.md +0 -28
  127. package/autopm/.claude/commands/pm/init.md +0 -28
  128. package/autopm/.claude/commands/pm/issue-analyze.md +0 -202
  129. package/autopm/.claude/commands/pm/issue-close.md +0 -119
  130. package/autopm/.claude/commands/pm/issue-edit.md +0 -93
  131. package/autopm/.claude/commands/pm/issue-reopen.md +0 -87
  132. package/autopm/.claude/commands/pm/issue-show.md +0 -41
  133. package/autopm/.claude/commands/pm/issue-start.md +0 -234
  134. package/autopm/.claude/commands/pm/issue-status.md +0 -95
  135. package/autopm/.claude/commands/pm/issue-sync.md +0 -411
  136. package/autopm/.claude/commands/pm/next.md +0 -28
  137. package/autopm/.claude/commands/pm/prd-edit.md +0 -82
  138. package/autopm/.claude/commands/pm/prd-list.md +0 -28
  139. package/autopm/.claude/commands/pm/prd-new.md +0 -55
  140. package/autopm/.claude/commands/pm/prd-parse.md +0 -42
  141. package/autopm/.claude/commands/pm/prd-status.md +0 -28
  142. package/autopm/.claude/commands/pm/search.md +0 -28
  143. package/autopm/.claude/commands/pm/standup.md +0 -28
  144. package/autopm/.claude/commands/pm/status.md +0 -28
  145. package/autopm/.claude/commands/pm/sync.md +0 -99
  146. package/autopm/.claude/commands/pm/test-reference-update.md +0 -151
  147. package/autopm/.claude/commands/pm/validate.md +0 -28
  148. package/autopm/.claude/commands/pm/what-next.md +0 -28
  149. package/autopm/.claude/commands/python/api-scaffold.md +0 -50
  150. package/autopm/.claude/commands/python/docs-query.md +0 -48
  151. package/autopm/.claude/commands/react/app-scaffold.md +0 -50
  152. package/autopm/.claude/commands/testing/prime.md +0 -314
  153. package/autopm/.claude/commands/testing/run.md +0 -125
  154. package/autopm/.claude/commands/ui/bootstrap-scaffold.md +0 -65
  155. package/autopm/.claude/commands/ui/tailwind-system.md +0 -64
  156. package/autopm/.claude/rules/ai-integration-patterns.md +0 -219
  157. package/autopm/.claude/rules/ci-cd-kubernetes-strategy.md +0 -25
  158. package/autopm/.claude/rules/database-management-strategy.md +0 -17
  159. package/autopm/.claude/rules/database-pipeline.md +0 -94
  160. package/autopm/.claude/rules/devops-troubleshooting-playbook.md +0 -450
  161. package/autopm/.claude/rules/docker-first-development.md +0 -404
  162. package/autopm/.claude/rules/infrastructure-pipeline.md +0 -128
  163. package/autopm/.claude/rules/performance-guidelines.md +0 -403
  164. package/autopm/.claude/rules/ui-development-standards.md +0 -281
  165. package/autopm/.claude/rules/ui-framework-rules.md +0 -151
  166. package/autopm/.claude/rules/ux-design-rules.md +0 -209
  167. package/autopm/.claude/rules/visual-testing.md +0 -223
  168. package/autopm/.claude/scripts/azure/README.md +0 -192
  169. package/autopm/.claude/scripts/azure/active-work.js +0 -524
  170. package/autopm/.claude/scripts/azure/active-work.sh +0 -20
  171. package/autopm/.claude/scripts/azure/blocked.js +0 -520
  172. package/autopm/.claude/scripts/azure/blocked.sh +0 -20
  173. package/autopm/.claude/scripts/azure/daily.js +0 -533
  174. package/autopm/.claude/scripts/azure/daily.sh +0 -20
  175. package/autopm/.claude/scripts/azure/dashboard.js +0 -970
  176. package/autopm/.claude/scripts/azure/dashboard.sh +0 -20
  177. package/autopm/.claude/scripts/azure/feature-list.js +0 -254
  178. package/autopm/.claude/scripts/azure/feature-list.sh +0 -20
  179. package/autopm/.claude/scripts/azure/feature-show.js +0 -7
  180. package/autopm/.claude/scripts/azure/feature-show.sh +0 -20
  181. package/autopm/.claude/scripts/azure/feature-status.js +0 -604
  182. package/autopm/.claude/scripts/azure/feature-status.sh +0 -20
  183. package/autopm/.claude/scripts/azure/help.js +0 -342
  184. package/autopm/.claude/scripts/azure/help.sh +0 -20
  185. package/autopm/.claude/scripts/azure/next-task.js +0 -508
  186. package/autopm/.claude/scripts/azure/next-task.sh +0 -20
  187. package/autopm/.claude/scripts/azure/search.js +0 -469
  188. package/autopm/.claude/scripts/azure/search.sh +0 -20
  189. package/autopm/.claude/scripts/azure/setup.js +0 -745
  190. package/autopm/.claude/scripts/azure/setup.sh +0 -20
  191. package/autopm/.claude/scripts/azure/sprint-report.js +0 -1012
  192. package/autopm/.claude/scripts/azure/sprint-report.sh +0 -20
  193. package/autopm/.claude/scripts/azure/sync.js +0 -563
  194. package/autopm/.claude/scripts/azure/sync.sh +0 -20
  195. package/autopm/.claude/scripts/azure/us-list.js +0 -210
  196. package/autopm/.claude/scripts/azure/us-list.sh +0 -20
  197. package/autopm/.claude/scripts/azure/us-status.js +0 -238
  198. package/autopm/.claude/scripts/azure/us-status.sh +0 -20
  199. package/autopm/.claude/scripts/azure/validate.js +0 -626
  200. package/autopm/.claude/scripts/azure/validate.sh +0 -20
  201. package/autopm/.claude/scripts/azure/wrapper-template.sh +0 -20
  202. package/autopm/.claude/scripts/github/dependency-tracker.js +0 -554
  203. package/autopm/.claude/scripts/github/dependency-validator.js +0 -545
  204. package/autopm/.claude/scripts/github/dependency-visualizer.js +0 -477
  205. package/autopm/.claude/scripts/pm/analytics.js +0 -425
  206. package/autopm/.claude/scripts/pm/blocked.js +0 -164
  207. package/autopm/.claude/scripts/pm/blocked.sh +0 -78
  208. package/autopm/.claude/scripts/pm/clean.js +0 -464
  209. package/autopm/.claude/scripts/pm/context-create.js +0 -216
  210. package/autopm/.claude/scripts/pm/context-prime.js +0 -335
  211. package/autopm/.claude/scripts/pm/context-update.js +0 -344
  212. package/autopm/.claude/scripts/pm/context.js +0 -338
  213. package/autopm/.claude/scripts/pm/epic-close.js +0 -347
  214. package/autopm/.claude/scripts/pm/epic-edit.js +0 -382
  215. package/autopm/.claude/scripts/pm/epic-list.js +0 -273
  216. package/autopm/.claude/scripts/pm/epic-list.sh +0 -109
  217. package/autopm/.claude/scripts/pm/epic-show.js +0 -291
  218. package/autopm/.claude/scripts/pm/epic-show.sh +0 -105
  219. package/autopm/.claude/scripts/pm/epic-split.js +0 -522
  220. package/autopm/.claude/scripts/pm/epic-start/epic-start.js +0 -183
  221. package/autopm/.claude/scripts/pm/epic-start/epic-start.sh +0 -94
  222. package/autopm/.claude/scripts/pm/epic-status.js +0 -291
  223. package/autopm/.claude/scripts/pm/epic-status.sh +0 -104
  224. package/autopm/.claude/scripts/pm/epic-sync/README.md +0 -208
  225. package/autopm/.claude/scripts/pm/epic-sync/create-epic-issue.sh +0 -77
  226. package/autopm/.claude/scripts/pm/epic-sync/create-task-issues.sh +0 -86
  227. package/autopm/.claude/scripts/pm/epic-sync/update-epic-file.sh +0 -79
  228. package/autopm/.claude/scripts/pm/epic-sync/update-references.sh +0 -89
  229. package/autopm/.claude/scripts/pm/epic-sync.sh +0 -137
  230. package/autopm/.claude/scripts/pm/help.js +0 -92
  231. package/autopm/.claude/scripts/pm/help.sh +0 -90
  232. package/autopm/.claude/scripts/pm/in-progress.js +0 -178
  233. package/autopm/.claude/scripts/pm/in-progress.sh +0 -93
  234. package/autopm/.claude/scripts/pm/init.js +0 -321
  235. package/autopm/.claude/scripts/pm/init.sh +0 -178
  236. package/autopm/.claude/scripts/pm/issue-close.js +0 -232
  237. package/autopm/.claude/scripts/pm/issue-edit.js +0 -310
  238. package/autopm/.claude/scripts/pm/issue-show.js +0 -272
  239. package/autopm/.claude/scripts/pm/issue-start.js +0 -181
  240. package/autopm/.claude/scripts/pm/issue-sync/format-comment.sh +0 -468
  241. package/autopm/.claude/scripts/pm/issue-sync/gather-updates.sh +0 -460
  242. package/autopm/.claude/scripts/pm/issue-sync/post-comment.sh +0 -330
  243. package/autopm/.claude/scripts/pm/issue-sync/preflight-validation.sh +0 -348
  244. package/autopm/.claude/scripts/pm/issue-sync/update-frontmatter.sh +0 -387
  245. package/autopm/.claude/scripts/pm/lib/README.md +0 -85
  246. package/autopm/.claude/scripts/pm/lib/epic-discovery.js +0 -119
  247. package/autopm/.claude/scripts/pm/lib/logger.js +0 -78
  248. package/autopm/.claude/scripts/pm/next.js +0 -189
  249. package/autopm/.claude/scripts/pm/next.sh +0 -72
  250. package/autopm/.claude/scripts/pm/optimize.js +0 -407
  251. package/autopm/.claude/scripts/pm/pr-create.js +0 -337
  252. package/autopm/.claude/scripts/pm/pr-list.js +0 -257
  253. package/autopm/.claude/scripts/pm/prd-list.js +0 -242
  254. package/autopm/.claude/scripts/pm/prd-list.sh +0 -103
  255. package/autopm/.claude/scripts/pm/prd-new.js +0 -684
  256. package/autopm/.claude/scripts/pm/prd-parse.js +0 -547
  257. package/autopm/.claude/scripts/pm/prd-status.js +0 -152
  258. package/autopm/.claude/scripts/pm/prd-status.sh +0 -63
  259. package/autopm/.claude/scripts/pm/release.js +0 -460
  260. package/autopm/.claude/scripts/pm/search.js +0 -192
  261. package/autopm/.claude/scripts/pm/search.sh +0 -89
  262. package/autopm/.claude/scripts/pm/standup.js +0 -362
  263. package/autopm/.claude/scripts/pm/standup.sh +0 -95
  264. package/autopm/.claude/scripts/pm/status.js +0 -148
  265. package/autopm/.claude/scripts/pm/status.sh +0 -59
  266. package/autopm/.claude/scripts/pm/sync-batch.js +0 -337
  267. package/autopm/.claude/scripts/pm/sync.js +0 -343
  268. package/autopm/.claude/scripts/pm/template-list.js +0 -141
  269. package/autopm/.claude/scripts/pm/template-new.js +0 -366
  270. package/autopm/.claude/scripts/pm/validate.js +0 -274
  271. package/autopm/.claude/scripts/pm/validate.sh +0 -106
  272. package/autopm/.claude/scripts/pm/what-next.js +0 -660
  273. package/bin/node/azure-feature-show.js +0 -7
@@ -202,7 +202,7 @@ See: https://github.com/rafeekpro/ClaudeAutoPM
202
202
 
203
203
  // Command handlers
204
204
  const commands = {
205
- list: (argv) => {
205
+ list: async (argv) => {
206
206
  try {
207
207
  if (!fs.existsSync(teamsConfigPath)) {
208
208
  console.error('❌ Error: teams.json not found');
@@ -213,17 +213,100 @@ const commands = {
213
213
 
214
214
  console.log('\n📋 Available Teams:\n');
215
215
 
216
- Object.entries(teamsConfig).forEach(([name, config]) => {
217
- console.log(` ▶️ ${name}:`);
216
+ // Initialize PluginManager if verbose mode
217
+ let pluginManager = null;
218
+ if (argv.verbose) {
219
+ const PluginManager = require('../../lib/plugins/PluginManager');
220
+ pluginManager = new PluginManager();
221
+ }
222
+
223
+ for (const [name, config] of Object.entries(teamsConfig)) {
224
+ // Resolve total agents (including inherited)
225
+ let totalAgents = 0;
226
+ let installedAgents = 0;
227
+ let missingAgents = [];
228
+
229
+ try {
230
+ const agents = resolveAgents(name, teamsConfig);
231
+ totalAgents = agents.length;
232
+
233
+ // Check installation status
234
+ const missing = validateAgentFiles(agents, projectRoot);
235
+ installedAgents = totalAgents - missing.length;
236
+ missingAgents = missing;
237
+ } catch (error) {
238
+ // Ignore errors in agent resolution for listing
239
+ }
240
+
241
+ // Status indicator
242
+ const statusIcon = missingAgents.length === 0 ? '✅' : '⚠️';
243
+ const statusText = missingAgents.length === 0
244
+ ? 'ready'
245
+ : `${missingAgents.length} missing`;
246
+
247
+ console.log(` ${statusIcon} ${name}:`);
218
248
  console.log(` ${config.description || 'No description'}`);
249
+
219
250
  if (config.inherits && config.inherits.length > 0) {
220
251
  console.log(` ↳ Inherits from: ${config.inherits.join(', ')}`);
221
252
  }
222
- console.log(` Direct agents: ${config.agents ? config.agents.length : 0}`);
253
+
254
+ console.log(` Agents: ${totalAgents} total (${installedAgents} installed, ${missingAgents.length} missing)`);
255
+
256
+ // Verbose mode: show which agents are missing
257
+ if (argv.verbose && missingAgents.length > 0) {
258
+ console.log(` Missing agents:`);
259
+
260
+ if (pluginManager) {
261
+ const pluginMapping = await pluginManager.findPluginsForAgents(missingAgents);
262
+
263
+ // Group by plugin
264
+ const byPlugin = new Map();
265
+ for (const [agentName, pluginInfo] of pluginMapping.found.entries()) {
266
+ if (!pluginInfo.installed) {
267
+ if (!byPlugin.has(pluginInfo.pluginName)) {
268
+ byPlugin.set(pluginInfo.pluginName, []);
269
+ }
270
+ byPlugin.get(pluginInfo.pluginName).push(agentName);
271
+ }
272
+ }
273
+
274
+ // Show plugins needed
275
+ if (byPlugin.size > 0) {
276
+ console.log(` Install plugins:`);
277
+ for (const [pluginName, agents] of byPlugin.entries()) {
278
+ console.log(` • ${pluginName} (${agents.length} agents)`);
279
+ }
280
+ }
281
+
282
+ // Show truly missing
283
+ if (pluginMapping.missing.length > 0) {
284
+ console.log(` Custom/core agents: ${pluginMapping.missing.length}`);
285
+ }
286
+ } else {
287
+ // Non-verbose: just count
288
+ missingAgents.slice(0, 3).forEach(agent => {
289
+ console.log(` • ${agent}`);
290
+ });
291
+ if (missingAgents.length > 3) {
292
+ console.log(` ... and ${missingAgents.length - 3} more`);
293
+ }
294
+ }
295
+ }
296
+
223
297
  console.log();
224
- });
298
+ }
299
+
300
+ // Show usage tip at the end
301
+ console.log('💡 Tip: Use "autopm team load <name>" to activate a team');
302
+ console.log('💡 Tip: Add --verbose to see missing agent details');
303
+ console.log();
304
+
225
305
  } catch (error) {
226
306
  console.error(`❌ Error listing teams: ${error.message}`);
307
+ if (argv.debug) {
308
+ console.error(error.stack);
309
+ }
227
310
  process.exit(1);
228
311
  }
229
312
  },
@@ -243,7 +326,7 @@ const commands = {
243
326
  }
244
327
  },
245
328
 
246
- load: (argv) => {
329
+ load: async (argv) => {
247
330
  try {
248
331
  const teamName = argv.name;
249
332
 
@@ -273,11 +356,78 @@ const commands = {
273
356
 
274
357
  // Validate that agent files exist
275
358
  const missingAgents = validateAgentFiles(agents, projectRoot);
359
+
276
360
  if (missingAgents.length > 0) {
277
- console.warn(`⚠️ Warning: The following agent files were not found:`);
278
- missingAgents.forEach(agent => {
279
- console.warn(` - ${agent}`);
280
- });
361
+ console.log(`\n🔍 Checking for missing agents in plugins...`);
362
+
363
+ // Use PluginManager to find which plugins contain the missing agents
364
+ const PluginManager = require('../../lib/plugins/PluginManager');
365
+ const pluginManager = new PluginManager();
366
+
367
+ const pluginMapping = await pluginManager.findPluginsForAgents(missingAgents);
368
+
369
+ // Separate agents into: can install from plugins vs truly missing
370
+ const installablePlugins = [];
371
+ const trulyMissing = [];
372
+
373
+ for (const [agentName, pluginInfo] of pluginMapping.found.entries()) {
374
+ if (!pluginInfo.installed) {
375
+ installablePlugins.push(pluginInfo);
376
+ }
377
+ }
378
+
379
+ trulyMissing.push(...pluginMapping.missing);
380
+
381
+ if (installablePlugins.length > 0) {
382
+ console.log('\n📦 Missing agents can be installed from plugins:\n');
383
+
384
+ // Group by plugin
385
+ const byPlugin = new Map();
386
+ for (const pluginInfo of installablePlugins) {
387
+ if (!byPlugin.has(pluginInfo.pluginName)) {
388
+ byPlugin.set(pluginInfo.pluginName, {
389
+ displayName: pluginInfo.displayName,
390
+ agents: []
391
+ });
392
+ }
393
+ byPlugin.get(pluginInfo.pluginName).agents.push(pluginInfo.agent.name);
394
+ }
395
+
396
+ for (const [pluginName, info] of byPlugin.entries()) {
397
+ console.log(` ${info.displayName} (@claudeautopm/${pluginName}):`);
398
+ info.agents.forEach(agent => console.log(` • ${agent}`));
399
+ }
400
+
401
+ // Offer to install
402
+ if (argv.autoInstall || argv.yes) {
403
+ console.log('\n🚀 Auto-installing required plugins...\n');
404
+
405
+ for (const [pluginName] of byPlugin.entries()) {
406
+ try {
407
+ console.log(`Installing ${pluginName}...`);
408
+ await pluginManager.installPlugin(`${pluginManager.options.scopePrefix}/${pluginName}`);
409
+ console.log(`✓ Installed ${pluginName}\n`);
410
+ } catch (error) {
411
+ console.error(`❌ Failed to install ${pluginName}: ${error.message}`);
412
+ }
413
+ }
414
+ } else {
415
+ console.log('\n💡 To install these plugins, run:');
416
+ for (const [pluginName] of byPlugin.entries()) {
417
+ console.log(` autopm plugin install ${pluginName}`);
418
+ }
419
+ console.log('\n💡 Or run with --auto-install flag:');
420
+ console.log(` autopm team load ${teamName} --auto-install\n`);
421
+ }
422
+ }
423
+
424
+ if (trulyMissing.length > 0) {
425
+ console.warn(`\n⚠️ Warning: The following agents were not found in any plugin:`);
426
+ trulyMissing.forEach(agent => {
427
+ console.warn(` - ${agent}`);
428
+ });
429
+ console.warn('\n💡 These agents may be custom or from core. Check .claude/agents/ directory.\n');
430
+ }
281
431
  }
282
432
 
283
433
  // Validate MCP dependencies
@@ -320,6 +470,9 @@ const commands = {
320
470
  }
321
471
  } catch (error) {
322
472
  console.error(`❌ Error loading team: ${error.message}`);
473
+ if (argv.debug) {
474
+ console.error(error.stack);
475
+ }
323
476
  process.exit(1);
324
477
  }
325
478
  }
@@ -340,6 +493,27 @@ module.exports = {
340
493
  describe: 'Team name (for load action)',
341
494
  type: 'string'
342
495
  })
496
+ .option('auto-install', {
497
+ describe: 'Automatically install missing plugins when loading team',
498
+ type: 'boolean',
499
+ default: false,
500
+ alias: 'y'
501
+ })
502
+ .option('debug', {
503
+ describe: 'Show debug information',
504
+ type: 'boolean',
505
+ default: false
506
+ })
507
+ .option('verbose', {
508
+ describe: 'Show detailed information (for list command)',
509
+ type: 'boolean',
510
+ default: false
511
+ })
512
+ .example('autopm team list', 'List all available teams')
513
+ .example('autopm team list --verbose', 'List teams with missing agent details')
514
+ .example('autopm team load frontend', 'Load frontend team')
515
+ .example('autopm team load frontend --auto-install', 'Load and auto-install missing plugins')
516
+ .example('autopm team load fullstack -y', 'Load fullstack with auto-install (shorthand)')
343
517
  .check((argv) => {
344
518
  if (argv.action === 'load' && !argv.name) {
345
519
  throw new Error('Team name is required for load action');
@@ -459,6 +459,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
459
459
  • Native tooling: npm, pip, local installs
460
460
  • Best for: Simple projects, learning, debugging
461
461
  • No containers or orchestration
462
+ ${this.colors.DIM}• Plugins: core, languages, pm (3 plugins)${this.colors.NC}
462
463
  `);
463
464
 
464
465
  // Option 2: Docker-only (requires Docker)
@@ -468,6 +469,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
468
469
  • Docker containers for development environment
469
470
  • Best for: Microservices, consistent environments
470
471
  • Local Docker only, no Kubernetes
472
+ ${this.colors.DIM}• Plugins: core, languages, frameworks, testing, devops, pm (6 plugins)${this.colors.NC}
471
473
  `);
472
474
  } else {
473
475
  console.log(`${this.colors.DIM}2. Docker-only${this.colors.NC} ${this.colors.RED}(Docker not installed)${this.colors.NC}
@@ -481,6 +483,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
481
483
  • Kubernetes manifests and cloud deployment ready
482
484
  • GitHub Actions with KIND clusters and Kaniko builds
483
485
  • Best for: Production applications, enterprise projects
486
+ ${this.colors.DIM}• Plugins: core, languages, frameworks, testing, devops, cloud, databases, pm, ai (9 plugins)${this.colors.NC}
484
487
  `);
485
488
  } else if (availableTools.docker) {
486
489
  console.log(`${this.colors.DIM}3. Full DevOps${this.colors.NC} ${this.colors.RED}(kubectl not installed)${this.colors.NC}
@@ -497,6 +500,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
497
500
  • Advanced context isolation and security
498
501
  • Full DevOps capabilities with speed optimization
499
502
  • Best for: Large projects, massive refactoring, power users
503
+ ${this.colors.DIM}• Plugins: ALL - core, languages, frameworks, testing, devops, cloud, databases, data, pm, ai, ml (11 plugins)${this.colors.NC}
500
504
  `);
501
505
  } else if (availableTools.docker) {
502
506
  console.log(`${this.colors.DIM}4. Performance${this.colors.NC} ${this.colors.RED}(kubectl not installed)${this.colors.NC}
@@ -592,7 +596,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
592
596
  tools: {
593
597
  docker: { enabled: false },
594
598
  kubernetes: { enabled: false }
595
- }
599
+ },
600
+ plugins: ['plugin-core', 'plugin-languages', 'plugin-pm']
596
601
  },
597
602
  docker: {
598
603
  version: version,
@@ -601,7 +606,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
601
606
  tools: {
602
607
  docker: { enabled: true, first: false },
603
608
  kubernetes: { enabled: false }
604
- }
609
+ },
610
+ plugins: ['plugin-core', 'plugin-languages', 'plugin-frameworks', 'plugin-testing', 'plugin-devops', 'plugin-pm']
605
611
  },
606
612
  full: {
607
613
  version: version,
@@ -610,7 +616,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
610
616
  tools: {
611
617
  docker: { enabled: true, first: true },
612
618
  kubernetes: { enabled: true }
613
- }
619
+ },
620
+ plugins: ['plugin-core', 'plugin-languages', 'plugin-frameworks', 'plugin-testing', 'plugin-devops', 'plugin-cloud', 'plugin-databases', 'plugin-pm', 'plugin-ai']
614
621
  },
615
622
  performance: {
616
623
  version: version,
@@ -620,7 +627,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
620
627
  tools: {
621
628
  docker: { enabled: true, first: false },
622
629
  kubernetes: { enabled: true }
623
- }
630
+ },
631
+ plugins: ['plugin-core', 'plugin-languages', 'plugin-frameworks', 'plugin-testing', 'plugin-devops', 'plugin-cloud', 'plugin-databases', 'plugin-data', 'plugin-pm', 'plugin-ai', 'plugin-ml']
624
632
  }
625
633
  };
626
634
 
@@ -835,6 +843,214 @@ See: https://github.com/rafeekpro/ClaudeAutoPM
835
843
  return processedContent;
836
844
  }
837
845
 
846
+ async installPlugins() {
847
+ if (!this.currentConfig || !this.currentConfig.plugins) {
848
+ this.printStep('No plugins configured for this scenario');
849
+ return;
850
+ }
851
+
852
+ const pluginsToInstall = this.currentConfig.plugins;
853
+
854
+ console.log('');
855
+ this.printStep('Installing plugins for selected scenario...');
856
+ console.log('');
857
+ this.printMsg('CYAN', `📦 Plugins to install (${pluginsToInstall.length}):`);
858
+
859
+ for (const plugin of pluginsToInstall) {
860
+ console.log(` • ${plugin}`);
861
+ }
862
+ console.log('');
863
+
864
+ const packagesDir = path.join(this.baseDir, 'packages');
865
+ const installedPlugins = [];
866
+ const failedPlugins = [];
867
+
868
+ // Install each plugin directly
869
+ for (const pluginName of pluginsToInstall) {
870
+ try {
871
+ this.printStep(`Installing ${pluginName}...`);
872
+
873
+ const pluginPath = path.join(packagesDir, pluginName);
874
+ const pluginJsonPath = path.join(pluginPath, 'plugin.json');
875
+
876
+ if (!fs.existsSync(pluginJsonPath)) {
877
+ throw new Error(`Plugin metadata not found: ${pluginJsonPath}`);
878
+ }
879
+
880
+ const metadata = JSON.parse(fs.readFileSync(pluginJsonPath, 'utf-8'));
881
+ let agentsInstalled = 0;
882
+ let commandsInstalled = 0;
883
+ let rulesInstalled = 0;
884
+
885
+ // Install agents
886
+ if (metadata.agents && metadata.agents.length > 0) {
887
+ const targetDir = path.join(this.targetDir, '.claude', 'agents', metadata.category);
888
+ if (!fs.existsSync(targetDir)) {
889
+ fs.mkdirSync(targetDir, { recursive: true });
890
+ }
891
+
892
+ for (const agent of metadata.agents) {
893
+ const sourcePath = path.join(pluginPath, agent.file);
894
+ const targetPath = path.join(targetDir, path.basename(agent.file));
895
+
896
+ if (fs.existsSync(sourcePath) && !fs.existsSync(targetPath)) {
897
+ fs.copyFileSync(sourcePath, targetPath);
898
+ agentsInstalled++;
899
+ }
900
+ }
901
+ }
902
+
903
+ // Install commands
904
+ if (metadata.commands && metadata.commands.length > 0) {
905
+ const targetDir = path.join(this.targetDir, '.claude', 'commands');
906
+ if (!fs.existsSync(targetDir)) {
907
+ fs.mkdirSync(targetDir, { recursive: true });
908
+ }
909
+
910
+ for (const command of metadata.commands) {
911
+ if (!command.file) continue;
912
+ const sourcePath = path.join(pluginPath, command.file);
913
+ const targetPath = path.join(targetDir, path.basename(command.file));
914
+
915
+ if (fs.existsSync(sourcePath) && !fs.existsSync(targetPath)) {
916
+ fs.copyFileSync(sourcePath, targetPath);
917
+ commandsInstalled++;
918
+ }
919
+ }
920
+ }
921
+
922
+ // Install hooks
923
+ if (metadata.hooks && metadata.hooks.length > 0) {
924
+ const targetDir = path.join(this.targetDir, '.claude', 'hooks');
925
+ if (!fs.existsSync(targetDir)) {
926
+ fs.mkdirSync(targetDir, { recursive: true });
927
+ }
928
+
929
+ for (const hook of metadata.hooks) {
930
+ const files = hook.files || (hook.file ? [hook.file] : []);
931
+ for (const file of files) {
932
+ const sourcePath = path.join(pluginPath, file);
933
+ const targetPath = path.join(targetDir, path.basename(file));
934
+
935
+ if (fs.existsSync(sourcePath) && !fs.existsSync(targetPath)) {
936
+ fs.copyFileSync(sourcePath, targetPath);
937
+ // Make executable if shell script
938
+ if (file.endsWith('.sh')) {
939
+ fs.chmodSync(targetPath, 0o755);
940
+ }
941
+ }
942
+ }
943
+ }
944
+ }
945
+
946
+ // Install scripts
947
+ if (metadata.scripts && metadata.scripts.length > 0) {
948
+ const targetDir = path.join(this.targetDir, 'scripts');
949
+ if (!fs.existsSync(targetDir)) {
950
+ fs.mkdirSync(targetDir, { recursive: true });
951
+ }
952
+
953
+ for (const script of metadata.scripts) {
954
+ if (script.subdirectory && script.files) {
955
+ // Handle subdirectory with multiple files
956
+ const cleanSubdir = script.subdirectory.replace(/^scripts\//, '');
957
+ const subdirTarget = path.join(targetDir, cleanSubdir);
958
+ if (!fs.existsSync(subdirTarget)) {
959
+ fs.mkdirSync(subdirTarget, { recursive: true });
960
+ }
961
+
962
+ for (const file of script.files) {
963
+ const sourcePath = path.join(pluginPath, script.subdirectory, file);
964
+ const targetPath = path.join(subdirTarget, file);
965
+
966
+ if (fs.existsSync(sourcePath) && !fs.existsSync(targetPath)) {
967
+ fs.copyFileSync(sourcePath, targetPath);
968
+ if (file.endsWith('.sh')) {
969
+ fs.chmodSync(targetPath, 0o755);
970
+ }
971
+ }
972
+ }
973
+ } else if (script.file) {
974
+ // Handle single script file
975
+ const cleanFile = script.file.replace(/^scripts\//, '');
976
+ const sourcePath = path.join(pluginPath, script.file);
977
+ const targetPath = path.join(targetDir, cleanFile);
978
+
979
+ // Create subdirectories if needed (e.g., lib/)
980
+ const scriptTargetDir = path.dirname(targetPath);
981
+ if (!fs.existsSync(scriptTargetDir)) {
982
+ fs.mkdirSync(scriptTargetDir, { recursive: true });
983
+ }
984
+
985
+ if (fs.existsSync(sourcePath) && !fs.existsSync(targetPath)) {
986
+ fs.copyFileSync(sourcePath, targetPath);
987
+ if (script.file.endsWith('.sh')) {
988
+ fs.chmodSync(targetPath, 0o755);
989
+ }
990
+ }
991
+ }
992
+ }
993
+ }
994
+
995
+ // Install rules
996
+ if (metadata.rules && metadata.rules.length > 0) {
997
+ const targetDir = path.join(this.targetDir, '.claude', 'rules');
998
+ if (!fs.existsSync(targetDir)) {
999
+ fs.mkdirSync(targetDir, { recursive: true });
1000
+ }
1001
+
1002
+ for (const rule of metadata.rules) {
1003
+ const sourcePath = path.join(pluginPath, rule.file);
1004
+ const targetPath = path.join(targetDir, path.basename(rule.file));
1005
+
1006
+ if (fs.existsSync(sourcePath) && !fs.existsSync(targetPath)) {
1007
+ fs.copyFileSync(sourcePath, targetPath);
1008
+ rulesInstalled++;
1009
+ }
1010
+ }
1011
+ }
1012
+
1013
+ installedPlugins.push({
1014
+ name: pluginName,
1015
+ displayName: metadata.displayName,
1016
+ agents: agentsInstalled,
1017
+ commands: commandsInstalled,
1018
+ rules: rulesInstalled
1019
+ });
1020
+
1021
+ const summary = [];
1022
+ if (agentsInstalled > 0) summary.push(`${agentsInstalled} agents`);
1023
+ if (commandsInstalled > 0) summary.push(`${commandsInstalled} commands`);
1024
+ if (rulesInstalled > 0) summary.push(`${rulesInstalled} rules`);
1025
+
1026
+ this.printSuccess(`${metadata.displayName} installed (${summary.join(', ') || 'no resources'})`);
1027
+ } catch (error) {
1028
+ failedPlugins.push({ name: pluginName, error: error.message });
1029
+ this.printWarning(`Failed to install ${pluginName}: ${error.message}`);
1030
+ }
1031
+ }
1032
+
1033
+ // Store installation results in config
1034
+ this.currentConfig.installedPlugins = installedPlugins;
1035
+ this.currentConfig.failedPlugins = failedPlugins;
1036
+
1037
+ // Update config file with installation results
1038
+ const configPath = path.join(this.targetDir, '.claude', 'config.json');
1039
+ if (fs.existsSync(configPath)) {
1040
+ fs.writeFileSync(configPath, JSON.stringify(this.currentConfig, null, 2));
1041
+ }
1042
+
1043
+ console.log('');
1044
+ if (installedPlugins.length > 0) {
1045
+ this.printMsg('GREEN', `✓ Successfully installed ${installedPlugins.length} plugin(s)`);
1046
+ }
1047
+ if (failedPlugins.length > 0) {
1048
+ this.printMsg('YELLOW', `⚠ Failed to install ${failedPlugins.length} plugin(s)`);
1049
+ this.printMsg('CYAN', '💡 Tip: Install missing plugins with: autopm plugin install <name>');
1050
+ }
1051
+ console.log('');
1052
+ }
1053
+
838
1054
  setupMCPIntegration() {
839
1055
  const mcpServersPath = path.join(this.targetDir, '.claude', 'mcp-servers.json');
840
1056
  const configPath = path.join(this.targetDir, '.claude', 'config.json');
@@ -952,6 +1168,9 @@ See: https://github.com/rafeekpro/ClaudeAutoPM
952
1168
  // Install configuration
953
1169
  this.installConfig(scenario);
954
1170
 
1171
+ // Install plugins based on scenario
1172
+ await this.installPlugins();
1173
+
955
1174
  // Install CLAUDE.md
956
1175
  this.installClaudeMd();
957
1176