cli-ai-skills 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 +257 -0
- package/bin/cli.js +108 -0
- package/lib/commands/doctor.js +119 -0
- package/lib/commands/install.js +240 -0
- package/lib/commands/list.js +68 -0
- package/lib/commands/uninstall.js +217 -0
- package/lib/commands/update.js +142 -0
- package/lib/core/detector.js +136 -0
- package/lib/core/downloader.js +161 -0
- package/lib/core/installer.js +150 -0
- package/lib/core/version-checker.js +129 -0
- package/lib/ui/progress-gauge.js +132 -0
- package/lib/ui/prompts.js +202 -0
- package/package.json +55 -0
package/README.md
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# CLI AI Skills Installer
|
|
2
|
+
|
|
3
|
+
Install AI skills for **GitHub Copilot CLI** and **Claude Code** with a single command.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx cli-ai-skills install
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## ⨠Features
|
|
10
|
+
|
|
11
|
+
- šÆ **Interactive Installation** - Choose skills, platforms, and scope
|
|
12
|
+
- š **Smart Version Detection** - Automatically detects outdated skills
|
|
13
|
+
- š¦ **Multi-Platform Support** - GitHub Copilot CLI and Claude Code
|
|
14
|
+
- š **Global or Local** - Install globally or per-repository
|
|
15
|
+
- š **Symlink Support** - Auto-updates with repository changes
|
|
16
|
+
- š **Progress Gauge** - Visual progress tracking
|
|
17
|
+
- š„ **Doctor Command** - Diagnose installation issues
|
|
18
|
+
|
|
19
|
+
## š Quick Start
|
|
20
|
+
|
|
21
|
+
### Install All Skills
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx cli-ai-skills install --all
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Install Specific Skill
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx cli-ai-skills install prompt-engineer
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Interactive Installation
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx cli-ai-skills install
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
You'll be prompted to select:
|
|
40
|
+
- **Scope**: Global or Local
|
|
41
|
+
- **Platforms**: GitHub Copilot CLI, Claude Code, or both
|
|
42
|
+
- **Skills**: Which skills to install
|
|
43
|
+
|
|
44
|
+
## š¦ Available Skills
|
|
45
|
+
|
|
46
|
+
- **prompt-engineer** - Transform prompts using 11 established frameworks
|
|
47
|
+
- **skill-creator** - Create new skills interactively
|
|
48
|
+
- **youtube-summarizer** - Extract and summarize YouTube videos
|
|
49
|
+
|
|
50
|
+
## š Commands
|
|
51
|
+
|
|
52
|
+
### `install [skills...]`
|
|
53
|
+
|
|
54
|
+
Install AI skills.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Install all skills
|
|
58
|
+
npx cli-ai-skills install --all
|
|
59
|
+
|
|
60
|
+
# Install specific skills
|
|
61
|
+
npx cli-ai-skills install prompt-engineer skill-creator
|
|
62
|
+
|
|
63
|
+
# Install for specific platform
|
|
64
|
+
npx cli-ai-skills install --copilot
|
|
65
|
+
npx cli-ai-skills install --claude
|
|
66
|
+
|
|
67
|
+
# Install locally (in current repository)
|
|
68
|
+
npx cli-ai-skills install --local
|
|
69
|
+
|
|
70
|
+
# Silent installation (skip prompts)
|
|
71
|
+
npx cli-ai-skills install --all --yes
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Options:**
|
|
75
|
+
- `-a, --all` - Install all available skills
|
|
76
|
+
- `-g, --global` - Install globally (default)
|
|
77
|
+
- `-l, --local` - Install in current repository
|
|
78
|
+
- `--copilot` - Install only for GitHub Copilot CLI
|
|
79
|
+
- `--claude` - Install only for Claude Code
|
|
80
|
+
- `-y, --yes` - Skip confirmations
|
|
81
|
+
- `--copy` - Copy files instead of symlinks
|
|
82
|
+
|
|
83
|
+
### `list`
|
|
84
|
+
|
|
85
|
+
List available and installed skills.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx cli-ai-skills list
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Shows:
|
|
92
|
+
- ā
Installed skills with versions
|
|
93
|
+
- ā ļø Skills with updates available
|
|
94
|
+
- ⬠Skills not yet installed
|
|
95
|
+
|
|
96
|
+
### `update [skills...]`
|
|
97
|
+
|
|
98
|
+
Update installed skills.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Update all skills
|
|
102
|
+
npx cli-ai-skills update --all
|
|
103
|
+
|
|
104
|
+
# Update specific skill
|
|
105
|
+
npx cli-ai-skills update prompt-engineer
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### `uninstall <skill>`
|
|
109
|
+
|
|
110
|
+
Remove an installed skill.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
npx cli-ai-skills uninstall youtube-summarizer
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### `doctor`
|
|
117
|
+
|
|
118
|
+
Diagnose installation issues.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npx cli-ai-skills doctor
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Checks:
|
|
125
|
+
- ā
Node.js version
|
|
126
|
+
- ā
Platform installations (Copilot/Claude)
|
|
127
|
+
- ā
Directory permissions
|
|
128
|
+
- ā
Network connectivity
|
|
129
|
+
|
|
130
|
+
## šØ Example Usage
|
|
131
|
+
|
|
132
|
+
### First-Time Installation
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
$ npx cli-ai-skills install
|
|
136
|
+
|
|
137
|
+
š¤ CLI AI Skills Installer v1.0.0
|
|
138
|
+
|
|
139
|
+
[āāāāāāāāāāāāāāāāāāāā] 20% - Step 1/5: Detecting platforms
|
|
140
|
+
š Platform Detection:
|
|
141
|
+
ā
GitHub Copilot CLI found (gh version 2.50.0)
|
|
142
|
+
ā
Claude Code detected (~/.claude/)
|
|
143
|
+
|
|
144
|
+
š Where do you want to install skills?
|
|
145
|
+
⯠Global (available for all projects)
|
|
146
|
+
Local (current repository only)
|
|
147
|
+
|
|
148
|
+
š¦ Select platforms to install skills for:
|
|
149
|
+
āÆā GitHub Copilot CLI (~/.copilot/skills/)
|
|
150
|
+
ā Claude Code (~/.claude/skills/)
|
|
151
|
+
|
|
152
|
+
šÆ Which skills do you want to install?
|
|
153
|
+
āÆā prompt-engineer v1.0.0 - Transform prompts
|
|
154
|
+
ā skill-creator v1.1.0 - Create new skills
|
|
155
|
+
⯠youtube-summarizer v1.0.0 - Summarize videos
|
|
156
|
+
⯠All skills
|
|
157
|
+
|
|
158
|
+
[āāāāāāāāāāāāāāāāāāāā] 100% - Installation complete!
|
|
159
|
+
|
|
160
|
+
š 2 skills installed successfully on 2 platforms!
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Updating Skills
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
$ npx cli-ai-skills list
|
|
167
|
+
|
|
168
|
+
š¦ CLI AI Skills
|
|
169
|
+
|
|
170
|
+
ā
prompt-engineer v1.0.0 (installed)
|
|
171
|
+
ā ļø skill-creator v1.0.0 (v1.1.0 available)
|
|
172
|
+
⬠youtube-summarizer v1.0.0
|
|
173
|
+
|
|
174
|
+
$ npx cli-ai-skills update skill-creator
|
|
175
|
+
|
|
176
|
+
š Updating skill-creator v1.0.0 ā v1.1.0...
|
|
177
|
+
ā
Updated successfully
|
|
178
|
+
|
|
179
|
+
š skill-creator updated to v1.1.0!
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## š§ Global vs Local Installation
|
|
183
|
+
|
|
184
|
+
### Global Installation (Default)
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
npx cli-ai-skills install --global
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
- Skills available in **all projects**
|
|
191
|
+
- Installed in `~/.copilot/skills/` and `~/.claude/skills/`
|
|
192
|
+
- Uses **symlinks** (auto-updates on `git pull`)
|
|
193
|
+
|
|
194
|
+
### Local Installation
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
npx cli-ai-skills install --local
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
- Skills available **only in current repository**
|
|
201
|
+
- Installed in `.github/skills/` and `.claude/skills/`
|
|
202
|
+
- Uses **copy** (commit to share with team)
|
|
203
|
+
|
|
204
|
+
## š Troubleshooting
|
|
205
|
+
|
|
206
|
+
### Platforms Not Detected
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
npx cli-ai-skills doctor
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
This will diagnose:
|
|
213
|
+
- Missing GitHub Copilot CLI or Claude Code
|
|
214
|
+
- Permission issues
|
|
215
|
+
- Network connectivity problems
|
|
216
|
+
|
|
217
|
+
### Skills Not Working After Installation
|
|
218
|
+
|
|
219
|
+
1. **Open a new terminal** (environment needs to refresh)
|
|
220
|
+
2. Verify installation: `npx cli-ai-skills list`
|
|
221
|
+
3. Check permissions: `npx cli-ai-skills doctor`
|
|
222
|
+
|
|
223
|
+
### Update Fails
|
|
224
|
+
|
|
225
|
+
If update fails, try reinstalling:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
npx cli-ai-skills uninstall <skill>
|
|
229
|
+
npx cli-ai-skills install <skill>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## š Requirements
|
|
233
|
+
|
|
234
|
+
- **Node.js** >= 14.0.0
|
|
235
|
+
- **GitHub Copilot CLI** (optional) - [Install](https://docs.github.com/copilot/cli)
|
|
236
|
+
- **Claude Code** (optional) - [Install](https://claude.ai/code)
|
|
237
|
+
|
|
238
|
+
At least one AI platform is required.
|
|
239
|
+
|
|
240
|
+
## š¤ Contributing
|
|
241
|
+
|
|
242
|
+
Found a bug or have a feature request? [Open an issue](https://github.com/ericgandrade/cli-ai-skills/issues).
|
|
243
|
+
|
|
244
|
+
## š License
|
|
245
|
+
|
|
246
|
+
MIT Ā© Eric Andrade
|
|
247
|
+
|
|
248
|
+
## š Links
|
|
249
|
+
|
|
250
|
+
- **Repository**: https://github.com/ericgandrade/cli-ai-skills
|
|
251
|
+
- **Skills Documentation**: https://github.com/ericgandrade/cli-ai-skills#readme
|
|
252
|
+
- **GitHub Copilot**: https://docs.github.com/copilot/cli
|
|
253
|
+
- **Claude Code**: https://claude.ai/code
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
**Made with ā¤ļø for AI-assisted development**
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { Command } = require('commander');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const packageJson = require('../package.json');
|
|
6
|
+
|
|
7
|
+
const program = new Command();
|
|
8
|
+
|
|
9
|
+
program
|
|
10
|
+
.name('cli-ai-skills')
|
|
11
|
+
.description(chalk.cyan('š¤ Install AI skills for GitHub Copilot CLI and Claude Code'))
|
|
12
|
+
.version(packageJson.version, '-v, --version', 'Output the current version');
|
|
13
|
+
|
|
14
|
+
// Command: install
|
|
15
|
+
program
|
|
16
|
+
.command('install [skills...]')
|
|
17
|
+
.description('Install AI skills')
|
|
18
|
+
.option('-a, --all', 'Install all available skills')
|
|
19
|
+
.option('-g, --global', 'Install globally (default)')
|
|
20
|
+
.option('-l, --local', 'Install in current repository')
|
|
21
|
+
.option('--copilot', 'Install only for GitHub Copilot CLI')
|
|
22
|
+
.option('--claude', 'Install only for Claude Code')
|
|
23
|
+
.option('-y, --yes', 'Skip confirmations')
|
|
24
|
+
.option('--copy', 'Copy files instead of symlinks')
|
|
25
|
+
.action(async (skillNames, options) => {
|
|
26
|
+
try {
|
|
27
|
+
const installCommand = require('../lib/commands/install');
|
|
28
|
+
await installCommand(skillNames, options);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error(chalk.red(`\nā Error: ${error.message}`));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Command: uninstall
|
|
36
|
+
program
|
|
37
|
+
.command('uninstall <skill>')
|
|
38
|
+
.description('Uninstall a skill')
|
|
39
|
+
.option('-g, --global', 'Uninstall from global location')
|
|
40
|
+
.option('-l, --local', 'Uninstall from local repository')
|
|
41
|
+
.action(async (skill, options) => {
|
|
42
|
+
try {
|
|
43
|
+
const uninstallCommand = require('../lib/commands/uninstall');
|
|
44
|
+
await uninstallCommand(skill, options);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error(chalk.red(`\nā Error: ${error.message}`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Command: list
|
|
52
|
+
program
|
|
53
|
+
.command('list')
|
|
54
|
+
.alias('ls')
|
|
55
|
+
.description('List available and installed skills')
|
|
56
|
+
.option('-i, --installed', 'Show only installed skills')
|
|
57
|
+
.option('-a, --available', 'Show only available skills')
|
|
58
|
+
.action(async (options) => {
|
|
59
|
+
try {
|
|
60
|
+
const listCommand = require('../lib/commands/list');
|
|
61
|
+
await listCommand(options);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
console.error(chalk.red(`\nā Error: ${error.message}`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Command: update
|
|
69
|
+
program
|
|
70
|
+
.command('update [skills...]')
|
|
71
|
+
.description('Update installed skills')
|
|
72
|
+
.option('-a, --all', 'Update all skills')
|
|
73
|
+
.option('-y, --yes', 'Skip confirmations')
|
|
74
|
+
.action(async (skillNames, options) => {
|
|
75
|
+
try {
|
|
76
|
+
const updateCommand = require('../lib/commands/update');
|
|
77
|
+
await updateCommand(skillNames, options);
|
|
78
|
+
} catch (error) {
|
|
79
|
+
console.error(chalk.red(`\nā Error: ${error.message}`));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Command: doctor
|
|
85
|
+
program
|
|
86
|
+
.command('doctor')
|
|
87
|
+
.description('Diagnose installation issues')
|
|
88
|
+
.action(async () => {
|
|
89
|
+
try {
|
|
90
|
+
const doctorCommand = require('../lib/commands/doctor');
|
|
91
|
+
await doctorCommand();
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error(chalk.red(`\nā Error: ${error.message}`));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Error handling
|
|
99
|
+
program.configureOutput({
|
|
100
|
+
writeErr: (str) => process.stderr.write(chalk.red(str))
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
program.parse(process.argv);
|
|
104
|
+
|
|
105
|
+
// Show help if no command
|
|
106
|
+
if (!process.argv.slice(2).length) {
|
|
107
|
+
program.outputHelp();
|
|
108
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const PlatformDetector = require('../core/detector');
|
|
3
|
+
const { execSync } = require('child_process');
|
|
4
|
+
|
|
5
|
+
async function doctorCommand() {
|
|
6
|
+
console.log(chalk.cyan.bold('\nš CLI AI Skills Doctor\n'));
|
|
7
|
+
console.log('Running diagnostics...\n');
|
|
8
|
+
|
|
9
|
+
const detector = new PlatformDetector();
|
|
10
|
+
let issues = 0;
|
|
11
|
+
let warnings = 0;
|
|
12
|
+
|
|
13
|
+
console.log(chalk.cyan('ā'.repeat(60)));
|
|
14
|
+
console.log(chalk.bold('\nSystem Environment:\n'));
|
|
15
|
+
|
|
16
|
+
// Check Node.js version
|
|
17
|
+
console.log(chalk.bold('Node.js:'));
|
|
18
|
+
const nodeVersion = process.version;
|
|
19
|
+
const nodeMajor = parseInt(nodeVersion.slice(1).split('.')[0]);
|
|
20
|
+
if (nodeMajor >= 14) {
|
|
21
|
+
console.log(chalk.green(` ā
${nodeVersion}`));
|
|
22
|
+
} else {
|
|
23
|
+
console.log(chalk.red(` ā ${nodeVersion} (require >= 14.0.0)`));
|
|
24
|
+
console.log(chalk.dim(` Update Node.js: https://nodejs.org/`));
|
|
25
|
+
issues++;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Check OS
|
|
29
|
+
console.log(chalk.bold('\nOperating System:'));
|
|
30
|
+
const platform = process.platform;
|
|
31
|
+
const osMap = {
|
|
32
|
+
'darwin': 'macOS',
|
|
33
|
+
'linux': 'Linux',
|
|
34
|
+
'win32': 'Windows'
|
|
35
|
+
};
|
|
36
|
+
console.log(chalk.green(` ā
${osMap[platform] || platform}`));
|
|
37
|
+
|
|
38
|
+
console.log(chalk.cyan('\n' + 'ā'.repeat(60)));
|
|
39
|
+
console.log(chalk.bold('\nAI Platforms:\n'));
|
|
40
|
+
|
|
41
|
+
// Check GitHub Copilot
|
|
42
|
+
console.log(chalk.bold('GitHub Copilot CLI:'));
|
|
43
|
+
const copilotInfo = await detector.detectCopilot();
|
|
44
|
+
if (copilotInfo.cliInstalled) {
|
|
45
|
+
console.log(chalk.green(` ā
Installed (${copilotInfo.version})`));
|
|
46
|
+
console.log(chalk.dim(` Skills directory: ${copilotInfo.globalPath}`));
|
|
47
|
+
|
|
48
|
+
const writable = await detector.isWritable(copilotInfo.globalPath);
|
|
49
|
+
if (writable) {
|
|
50
|
+
console.log(chalk.green(` ā
Directory writable`));
|
|
51
|
+
} else {
|
|
52
|
+
console.log(chalk.yellow(` ā ļø Directory not writable`));
|
|
53
|
+
warnings++;
|
|
54
|
+
}
|
|
55
|
+
} else if (copilotInfo.installed) {
|
|
56
|
+
console.log(chalk.yellow(' ā ļø Directory exists but CLI not installed'));
|
|
57
|
+
console.log(chalk.dim(` Install: https://docs.github.com/copilot/cli`));
|
|
58
|
+
warnings++;
|
|
59
|
+
} else {
|
|
60
|
+
console.log(chalk.yellow(' ā ļø Not installed'));
|
|
61
|
+
console.log(chalk.dim(` Install: https://docs.github.com/copilot/cli`));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Check Claude Code
|
|
65
|
+
console.log(chalk.bold('\nClaude Code:'));
|
|
66
|
+
const claudeInfo = await detector.detectClaude();
|
|
67
|
+
if (claudeInfo.installed) {
|
|
68
|
+
console.log(chalk.green(' ā
Detected'));
|
|
69
|
+
console.log(chalk.dim(` Skills directory: ${claudeInfo.globalPath}`));
|
|
70
|
+
|
|
71
|
+
const writable = await detector.isWritable(claudeInfo.globalPath);
|
|
72
|
+
if (writable) {
|
|
73
|
+
console.log(chalk.green(` ā
Directory writable`));
|
|
74
|
+
} else {
|
|
75
|
+
console.log(chalk.yellow(` ā ļø Directory not writable`));
|
|
76
|
+
warnings++;
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
console.log(chalk.yellow(' ā ļø Not detected'));
|
|
80
|
+
console.log(chalk.dim(` Install: https://claude.ai/code`));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
console.log(chalk.cyan('\n' + 'ā'.repeat(60)));
|
|
84
|
+
console.log(chalk.bold('\nNetwork Connectivity:\n'));
|
|
85
|
+
|
|
86
|
+
// Check GitHub access
|
|
87
|
+
console.log(chalk.bold('GitHub API:'));
|
|
88
|
+
try {
|
|
89
|
+
execSync('ping -c 1 api.github.com', { stdio: 'ignore' });
|
|
90
|
+
console.log(chalk.green(' ā
Reachable (https://api.github.com)'));
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.log(chalk.red(' ā Cannot reach GitHub API'));
|
|
93
|
+
console.log(chalk.dim(' Check your internet connection'));
|
|
94
|
+
issues++;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
console.log(chalk.cyan('\n' + 'ā'.repeat(60)));
|
|
98
|
+
|
|
99
|
+
// Summary
|
|
100
|
+
console.log();
|
|
101
|
+
if (issues === 0 && warnings === 0) {
|
|
102
|
+
console.log(chalk.green.bold('⨠Everything looks good!\n'));
|
|
103
|
+
} else if (issues === 0) {
|
|
104
|
+
console.log(chalk.yellow.bold(`ā ļø Found ${warnings} warning(s)\n`));
|
|
105
|
+
} else {
|
|
106
|
+
console.log(chalk.red.bold(`ā Found ${issues} error(s) and ${warnings} warning(s)\n`));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
console.log(chalk.cyan('š Diagnostics Summary:'));
|
|
110
|
+
const checks = 3 + (copilotInfo.cliInstalled ? 1 : 0) + (claudeInfo.installed ? 1 : 0);
|
|
111
|
+
const passed = checks - issues - warnings;
|
|
112
|
+
console.log(chalk.dim(` ā
${passed} checks passed`));
|
|
113
|
+
if (warnings > 0) console.log(chalk.dim(` ā ļø ${warnings} warnings`));
|
|
114
|
+
if (issues > 0) console.log(chalk.dim(` ā ${issues} errors`));
|
|
115
|
+
|
|
116
|
+
console.log();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = doctorCommand;
|