claude-autopm 1.12.2 → 1.13.0

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.
@@ -0,0 +1,50 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test-matrix:
11
+ name: test-matrix
12
+ runs-on: ubuntu-latest
13
+
14
+ strategy:
15
+ matrix:
16
+ node-version: [18.x, 20.x]
17
+
18
+ steps:
19
+ - name: Checkout code
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Setup Node.js ${{ matrix.node-version }}
23
+ uses: actions/setup-node@v4
24
+ with:
25
+ node-version: ${{ matrix.node-version }}
26
+ cache: 'npm'
27
+
28
+ - name: Install dependencies
29
+ run: npm ci
30
+
31
+ - name: Run quick tests
32
+ run: npm test
33
+
34
+ - name: Check test coverage
35
+ run: npm run test:coverage
36
+
37
+ # Summary job that branch protection can depend on
38
+ test:
39
+ name: test
40
+ runs-on: ubuntu-latest
41
+ needs: test-matrix
42
+ if: always()
43
+ steps:
44
+ - name: Check test results
45
+ run: |
46
+ if [ "${{ needs.test-matrix.result }}" != "success" ]; then
47
+ echo "Tests failed"
48
+ exit 1
49
+ fi
50
+ echo "All tests passed"
package/README.md CHANGED
@@ -41,6 +41,28 @@ ClaudeAutoPM uses a **hybrid approach** combining deterministic operations with
41
41
  - **Smart Context Management** - Never lose track of your work
42
42
  - **Automated Workflows** - From PRD to production deployment
43
43
 
44
+ ## 📺 Visual Walkthrough
45
+
46
+ See ClaudeAutoPM in action - from installation to deployment:
47
+
48
+ ### 1️⃣ Install AutoPM
49
+ ![Install AutoPM](Video%201.gif)
50
+
51
+ ### 2️⃣ First Claude Execution
52
+ ![First Claude Execution](Video%202.gif)
53
+
54
+ ### 3️⃣ Creation of PRD
55
+ ![Create PRD](Video%203.gif)
56
+
57
+ ### 4️⃣ GitHub Sync and Start Working on Issues
58
+ ![GitHub Sync](Video%204.gif)
59
+
60
+ ### 5️⃣ Issues Finished
61
+ ![Issues Complete](Video%205.gif)
62
+
63
+ ### 6️⃣ Checking the Work Done (Web App + FastAPI)
64
+ ![Web App and FastAPI](Video%206.gif)
65
+
44
66
  ## 🚀 Get Started in 5 Minutes
45
67
 
46
68
  ### 🎯 Quick Start for New Users
@@ -215,7 +237,9 @@ autopm pm:epic-sync user-auth
215
237
  - **50+ Specialized AI Agents** - Python, React, K8s, AWS, and more
216
238
  - **Parallel Execution** - Multiple agents working simultaneously
217
239
  - **Cross-Platform** - GitHub, Azure DevOps, GitLab (coming soon)
218
- - **MCP Integration** - Context management and browser automation
240
+ - **MCP Integration** - Model Context Protocol for live documentation, codebase analysis, and tool integration
241
+ - **Agent Analysis** - Discover which agents use MCP and their configurations
242
+ - **Interactive Diagnostics** - Comprehensive health checks and connection testing
219
243
 
220
244
  ### 🤖 Dynamic Agent Teams
221
245
 
@@ -262,6 +286,110 @@ git checkout -b feat/backend/new-api # Auto-loads 'python_backend' team
262
286
 
263
287
  Teams support inheritance, so specialized teams automatically include base agents. The active team configuration is saved in your project and persists across sessions.
264
288
 
