@dzhechkov/skills-feature-adr 1.0.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.
- package/README.md +195 -0
- package/bin/cli.js +5 -0
- package/package.json +53 -0
- package/src/cli.js +151 -0
- package/src/commands/doctor.js +355 -0
- package/src/commands/init.js +166 -0
- package/src/commands/list.js +146 -0
- package/src/commands/remove.js +182 -0
- package/src/commands/update.js +167 -0
- package/src/utils.js +334 -0
- package/templates/.claude/commands/feature-adr.md +92 -0
- package/templates/.claude/rules/feature-adr-conventions.md +82 -0
- package/templates/.claude/shards/feature-adr.shard.md +98 -0
- package/templates/.claude/skills/feature-adr/SKILL.md +252 -0
- package/templates/.claude/skills/feature-adr/examples/sample-feature-output.md +257 -0
- package/templates/.claude/skills/feature-adr/modules/00-complexity-router.md +114 -0
- package/templates/.claude/skills/feature-adr/modules/01-requirements.md +113 -0
- package/templates/.claude/skills/feature-adr/modules/02-research.md +92 -0
- package/templates/.claude/skills/feature-adr/modules/03-adr.md +135 -0
- package/templates/.claude/skills/feature-adr/modules/04-ddd.md +114 -0
- package/templates/.claude/skills/feature-adr/modules/05-architecture.md +149 -0
- package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +129 -0
- package/templates/.claude/skills/feature-adr/modules/07-code.md +126 -0
- package/templates/.claude/skills/feature-adr/modules/08-qe.md +167 -0
- package/templates/.claude/skills/feature-adr/references/adr-template.md +102 -0
- package/templates/.claude/skills/feature-adr/references/c4-template.md +120 -0
- package/templates/.claude/skills/feature-adr/references/complexity-matrix.md +139 -0
- package/templates/.claude/skills/feature-adr/references/qe-checklist.md +86 -0
package/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# @dzhechkov/skills-feature-adr
|
|
2
|
+
|
|
3
|
+
**Adaptive Feature Development skill pack for Claude Code**
|
|
4
|
+
|
|
5
|
+
9-step pipeline with Complexity Router (S/M/L/XL) for developing features of any scale — from a 3-file config change to a cross-cutting 30+ file refactoring. Part of the [Keysarium](https://www.npmjs.com/package/@dzhechkov/keysarium) ecosystem.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# One-command install via npx
|
|
13
|
+
npx @dzhechkov/skills-feature-adr
|
|
14
|
+
|
|
15
|
+
# Or install globally
|
|
16
|
+
npm install -g @dzhechkov/skills-feature-adr
|
|
17
|
+
skills-feature-adr init
|
|
18
|
+
|
|
19
|
+
# Install into a project that already has @dzhechkov/keysarium
|
|
20
|
+
npx @dzhechkov/skills-feature-adr init
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
After installation, open Claude Code in your project directory and use `/feature-adr`.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## What You Get
|
|
28
|
+
|
|
29
|
+
| Component | Count | Description |
|
|
30
|
+
|-----------|-------|-------------|
|
|
31
|
+
| **Skill** | 1 | `feature-adr` — 9-step pipeline with complexity routing |
|
|
32
|
+
| **Modules** | 9 | Steps 00-08: Complexity Router → Requirements → Research → ADR → DDD → Architecture → Plan → Code → QE |
|
|
33
|
+
| **References** | 4 | Complexity matrix, ADR template, C4 template, QE checklist |
|
|
34
|
+
| **Examples** | 1 | Sample M-tier feature output |
|
|
35
|
+
| **Command** | 1 | `/feature-adr` — orchestrator command |
|
|
36
|
+
| **Rules** | 1 | `feature-adr-conventions` — directory structure and naming |
|
|
37
|
+
| **Shards** | 1 | `feature-adr` — governance shard with quality gates |
|
|
38
|
+
|
|
39
|
+
Everything is installed into your project's `.claude/` directory and works natively with Claude Code.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Commands
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx @dzhechkov/skills-feature-adr # Full install (same as init)
|
|
47
|
+
npx @dzhechkov/skills-feature-adr init # Install all components
|
|
48
|
+
npx @dzhechkov/skills-feature-adr init --force # Overwrite existing files
|
|
49
|
+
npx @dzhechkov/skills-feature-adr init --dry-run # Preview without making changes
|
|
50
|
+
npx @dzhechkov/skills-feature-adr update # Update to latest version
|
|
51
|
+
npx @dzhechkov/skills-feature-adr remove # Clean uninstall
|
|
52
|
+
npx @dzhechkov/skills-feature-adr list # Show installed components
|
|
53
|
+
npx @dzhechkov/skills-feature-adr doctor # Health check
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Feature ADR Pipeline
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Step 0 Step 1 Step 2 Step 3 Step 4
|
|
62
|
+
COMPLEXITY → REQUIREMENTS → RESEARCH → ADR → DDD
|
|
63
|
+
ROUTER (L/XL only) (M+ only) (L/XL only)
|
|
64
|
+
|
|
65
|
+
Step 5 Step 6 Step 7 Step 8
|
|
66
|
+
ARCHITECTURE → IMPLEMENTATION → CODE → QE
|
|
67
|
+
(M+ only) PLAN
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Usage in Claude Code
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Start the full adaptive pipeline
|
|
74
|
+
/feature-adr Add user authentication with OAuth2 and JWT
|
|
75
|
+
|
|
76
|
+
# The Complexity Router classifies your feature automatically:
|
|
77
|
+
# S → fast track (5 steps)
|
|
78
|
+
# M → standard (7 steps)
|
|
79
|
+
# L → full pipeline (9 steps)
|
|
80
|
+
# XL → full DAG + multi-agent swarm
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Complexity Tiers
|
|
86
|
+
|
|
87
|
+
| Tier | Scope | Active Steps | Time Budget |
|
|
88
|
+
|------|-------|-------------|-------------|
|
|
89
|
+
| **S** | 1-3 files, 1 domain | 0→1→6→7→8 | ~15 min |
|
|
90
|
+
| **M** | 4-10 files, 1-2 domains | 0→1→3→5→6→7→8 | ~45 min |
|
|
91
|
+
| **L** | 11-30 files, 2-4 domains | Full pipeline with parallelism | ~2 hours |
|
|
92
|
+
| **XL** | 30+ files, cross-cutting | Full DAG + multi-agent swarm | ~4+ hours |
|
|
93
|
+
|
|
94
|
+
### Complexity Dimensions (scored 1-4 each)
|
|
95
|
+
|
|
96
|
+
| Dimension | 1 (Low) | 4 (High) |
|
|
97
|
+
|-----------|---------|----------|
|
|
98
|
+
| Files affected | 1-3 | 30+ |
|
|
99
|
+
| Domain breadth | Single module | Cross-cutting concerns |
|
|
100
|
+
| Integration points | 0-1 external | 4+ external systems |
|
|
101
|
+
| Risk / reversibility | Easily reverted | Data migration required |
|
|
102
|
+
| Novelty | Well-known pattern | No prior art in codebase |
|
|
103
|
+
| Stakeholder count | Solo developer | 4+ teams affected |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Pipeline Steps
|
|
108
|
+
|
|
109
|
+
| Step | Name | Tiers | Model | Output |
|
|
110
|
+
|------|------|-------|-------|--------|
|
|
111
|
+
| 0 | Complexity Router | All | haiku | `00_complexity_assessment.md` |
|
|
112
|
+
| 1 | Requirements | All | sonnet | `01_requirements.md` |
|
|
113
|
+
| 2 | Research | L/XL | sonnet | `02_research.md` |
|
|
114
|
+
| 3 | ADR | M+ | opus | `03_adr/001-*.md` |
|
|
115
|
+
| 4 | DDD | L/XL | opus | `04_domain_model.md` |
|
|
116
|
+
| 5 | Architecture | M+ | opus | `05_architecture.md` + diagrams |
|
|
117
|
+
| 6 | Implementation Plan | All | sonnet | `06_implementation_plan.md` |
|
|
118
|
+
| 7 | Code | All | opus | `07_code_changes/` |
|
|
119
|
+
| 8 | QE | All | sonnet | `08_qe_report.md` |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Output Structure
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
features/<feature-slug>/
|
|
127
|
+
├── 00_complexity_assessment.md ← Always
|
|
128
|
+
├── 01_requirements.md ← Always
|
|
129
|
+
├── 02_research.md ← L/XL only
|
|
130
|
+
├── 03_adr/
|
|
131
|
+
│ └── 001-<decision-slug>.md ← M+ only
|
|
132
|
+
├── 04_domain_model.md ← L/XL only
|
|
133
|
+
├── 05_architecture.md ← M+ only
|
|
134
|
+
├── 06_implementation_plan.md ← Always
|
|
135
|
+
├── 07_code_changes/
|
|
136
|
+
│ └── change_manifest.md ← Always
|
|
137
|
+
├── 08_qe_report.md ← Always
|
|
138
|
+
├── diagrams/ ← M+ only
|
|
139
|
+
│ ├── architecture-c4.mermaid
|
|
140
|
+
│ └── sequence-*.mermaid
|
|
141
|
+
└── README.md ← Always
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Shared Skills
|
|
147
|
+
|
|
148
|
+
Feature ADR uses these skills from `@dzhechkov/keysarium` (if installed):
|
|
149
|
+
|
|
150
|
+
| Skill | Used In | Purpose |
|
|
151
|
+
|-------|---------|---------|
|
|
152
|
+
| `explore` | Step 1 | Requirements clarification |
|
|
153
|
+
| `problem-solver-enhanced` | Step 3 | Trade-off analysis for ADR |
|
|
154
|
+
| `frontend-design` | Step 7 | UI implementation (if applicable) |
|
|
155
|
+
|
|
156
|
+
These are optional — Feature ADR works standalone but benefits from the full toolkit.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Integration with Keysarium Ecosystem
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Install the full ecosystem
|
|
164
|
+
npx @dzhechkov/keysarium init # Research pipeline
|
|
165
|
+
npx @dzhechkov/skills-bto init # Build-Test-Optimize
|
|
166
|
+
npx @dzhechkov/skills-feature-adr init # Feature development
|
|
167
|
+
|
|
168
|
+
# Use the right tool for the job:
|
|
169
|
+
/casarium [case description] # AI case research (7 phases)
|
|
170
|
+
/feature-adr [feature description] # Feature development (9 steps)
|
|
171
|
+
/bto [skill path] # Skill evaluation & optimization
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Requirements
|
|
177
|
+
|
|
178
|
+
- **Claude Code CLI** — installed and configured ([installation guide](https://docs.anthropic.com/en/docs/claude-code))
|
|
179
|
+
- **Node.js >= 16.0.0** — required for the npm install method
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## License
|
|
184
|
+
|
|
185
|
+
[MIT](https://opensource.org/licenses/MIT)
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Links
|
|
190
|
+
|
|
191
|
+
- **GitHub:** [https://github.com/dzhechko/product-keysarium-2026](https://github.com/dzhechko/product-keysarium-2026)
|
|
192
|
+
- **Issues:** [https://github.com/dzhechko/product-keysarium-2026/issues](https://github.com/dzhechko/product-keysarium-2026/issues)
|
|
193
|
+
- **npm:** [https://www.npmjs.com/package/@dzhechkov/skills-feature-adr](https://www.npmjs.com/package/@dzhechkov/skills-feature-adr)
|
|
194
|
+
- **Keysarium:** [https://www.npmjs.com/package/@dzhechkov/keysarium](https://www.npmjs.com/package/@dzhechkov/keysarium)
|
|
195
|
+
- **BTO:** [https://www.npmjs.com/package/@dzhechkov/skills-bto](https://www.npmjs.com/package/@dzhechkov/skills-bto)
|
package/bin/cli.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dzhechkov/skills-feature-adr",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Adaptive Feature Development skill pack for Claude Code — 9-step pipeline with Complexity Router (S/M/L/XL), ADR-driven architecture, and multi-agent QE",
|
|
5
|
+
"main": "src/cli.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"skills-feature-adr": "./bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"src/",
|
|
12
|
+
"templates/"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"test": "node bin/cli.js doctor",
|
|
16
|
+
"prepublishOnly": "node scripts/sync-templates.js"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"claude",
|
|
20
|
+
"claude-code",
|
|
21
|
+
"ai",
|
|
22
|
+
"feature-adr",
|
|
23
|
+
"adr",
|
|
24
|
+
"architecture-decision-records",
|
|
25
|
+
"feature-development",
|
|
26
|
+
"complexity-router",
|
|
27
|
+
"skills",
|
|
28
|
+
"skill-pack",
|
|
29
|
+
"ddd",
|
|
30
|
+
"quality-engineering"
|
|
31
|
+
],
|
|
32
|
+
"author": "dzhechko",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=16.0.0"
|
|
36
|
+
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/dzhechko/product-keysarium-2026"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/dzhechko/product-keysarium-2026#readme",
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/dzhechko/product-keysarium-2026/issues"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@dzhechkov/keysarium-core": "^1.0.0"
|
|
47
|
+
},
|
|
48
|
+
"peerDependenciesMeta": {
|
|
49
|
+
"@dzhechkov/keysarium-core": {
|
|
50
|
+
"optional": true
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/cli.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const { bold, cyan, dim, green, yellow, red, info, error } = require('./utils');
|
|
5
|
+
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Banner
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
function showBanner() {
|
|
10
|
+
console.log('');
|
|
11
|
+
console.log(cyan('\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557'));
|
|
12
|
+
console.log(cyan('\u2551') + bold(' FEATURE-ADR \u2014 Adaptive Feature Development ') + cyan('\u2551'));
|
|
13
|
+
console.log(cyan('\u2551') + ' 9-step pipeline with Complexity Router (S/M/L/XL) ' + cyan('\u2551'));
|
|
14
|
+
console.log(cyan('\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D'));
|
|
15
|
+
console.log('');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Version
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
function getVersion() {
|
|
22
|
+
const pkg = require('../package.json');
|
|
23
|
+
return pkg.version;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Help
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
function showHelp() {
|
|
30
|
+
console.log(bold('Usage:') + ' npx @dzhechkov/skills-feature-adr ' + cyan('<command>') + dim(' [options]'));
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log(bold('Commands:'));
|
|
33
|
+
console.log(' ' + green('init') + ' Install Feature ADR skill pack into current project ' + dim('(default)'));
|
|
34
|
+
console.log(' ' + green('update') + ' Update Feature ADR skill pack to latest version');
|
|
35
|
+
console.log(' ' + green('remove') + ' Remove Feature ADR skill pack from project');
|
|
36
|
+
console.log(' ' + green('list') + ' List installed Feature ADR components');
|
|
37
|
+
console.log(' ' + green('doctor') + ' Check Feature ADR installation health');
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log(bold('Options:'));
|
|
40
|
+
console.log(' ' + yellow('--force') + ' Overwrite existing files without prompting');
|
|
41
|
+
console.log(' ' + yellow('--dry-run') + ' Show what would be done without making changes');
|
|
42
|
+
console.log(' ' + yellow('--help, -h') + ' Show this help message');
|
|
43
|
+
console.log(' ' + yellow('--version, -v') + ' Show version number');
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(bold('Examples:'));
|
|
46
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr init');
|
|
47
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr init --force');
|
|
48
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr update --dry-run');
|
|
49
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr doctor');
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log(bold('Integration:'));
|
|
52
|
+
console.log(' Works alongside @dzhechkov/keysarium and @dzhechkov/skills-bto.');
|
|
53
|
+
console.log(' Install all three for the full toolkit.');
|
|
54
|
+
console.log('');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Parse arguments
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
function parseArgs(argv) {
|
|
61
|
+
const args = argv.slice(2);
|
|
62
|
+
|
|
63
|
+
const flags = {
|
|
64
|
+
force: false,
|
|
65
|
+
dryRun: false,
|
|
66
|
+
targetDir: process.cwd(),
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
let command = null;
|
|
70
|
+
|
|
71
|
+
for (const arg of args) {
|
|
72
|
+
switch (arg) {
|
|
73
|
+
case '--force':
|
|
74
|
+
flags.force = true;
|
|
75
|
+
break;
|
|
76
|
+
case '--dry-run':
|
|
77
|
+
flags.dryRun = true;
|
|
78
|
+
break;
|
|
79
|
+
case '--help':
|
|
80
|
+
case '-h':
|
|
81
|
+
command = 'help';
|
|
82
|
+
break;
|
|
83
|
+
case '--version':
|
|
84
|
+
case '-v':
|
|
85
|
+
command = 'version';
|
|
86
|
+
break;
|
|
87
|
+
default:
|
|
88
|
+
if (!arg.startsWith('-') && command === null) {
|
|
89
|
+
command = arg;
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return { command, flags };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// Main
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
function main() {
|
|
102
|
+
const { command, flags } = parseArgs(process.argv);
|
|
103
|
+
|
|
104
|
+
// Handle version early (no banner)
|
|
105
|
+
if (command === 'version') {
|
|
106
|
+
console.log(getVersion());
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
showBanner();
|
|
111
|
+
|
|
112
|
+
// Handle help early
|
|
113
|
+
if (command === 'help') {
|
|
114
|
+
showHelp();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Route to command handlers
|
|
119
|
+
const resolvedCommand = command || 'init';
|
|
120
|
+
|
|
121
|
+
switch (resolvedCommand) {
|
|
122
|
+
case 'init':
|
|
123
|
+
require('./commands/init')(flags);
|
|
124
|
+
break;
|
|
125
|
+
|
|
126
|
+
case 'update':
|
|
127
|
+
require('./commands/update')(flags);
|
|
128
|
+
break;
|
|
129
|
+
|
|
130
|
+
case 'remove':
|
|
131
|
+
require('./commands/remove')(flags);
|
|
132
|
+
break;
|
|
133
|
+
|
|
134
|
+
case 'list':
|
|
135
|
+
require('./commands/list')(flags);
|
|
136
|
+
break;
|
|
137
|
+
|
|
138
|
+
case 'doctor':
|
|
139
|
+
require('./commands/doctor')(flags);
|
|
140
|
+
break;
|
|
141
|
+
|
|
142
|
+
default:
|
|
143
|
+
error(`Unknown command: "${resolvedCommand}"`);
|
|
144
|
+
console.log('');
|
|
145
|
+
showHelp();
|
|
146
|
+
process.exitCode = 1;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
main();
|