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 +80 -1
- package/autopm/.claude/mcp/context7-docs.md +20 -5
- package/autopm/.claude/scripts/pm/prd-new.js +42 -6
- package/package.json +1 -1
- package/scripts/mcp-handler.js +124 -9
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:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
package/scripts/mcp-handler.js
CHANGED
|
@@ -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('🔑
|
|
1103
|
+
console.log('🔑 Environment Variables Status:\n');
|
|
1104
1104
|
const byServer = Object.groupBy(checkResult.missingEnvVars, ({ server }) => server);
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
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
|
-
|
|
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(`
|
|
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(`
|
|
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
|
-
|
|
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
|