@defai.digital/ax-cli 3.1.5 → 3.2.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 CHANGED
@@ -1,4 +1,4 @@
1
- # AX CLI - Enterprise-Class AI CLI
1
+ # AX CLI - Enterprise-Class GLM AI CLI
2
2
 
3
3
  [![Tests](https://img.shields.io/badge/tests-562%20passing-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)
4
4
  [![Coverage](https://img.shields.io/badge/coverage-98.29%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)
@@ -13,7 +13,7 @@
13
13
  ![AX CLI Logo](.github/assets/ax-cli.png)
14
14
 
15
15
  <p align="center">
16
- <strong>Enterprise-Grade Architecture • 98%+ Test Coverage • TypeScript & Zod Validation</strong>
16
+ <strong>GLM-Optimized CLI • Enterprise Architecture • 98%+ Test Coverage • TypeScript & Zod</strong>
17
17
  </p>
18
18
 
19
19
  ---
@@ -36,7 +36,9 @@ ax-cli
36
36
 
37
37
  ## ✨ Features
38
38
 
39
- - **🤖 Multi-Provider Support**: Z.AI (GLM), xAI (Grok), OpenAI, Anthropic (Claude), Ollama (local)
39
+ - **🤖 GLM-Focused AI CLI**: Optimized for Z.AI's GLM models (glm-4.6, glm-4-air, glm-4-airx)
40
+ - **Note**: For xAI Grok models, use [grok-cli](https://github.com/superagent-ai/grok-cli)
41
+ - **Note**: For Anthropic Claude models, use [claude-code](https://claude.ai/code)
40
42
  - **🧠 GLM 4.6 Optimized**: Primary support for General Language Model with advanced reasoning
41
43
  - **32K max tokens** (industry-standard, matches Claude Code CLI)
42
44
  - 200K context window, 128K max output capability
@@ -60,6 +62,13 @@ ax-cli
60
62
  - Automatic project scanning and context generation
61
63
  - z.ai implicit caching support (50% token savings on repeated context)
62
64
  - Cache statistics tracking and efficiency monitoring
65
+ - **🏥 Health Check** (NEW): Comprehensive diagnostics with `ax-cli doctor`
66
+ - Verify configuration, API connectivity, and dependencies
67
+ - Detailed error messages with actionable suggestions
68
+ - **💬 Dual-Model Mode** (NEW): Use different models for chat vs coding
69
+ - Configure chat and coding models separately
70
+ - Manual model switching with `--chat-mode` flag
71
+ - Optimize cost and performance for different task types
63
72
  - **🔄 Auto-Update**: Built-in update checker and installer
64
73
 
65
74
  ### Max Tokens Configuration
@@ -150,6 +159,7 @@ ax-cli -c
150
159
  /clear # Clear chat history
151
160
  /models # Switch AI model
152
161
  /usage # Show API usage statistics
162
+ /doctor # Run health check diagnostics
153
163
  /tasks # List background tasks
154
164
  /task <id> # View background task output
155
165
  /kill <id> # Kill a background task
@@ -328,6 +338,77 @@ ax-cli usage reset
328
338
 
329
339
  [CLI Reference →](docs/cli-reference.md) | [Usage Guide →](docs/usage.md)
330
340
 
341
+ ## 🏥 Health Check & Diagnostics (NEW)
342
+
343
+ Run comprehensive diagnostics to verify your AX CLI configuration:
344
+
345
+ ```bash
346
+ # Run full diagnostic check
347
+ ax-cli doctor
348
+
349
+ # Get detailed diagnostic information
350
+ ax-cli doctor --verbose
351
+
352
+ # Output results as JSON
353
+ ax-cli doctor --json
354
+ ```
355
+
356
+ The `doctor` command checks:
357
+ - ✓ Node.js version (24+)
358
+ - ✓ Configuration files (user and project)
359
+ - ✓ API key and base URL
360
+ - ✓ API connectivity and authentication
361
+ - ✓ Model configuration
362
+ - ✓ MCP server configuration
363
+ - ✓ Dependencies (ripgrep, git)
364
+
365
+ ## 💬 Dual-Model Mode (NEW)
366
+
367
+ Use different models for chat vs coding tasks to optimize performance and cost:
368
+
369
+ ### Configuration
370
+
371
+ Add to `~/.ax-cli/config.json` or `.ax-cli/settings.json`:
372
+
373
+ ```json
374
+ {
375
+ "dualModel": {
376
+ "enabled": true,
377
+ "chatModel": "glm-4-air",
378
+ "codingModel": "glm-4.6"
379
+ }
380
+ }
381
+ ```
382
+
383
+ ### Usage
384
+
385
+ ```bash
386
+ # Use faster chat model for questions
387
+ ax-cli --chat-mode -p "explain what this project does"
388
+
389
+ # Use coding model (default) for implementation
390
+ ax-cli -p "implement user authentication"
391
+
392
+ # In interactive mode, default is coding model
393
+ ax-cli
394
+ ```
395
+
396
+ ### Environment Variables
397
+
398
+ ```bash
399
+ # Enable dual-model mode
400
+ export AI_DUAL_MODEL_ENABLED=true
401
+ export AI_CHAT_MODEL=glm-4-air
402
+ export AI_CODING_MODEL=glm-4.6
403
+
404
+ ax-cli --chat-mode
405
+ ```
406
+
407
+ **Benefits:**
408
+ - 💰 **Cost savings**: Use faster/cheaper models for simple queries
409
+ - ⚡ **Better performance**: Match model capability to task complexity
410
+ - 🎯 **Manual control**: You decide when to use each model
411
+
331
412
  ## 🔌 MCP (Model Context Protocol)
332
413
 
333
414
  Extend AX CLI with MCP servers for additional capabilities:
@@ -488,7 +569,7 @@ MIT License - see [LICENSE](LICENSE) for details
488
569
 
489
570
  ## 🙏 Acknowledgments
490
571
 
491
- Originally forked from [grok-cli](https://github.com/superagent-ai/grok-cli), AX CLI has been extensively upgraded using **AutomatosX** multi-agent orchestration to achieve enterprise-class standards.
572
+ Built with **AutomatosX** multi-agent orchestration to achieve enterprise-class standards.
492
573
 
493
574
  ---
494
575
 
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Doctor command - Diagnose AX CLI configuration and environment
3
+ * Checks API configuration, file system, MCP servers, models, and dependencies
4
+ */
5
+ import { Command } from "commander";
6
+ export declare function createDoctorCommand(): Command;
@@ -0,0 +1,527 @@
1
+ /**
2
+ * Doctor command - Diagnose AX CLI configuration and environment
3
+ * Checks API configuration, file system, MCP servers, models, and dependencies
4
+ */
5
+ import { Command } from "commander";
6
+ import chalk from "chalk";
7
+ import { existsSync } from "fs";
8
+ import { homedir } from "os";
9
+ import { join } from "path";
10
+ import { exec } from "child_process";
11
+ import { promisify } from "util";
12
+ import OpenAI from "openai";
13
+ import { getSettingsManager } from "../utils/settings-manager.js";
14
+ import { GLM_MODELS } from "../constants.js";
15
+ import { parseJsonFile } from "../utils/json-utils.js";
16
+ const execAsync = promisify(exec);
17
+ export function createDoctorCommand() {
18
+ const doctorCmd = new Command("doctor")
19
+ .description("Diagnose AX CLI configuration and environment")
20
+ .option("--json", "Output results in JSON format")
21
+ .option("--verbose", "Show detailed diagnostic information")
22
+ .action(async (options) => {
23
+ try {
24
+ console.log(chalk.bold.cyan("\n🏥 AX CLI Doctor - Running diagnostics...\n"));
25
+ const results = [];
26
+ // 1. Check Node.js version
27
+ results.push(await checkNodeVersion());
28
+ // 2. Check config files
29
+ results.push(...checkConfigFiles());
30
+ // 3. Check API configuration
31
+ results.push(...await checkApiConfiguration());
32
+ // 4. Check model configuration
33
+ results.push(checkModelConfiguration());
34
+ // 5. Check MCP servers
35
+ results.push(...await checkMCPServers());
36
+ // 6. Check dependencies
37
+ results.push(...await checkDependencies());
38
+ // Output results
39
+ if (options.json) {
40
+ console.log(JSON.stringify(results, null, 2));
41
+ }
42
+ else {
43
+ displayResults(results, options.verbose);
44
+ }
45
+ // Exit code based on results
46
+ const hasFailures = results.some(r => r.status === "fail");
47
+ process.exit(hasFailures ? 1 : 0);
48
+ }
49
+ catch (error) {
50
+ console.error(chalk.red("\n❌ Doctor command failed:"), error instanceof Error ? error.message : String(error));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ return doctorCmd;
55
+ }
56
+ /**
57
+ * Check Node.js version
58
+ */
59
+ async function checkNodeVersion() {
60
+ const currentVersion = process.version;
61
+ const majorVersion = parseInt(currentVersion.slice(1).split('.')[0], 10);
62
+ const requiredVersion = 24;
63
+ if (majorVersion >= requiredVersion) {
64
+ return {
65
+ name: "Node.js Version",
66
+ status: "pass",
67
+ message: `${currentVersion}`,
68
+ details: [`Required: Node.js ${requiredVersion}+`],
69
+ };
70
+ }
71
+ return {
72
+ name: "Node.js Version",
73
+ status: "fail",
74
+ message: `${currentVersion} (requires ${requiredVersion}+)`,
75
+ suggestion: `Upgrade Node.js to version ${requiredVersion} or higher`,
76
+ };
77
+ }
78
+ /**
79
+ * Check configuration files
80
+ */
81
+ function checkConfigFiles() {
82
+ const results = [];
83
+ // User config
84
+ const userConfigPath = join(homedir(), ".ax-cli", "config.json");
85
+ if (existsSync(userConfigPath)) {
86
+ const parseResult = parseJsonFile(userConfigPath);
87
+ if (parseResult.success) {
88
+ results.push({
89
+ name: "User Config File",
90
+ status: "pass",
91
+ message: "Found and valid",
92
+ details: [`Location: ${userConfigPath}`],
93
+ });
94
+ }
95
+ else {
96
+ results.push({
97
+ name: "User Config File",
98
+ status: "fail",
99
+ message: "Found but corrupted",
100
+ details: [`Location: ${userConfigPath}`, `Error: ${parseResult.error}`],
101
+ suggestion: "Run 'ax-cli setup' to recreate configuration",
102
+ });
103
+ }
104
+ }
105
+ else {
106
+ results.push({
107
+ name: "User Config File",
108
+ status: "warning",
109
+ message: "Not found",
110
+ details: [`Expected location: ${userConfigPath}`],
111
+ suggestion: "Run 'ax-cli setup' to create configuration",
112
+ });
113
+ }
114
+ // Project settings
115
+ const projectSettingsPath = join(process.cwd(), ".ax-cli", "settings.json");
116
+ if (existsSync(projectSettingsPath)) {
117
+ const parseResult = parseJsonFile(projectSettingsPath);
118
+ if (parseResult.success) {
119
+ results.push({
120
+ name: "Project Settings",
121
+ status: "pass",
122
+ message: "Found and valid",
123
+ details: [`Location: ${projectSettingsPath}`],
124
+ });
125
+ }
126
+ else {
127
+ results.push({
128
+ name: "Project Settings",
129
+ status: "warning",
130
+ message: "Found but corrupted",
131
+ details: [`Location: ${projectSettingsPath}`, `Error: ${parseResult.error}`],
132
+ suggestion: "Run 'ax-cli init' to recreate project settings",
133
+ });
134
+ }
135
+ }
136
+ else {
137
+ results.push({
138
+ name: "Project Settings",
139
+ status: "pass",
140
+ message: "Not configured (using user settings)",
141
+ details: [`Optional: ${projectSettingsPath}`],
142
+ });
143
+ }
144
+ return results;
145
+ }
146
+ /**
147
+ * Check API configuration
148
+ */
149
+ async function checkApiConfiguration() {
150
+ const results = [];
151
+ const manager = getSettingsManager();
152
+ // API Key
153
+ const apiKey = manager.getApiKey();
154
+ if (apiKey && apiKey.trim()) {
155
+ results.push({
156
+ name: "API Key",
157
+ status: "pass",
158
+ message: "Configured",
159
+ details: [`Length: ${apiKey.length} characters`],
160
+ });
161
+ }
162
+ else {
163
+ results.push({
164
+ name: "API Key",
165
+ status: "fail",
166
+ message: "Not configured",
167
+ suggestion: "Run 'ax-cli setup' to configure API key",
168
+ });
169
+ }
170
+ // Base URL
171
+ const baseURL = manager.getBaseURL();
172
+ if (baseURL && baseURL.trim()) {
173
+ // Test reachability
174
+ const reachable = await testEndpointReachability(baseURL);
175
+ if (reachable.success) {
176
+ results.push({
177
+ name: "Base URL",
178
+ status: "pass",
179
+ message: "Configured and reachable",
180
+ details: [`URL: ${baseURL}`],
181
+ });
182
+ }
183
+ else {
184
+ results.push({
185
+ name: "Base URL",
186
+ status: "warning",
187
+ message: "Configured but unreachable",
188
+ details: [`URL: ${baseURL}`, `Error: ${reachable.error}`],
189
+ suggestion: "Check internet connection or firewall settings",
190
+ });
191
+ }
192
+ }
193
+ else {
194
+ results.push({
195
+ name: "Base URL",
196
+ status: "fail",
197
+ message: "Not configured",
198
+ suggestion: "Run 'ax-cli setup' to configure base URL",
199
+ });
200
+ }
201
+ // Test API with minimal request
202
+ if (apiKey && baseURL) {
203
+ const model = manager.getCurrentModel();
204
+ if (model) {
205
+ const apiTest = await testApiConnection(baseURL, apiKey, model);
206
+ if (apiTest.success) {
207
+ results.push({
208
+ name: "API Connection",
209
+ status: "pass",
210
+ message: "Successfully connected",
211
+ details: [`Model: ${model}`],
212
+ });
213
+ }
214
+ else {
215
+ results.push({
216
+ name: "API Connection",
217
+ status: "fail",
218
+ message: "Connection failed",
219
+ details: [`Error: ${apiTest.error}`],
220
+ suggestion: "Verify API key and base URL are correct",
221
+ });
222
+ }
223
+ }
224
+ }
225
+ return results;
226
+ }
227
+ /**
228
+ * Check model configuration
229
+ */
230
+ function checkModelConfiguration() {
231
+ const manager = getSettingsManager();
232
+ const model = manager.getCurrentModel();
233
+ if (!model) {
234
+ return {
235
+ name: "Model Configuration",
236
+ status: "fail",
237
+ message: "No model configured",
238
+ suggestion: "Run 'ax-cli setup' to configure default model",
239
+ };
240
+ }
241
+ // Check if model is in predefined list
242
+ const modelConfig = GLM_MODELS[model];
243
+ if (modelConfig) {
244
+ return {
245
+ name: "Model Configuration",
246
+ status: "pass",
247
+ message: `${model} (supported)`,
248
+ details: [
249
+ `Context: ${formatTokens(modelConfig.contextWindow)}`,
250
+ `Max Output: ${formatTokens(modelConfig.maxOutputTokens)}`,
251
+ `Thinking: ${modelConfig.supportsThinking ? "Yes" : "No"}`,
252
+ ],
253
+ };
254
+ }
255
+ // Custom model (Ollama, etc)
256
+ return {
257
+ name: "Model Configuration",
258
+ status: "pass",
259
+ message: `${model} (custom)`,
260
+ details: ["This is a custom model not in predefined list"],
261
+ };
262
+ }
263
+ /**
264
+ * Check MCP servers
265
+ */
266
+ async function checkMCPServers() {
267
+ const results = [];
268
+ const manager = getSettingsManager();
269
+ try {
270
+ const projectSettings = manager.loadProjectSettings();
271
+ const mcpServers = projectSettings.mcpServers || {};
272
+ const serverNames = Object.keys(mcpServers);
273
+ if (serverNames.length === 0) {
274
+ results.push({
275
+ name: "MCP Servers",
276
+ status: "pass",
277
+ message: "No MCP servers configured",
278
+ details: ["Optional feature - run 'ax-cli mcp add' to add servers"],
279
+ });
280
+ return results;
281
+ }
282
+ results.push({
283
+ name: "MCP Servers",
284
+ status: "pass",
285
+ message: `${serverNames.length} server(s) configured`,
286
+ details: serverNames.map(name => `• ${name}`),
287
+ });
288
+ // Check each server configuration
289
+ for (const serverName of serverNames) {
290
+ const serverConfig = mcpServers[serverName];
291
+ const hasValidTransport = serverConfig.transport || (serverConfig.command && serverConfig.args);
292
+ if (hasValidTransport) {
293
+ results.push({
294
+ name: `MCP Server: ${serverName}`,
295
+ status: "pass",
296
+ message: "Configuration valid",
297
+ details: serverConfig.transport
298
+ ? [`Transport: ${serverConfig.transport.type}`]
299
+ : [`Command: ${serverConfig.command}`],
300
+ });
301
+ }
302
+ else {
303
+ results.push({
304
+ name: `MCP Server: ${serverName}`,
305
+ status: "warning",
306
+ message: "Configuration incomplete",
307
+ suggestion: "Check server configuration in .ax-cli/settings.json",
308
+ });
309
+ }
310
+ }
311
+ }
312
+ catch (error) {
313
+ results.push({
314
+ name: "MCP Servers",
315
+ status: "warning",
316
+ message: "Could not check MCP configuration",
317
+ details: [error instanceof Error ? error.message : String(error)],
318
+ });
319
+ }
320
+ return results;
321
+ }
322
+ /**
323
+ * Check dependencies
324
+ */
325
+ async function checkDependencies() {
326
+ const results = [];
327
+ // Check ripgrep (for search tool)
328
+ const rgCheck = await checkCommand("rg --version");
329
+ if (rgCheck.found) {
330
+ results.push({
331
+ name: "ripgrep (search)",
332
+ status: "pass",
333
+ message: "Installed",
334
+ details: rgCheck.version ? [`Version: ${rgCheck.version}`] : undefined,
335
+ });
336
+ }
337
+ else {
338
+ results.push({
339
+ name: "ripgrep (search)",
340
+ status: "warning",
341
+ message: "Not found",
342
+ suggestion: "Install ripgrep for faster file search: brew install ripgrep",
343
+ });
344
+ }
345
+ // Check git
346
+ const gitCheck = await checkCommand("git --version");
347
+ if (gitCheck.found) {
348
+ results.push({
349
+ name: "git",
350
+ status: "pass",
351
+ message: "Installed",
352
+ details: gitCheck.version ? [`Version: ${gitCheck.version}`] : undefined,
353
+ });
354
+ }
355
+ else {
356
+ results.push({
357
+ name: "git",
358
+ status: "warning",
359
+ message: "Not found",
360
+ details: ["Required for git operations"],
361
+ suggestion: "Install git: https://git-scm.com/downloads",
362
+ });
363
+ }
364
+ return results;
365
+ }
366
+ /**
367
+ * Test endpoint reachability
368
+ */
369
+ async function testEndpointReachability(baseURL) {
370
+ try {
371
+ // For local endpoints, check if service is running
372
+ if (baseURL.includes("localhost") || baseURL.includes("127.0.0.1")) {
373
+ const response = await fetch(baseURL.replace("/v1", "") + "/api/version", {
374
+ method: "GET",
375
+ signal: AbortSignal.timeout(3000),
376
+ });
377
+ if (response.ok) {
378
+ return { success: true };
379
+ }
380
+ return {
381
+ success: false,
382
+ error: "Local service not responding",
383
+ };
384
+ }
385
+ // For remote endpoints, try a simple request
386
+ const response = await fetch(baseURL + "/models", {
387
+ method: "GET",
388
+ signal: AbortSignal.timeout(5000),
389
+ });
390
+ // Any response means endpoint is reachable
391
+ if (response.status === 401 || response.status === 403 || response.ok) {
392
+ return { success: true };
393
+ }
394
+ return {
395
+ success: false,
396
+ error: `Server returned ${response.status}`,
397
+ };
398
+ }
399
+ catch (error) {
400
+ if (error?.name === "AbortError" || error?.name === "TimeoutError") {
401
+ return { success: false, error: "Connection timeout" };
402
+ }
403
+ if (error?.code === "ECONNREFUSED") {
404
+ return { success: false, error: "Connection refused" };
405
+ }
406
+ return {
407
+ success: false,
408
+ error: error instanceof Error ? error.message : "Network error",
409
+ };
410
+ }
411
+ }
412
+ /**
413
+ * Test API connection with minimal request
414
+ */
415
+ async function testApiConnection(baseURL, apiKey, model) {
416
+ try {
417
+ const client = new OpenAI({
418
+ baseURL,
419
+ apiKey,
420
+ timeout: 10000, // 10 second timeout
421
+ });
422
+ await client.chat.completions.create({
423
+ model,
424
+ messages: [{ role: "user", content: "test" }],
425
+ max_tokens: 1,
426
+ });
427
+ return { success: true };
428
+ }
429
+ catch (error) {
430
+ let errorMessage = error instanceof Error ? error.message : "Connection failed";
431
+ if (error?.status === 401) {
432
+ errorMessage = "Invalid or expired API key";
433
+ }
434
+ else if (error?.status === 403) {
435
+ errorMessage = "API key lacks required permissions";
436
+ }
437
+ else if (error?.status === 404) {
438
+ errorMessage = "Model not found";
439
+ }
440
+ else if (error?.error?.message) {
441
+ errorMessage = error.error.message;
442
+ }
443
+ return {
444
+ success: false,
445
+ error: errorMessage,
446
+ };
447
+ }
448
+ }
449
+ /**
450
+ * Check if a command exists
451
+ */
452
+ async function checkCommand(command) {
453
+ try {
454
+ const { stdout } = await execAsync(command, { timeout: 3000 });
455
+ const version = stdout.trim().split("\n")[0];
456
+ return { found: true, version };
457
+ }
458
+ catch {
459
+ return { found: false };
460
+ }
461
+ }
462
+ /**
463
+ * Display results in formatted output
464
+ */
465
+ function displayResults(results, verbose) {
466
+ let passCount = 0;
467
+ let warnCount = 0;
468
+ let failCount = 0;
469
+ console.log(chalk.bold("Diagnostic Results:\n"));
470
+ for (const result of results) {
471
+ let icon;
472
+ let color;
473
+ switch (result.status) {
474
+ case "pass":
475
+ icon = "✓";
476
+ color = chalk.green;
477
+ passCount++;
478
+ break;
479
+ case "warning":
480
+ icon = "⚠";
481
+ color = chalk.yellow;
482
+ warnCount++;
483
+ break;
484
+ case "fail":
485
+ icon = "✗";
486
+ color = chalk.red;
487
+ failCount++;
488
+ break;
489
+ }
490
+ console.log(color(`${icon} ${result.name}: ${result.message}`));
491
+ if (verbose && result.details) {
492
+ result.details.forEach(detail => {
493
+ console.log(chalk.dim(` ${detail}`));
494
+ });
495
+ }
496
+ if (result.suggestion) {
497
+ console.log(chalk.cyan(` 💡 ${result.suggestion}`));
498
+ }
499
+ console.log();
500
+ }
501
+ // Summary
502
+ console.log(chalk.bold("\nSummary:"));
503
+ console.log(chalk.green(` ✓ ${passCount} passed`));
504
+ if (warnCount > 0) {
505
+ console.log(chalk.yellow(` ⚠ ${warnCount} warnings`));
506
+ }
507
+ if (failCount > 0) {
508
+ console.log(chalk.red(` ✗ ${failCount} failed`));
509
+ }
510
+ console.log();
511
+ if (failCount === 0 && warnCount === 0) {
512
+ console.log(chalk.green.bold("✅ All checks passed! AX CLI is configured correctly.\n"));
513
+ }
514
+ else if (failCount > 0) {
515
+ console.log(chalk.red.bold("❌ Some checks failed. Please address the issues above.\n"));
516
+ }
517
+ else {
518
+ console.log(chalk.yellow.bold("⚠️ Some warnings detected. Review suggestions above.\n"));
519
+ }
520
+ }
521
+ function formatTokens(tokens) {
522
+ if (tokens >= 1000) {
523
+ return `${(tokens / 1000).toFixed(0)}K tokens`;
524
+ }
525
+ return `${tokens} tokens`;
526
+ }
527
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}