claude-autopm 1.12.1 ā 1.12.2
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 +9 -7
- package/autopm/.claude/base.md +3 -3
- package/autopm/.claude/mcp-servers.json +4 -4
- package/autopm/.claude/scripts/pm/epic-close.js +4 -4
- package/autopm/.claude/scripts/pm/epic-edit.js +1 -1
- package/autopm/.claude/scripts/pm/epic-split.js +6 -6
- package/autopm/.claude/scripts/pm/epic-start/epic-start.js +3 -3
- package/autopm/.claude/scripts/pm/epic-start/epic-start.sh +3 -3
- package/autopm/.claude/scripts/pm/prd-new.js +5 -5
- package/autopm/.claude/scripts/pm/prd-parse.js +7 -7
- package/autopm/.claude/templates/claude-templates/base.md +3 -3
- package/install/install.js +129 -19
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -83,13 +83,15 @@ During installation, you'll be asked to:
|
|
|
83
83
|
|
|
84
84
|
**1. Choose a configuration preset:**
|
|
85
85
|
|
|
86
|
-
| Preset | Description | Best For |
|
|
87
|
-
|
|
88
|
-
| **Minimal** | Traditional development without containers | Small projects, beginners |
|
|
89
|
-
| **Docker-only** | Container-first with adaptive execution | Medium projects, local development |
|
|
90
|
-
| **Full DevOps** šÆ | Docker + Kubernetes with CI/CD | Production projects (RECOMMENDED) |
|
|
91
|
-
| **Performance** | Maximum parallelization (8 agents) | Large projects, powerful machines |
|
|
92
|
-
| **Custom** | Configure each option manually | Specific requirements |
|
|
86
|
+
| Preset | Requirements | Description | Best For |
|
|
87
|
+
|--------|--------------|-------------|----------|
|
|
88
|
+
| **Minimal** | None | Traditional development without containers | Small projects, beginners |
|
|
89
|
+
| **Docker-only** | Docker | Container-first with adaptive execution | Medium projects, local development |
|
|
90
|
+
| **Full DevOps** šÆ | Docker + kubectl | Docker + Kubernetes with CI/CD | Production projects (RECOMMENDED) |
|
|
91
|
+
| **Performance** | Docker + kubectl | Maximum parallelization (8 agents) | Large projects, powerful machines |
|
|
92
|
+
| **Custom** | Varies | Configure each option manually | Specific requirements |
|
|
93
|
+
|
|
94
|
+
> š” **Note:** The installer automatically detects available tools (Docker, kubectl) and only shows compatible options. Missing tools? See installation links in the interactive prompt.
|
|
93
95
|
|
|
94
96
|
**2. Select your project management provider:**
|
|
95
97
|
|
package/autopm/.claude/base.md
CHANGED
|
@@ -10,7 +10,7 @@ All rule files in `.claude/rules/` define mandatory behaviors and must be follow
|
|
|
10
10
|
|
|
11
11
|
### Core Development Rules
|
|
12
12
|
|
|
13
|
-
- **tdd
|
|
13
|
+
- **tdd.enforcement.md** - Test-Driven Development cycle (RED-GREEN-REFACTOR). HIGHEST PRIORITY for all code changes
|
|
14
14
|
- **pipeline-mandatory.md** - Required pipelines for errors, features, bugs, code search, and log analysis
|
|
15
15
|
- **naming-conventions.md** - Naming standards, code quality requirements, and prohibited patterns
|
|
16
16
|
- **context-optimization.md** - Agent usage patterns for context preservation (<20% data return)
|
|
@@ -185,7 +185,7 @@ Key principles:
|
|
|
185
185
|
|
|
186
186
|
- NO PARTIAL IMPLEMENTATION
|
|
187
187
|
- NO CODE DUPLICATION (always search first)
|
|
188
|
-
- IMPLEMENT TEST FOR EVERY FUNCTION (see `.claude/rules/tdd
|
|
188
|
+
- IMPLEMENT TEST FOR EVERY FUNCTION (see `.claude/rules/tdd.enforcement.md`)
|
|
189
189
|
- NO CHEATER TESTS (tests must be meaningful)
|
|
190
190
|
- Follow all rules defined in `.claude/rules/` without exception
|
|
191
191
|
|
|
@@ -195,7 +195,7 @@ Key principles:
|
|
|
195
195
|
|
|
196
196
|
```bash
|
|
197
197
|
# Minimum Definition of Done
|
|
198
|
-
ā Tests written and passing (TDD - see .claude/rules/tdd
|
|
198
|
+
ā Tests written and passing (TDD - see .claude/rules/tdd.enforcement.md)
|
|
199
199
|
ā Code formatted (black, prettier, eslint)
|
|
200
200
|
ā No partial implementations
|
|
201
201
|
ā No code duplication
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"args": ["@context7/mcp-server"],
|
|
6
6
|
"env": {
|
|
7
7
|
"CONTEXT7_API_KEY": "${CONTEXT7_API_KEY:-}",
|
|
8
|
-
"CONTEXT7_MCP_URL": "${CONTEXT7_MCP_URL:-mcp.context7.com/mcp}",
|
|
9
|
-
"CONTEXT7_API_URL": "${CONTEXT7_API_URL:-context7.com/api/v1}",
|
|
8
|
+
"CONTEXT7_MCP_URL": "${CONTEXT7_MCP_URL:-https://mcp.context7.com/mcp}",
|
|
9
|
+
"CONTEXT7_API_URL": "${CONTEXT7_API_URL:-https://context7.com/api/v1}",
|
|
10
10
|
"CONTEXT7_WORKSPACE": "${CONTEXT7_WORKSPACE:-}",
|
|
11
11
|
"CONTEXT7_MODE": "documentation"
|
|
12
12
|
},
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"args": ["@context7/mcp-server"],
|
|
18
18
|
"env": {
|
|
19
19
|
"CONTEXT7_API_KEY": "${CONTEXT7_API_KEY:-}",
|
|
20
|
-
"CONTEXT7_MCP_URL": "${CONTEXT7_MCP_URL:-mcp.context7.com/mcp}",
|
|
21
|
-
"CONTEXT7_API_URL": "${CONTEXT7_API_URL:-context7.com/api/v1}",
|
|
20
|
+
"CONTEXT7_MCP_URL": "${CONTEXT7_MCP_URL:-https://mcp.context7.com/mcp}",
|
|
21
|
+
"CONTEXT7_API_URL": "${CONTEXT7_API_URL:-https://context7.com/api/v1}",
|
|
22
22
|
"CONTEXT7_WORKSPACE": "${CONTEXT7_WORKSPACE:-}",
|
|
23
23
|
"CONTEXT7_MODE": "codebase"
|
|
24
24
|
},
|
|
@@ -217,9 +217,9 @@ class EpicCloser {
|
|
|
217
217
|
|
|
218
218
|
// Show next steps
|
|
219
219
|
console.log('\nš” Next Steps:');
|
|
220
|
-
console.log(' ⢠View completed epics: pm
|
|
221
|
-
console.log(' ⢠Start new epic: pm
|
|
222
|
-
console.log(' ⢠List all epics: pm
|
|
220
|
+
console.log(' ⢠View completed epics: /pm:status');
|
|
221
|
+
console.log(' ⢠Start new epic: /pm:init <epic-name>');
|
|
222
|
+
console.log(' ⢠List all epics: /pm:epic-list');
|
|
223
223
|
|
|
224
224
|
return true;
|
|
225
225
|
}
|
|
@@ -309,7 +309,7 @@ class EpicCloser {
|
|
|
309
309
|
|
|
310
310
|
if (!epicName) {
|
|
311
311
|
console.error('ā Error: Epic name required');
|
|
312
|
-
console.error('Usage: pm
|
|
312
|
+
console.error('Usage: /pm:epic-close <epic-name> [--force] [--complete-all] [--archive]');
|
|
313
313
|
console.error('\nOptions:');
|
|
314
314
|
console.error(' --force Close even with incomplete tasks');
|
|
315
315
|
console.error(' --complete-all Mark all tasks as complete');
|
|
@@ -359,7 +359,7 @@ class EpicEditor {
|
|
|
359
359
|
|
|
360
360
|
if (!epicName) {
|
|
361
361
|
console.error('ā Error: Epic name required');
|
|
362
|
-
console.error('Usage: pm
|
|
362
|
+
console.error('Usage: /pm:epic-edit <epic-name>');
|
|
363
363
|
console.log('\nAvailable epics:');
|
|
364
364
|
this.listAvailableEpics();
|
|
365
365
|
process.exit(1);
|
|
@@ -356,8 +356,8 @@ ${epics.slice(1).map((e, i) => {
|
|
|
356
356
|
|
|
357
357
|
## Next Steps
|
|
358
358
|
1. Review and adjust epic breakdown
|
|
359
|
-
2. Decompose each epic into tasks:
|
|
360
|
-
3. Sync to GitHub:
|
|
359
|
+
2. Decompose each epic into tasks: \`/pm:epic-decompose <feature>/<epic_number>\`
|
|
360
|
+
3. Sync to GitHub: \`/pm:epic-sync <feature>\`
|
|
361
361
|
|
|
362
362
|
---
|
|
363
363
|
*Generated on ${now} by Epic Split System*`;
|
|
@@ -385,7 +385,7 @@ async function main() {
|
|
|
385
385
|
await fs.access(prdPath);
|
|
386
386
|
} catch {
|
|
387
387
|
console.error(`${colors.red}ā PRD not found: ${prdPath}${colors.reset}`);
|
|
388
|
-
console.log(`First create a PRD with: pm
|
|
388
|
+
console.log(`First create a PRD with: /pm:prd-new ${featureName}`);
|
|
389
389
|
process.exit(1);
|
|
390
390
|
}
|
|
391
391
|
|
|
@@ -503,9 +503,9 @@ async function main() {
|
|
|
503
503
|
}
|
|
504
504
|
|
|
505
505
|
console.log(`\n${colors.bright}š” Next Steps:${colors.reset}`);
|
|
506
|
-
console.log(` 1. Review epics: ${colors.cyan}pm
|
|
507
|
-
console.log(` 2. Decompose first epic: ${colors.cyan}pm
|
|
508
|
-
console.log(` 3. Sync all to GitHub: ${colors.cyan}pm
|
|
506
|
+
console.log(` 1. Review epics: ${colors.cyan}/pm:epic-show ${featureName}${colors.reset}`);
|
|
507
|
+
console.log(` 2. Decompose first epic: ${colors.cyan}/pm:epic-decompose ${featureName}/01-${identifiedEpics[0].key}${colors.reset}`);
|
|
508
|
+
console.log(` 3. Sync all to GitHub: ${colors.cyan}/pm:epic-sync ${featureName}${colors.reset}`);
|
|
509
509
|
|
|
510
510
|
} catch (error) {
|
|
511
511
|
console.error(`${colors.red}ā Error: ${error.message}${colors.reset}`);
|
|
@@ -118,7 +118,7 @@ class EpicStarter {
|
|
|
118
118
|
// Check if epic name provided
|
|
119
119
|
if (!this.epicName) {
|
|
120
120
|
console.error('ā Error: Epic name required');
|
|
121
|
-
console.error('Usage: pm
|
|
121
|
+
console.error('Usage: /pm:epic-start epic-name');
|
|
122
122
|
process.exit(1);
|
|
123
123
|
}
|
|
124
124
|
|
|
@@ -164,8 +164,8 @@ class EpicStarter {
|
|
|
164
164
|
await this.startParallelExecution(tasks);
|
|
165
165
|
|
|
166
166
|
// Show next steps
|
|
167
|
-
console.log(
|
|
168
|
-
console.log(
|
|
167
|
+
console.log(`\nš” Monitor progress with: /pm:epic-status ${this.epicName}`);
|
|
168
|
+
console.log(`š View details with: /pm:epic-show ${this.epicName}`);
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
|
|
@@ -16,7 +16,7 @@ EPIC_NAME="${1:-}"
|
|
|
16
16
|
|
|
17
17
|
if [ -z "$EPIC_NAME" ]; then
|
|
18
18
|
echo "ā Error: Epic name required"
|
|
19
|
-
echo "Usage: pm
|
|
19
|
+
echo "Usage: /pm:epic-start <epic-name>"
|
|
20
20
|
exit 1
|
|
21
21
|
fi
|
|
22
22
|
|
|
@@ -90,5 +90,5 @@ else
|
|
|
90
90
|
fi
|
|
91
91
|
|
|
92
92
|
echo ""
|
|
93
|
-
echo "š” Monitor progress with: pm
|
|
94
|
-
echo "š View details with: pm
|
|
93
|
+
echo "š” Monitor progress with: /pm:epic-status $EPIC_NAME"
|
|
94
|
+
echo "š View details with: /pm:epic-show $EPIC_NAME"
|
|
@@ -26,7 +26,7 @@ class PrdCreator {
|
|
|
26
26
|
const prdFile = path.join(this.prdsDir, `${prdName}.md`);
|
|
27
27
|
if (fs.existsSync(prdFile)) {
|
|
28
28
|
console.error(`ā PRD already exists: ${prdName}`);
|
|
29
|
-
console.log(`š”
|
|
29
|
+
console.log(`š” Edit file: .claude/prds/${prdName}.md`);
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -96,10 +96,10 @@ class PrdCreator {
|
|
|
96
96
|
|
|
97
97
|
// Show next steps
|
|
98
98
|
console.log('\nš” Next Steps:');
|
|
99
|
-
console.log(` 1. Review
|
|
100
|
-
console.log(` 2. Convert to epic: pm
|
|
101
|
-
console.log(` 3.
|
|
102
|
-
console.log(` 4. List all PRDs: pm
|
|
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`);
|
|
103
103
|
|
|
104
104
|
} finally {
|
|
105
105
|
rl.close();
|
|
@@ -221,7 +221,7 @@ class PrdParser {
|
|
|
221
221
|
const prdFile = path.join(this.prdsDir, `${featureName}.md`);
|
|
222
222
|
if (!fs.existsSync(prdFile)) {
|
|
223
223
|
console.error(`ā PRD not found: ${featureName}`);
|
|
224
|
-
console.log(`š” First create it with: pm
|
|
224
|
+
console.log(`š” First create it with: /pm:prd-new ${featureName}`);
|
|
225
225
|
return false;
|
|
226
226
|
}
|
|
227
227
|
|
|
@@ -232,7 +232,7 @@ class PrdParser {
|
|
|
232
232
|
if (fs.existsSync(epicFile) && !options.overwrite) {
|
|
233
233
|
console.error(`ā ļø Epic '${featureName}' already exists.`);
|
|
234
234
|
console.log(`š” Use --overwrite to replace it`);
|
|
235
|
-
console.log(`š” Or view it with: pm
|
|
235
|
+
console.log(`š” Or view it with: /pm:epic-show ${featureName}`);
|
|
236
236
|
return false;
|
|
237
237
|
}
|
|
238
238
|
|
|
@@ -296,10 +296,10 @@ class PrdParser {
|
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
console.log(`\nš” Next Steps:`);
|
|
299
|
-
console.log(` 1. Review epic: pm
|
|
300
|
-
console.log(` 2. Decompose into tasks: pm
|
|
301
|
-
console.log(` 3. Sync to GitHub: pm
|
|
302
|
-
console.log(` 4. Start implementation: pm
|
|
299
|
+
console.log(` 1. Review epic: /pm:epic-show ${featureName}`);
|
|
300
|
+
console.log(` 2. Decompose into tasks: /pm:epic-decompose ${featureName}`);
|
|
301
|
+
console.log(` 3. Sync to GitHub: /pm:epic-sync ${featureName}`);
|
|
302
|
+
console.log(` 4. Start implementation: /pm:issue-start TASK-1`);
|
|
303
303
|
|
|
304
304
|
return true;
|
|
305
305
|
}
|
|
@@ -486,7 +486,7 @@ ${prdSections.metrics || '- All functional requirements met\n- Performance targe
|
|
|
486
486
|
|
|
487
487
|
if (!featureName) {
|
|
488
488
|
console.error('ā Error: Feature name required');
|
|
489
|
-
console.error('Usage: pm
|
|
489
|
+
console.error('Usage: /pm:prd-parse <feature-name> [--overwrite]');
|
|
490
490
|
|
|
491
491
|
// List available PRDs
|
|
492
492
|
if (fs.existsSync(this.prdsDir)) {
|
|
@@ -15,7 +15,7 @@ All rule files in `.claude/rules/` define mandatory behaviors and must be follow
|
|
|
15
15
|
|
|
16
16
|
### Core Development Rules
|
|
17
17
|
|
|
18
|
-
- **tdd
|
|
18
|
+
- **tdd.enforcement.md** - Test-Driven Development cycle (RED-GREEN-REFACTOR). HIGHEST PRIORITY for all code changes
|
|
19
19
|
- **pipeline-mandatory.md** - Required pipelines for errors, features, bugs, code search, and log analysis
|
|
20
20
|
- **naming-conventions.md** - Naming standards, code quality requirements, and prohibited patterns
|
|
21
21
|
- **context-optimization.md** - Agent usage patterns for context preservation (<20% data return)
|
|
@@ -176,7 +176,7 @@ Key principles:
|
|
|
176
176
|
|
|
177
177
|
- NO PARTIAL IMPLEMENTATION
|
|
178
178
|
- NO CODE DUPLICATION (always search first)
|
|
179
|
-
- IMPLEMENT TEST FOR EVERY FUNCTION (see `.claude/rules/tdd
|
|
179
|
+
- IMPLEMENT TEST FOR EVERY FUNCTION (see `.claude/rules/tdd.enforcement.md`)
|
|
180
180
|
- NO CHEATER TESTS (tests must be meaningful)
|
|
181
181
|
- Follow all rules defined in `.claude/rules/` without exception
|
|
182
182
|
|
|
@@ -186,7 +186,7 @@ Key principles:
|
|
|
186
186
|
|
|
187
187
|
```bash
|
|
188
188
|
# Minimum Definition of Done
|
|
189
|
-
ā Tests written and passing (TDD - see .claude/rules/tdd
|
|
189
|
+
ā Tests written and passing (TDD - see .claude/rules/tdd.enforcement.md)
|
|
190
190
|
ā Code formatted (black, prettier, eslint)
|
|
191
191
|
ā No partial implementations
|
|
192
192
|
ā No code duplication
|
package/install/install.js
CHANGED
|
@@ -23,7 +23,8 @@ class Installer {
|
|
|
23
23
|
BLUE: '\x1b[0;34m',
|
|
24
24
|
CYAN: '\x1b[0;36m',
|
|
25
25
|
NC: '\x1b[0m',
|
|
26
|
-
BOLD: '\x1b[1m'
|
|
26
|
+
BOLD: '\x1b[1m',
|
|
27
|
+
DIM: '\x1b[2m'
|
|
27
28
|
};
|
|
28
29
|
|
|
29
30
|
// Configuration
|
|
@@ -339,39 +340,113 @@ ${this.colors.BOLD}Examples:${this.colors.NC}
|
|
|
339
340
|
}
|
|
340
341
|
}
|
|
341
342
|
|
|
343
|
+
checkToolAvailability() {
|
|
344
|
+
const tools = {
|
|
345
|
+
docker: false,
|
|
346
|
+
kubectl: false
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
try {
|
|
350
|
+
execSync('docker --version', { encoding: 'utf-8', stdio: 'pipe' });
|
|
351
|
+
tools.docker = true;
|
|
352
|
+
} catch {
|
|
353
|
+
tools.docker = false;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
try {
|
|
357
|
+
execSync('kubectl version --client', { encoding: 'utf-8', stdio: 'pipe' });
|
|
358
|
+
tools.kubectl = true;
|
|
359
|
+
} catch {
|
|
360
|
+
tools.kubectl = false;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return tools;
|
|
364
|
+
}
|
|
365
|
+
|
|
342
366
|
async selectScenario() {
|
|
343
367
|
if (this.options.scenario) {
|
|
344
368
|
return this.options.scenario;
|
|
345
369
|
}
|
|
346
370
|
|
|
371
|
+
// Check available tools
|
|
372
|
+
const availableTools = this.checkToolAvailability();
|
|
373
|
+
|
|
374
|
+
// Show tool availability status
|
|
375
|
+
console.log(`
|
|
376
|
+
${this.colors.BOLD}Detected Tools:${this.colors.NC}`);
|
|
377
|
+
console.log(` ⢠Docker: ${availableTools.docker ? this.colors.GREEN + 'ā Available' : this.colors.RED + 'ā Not installed'}${this.colors.NC}`);
|
|
378
|
+
console.log(` ⢠kubectl: ${availableTools.kubectl ? this.colors.GREEN + 'ā Available' : this.colors.RED + 'ā Not installed'}${this.colors.NC}`);
|
|
379
|
+
|
|
380
|
+
if (!availableTools.docker || !availableTools.kubectl) {
|
|
381
|
+
console.log(`
|
|
382
|
+
${this.colors.YELLOW}Note:${this.colors.NC} Some installation options require additional tools.`);
|
|
383
|
+
if (!availableTools.docker) {
|
|
384
|
+
console.log(` Install Docker: ${this.colors.CYAN}https://docs.docker.com/get-docker/${this.colors.NC}`);
|
|
385
|
+
}
|
|
386
|
+
if (!availableTools.kubectl) {
|
|
387
|
+
console.log(` Install kubectl: ${this.colors.CYAN}https://kubernetes.io/docs/tasks/tools/${this.colors.NC}`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
347
391
|
console.log(`
|
|
348
392
|
${this.colors.BOLD}Select installation scenario:${this.colors.NC}
|
|
393
|
+
`);
|
|
349
394
|
|
|
350
|
-
|
|
395
|
+
// Option 1: Minimal (always available)
|
|
396
|
+
console.log(`${this.colors.CYAN}1. Minimal${this.colors.NC} - Traditional development workflow
|
|
351
397
|
⢠Sequential agent execution (one at a time)
|
|
352
398
|
⢠Native tooling: npm, pip, local installs
|
|
353
399
|
⢠Best for: Simple projects, learning, debugging
|
|
354
400
|
⢠No containers or orchestration
|
|
401
|
+
`);
|
|
355
402
|
|
|
356
|
-
|
|
403
|
+
// Option 2: Docker-only (requires Docker)
|
|
404
|
+
if (availableTools.docker) {
|
|
405
|
+
console.log(`${this.colors.CYAN}2. Docker-only${this.colors.NC} - Containerized local development
|
|
357
406
|
⢠Adaptive execution (smart sequential/parallel choice)
|
|
358
407
|
⢠Docker containers for development environment
|
|
359
408
|
⢠Best for: Microservices, consistent environments
|
|
360
409
|
⢠Local Docker only, no Kubernetes
|
|
410
|
+
`);
|
|
411
|
+
} else {
|
|
412
|
+
console.log(`${this.colors.DIM}2. Docker-only${this.colors.NC} ${this.colors.RED}(Docker not installed)${this.colors.NC}
|
|
413
|
+
`);
|
|
414
|
+
}
|
|
361
415
|
|
|
362
|
-
|
|
416
|
+
// Option 3: Full DevOps (requires Docker and kubectl)
|
|
417
|
+
if (availableTools.docker && availableTools.kubectl) {
|
|
418
|
+
console.log(`${this.colors.GREEN}3. Full DevOps${this.colors.NC} - Complete CI/CD pipeline ${this.colors.BOLD}(RECOMMENDED)${this.colors.NC}
|
|
363
419
|
⢠Adaptive execution with Docker-first priority
|
|
364
420
|
⢠Kubernetes manifests and cloud deployment ready
|
|
365
421
|
⢠GitHub Actions with KIND clusters and Kaniko builds
|
|
366
422
|
⢠Best for: Production applications, enterprise projects
|
|
423
|
+
`);
|
|
424
|
+
} else if (availableTools.docker) {
|
|
425
|
+
console.log(`${this.colors.DIM}3. Full DevOps${this.colors.NC} ${this.colors.RED}(kubectl not installed)${this.colors.NC}
|
|
426
|
+
`);
|
|
427
|
+
} else {
|
|
428
|
+
console.log(`${this.colors.DIM}3. Full DevOps${this.colors.NC} ${this.colors.RED}(Docker and kubectl not installed)${this.colors.NC}
|
|
429
|
+
`);
|
|
430
|
+
}
|
|
367
431
|
|
|
368
|
-
|
|
432
|
+
// Option 4: Performance (requires Docker and kubectl)
|
|
433
|
+
if (availableTools.docker && availableTools.kubectl) {
|
|
434
|
+
console.log(`${this.colors.YELLOW}4. Performance${this.colors.NC} - Maximum parallel execution
|
|
369
435
|
⢠Hybrid strategy: up to 5 parallel agents
|
|
370
436
|
⢠Advanced context isolation and security
|
|
371
437
|
⢠Full DevOps capabilities with speed optimization
|
|
372
438
|
⢠Best for: Large projects, massive refactoring, power users
|
|
439
|
+
`);
|
|
440
|
+
} else if (availableTools.docker) {
|
|
441
|
+
console.log(`${this.colors.DIM}4. Performance${this.colors.NC} ${this.colors.RED}(kubectl not installed)${this.colors.NC}
|
|
442
|
+
`);
|
|
443
|
+
} else {
|
|
444
|
+
console.log(`${this.colors.DIM}4. Performance${this.colors.NC} ${this.colors.RED}(Docker and kubectl not installed)${this.colors.NC}
|
|
445
|
+
`);
|
|
446
|
+
}
|
|
373
447
|
|
|
374
|
-
|
|
448
|
+
// Option 5: Custom (always available)
|
|
449
|
+
console.log(`${this.colors.CYAN}5. Custom${this.colors.NC} - Manual configuration
|
|
375
450
|
⢠Configure execution strategy manually
|
|
376
451
|
⢠Choose your own agents and workflows
|
|
377
452
|
⢠Advanced users only
|
|
@@ -387,19 +462,54 @@ ${this.colors.CYAN}5. Custom${this.colors.NC} - Manual configuration
|
|
|
387
462
|
output: process.stdout
|
|
388
463
|
});
|
|
389
464
|
|
|
465
|
+
// Determine default based on available tools
|
|
466
|
+
const defaultChoice = availableTools.docker && availableTools.kubectl ? '3' : '1';
|
|
467
|
+
|
|
390
468
|
return new Promise((resolve) => {
|
|
391
|
-
|
|
392
|
-
rl.
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
469
|
+
const askQuestion = () => {
|
|
470
|
+
rl.question(`${this.colors.CYAN}Enter your choice (1-5) [${defaultChoice}]: ${this.colors.NC}`, (answer) => {
|
|
471
|
+
const choice = answer.trim() || defaultChoice;
|
|
472
|
+
const scenarios = {
|
|
473
|
+
'1': 'minimal',
|
|
474
|
+
'2': 'docker',
|
|
475
|
+
'3': 'full',
|
|
476
|
+
'4': 'performance',
|
|
477
|
+
'5': 'custom'
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
const selectedScenario = scenarios[choice];
|
|
481
|
+
|
|
482
|
+
// Validate choice based on available tools
|
|
483
|
+
if (choice === '2' && !availableTools.docker) {
|
|
484
|
+
console.log(`${this.colors.RED}ā Docker is required for this option. Please install Docker first or choose option 1 (Minimal).${this.colors.NC}`);
|
|
485
|
+
askQuestion();
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
if ((choice === '3' || choice === '4') && !availableTools.docker) {
|
|
490
|
+
console.log(`${this.colors.RED}ā Docker is required for this option. Please install Docker first or choose option 1 (Minimal).${this.colors.NC}`);
|
|
491
|
+
askQuestion();
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
if ((choice === '3' || choice === '4') && availableTools.docker && !availableTools.kubectl) {
|
|
496
|
+
console.log(`${this.colors.RED}ā kubectl is required for this option. Please install kubectl first or choose option 2 (Docker-only).${this.colors.NC}`);
|
|
497
|
+
askQuestion();
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (!selectedScenario) {
|
|
502
|
+
console.log(`${this.colors.RED}ā Invalid choice. Please select 1-5.${this.colors.NC}`);
|
|
503
|
+
askQuestion();
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
rl.close();
|
|
508
|
+
resolve(selectedScenario);
|
|
509
|
+
});
|
|
510
|
+
};
|
|
511
|
+
|
|
512
|
+
askQuestion();
|
|
403
513
|
});
|
|
404
514
|
}
|
|
405
515
|
|
|
@@ -722,7 +832,7 @@ See: https://github.com/rafeekpro/ClaudeAutoPM
|
|
|
722
832
|
console.log('');
|
|
723
833
|
this.printMsg('GREEN', 'āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
724
834
|
this.printMsg('GREEN', 'ā Installation complete! š ā');
|
|
725
|
-
this.printMsg('GREEN', '
|
|
835
|
+
this.printMsg('GREEN', 'āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
726
836
|
console.log('');
|
|
727
837
|
|
|
728
838
|
this.printSuccess('ClaudeAutoPM has been installed successfully!');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-autopm",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.2",
|
|
4
4
|
"description": "Autonomous Project Management Framework for Claude Code - Advanced AI-powered development automation",
|
|
5
5
|
"main": "bin/autopm.js",
|
|
6
6
|
"bin": {
|
|
@@ -112,14 +112,14 @@
|
|
|
112
112
|
"README.md"
|
|
113
113
|
],
|
|
114
114
|
"dependencies": {
|
|
115
|
-
"azure-devops-node-api": "^
|
|
115
|
+
"azure-devops-node-api": "^15.1.1",
|
|
116
116
|
"chalk": "^5.3.0",
|
|
117
117
|
"dotenv": "^16.6.1",
|
|
118
118
|
"execa": "^9.6.0",
|
|
119
119
|
"fast-glob": "^3.3.2",
|
|
120
120
|
"fs-extra": "^11.3.2",
|
|
121
|
-
"glob": "^
|
|
122
|
-
"inquirer": "^9.
|
|
121
|
+
"glob": "^11.0.3",
|
|
122
|
+
"inquirer": "^12.9.6",
|
|
123
123
|
"js-yaml": "^4.1.0",
|
|
124
124
|
"moment": "^2.29.4",
|
|
125
125
|
"ora": "^5.4.1",
|