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,175 @@
1
+ /**
2
+ * MCP Command for autopm CLI
3
+ * Manages Model Context Protocol servers, agents, and configuration
4
+ */
5
+
6
+ const path = require('path');
7
+ const MCPHandler = require('../../scripts/mcp-handler.js');
8
+
9
+ module.exports = {
10
+ command: 'mcp <action> [options]',
11
+ describe: 'Manage MCP (Model Context Protocol) servers and configuration',
12
+
13
+ builder: (yargs) => {
14
+ return yargs
15
+ .positional('action', {
16
+ describe: 'MCP action to perform',
17
+ type: 'string',
18
+ choices: [
19
+ 'list', 'add', 'remove', 'enable', 'disable', 'sync', 'validate', 'info',
20
+ 'agents', 'agent', 'usage', 'setup', 'check', 'diagnose', 'test', 'tree', 'status'
21
+ ]
22
+ })
23
+ .option('server', {
24
+ alias: 's',
25
+ describe: 'Server name',
26
+ type: 'string'
27
+ })
28
+ .option('agent', {
29
+ alias: 'a',
30
+ describe: 'Agent name',
31
+ type: 'string'
32
+ })
33
+ .option('by-server', {
34
+ describe: 'Group agents by MCP server',
35
+ type: 'boolean',
36
+ default: false
37
+ })
38
+ .example('autopm mcp list', 'List all available MCP servers')
39
+ .example('autopm mcp enable context7-docs', 'Enable context7 documentation server')
40
+ .example('autopm mcp agents', 'List all agents using MCP')
41
+ .example('autopm mcp agent react-frontend-engineer', 'Show MCP config for specific agent')
42
+ .example('autopm mcp usage', 'Show MCP usage statistics')
43
+ .example('autopm mcp setup', 'Interactive API key setup')
44
+ .example('autopm mcp check', 'Quick MCP configuration check')
45
+ .example('autopm mcp diagnose', 'Run MCP diagnostics')
46
+ .example('autopm mcp test context7-docs', 'Test MCP server connection')
47
+ .example('autopm mcp tree', 'Show agent-MCP dependency tree')
48
+ .example('autopm mcp status', 'Show MCP servers status');
49
+ },
50
+
51
+ handler: async (argv) => {
52
+ const handler = new MCPHandler();
53
+ const action = argv.action;
54
+
55
+ try {
56
+ switch (action) {
57
+ // Basic commands
58
+ case 'list':
59
+ handler.list();
60
+ break;
61
+
62
+ case 'add':
63
+ await handler.add();
64
+ break;
65
+
66
+ case 'remove':
67
+ if (!argv.server && !argv._[2]) {
68
+ console.error('❌ Please specify a server name: autopm mcp remove <server-name>');
69
+ process.exit(1);
70
+ }
71
+ handler.remove(argv.server || argv._[2]);
72
+ break;
73
+
74
+ case 'enable':
75
+ if (!argv.server && !argv._[2]) {
76
+ console.error('❌ Please specify a server name: autopm mcp enable <server-name>');
77
+ process.exit(1);
78
+ }
79
+ handler.enable(argv.server || argv._[2]);
80
+ break;
81
+
82
+ case 'disable':
83
+ if (!argv.server && !argv._[2]) {
84
+ console.error('❌ Please specify a server name: autopm mcp disable <server-name>');
85
+ process.exit(1);
86
+ }
87
+ handler.disable(argv.server || argv._[2]);
88
+ break;
89
+
90
+ case 'sync':
91
+ handler.sync();
92
+ break;
93
+
94
+ case 'validate':
95
+ handler.validate();
96
+ break;
97
+
98
+ case 'info':
99
+ if (!argv.server && !argv._[2]) {
100
+ console.error('❌ Please specify a server name: autopm mcp info <server-name>');
101
+ process.exit(1);
102
+ }
103
+ handler.info(argv.server || argv._[2]);
104
+ break;
105
+
106
+ // Agent analysis commands
107
+ case 'agents':
108
+ handler.mcpAgents(argv.byServer ? { groupBy: 'server' } : {});
109
+ break;
110
+
111
+ case 'agent':
112
+ if (!argv.agent && !argv._[2]) {
113
+ console.error('❌ Please specify an agent name: autopm mcp agent <agent-name>');
114
+ process.exit(1);
115
+ }
116
+ handler.mcpAgent(argv.agent || argv._[2]);
117
+ break;
118
+
119
+ case 'usage':
120
+ handler.mcpUsage();
121
+ break;
122
+
123
+ // Configuration commands
124
+ case 'setup':
125
+ await handler.setupWizard();
126
+ break;
127
+
128
+ case 'check':
129
+ handler.check();
130
+ break;
131
+
132
+ case 'diagnose':
133
+ handler.diagnose();
134
+ break;
135
+
136
+ case 'test':
137
+ if (!argv.server && !argv._[2]) {
138
+ console.error('❌ Please specify a server name: autopm mcp test <server-name>');
139
+ process.exit(1);
140
+ }
141
+ const result = await handler.testServer(argv.server || argv._[2]);
142
+ if (result.success) {
143
+ console.log(`✅ ${result.message}`);
144
+ } else {
145
+ console.error(`❌ ${result.message}`);
146
+ process.exit(1);
147
+ }
148
+ break;
149
+
150
+ // Visualization commands
151
+ case 'tree':
152
+ handler.showTree();
153
+ break;
154
+
155
+ case 'status':
156
+ handler.showStatus();
157
+ break;
158
+
159
+ default:
160
+ console.error(`❌ Unknown action: ${action}`);
161
+ console.log('\nAvailable actions:');
162
+ console.log(' list, add, remove, enable, disable, sync, validate, info');
163
+ console.log(' agents, agent, usage, setup, check, diagnose, test, tree, status');
164
+ console.log('\nUse "autopm mcp --help" for more information');
165
+ process.exit(1);
166
+ }
167
+ } catch (error) {
168
+ console.error(`❌ Error: ${error.message}`);
169
+ if (argv.debug) {
170
+ console.error(error.stack);
171
+ }
172
+ process.exit(1);
173
+ }
174
+ }
175
+ };
@@ -514,8 +514,19 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
514
514
  }
