claude-autopm 1.13.2 → 1.13.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.
package/README.md CHANGED
@@ -199,6 +199,42 @@ autopm config switch github
199
199
  autopm config validate
200
200
  ```
201
201
 
202
+ #### 4.6 Verify Installation & Configuration
203
+
204
+ After installation, verify that everything is properly configured:
205
+
206
+ ```bash
207
+ # Comprehensive configuration check
208
+ autopm validate
209
+
210
+ # Shows:
211
+ # ✅ Essential Components (.claude directory, config, provider, git)
212
+ # ✅ Optional Components (MCP servers, git hooks, Node.js version)
213
+ # 📋 Next steps for incomplete setup
214
+ ```
215
+
216
+ **Example Output:**
217
+ ```
218
+ ╔════════════════════════════════════════════════════════════════╗
219
+ ║ 🔍 ClaudeAutoPM Configuration Status ║
220
+ ╚════════════════════════════════════════════════════════════════╝
221
+
222
+ Essential Components:
223
+ ✅ .claude directory - Framework installed
224
+ ✅ Configuration file - Provider: github
225
+ ✅ Provider setup - GitHub (configured)
226
+ ✅ Git repository - Initialized
227
+
228
+ Optional Components:
229
+ ✅ MCP servers - 2 active (context7-docs, github-mcp)
230
+ ⚠️ Git hooks - Not installed (run: bash scripts/setup-hooks.sh)
231
+ ✅ Node.js version - v20.10.0 (compatible)
232
+
233
+ Next Steps:
234
+ 1. Install git hooks: bash scripts/setup-hooks.sh
235
+ 2. Run MCP configuration check: autopm mcp check
236
+ ```
237
+
202
238
  #### 4. Ship Your First Feature (90 seconds)
203
239
 
204
240
  ##### Option A: Using Templates (Works Everywhere)
@@ -353,8 +389,9 @@ autopm mcp tree # Dependency tree
353
389
 
354
390
  #### **Configuration & Diagnostics**
355
391
  ```bash
392
+ autopm mcp check # Quick configuration check
356
393
  autopm mcp setup # Interactive API key setup
357
- autopm mcp diagnose # Run diagnostics
394
+ autopm mcp diagnose # Run full diagnostics
358
395
  autopm mcp test <server> # Test server connection
359
396
  autopm mcp status # Show servers status
360
397
  ```
@@ -461,6 +498,48 @@ autopm pm:prd-parse user-authentication --overwrite
461
498
  autopm pm:epic-close user-auth "All authentication features complete"
462
499
  ```
463
500
 
501
+ ##### **Splitting Large PRDs into Multiple Epics**
502
+
503
+ For complex features, you can split a single PRD into multiple focused epics:
504
+
505
+ ```bash
506
+ # 1. Create a comprehensive PRD
507
+ autopm pm:prd-new payment-system --template
508
+
509
+ # 2. Split into focused epics using AI analysis
510
+ /pm:prd-split payment-system
511
+
512
+ # This creates multiple epics from one PRD:
513
+ # ├─ payment-system-backend (API, database, payment gateway integration)
514
+ # ├─ payment-system-frontend (UI components, checkout flow)
515
+ # └─ payment-system-security (PCI compliance, encryption, audit logging)
516
+
517
+ # 3. Work on each epic independently
518
+ /pm:epic-decompose payment-system-backend
519
+ /pm:epic-sync payment-system-backend
520
+
521
+ # 4. Track overall PRD progress
522
+ autopm pm:prd-status payment-system
523
+ # Shows:
524
+ # Epic: payment-system-backend [████████░░] 80% (8/10 tasks)
525
+ # Epic: payment-system-frontend [████░░░░░░] 40% (4/10 tasks)
526
+ # Epic: payment-system-security [░░░░░░░░░░] 0% (0/8 tasks)
527
+ # Overall: 44% complete (12/28 tasks)
528
+ ```
529
+
530
+ **When to split PRDs:**
531
+ - ✅ Feature requires multiple specialized teams (frontend, backend, DevOps)
532
+ - ✅ Different components have separate deployment timelines
533
+ - ✅ Epic would exceed 15-20 tasks (becomes hard to manage)
534
+ - ✅ Clear architectural boundaries exist (UI, API, infrastructure)
535
+
536
+ **Best practices:**
537
+ - 📝 Keep original PRD as the source of truth
538
+ - 🏷️ Use consistent naming: `<prd-name>-<component>`
539
+ - 🔗 Link epics back to parent PRD in description
540
+ - 📊 Track overall progress across all child epics
541
+ - 🎯 Each epic should be independently deployable when possible
542
+
464
543
  #### **Issue Lifecycle**