289
+ ## 🔌 MCP (Model Context Protocol) Management
290
+
291
+ ClaudeAutoPM provides comprehensive MCP management for agent-to-tool integration. **39 out of 53 agents (74%)** use MCP servers for live documentation and external tool access.
292
+
293
+ ### Quick Start with MCP
294
+
295
+ ```bash
296
+ # List all available MCP servers
297
+ autopm mcp list
298
+
299
+ # Check which agents use MCP
300
+ autopm mcp agents
301
+ 🤖 Agents Using MCP
302
+
303
+ ✅ react-frontend-engineer
304
+ └─ context7-docs
305
+
306
+ ✅ python-backend-engineer
307
+ └─ context7-docs
308
+ └─ sqlite-mcp
309
+
310
+ 📊 Summary:
311
+ Total agents: 53
312
+ Using MCP: 39 (74%)
313
+
314
+ # Enable MCP servers
315
+ autopm mcp enable context7-docs
316
+ autopm mcp enable github-mcp
317
+
318
+ # Configure API keys interactively
319
+ autopm mcp setup
320
+
321
+ # Sync configuration
322
+ autopm mcp sync
323
+ ```
324
+
325
+ ### MCP Commands
326
+
327
+ #### **Agent Analysis**
328
+ ```bash
329
+ autopm mcp agents # List agents using MCP
330
+ autopm mcp agents --by-server # Group by MCP server
331
+ autopm mcp agent <name> # Show agent MCP config
332
+ autopm mcp usage # Usage statistics
333
+ autopm mcp tree # Dependency tree
334
+ ```
335
+
336
+ #### **Configuration & Diagnostics**
337
+ ```bash
338
+ autopm mcp setup # Interactive API key setup
339
+ autopm mcp diagnose # Run diagnostics
340
+ autopm mcp test <server> # Test server connection
341
+ autopm mcp status # Show servers status
342
+ ```
343
+
344
+ #### **Server Management**
345
+ ```bash
346
+ autopm mcp list # List available servers
347
+ autopm mcp info <server> # Server details
348
+ autopm mcp enable <server> # Enable server
349
+ autopm mcp disable <server> # Disable server
350
+ autopm mcp sync # Sync configuration
351
+ ```
352
+
353
+ ### MCP Server Types
354
+
355
+ - **Documentation** - `context7-docs` for live framework documentation (React, Python, AWS, etc.)
356
+ - **Codebase** - `context7-codebase` for project analysis and navigation
357
+ - **GitHub** - `github-mcp` for repository operations
358
+ - **Databases** - `sqlite-mcp`, `postgresql-mcp`, `mongodb-mcp` for data operations
359
+ - **Browser** - `playwright-mcp` for E2E testing and automation
360
+
361
+ ### Example: Setting Up Context7
362
+
363
+ ```bash
364
+ # 1. Enable context7 documentation server
365
+ autopm mcp enable context7-docs
366
+
367
+ # 2. Configure API key
368
+ cat > .claude/.env << EOF
369
+ CONTEXT7_API_KEY=your-api-key-here
370
+ CONTEXT7_WORKSPACE=your-workspace-id
371
+ EOF
372
+
373
+ # 3. Sync configuration
374
+ autopm mcp sync
375
+
376
+ # 4. Verify setup
377
+ autopm mcp diagnose
378
+
379
+ # 5. Test connection
380
+ autopm mcp test context7-docs
381
+ ```
382
+
383
+ ### MCP Benefits
384
+
385
+ - ✅ **Live Documentation** - Agents access latest framework docs automatically
386
+ - ✅ **Codebase Context** - Deep understanding of your project structure
387
+ - ✅ **Tool Integration** - GitHub, databases, browsers, and more
388
+ - ✅ **No Hallucinations** - Real-time data instead of outdated training
389
+ - ✅ **Extensible** - Add custom MCP servers for your tools
390
+
391
+ 📖 **Full MCP Setup Guide**: [`MCP_SETUP_GUIDE.md`](./MCP_SETUP_GUIDE.md)
392
+
265
393
  ## 📚 Full Documentation
266
394
 
267
395
  For comprehensive guides, advanced features, and detailed configuration:
@@ -291,9 +419,17 @@ autopm azure:sprint-status
291
419
  autopm context:create
292
420
  ```
293
421
 
294
- ### New in v1.9.x: Complete PM Command Suite
422
+ ### Latest Features (v1.12.x)
423
+
424
+ **v1.12.2 - Smart Installation & Command Fixes**
425
+ - **Smart Tool Detection** - Installer automatically detects Docker and kubectl availability
426
+ - **Intelligent Defaults** - Installation options filtered based on available tools
427
+ - **Command Format Fixes** - All PM scripts now use consistent `/pm:...` format
428
+ - **Version Tracking** - Update command now properly detects installed versions
429
+
430
+ **v1.9.x - Complete PM Command Suite**
295
431
 
296
- The latest release includes 17 new PM commands providing comprehensive project management capabilities:
432
+ 17 new PM commands providing comprehensive project management capabilities:
297
433
 
298
434
  #### **PRD & Epic Management**
299
435
  ```bash