515
515
 
516
516
  generateConfig(scenario) {
517
+ // Get version from package.json
518
+ let version = 'unknown';
519
+ try {
520
+ const packageJson = JSON.parse(fs.readFileSync(path.join(this.baseDir, 'package.json'), 'utf-8'));
521
+ version = packageJson.version;
522
+ } catch (error) {
523
+ // Fallback to unknown if package.json can't be read
524
+ }
525
+
517
526
  const configs = {
518
527
  minimal: {
528
+ version: version,
529
+ installed: new Date().toISOString(),
519
530
  execution_strategy: 'sequential',
520
531
  tools: {
521
532
  docker: { enabled: false },
@@ -523,6 +534,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
523
534
  }
524
535
  },
525
536
  docker: {
537
+ version: version,
538
+ installed: new Date().toISOString(),
526
539
  execution_strategy: 'adaptive',
527
540
  tools: {
528
541
  docker: { enabled: true, first: false },
@@ -530,6 +543,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
530
543
  }
531
544
  },
532
545
  full: {
546
+ version: version,
547
+ installed: new Date().toISOString(),
533
548
  execution_strategy: 'adaptive',
534
549
  tools: {
535
550
  docker: { enabled: true, first: true },
@@ -537,6 +552,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
537
552
  }
538
553
  },
539
554
  performance: {
555
+ version: version,
556
+ installed: new Date().toISOString(),
540
557
  execution_strategy: 'hybrid',
541
558
  parallel_limit: 5,
542
559
  tools: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-autopm",
3
- "version": "1.12.2",
3
+ "version": "1.13.0",
4
4
  "description": "Autonomous Project Management Framework for Claude Code - Advanced AI-powered development automation",
5
5
  "main": "bin/autopm.js",
6
6
  "bin": {
@@ -9,8 +9,8 @@
9
9
  "scripts": {
10
10
  "postinstall": "echo '🎉 ClaudeAutoPM installed! Run: autopm --help'",
11
11
  "test:old": "node scripts/test.js",
12
- "test": "jest --config jest.config.clean.js",
13
- "test:full": "jest",
12
+ "test": "jest --config jest.config.quick.js --forceExit",
13
+ "test:full": "jest --config jest.config.clean.js --forceExit",
14
14
  "test:watch": "jest --watch",
15
15
  "test:coverage": "c8 npm test",
16
16
  "test:clean": "jest --config jest.config.clean.js",
@@ -48,8 +48,8 @@
48
48
  "test:comprehensive:quick": "TEST_TIMEOUT=30000 node test/run-all-tests.js",
49
49
  "test:comprehensive:ci": "CI=true CI_TEST_TIMEOUT=600000 node test/run-all-tests.js",
50
50
  "test:azure": "node --test test/providers/azure/*.test.js",
51
- "test:unit": "node --test test/unit/**/*.test.js",
52
- "test:unit:coverage": "c8 node --test test/unit/**/*.test.js",
51
+ "test:unit": "node --test $(find test/unit -name '*.test.js' ! -name '*-jest.test.js')",
52
+ "test:unit:coverage": "c8 node --test $(find test/unit -name '*.test.js' ! -name '*-jest.test.js')",
53
53
  "test:e2e": "jest test/e2e",
54
54
  "test:e2e:legacy": "node --test test/e2e/*.test.js",
55
55
  "setup:hooks": "bash scripts/setup-hooks.sh",