465
544
  ```bash
466
545
  # Start working on an issue
@@ -3,11 +3,26 @@ name: context7-docs
3
3
  command: npx
4
4
  args: ["@context7/mcp-server"]
5
5
  env:
6
- CONTEXT7_API_KEY: "${CONTEXT7_API_KEY:-}"
7
- CONTEXT7_MCP_URL: "${CONTEXT7_MCP_URL:-mcp.context7.com/mcp}"
8
- CONTEXT7_API_URL: "${CONTEXT7_API_URL:-context7.com/api/v1}"
9
- CONTEXT7_WORKSPACE: "${CONTEXT7_WORKSPACE:-}"
10
- CONTEXT7_MODE: "documentation"
6
+ CONTEXT7_API_KEY:
7
+ default: ""
8
+ description: "Your Context7 API key"
9
+ required: true
10
+ CONTEXT7_MCP_URL:
11
+ default: "https://mcp.context7.com/mcp"
12
+ description: "MCP endpoint URL"
13
+ required: false
14
+ CONTEXT7_API_URL:
15
+ default: "https://context7.com/api/v1"
16
+ description: "API endpoint URL"
17
+ required: false
18
+ CONTEXT7_WORKSPACE:
19
+ default: "default"
20
+ description: "Your workspace identifier (uses default workspace if not set)"
21
+ required: false
22
+ CONTEXT7_MODE:
23
+ default: "documentation"
24
+ description: "Server mode"
25
+ required: false
11
26
  envFile: .claude/.env
12
27
  description: Context7 documentation server for accessing technical documentation
13
28
  category: documentation
@@ -94,12 +94,8 @@ class PrdCreator {
94
94
  console.log('\n✅ PRD created successfully!');
95
95
  console.log(`📄 File: ${prdFile}`);
96
96
 
97
- // Show next steps
98
- console.log('\n💡 Next Steps:');
99
- console.log(` 1. Review PRD file: .claude/prds/${prdName}.md`);
100
- console.log(` 2. Convert to epic: /pm:prd-parse ${prdName}`);
101
- console.log(` 3. Check status: /pm:prd-status ${prdName}`);
102
- console.log(` 4. List all PRDs: /pm:prd-list`);
97
+ // Show comprehensive next steps
98
+ this.showNextSteps(prdName);
103
99
 
104
100
  } finally {
105
101
  rl.close();
@@ -108,6 +104,46 @@ class PrdCreator {
108
104
  return true;
109
105
  }
110
106
 
107
+ showNextSteps(prdName) {
108
+ console.log('\n' + '═'.repeat(60));
109
+ console.log('📋 What You Can Do Next:');
110
+ console.log('═'.repeat(60) + '\n');
111
+
112
+ console.log('🎯 Option 1: Quick Start (Recommended for Simple Features)');
113
+ console.log(' One command to parse, decompose, and sync to GitHub:');
114
+ console.log(` /pm:epic-oneshot ${prdName}`);
115
+ console.log(' ✨ This creates epic + tasks + GitHub issues automatically\n');
116
+
117
+ console.log('🔀 Option 2: Split into Multiple Epics (For Complex Features)');
118
+ console.log(' Break down large PRD into focused sub-epics:');
119
+ console.log(` /pm:prd-split ${prdName}`);
120
+ console.log(' Example: payment-system → backend, frontend, security');
121
+ console.log(' 📚 See README section "Splitting Large PRDs into Multiple Epics"\n');
122
+
123
+ console.log('🛠️ Option 3: Step-by-Step Workflow (Full Control)');
124
+ console.log(' a) Convert PRD to epic:');
125
+ console.log(` /pm:prd-parse ${prdName}`);
126
+ console.log(' b) Break epic into tasks:');
127
+ console.log(` /pm:epic-decompose ${prdName}`);
128
+ console.log(' c) Push to GitHub/Azure:');
129
+ console.log(` /pm:epic-sync ${prdName}\n`);
130
+
131
+ console.log('📝 Option 4: Review & Edit First');
132
+ console.log(' Review and refine the PRD before processing:');
133
+ console.log(` nano .claude/prds/${prdName}.md`);
134
+ console.log(' Then use any option above\n');
135
+
136
+ console.log('📊 Option 5: Check Status');
137
+ console.log(' View PRD and track progress:');
138
+ console.log(` /pm:prd-status ${prdName}\n`);
139
+
140
+ console.log(`💡 Don't know which to choose?`);
141
+ console.log(' • Small feature (< 10 tasks)? → Use Option 1 (/pm:epic-oneshot)');
142
+ console.log(' • Large feature (15+ tasks)? → Use Option 2 (/pm:prd-split)');
143
+ console.log(' • Need full control? → Use Option 3 (step-by-step)');
144
+ console.log('');
145
+ }
146
+
111
147
  generatePrdContent(name, data) {
112
148
  const timestamp = new Date().toISOString();
113
149
  const author = process.env.USER || 'unknown';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-autopm",
3
- "version": "1.13.2",
3
+ "version": "1.13.4",
4
4
  "description": "Autonomous Project Management Framework for Claude Code - Advanced AI-powered development automation",
5
5
  "main": "bin/autopm.js",
6
6
  "bin": {
@@ -1098,13 +1098,74 @@ This server can be integrated with various agents and context pools.
1098
1098
  console.log();
1099
1099
  }
1100
1100
 
1101
- // Show missing env vars details
1101
+ // Show missing env vars details with help
1102
1102
  if (checkResult.missingEnvVars.length > 0) {
1103
- console.log('🔑 Missing Environment Variables:\n');
1103
+ console.log('🔑 Environment Variables Status:\n');
1104
1104
  const byServer = Object.groupBy(checkResult.missingEnvVars, ({ server }) => server);
1105
- Object.entries(byServer).forEach(([server, entries]) => {
1106
- console.log(` ${server}:`);
1107
- entries.forEach(({ variable }) => console.log(` - ${variable}`));
1105
+
1106
+ Object.entries(byServer).forEach(([serverName, entries]) => {
1107
+ const server = this.getServer(serverName);
1108
+ console.log(` 📦 ${serverName}:`);
1109
+
1110
+ // Categorize as required or optional
1111
+ const required = [];
1112
+ const optional = [];
1113
+
1114
+ entries.forEach(({ variable }) => {
1115
+ const envDef = server?.metadata?.env?.[variable];
1116
+ if (this._hasNonEmptyDefault(envDef)) {
1117
+ optional.push({ name: variable, default: envDef.default, desc: envDef.description });
1118
+ } else {
1119
+ required.push({ name: variable, desc: envDef?.description || 'No description' });
1120
+ }
1121
+ });
1122
+
1123
+ if (required.length > 0) {
1124
+ console.log(' ❌ REQUIRED (must be set):');
1125
+ required.forEach(v => {
1126
+ console.log(` • ${v.name}`);
1127
+ if (v.desc) console.log(` ${v.desc}`);
1128
+ });
1129
+ }
1130
+
1131
+ if (optional.length > 0) {
1132
+ console.log(' ⚠️ OPTIONAL (have defaults):');
1133
+ optional.forEach(v => {
1134
+ console.log(` • ${v.name} = ${v.default}`);
1135
+ if (v.desc) console.log(` ${v.desc}`);
1136
+ });
1137
+ }
1138
+ console.log();
1139
+ });
1140
+
1141
+ // Show configuration instructions
1142
+ console.log('📝 How to Configure:\n');
1143
+ console.log(' 1. Edit file: .claude/.env\n');
1144
+ console.log(' 2. Add required variables:\n');
1145
+
1146
+ Object.entries(byServer).forEach(([serverName, entries]) => {
1147
+ const server = this.getServer(serverName);
1148
+ console.log(` # ${serverName}`);
1149
+ entries.forEach(({ variable }) => {
1150
+ const envDef = server?.metadata?.env?.[variable];
1151
+ if (this._hasNonEmptyDefault(envDef)) {
1152
+ console.log(` # ${variable}=${envDef.default} (optional)`);
1153
+ } else {
1154
+ const example = this._getEnvVarExample(serverName, variable);
1155
+ console.log(` ${variable}=${example}`);
1156
+ }
1157
+ });
1158
+ console.log();
1159
+ });
1160
+
1161
+ // Show where to get credentials
1162
+ console.log('🔐 Where to Get API Keys:\n');
1163
+ Object.keys(byServer).forEach(serverName => {
1164
+ const info = this._getCredentialInfo(serverName);
1165
+ if (info) {
1166
+ console.log(` ${serverName}:`);
1167
+ console.log(` ${info}`);
1168
+ }
1108
1169
  });
1109
1170
  console.log();
1110
1171
  }
@@ -1116,19 +1177,73 @@ This server can be integrated with various agents and context pools.
1116
1177
  console.log();
1117
1178
  }
1118
1179
 
1119
- console.log('🔧 Quick Fix:');
1180
+ // Step-by-step fix
1181
+ console.log('🛠️ Step-by-Step Fix:\n');
1182
+ let step = 1;
1183
+
1120
1184
  if (Array.isArray(checkResult.disabledServers) && checkResult.disabledServers.length > 0) {
1185
+ console.log(` ${step}. Enable MCP server(s):`);
1121
1186
  checkResult.disabledServers.forEach(server => {
1122
- console.log(` autopm mcp enable ${server.name}`);
1187
+ console.log(` autopm mcp enable ${server.name}`);
1123
1188
  });
1189
+ step++;
1124
1190
  }
1191
+
1125
1192
  if (checkResult.missingEnvVars.length > 0) {
1126
- console.log(` autopm mcp setup`);
1193
+ console.log(` ${step}. Edit .claude/.env and add required variables`);
1194
+ console.log(` nano .claude/.env # or use your editor`);
1195
+ step++;
1127
1196
  }
1128
- console.log(` autopm mcp sync`);
1197
+
1198
+ console.log(` ${step}. Sync MCP configuration:`);
1199
+ console.log(` autopm mcp sync`);
1200
+ step++;
1201
+
1202
+ console.log(` ${step}. Verify everything works:`);
1203
+ console.log(' autopm mcp check');
1129
1204
  console.log();
1130
1205
  }
1131
1206
 
1207
+ /**
1208
+ * Get example value for environment variable
1209
+ * @private
1210
+ */
1211
+ _getEnvVarExample(serverName, varName) {
1212
+ const examples = {
1213
+ 'CONTEXT7_API_KEY': 'ctx7_1234567890abcdef',
1214
+ 'CONTEXT7_WORKSPACE': 'my-workspace-id',
1215
+ 'GITHUB_TOKEN': 'ghp_xxxxxxxxxxxxxxxxxxxx',
1216
+ 'AZURE_DEVOPS_PAT': 'your-pat-token-here'
1217
+ };
1218
+ return examples[varName] || 'your-value-here';
1219
+ }
1220
+
1221
+ /**
1222
+ * Get information about where to obtain credentials
1223
+ * @private
1224
+ */
1225
+ _getCredentialInfo(serverName) {
1226
+ const info = {
1227
+ 'context7-docs': '→ Sign up at https://context7.com and get API key from dashboard',
1228
+ 'context7-codebase': '→ Same credentials as context7-docs',
1229
+ 'github-mcp': '→ Generate token at https://github.com/settings/tokens',
1230
+ 'playwright-mcp': '→ No credentials needed - uses local Playwright installation'
1231
+ };
1232
+ return info[serverName] || '→ Check server documentation: autopm mcp info ' + serverName;
1233
+ }
1234
+
1235
+ /**
1236
+ * Check if environment variable definition has a non-empty default value
1237
+ * @private
1238
+ * @param {Object} envDef - Environment variable definition
1239
+ * @returns {boolean} True if has non-empty default
1240
+ */
1241
+ _hasNonEmptyDefault(envDef) {
1242
+ if (!envDef?.default) return false;
1243
+ const defaultValue = String(envDef.default).trim();
1244
+ return defaultValue !== '';
1245
+ }
1246
+
1132
1247
  /**
1133
1248
  * Run comprehensive MCP diagnostics
1134
1249
  * @returns {Object} Diagnostic results