@@ -1,4 +1,6 @@
1
1
  {
2
+ "version": "1.12.2",
3
+ "installed": "2025-09-30T09:00:00Z",
2
4
  "execution_strategy": {
3
5
  "mode": "adaptive"
4
6
  },
@@ -1,293 +1 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Azure DevOps Issue Show Command
5
- * Retrieves and displays work item details
6
- */
7
-
8
- class AzureIssueShow {
9
- constructor(options = {}) {
10
- this.config = options;
11
- this.api = options.api || null;
12
- this.connection = options.connection || null;
13
- }
14
-
15
- /**
16
- * Execute the issue show command
17
- * @param {Object} params - Command parameters
18
- * @param {string|number} params.id - Work item ID
19
- * @returns {Promise<Object>} Result object with success, data, and formatted output
20
- */
21
- async execute(params) {
22
- if (!params || !params.id) {
23
- throw new Error('Work Item ID is required');
24
- }
25
-
26
- const workItemId = parseInt(params.id);
27
- if (isNaN(workItemId)) {
28
- throw new Error('Invalid work item ID');
29
- }
30
-
31
- // Check for Azure DevOps token
32
- if (!process.env.AZURE_DEVOPS_TOKEN && !this.config.token) {
33
- throw new Error('Azure DevOps personal access token is required. Set AZURE_DEVOPS_TOKEN environment variable.');
34
- }
35
-
36
- // Get work item from API
37
- let workItem;
38
- try {
39
- // Support both api and connection patterns
40
- if (this.api && this.api.getWorkItem) {
41
- workItem = await this.api.getWorkItem(workItemId);
42
- } else if (this.connection && this.connection.getWorkItemTrackingApi) {
43
- const witApi = await this.connection.getWorkItemTrackingApi();
44
- workItem = await witApi.getWorkItem(workItemId);
45
- } else {
46
- const project = this.config.project || 'project';
47
- throw new Error(`Work Item #${workItemId} not found in ${project}`);
48
- }
49
- } catch (error) {
50
- const project = this.config.project || 'project';
51
-
52
- // Handle specific error codes
53
- if (error.statusCode === 404 || error.message.includes('not found')) {
54
- throw new Error(`Work Item #${workItemId} not found in ${project}`);
55
- }
56
- if (error.statusCode === 403) {
57
- throw new Error(`Access denied: Insufficient permissions to view Work Item #${workItemId} in ${project}`);
58
- }
59
- if (error.code === 'ETIMEDOUT' || error.code === 'ECONNABORTED') {
60
- throw new Error(`Request timeout: Failed to retrieve Work Item #${workItemId} from Azure DevOps`);
61
- }
62
-
63
- // Re-throw original error if not handled
64
- throw error;
65
- }
66
-
67
- // Validate work item structure
68
- if (!workItem || typeof workItem !== 'object') {
69
- throw new Error(`Invalid response: Unable to parse Work Item #${workItemId} data`);
70
- }
71
-
72
- // Check for required fields
73
- if (!workItem.fields) {
74
- throw new Error(`Azure DevOps API error: Invalid work item structure for #${workItemId}`);
75
- }
76
-
77
- // Map Azure DevOps work item to common format
78
- const data = this.mapWorkItem(workItem);
79
-
80
- // Format for display
81
- const formatted = this.formatWorkItem(data);
82
-
83
- return {
84
- success: true,
85
- data: data,
86
- formatted: formatted
87
- };
88
- }
89
-
90
- /**
91
- * Extract work item ID from relation URL
92
- */
93
- extractWorkItemId(url) {
94
- if (!url) return null;
95
- const match = url.match(/workItems\/(\d+)$/);
96
- return match ? parseInt(match[1]) : null;
97
- }
98
-
99
- /**
100
- * Map Azure DevOps work item to common format
101
- */
102
- mapWorkItem(workItem) {
103
- const fields = workItem.fields || {};
104
- const relations = workItem.relations || [];
105
-
106
- // Map work item type
107
- const typeMap = {
108
- 'User Story': 'issue',
109
- 'Bug': 'bug',
110
- 'Task': 'task',
111
- 'Epic': 'epic',
112
- 'Feature': 'feature'
113
- };
114
-
115
- // Map state
116
- const stateMap = {
117
- 'New': 'open',
118
- 'Active': 'in_progress',
119
- 'In Progress': 'in_progress',
120
- 'Resolved': 'in_review', // Changed from 'resolved' to match test
121
- 'Closed': 'closed',
122
- 'Done': 'closed',
123
- 'Removed': 'cancelled' // Added for Bug work items
124
- };
125
-
126
- // Extract parent/children relationships and attachments from relations
127
- let parent = null;
128
- const children = [];
129
- let attachmentCount = 0;
130
-
131
- relations.forEach(relation => {
132
- if (relation.rel === 'System.LinkTypes.Hierarchy-Reverse') {
133
- // Parent relationship
134
- parent = this.extractWorkItemId(relation.url);
135
- } else if (relation.rel === 'System.LinkTypes.Hierarchy-Forward') {
136
- // Child relationship
137
- const childId = this.extractWorkItemId(relation.url);
138
- if (childId) children.push(childId);
139
- } else if (relation.rel === 'AttachedFile') {
140
- // Attachment
141
- attachmentCount++;
142
- }
143
- });
144
-
145
- return {
146
- id: workItem.id,
147
- type: typeMap[fields['System.WorkItemType']] || 'issue',
148
- title: fields['System.Title'] || '',
149
- description: fields['System.Description'] || '',
150
- state: stateMap[fields['System.State']] || 'open',
151
- assignee: fields['System.AssignedTo']?.displayName || fields['System.AssignedTo'] || null,
152
- creator: fields['System.CreatedBy']?.displayName || fields['System.CreatedBy'] || null,
153
- created_at: fields['System.CreatedDate'] || null,
154
- updated_at: fields['System.ChangedDate'] || null,
155
- priority: fields['Microsoft.VSTS.Common.Priority'] || null,
156
- tags: fields['System.Tags'] ? fields['System.Tags'].split(';').map(t => t.trim()) : [],
157
- project: fields['System.TeamProject'] || null,
158
- area: fields['System.AreaPath'] || null,
159
- iteration: fields['System.IterationPath'] || null,
160
- url: workItem._links?.html?.href || null,
161
- // Additional fields expected by tests
162
- workItemType: fields['System.WorkItemType'],
163
- areaPath: fields['System.AreaPath'] || null,
164
- iterationPath: fields['System.IterationPath'] || null,
165
- storyPoints: fields['Microsoft.VSTS.Scheduling.StoryPoints'] || null,
166
- parent: parent,
167
- children: children,
168
- attachmentCount: attachmentCount,
169
- acceptanceCriteria: fields['Microsoft.VSTS.Common.AcceptanceCriteria'] || null,
170
- originalType: fields['System.WorkItemType'],
171
- originalState: fields['System.State'],
172
- // Metrics object
173
- metrics: {
174
- storyPoints: fields['Microsoft.VSTS.Scheduling.StoryPoints'] || 0,
175
- effort: fields['Microsoft.VSTS.Scheduling.Effort'] || 0,
176
- remainingWork: fields['Microsoft.VSTS.Scheduling.RemainingWork'] || 0,
177
- completedWork: fields['Microsoft.VSTS.Scheduling.CompletedWork'] || 0,
178
- originalEstimate: fields['Microsoft.VSTS.Scheduling.OriginalEstimate'] || 0
179
- }
180
- };
181
- }
182
-
183
- /**
184
- * Format work item for display
185
- */
186
- formatWorkItem(data) {
187
- const lines = [];
188
- lines.push('═'.repeat(60));
189
- lines.push(`${data.originalType || 'Work Item'} #${data.id}: ${data.title}`);
190
- lines.push('═'.repeat(60));
191
- lines.push('');
192
- lines.push(`**Status:** ${data.state}`);
193
- lines.push(`**Assignee:** ${data.assignee || 'Unassigned'}`);
194
- lines.push(`**Priority:** ${data.priority || 'Not set'}`);
195
- lines.push(`**Iteration:** ${data.iterationPath || data.iteration || 'Not set'}`);
196
-
197
- // Add story points if present
198
- if (data.metrics && data.metrics.storyPoints) {
199
- lines.push(`**Story Points:** ${data.metrics.storyPoints}`);
200
- }
201
-
202
- // Add parent/children relationships
203
- if (data.parent) {
204
- lines.push(`**Parent:** #${data.parent}`);
205
- }
206
-
207
- if (data.children && data.children.length > 0) {
208
- lines.push(`**Children:** ${data.children.map(c => `#${c}`).join(', ')}`);
209
- }
210
-
211
- // Add tags
212
- if (data.tags && data.tags.length > 0) {
213
- lines.push(`**Tags:** ${data.tags.join(', ')}`);
214
- }
215
-
216
- // Add work metrics
217
- if (data.metrics) {
218
- if (data.metrics.remainingWork > 0) {
219
- lines.push(`**Remaining:** ${data.metrics.remainingWork}h`);
220
- }
221
- if (data.metrics.completedWork > 0) {
222
- lines.push(`**Completed:** ${data.metrics.completedWork}h`);
223
- }
224
- }
225
-
226
- if (data.created_at) {
227
- lines.push(`**Created:** ${new Date(data.created_at).toLocaleString()}`);
228
- }
229
-
230
- if (data.updated_at) {
231
- lines.push(`**Updated:** ${new Date(data.updated_at).toLocaleString()}`);
232
- }
233
-
234
- if (data.description) {
235
- lines.push('');
236
- lines.push('Description:');
237
- lines.push('-'.repeat(60));
238
- lines.push(data.description.substring(0, 500));
239
- if (data.description.length > 500) {
240
- lines.push('... (truncated)');
241
- }
242
- } else {
243
- lines.push('');
244
- lines.push('Description:');
245
- lines.push('-'.repeat(60));
246
- lines.push('_No description provided_');
247
- }
248
-
249
- // Generate Azure DevOps URL if not provided
250
- if (data.url) {
251
- lines.push('');
252
- lines.push(`View Online: ${data.url}`);
253
- } else if (this.config.organization && this.config.project) {
254
- lines.push('');
255
- lines.push('View in Azure DevOps:');
256
- lines.push(`https://dev.azure.com/${this.config.organization}/${this.config.project}/_workitems/edit/${data.id}`);
257
- }
258
-
259
- lines.push('═'.repeat(60));
260
-
261
- return lines.join('\n');
262
- }
263
-
264
- /**
265
- * Run as CLI command
266
- */
267
- async run(args) {
268
- const workItemId = args[0];
269
-
270
- if (!workItemId) {
271
- console.error('Error: Work Item ID is required');
272
- console.error('Usage: azure-issue-show <work-item-id>');
273
- process.exit(1);
274
- }
275
-
276
- try {
277
- const result = await this.execute({ id: workItemId });
278
- console.log(result.formatted);
279
- } catch (error) {
280
- console.error(`Error: ${error.message}`);
281
- process.exit(1);
282
- }
283
- }
284
- }
285
-
286
- // Export for testing and module usage
287
- module.exports = AzureIssueShow;
288
-
289
- // Run if called directly
290
- if (require.main === module) {
291
- const issueShow = new AzureIssueShow();
292
- issueShow.run(process.argv.slice(2));
293
- }
1
+ module.exports = function() { console.log("Should not execute"); };
package/bin/autopm.js CHANGED
@@ -178,6 +178,8 @@ function main() {
178
178
  .command(require('./commands/team'))
179
179
  // Config management command
180
180
  .command(require('./commands/config'))
181
+ // MCP management command
182
+ .command(require('./commands/mcp'))
181
183
  // Global options
182
184
  .option('verbose', {
183
185
  type: 'boolean',
@@ -228,6 +230,24 @@ function main() {
228
230
  # Validate configuration
229
231
  autopm config validate
230
232
 
233
+ 🔌 MCP (Model Context Protocol) Management:
234
+ # List and manage MCP servers
235
+ autopm mcp list # List all available MCP servers
236
+ autopm mcp enable context7-docs # Enable documentation server
237
+ autopm mcp sync # Sync configuration to .claude/mcp-servers.json
238
+
239
+ # Agent Analysis
240
+ autopm mcp agents # List agents using MCP
241
+ autopm mcp agent react-frontend-engineer # Show MCP config for agent
242
+ autopm mcp usage # Show MCP usage statistics
243
+ autopm mcp tree # Show agent-MCP dependency tree
244
+
245
+ # Configuration & Diagnostics
246
+ autopm mcp setup # Interactive API key setup
247
+ autopm mcp diagnose # Run comprehensive diagnostics
248
+ autopm mcp test context7-docs # Test MCP server connection
249
+ autopm mcp status # Show all MCP servers status
250
+
231
251
  🔑 Token Setup:
232
252
  # GitHub PAT (Settings → Developer settings → Personal access tokens)
233
253
  Scopes: repo, workflow, admin:repo_hook