claude-autopm 1.12.3 → 1.13.1

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,46 @@ 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. **Click to expand each video:**
47
+
48
+ <details>
49
+ <summary><b>1️⃣ Install AutoPM</b> - Complete installation process</summary>
50
+ <br>
51
+ <img src="docs/assets/video-1.gif" width="100%" alt="Install AutoPM">
52
+ </details>
53
+
54
+ <details>
55
+ <summary><b>2️⃣ First Claude Execution</b> - Setting up and running Claude Code</summary>
56
+ <br>
57
+ <img src="docs/assets/video-2.gif" width="100%" alt="First Claude Execution">
58
+ </details>
59
+
60
+ <details>
61
+ <summary><b>3️⃣ Creation of PRD</b> - Product Requirements Document workflow</summary>
62
+ <br>
63
+ <img src="docs/assets/video-3.gif" width="100%" alt="Create PRD">
64
+ </details>
65
+
66
+ <details>
67
+ <summary><b>4️⃣ GitHub Sync and Start Working</b> - Synchronizing with GitHub and beginning tasks</summary>
68
+ <br>
69
+ <img src="docs/assets/video-4.gif" width="100%" alt="GitHub Sync">
70
+ </details>
71
+
72
+ <details>
73
+ <summary><b>5️⃣ Issues Finished</b> - Completing and closing tasks</summary>
74
+ <br>
75
+ <img src="docs/assets/video-5.gif" width="100%" alt="Issues Complete">
76
+ </details>
77
+
78
+ <details>
79
+ <summary><b>6️⃣ Checking the Work Done</b> - Running Web App + FastAPI demo</summary>
80
+ <br>
81
+ <img src="docs/assets/video-6.gif" width="100%" alt="Web App and FastAPI">
82
+ </details>
83
+
44
84
  ## 🚀 Get Started in 5 Minutes
45
85
 
46
86
  ### 🎯 Quick Start for New Users
@@ -215,7 +255,9 @@ autopm pm:epic-sync user-auth
215
255
  - **50+ Specialized AI Agents** - Python, React, K8s, AWS, and more
216
256
  - **Parallel Execution** - Multiple agents working simultaneously
217
257
  - **Cross-Platform** - GitHub, Azure DevOps, GitLab (coming soon)
218
- - **MCP Integration** - Context management and browser automation
258
+ - **MCP Integration** - Model Context Protocol for live documentation, codebase analysis, and tool integration
259
+ - **Agent Analysis** - Discover which agents use MCP and their configurations
260
+ - **Interactive Diagnostics** - Comprehensive health checks and connection testing
219
261
 
220
262
  ### 🤖 Dynamic Agent Teams
221
263
 
@@ -262,6 +304,110 @@ git checkout -b feat/backend/new-api # Auto-loads 'python_backend' team
262
304
 
263
305
  Teams support inheritance, so specialized teams automatically include base agents. The active team configuration is saved in your project and persists across sessions.
264
306
 
307
+ ## 🔌 MCP (Model Context Protocol) Management
308
+
309
+ 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.
310
+
311
+ ### Quick Start with MCP
312
+
313
+ ```bash
314
+ # List all available MCP servers
315
+ autopm mcp list
316
+
317
+ # Check which agents use MCP
318
+ autopm mcp agents
319
+ 🤖 Agents Using MCP
320
+
321
+ ✅ react-frontend-engineer
322
+ └─ context7-docs
323
+
324
+ ✅ python-backend-engineer
325
+ └─ context7-docs
326
+ └─ sqlite-mcp
327
+
328
+ 📊 Summary:
329
+ Total agents: 53
330
+ Using MCP: 39 (74%)
331
+
332
+ # Enable MCP servers
333
+ autopm mcp enable context7-docs
334
+ autopm mcp enable github-mcp
335
+
336
+ # Configure API keys interactively
337
+ autopm mcp setup
338
+
339
+ # Sync configuration
340
+ autopm mcp sync
341
+ ```
342
+
343
+ ### MCP Commands
344
+
345
+ #### **Agent Analysis**
346
+ ```bash
347
+ autopm mcp agents # List agents using MCP
348
+ autopm mcp agents --by-server # Group by MCP server
349
+ autopm mcp agent <name> # Show agent MCP config
350
+ autopm mcp usage # Usage statistics
351
+ autopm mcp tree # Dependency tree
352
+ ```
353
+
354
+ #### **Configuration & Diagnostics**
355
+ ```bash
356
+ autopm mcp setup # Interactive API key setup
357
+ autopm mcp diagnose # Run diagnostics
358
+ autopm mcp test <server> # Test server connection
359
+ autopm mcp status # Show servers status
360
+ ```
361
+
362
+ #### **Server Management**
363
+ ```bash
364
+ autopm mcp list # List available servers
365
+ autopm mcp info <server> # Server details
366
+ autopm mcp enable <server> # Enable server
367
+ autopm mcp disable <server> # Disable server
368
+ autopm mcp sync # Sync configuration
369
+ ```
370
+
371
+ ### MCP Server Types
372
+
373
+ - **Documentation** - `context7-docs` for live framework documentation (React, Python, AWS, etc.)
374
+ - **Codebase** - `context7-codebase` for project analysis and navigation
375
+ - **GitHub** - `github-mcp` for repository operations
376
+ - **Databases** - `sqlite-mcp`, `postgresql-mcp`, `mongodb-mcp` for data operations
377
+ - **Browser** - `playwright-mcp` for E2E testing and automation
378
+
379
+ ### Example: Setting Up Context7
380
+
381
+ ```bash
382
+ # 1. Enable context7 documentation server
383
+ autopm mcp enable context7-docs
384
+
385
+ # 2. Configure API key
386
+ cat > .claude/.env << EOF
387
+ CONTEXT7_API_KEY=your-api-key-here
388
+ CONTEXT7_WORKSPACE=your-workspace-id
389
+ EOF
390
+
391
+ # 3. Sync configuration
392
+ autopm mcp sync
393
+
394
+ # 4. Verify setup
395
+ autopm mcp diagnose
396
+
397
+ # 5. Test connection
398
+ autopm mcp test context7-docs
399
+ ```
400
+
401
+ ### MCP Benefits
402
+
403
+ - ✅ **Live Documentation** - Agents access latest framework docs automatically
404
+ - ✅ **Codebase Context** - Deep understanding of your project structure
405
+ - ✅ **Tool Integration** - GitHub, databases, browsers, and more
406
+ - ✅ **No Hallucinations** - Real-time data instead of outdated training
407
+ - ✅ **Extensible** - Add custom MCP servers for your tools
408
+
409
+ 📖 **Full MCP Setup Guide**: [`MCP_SETUP_GUIDE.md`](./MCP_SETUP_GUIDE.md)
410
+
265
411
  ## 📚 Full Documentation
266
412
 
267
413
  For comprehensive guides, advanced features, and detailed configuration:
@@ -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