@vibe-agent-toolkit/cli 0.1.0 → 0.1.2-rc.1

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.
Files changed (54) hide show
  1. package/README.md +67 -4
  2. package/dist/bin.js +17 -12
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/agent/index.d.ts.map +1 -1
  5. package/dist/commands/agent/index.js +0 -37
  6. package/dist/commands/agent/index.js.map +1 -1
  7. package/dist/commands/audit/cache-detector.d.ts +32 -0
  8. package/dist/commands/audit/cache-detector.d.ts.map +1 -0
  9. package/dist/commands/audit/cache-detector.js +68 -0
  10. package/dist/commands/audit/cache-detector.js.map +1 -0
  11. package/dist/commands/audit/hierarchical-output.d.ts +41 -0
  12. package/dist/commands/audit/hierarchical-output.d.ts.map +1 -0
  13. package/dist/commands/audit/hierarchical-output.js +267 -0
  14. package/dist/commands/audit/hierarchical-output.js.map +1 -0
  15. package/dist/commands/audit.d.ts +19 -0
  16. package/dist/commands/audit.d.ts.map +1 -0
  17. package/dist/commands/audit.js +404 -0
  18. package/dist/commands/audit.js.map +1 -0
  19. package/dist/commands/doctor.d.ts +106 -0
  20. package/dist/commands/doctor.d.ts.map +1 -0
  21. package/dist/commands/doctor.js +499 -0
  22. package/dist/commands/doctor.js.map +1 -0
  23. package/dist/commands/mcp/collections.d.ts +48 -0
  24. package/dist/commands/mcp/collections.d.ts.map +1 -0
  25. package/dist/commands/mcp/collections.js +130 -0
  26. package/dist/commands/mcp/collections.js.map +1 -0
  27. package/dist/commands/mcp/index.d.ts +9 -0
  28. package/dist/commands/mcp/index.d.ts.map +1 -0
  29. package/dist/commands/mcp/index.js +80 -0
  30. package/dist/commands/mcp/index.js.map +1 -0
  31. package/dist/commands/mcp/list-collections.d.ts +11 -0
  32. package/dist/commands/mcp/list-collections.d.ts.map +1 -0
  33. package/dist/commands/mcp/list-collections.js +43 -0
  34. package/dist/commands/mcp/list-collections.js.map +1 -0
  35. package/dist/commands/mcp/serve.d.ts +12 -0
  36. package/dist/commands/mcp/serve.d.ts.map +1 -0
  37. package/dist/commands/mcp/serve.js +87 -0
  38. package/dist/commands/mcp/serve.js.map +1 -0
  39. package/dist/commands/resources/scan.d.ts.map +1 -1
  40. package/dist/commands/resources/scan.js +8 -0
  41. package/dist/commands/resources/scan.js.map +1 -1
  42. package/dist/utils/config-loader.d.ts +6 -0
  43. package/dist/utils/config-loader.d.ts.map +1 -1
  44. package/dist/utils/config-loader.js +18 -0
  45. package/dist/utils/config-loader.js.map +1 -1
  46. package/docs/audit.md +446 -0
  47. package/docs/doctor.md +268 -0
  48. package/docs/index.md +32 -0
  49. package/docs/mcp.md +317 -0
  50. package/package.json +14 -8
  51. package/dist/commands/agent/audit.d.ts +0 -9
  52. package/dist/commands/agent/audit.d.ts.map +0 -1
  53. package/dist/commands/agent/audit.js +0 -139
  54. package/dist/commands/agent/audit.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical-output.js","sourceRoot":"","sources":["../../../src/commands/audit/hierarchical-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Audit command - audits plugins, marketplaces, registries, and Claude Skills
3
+ * Top-level command: vat audit [path]
4
+ */
5
+ import { Command } from 'commander';
6
+ export interface AuditCommandOptions {
7
+ debug?: boolean;
8
+ recursive?: boolean;
9
+ user?: boolean;
10
+ verbose?: boolean;
11
+ warnUnreferencedFiles?: boolean;
12
+ }
13
+ /**
14
+ * Create audit command
15
+ * Top-level command: vat audit [path]
16
+ */
17
+ export declare function createAuditCommand(): Command;
18
+ export declare function auditCommand(targetPath: string | undefined, options: AuditCommandOptions): Promise<void>;
19
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CA+D5C;AAWD,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Audit command - audits plugins, marketplaces, registries, and Claude Skills
3
+ * Top-level command: vat audit [path]
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as os from 'node:os';
7
+ import * as path from 'node:path';
8
+ import { detectFormat } from '@vibe-agent-toolkit/discovery';
9
+ import { detectResourceFormat, validate, validateSkill, } from '@vibe-agent-toolkit/runtime-claude-skills';
10
+ import { Command } from 'commander';
11
+ import { handleCommandError } from '../utils/command-error.js';
12
+ import { createLogger } from '../utils/logger.js';
13
+ import { writeYamlOutput } from '../utils/output.js';
14
+ import { buildHierarchicalOutput } from './audit/hierarchical-output.js';
15
+ /**
16
+ * Create audit command
17
+ * Top-level command: vat audit [path]
18
+ */
19
+ export function createAuditCommand() {
20
+ const audit = new Command('audit');
21
+ audit
22
+ .description('Audit Claude plugins, marketplaces, registries, and skills')
23
+ .argument('[path]', 'Path to audit (default: current directory)')
24
+ .option('-r, --recursive', 'Scan directories recursively for all resource types')
25
+ .option('--user', 'Audit user-level Claude plugins installation (~/.claude/plugins)')
26
+ .option('--verbose', 'Show all scanned resources, including those without issues')
27
+ .option('--warn-unreferenced-files', 'Warn about files not referenced in skill markdown')
28
+ .option('--debug', 'Enable debug logging')
29
+ .action(auditCommand)
30
+ .addHelpText('after', `
31
+ Description:
32
+ Audits Claude plugins, marketplaces, registries, and Claude Skills for
33
+ quality, correctness, and compatibility. Automatically detects resource
34
+ type and validates accordingly. Outputs YAML report to stdout,
35
+ errors/warnings to stderr.
36
+
37
+ Supported resource types:
38
+ - Plugin directories (.claude-plugin/plugin.json)
39
+ - Marketplace directories (.claude-plugin/marketplace.json)
40
+ - Registry files (installed_plugins.json, known_marketplaces.json)
41
+ - Claude Skills (SKILL.md files)
42
+ - VAT agents (agent.yaml + SKILL.md)
43
+
44
+ Path can be: resource directory, registry file, SKILL.md file, or scan directory
45
+ Default: current directory
46
+ Use --user to audit user-level installation (~/.claude/plugins) automatically
47
+
48
+ Validation Behavior:
49
+ Default: Validates SKILL.md and all transitively linked markdown files
50
+ --warn-unreferenced-files: Also detect files not referenced in skill
51
+
52
+ Validation Checks:
53
+ Errors (must fix):
54
+ - Missing or invalid manifests/frontmatter
55
+ - Schema validation failures
56
+ - Broken links to other files (Skills only)
57
+ - Reserved words in names (Skills only)
58
+ - XML tags in frontmatter fields (Skills only)
59
+ - Windows-style backslashes in paths (Skills only)
60
+
61
+ Warnings (should fix):
62
+ - Skill exceeds recommended length (>5000 lines)
63
+ - References console-incompatible tools (Skills only)
64
+ - Unreferenced files detected (with --warn-unreferenced-files)
65
+
66
+ Exit Codes:
67
+ 0 - Success | 1 - Errors found | 2 - System error
68
+
69
+ Examples:
70
+ $ vat audit --user # Audit user-level plugins installation
71
+ $ vat audit # Audit current directory
72
+ $ vat audit ./my-plugin # Audit plugin directory
73
+ $ vat audit installed_plugins.json # Audit registry file
74
+ $ vat audit ./resources --recursive # Audit all resources recursively
75
+ `);
76
+ return audit;
77
+ }
78
+ /**
79
+ * Get the user-level Claude plugins directory
80
+ * Cross-platform: ~/.claude/plugins on macOS/Linux, %USERPROFILE%\.claude\plugins on Windows
81
+ */
82
+ function getUserPluginsDir() {
83
+ const homeDir = os.homedir();
84
+ return path.join(homeDir, '.claude', 'plugins');
85
+ }
86
+ export async function auditCommand(targetPath, options) {
87
+ const logger = createLogger(options.debug ? { debug: true } : {});
88
+ const startTime = Date.now();
89
+ try {
90
+ let scanPath;
91
+ let recursive = options.recursive ?? false;
92
+ // Handle --user flag
93
+ if (options.user) {
94
+ const userPluginsDir = getUserPluginsDir();
95
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- safe: path constructed from os.homedir()
96
+ if (!fs.existsSync(userPluginsDir)) {
97
+ logger.error(`User plugins directory not found: ${userPluginsDir}`);
98
+ logger.error('Claude plugins have not been installed yet.');
99
+ process.exit(2);
100
+ }
101
+ scanPath = userPluginsDir;
102
+ recursive = true; // Always recursive for user-level audit
103
+ logger.debug(`Auditing user-level plugins at: ${scanPath}`);
104
+ }
105
+ else {
106
+ scanPath = targetPath ? path.resolve(targetPath) : process.cwd();
107
+ logger.debug(`Auditing resources at: ${scanPath}`);
108
+ }
109
+ // Get validation results
110
+ const results = await getValidationResults(scanPath, recursive, options, logger);
111
+ // Use hierarchical output for --user flag, flat output otherwise
112
+ if (options.user) {
113
+ // Filter to only include claude-skill type for hierarchical output
114
+ const skillResults = results.filter((r) => r.type === 'claude-skill');
115
+ const hierarchical = buildHierarchicalOutput(skillResults, options.verbose ?? false);
116
+ const summary = calculateHierarchicalSummary(results, hierarchical, startTime);
117
+ writeYamlOutput(summary);
118
+ logHierarchicalSummary(results, hierarchical, logger);
119
+ }
120
+ else {
121
+ // Standard flat output
122
+ const summary = calculateSummary(results, startTime);
123
+ writeYamlOutput(summary);
124
+ handleAuditResults(results, summary, logger);
125
+ }
126
+ }
127
+ catch (error) {
128
+ handleCommandError(error, logger, startTime, 'AgentAudit');
129
+ }
130
+ }
131
+ async function getValidationResults(scanPath, recursive, options, logger) {
132
+ const format = detectFormat(scanPath);
133
+ // Special handling for direct SKILL.md file
134
+ if (format === 'claude-skill') {
135
+ logger.debug('Detected single Claude Skill');
136
+ const validateOptions = { skillPath: scanPath };
137
+ if (options.warnUnreferencedFiles) {
138
+ validateOptions.checkUnreferencedFiles = true;
139
+ }
140
+ const result = await validateSkill(validateOptions);
141
+ return [result];
142
+ }
143
+ // Special handling for VAT agent: validate its SKILL.md
144
+ if (format === 'vat-agent') {
145
+ const skillPath = path.join(scanPath, 'SKILL.md');
146
+ logger.debug('Detected VAT agent, validating SKILL.md');
147
+ const validateOptions = { skillPath, isVATGenerated: true };
148
+ if (options.warnUnreferencedFiles) {
149
+ validateOptions.checkUnreferencedFiles = true;
150
+ }
151
+ const result = await validateSkill(validateOptions);
152
+ return [result];
153
+ }
154
+ // For plugin/marketplace directories or registry files, use unified validator
155
+ const resourceFormat = await detectResourceFormat(scanPath);
156
+ if (resourceFormat.type !== 'unknown') {
157
+ logger.debug(`Detected ${resourceFormat.type} at: ${scanPath}`);
158
+ const result = await validate(scanPath);
159
+ return [result];
160
+ }
161
+ // If unknown format, check if it's a directory we can scan
162
+ const fs = await import('node:fs/promises');
163
+ try {
164
+ const stat = await fs.stat(scanPath);
165
+ if (stat.isDirectory()) {
166
+ logger.debug('Scanning directory for resources');
167
+ return scanDirectory(scanPath, recursive, options, logger);
168
+ }
169
+ }
170
+ catch {
171
+ // Path doesn't exist or not accessible, let validate() handle it
172
+ }
173
+ // Unknown resource type - use unified validator which will return appropriate error
174
+ logger.debug(`Unknown resource type at: ${scanPath}`);
175
+ const result = await validate(scanPath);
176
+ return [result];
177
+ }
178
+ function calculateSummary(results, startTime) {
179
+ const base = buildBaseSummary(results, startTime);
180
+ return {
181
+ ...base,
182
+ files: results,
183
+ };
184
+ }
185
+ function handleAuditResults(results, summary, logger) {
186
+ const { errors: errorCount, warnings: warningCount, success: successCount } = summary.summary;
187
+ if (errorCount > 0) {
188
+ logErrors(results, errorCount, logger);
189
+ process.exit(1);
190
+ }
191
+ if (warningCount > 0) {
192
+ logWarnings(results, warningCount, logger);
193
+ }
194
+ else {
195
+ logger.info(`Audit successful: ${successCount} file(s) passed`);
196
+ }
197
+ process.exit(0);
198
+ }
199
+ function logErrors(results, errorCount, logger) {
200
+ logger.error(`Audit failed: ${errorCount} file(s) with errors`);
201
+ const errorResults = results.filter((r) => r.status === 'error');
202
+ for (const result of errorResults) {
203
+ logger.error(`\n${result.path}:`);
204
+ const errorIssues = result.issues.filter((i) => i.severity === 'error');
205
+ logIssues(errorIssues, logger.error.bind(logger));
206
+ }
207
+ }
208
+ function logWarnings(results, warningCount, logger) {
209
+ logger.info(`Audit passed with warnings: ${warningCount} file(s)`);
210
+ const warningResults = results.filter((r) => r.status === 'warning');
211
+ for (const result of warningResults) {
212
+ logger.info(`\n${result.path}:`);
213
+ const warningIssues = result.issues.filter((i) => i.severity === 'warning');
214
+ logIssues(warningIssues, logger.info.bind(logger));
215
+ }
216
+ }
217
+ function logIssues(issues, logFn) {
218
+ for (const issue of issues) {
219
+ logFn(` [${issue.code}] ${issue.message}`);
220
+ if (issue.location) {
221
+ logFn(` at: ${issue.location}`);
222
+ }
223
+ if (issue.fix) {
224
+ logFn(` fix: ${issue.fix}`);
225
+ }
226
+ }
227
+ }
228
+ /**
229
+ * Handle file entry during directory scan
230
+ */
231
+ async function handleFileEntry(entry, fullPath, options, logger) {
232
+ // Check for registry files
233
+ if (entry.name === 'installed_plugins.json' || entry.name === 'known_marketplaces.json') {
234
+ logger.debug(`Validating registry: ${fullPath}`);
235
+ return validate(fullPath);
236
+ }
237
+ // Check for SKILL.md
238
+ if (entry.name === 'SKILL.md') {
239
+ logger.debug(`Validating Claude Skill: ${fullPath}`);
240
+ const validateOptions = { skillPath: fullPath };
241
+ if (options.warnUnreferencedFiles) {
242
+ validateOptions.checkUnreferencedFiles = true;
243
+ }
244
+ return validateSkill(validateOptions);
245
+ }
246
+ return null;
247
+ }
248
+ /**
249
+ * Handle directory entry during directory scan
250
+ */
251
+ async function handleDirectoryEntry(fullPath, recursive, options, logger) {
252
+ const fs = await import('node:fs/promises');
253
+ const results = [];
254
+ // Check if directory contains a plugin or marketplace
255
+ const claudePluginDir = path.join(fullPath, '.claude-plugin');
256
+ const hasClaudePlugin = await fs.access(claudePluginDir).then(() => true).catch(() => false);
257
+ if (hasClaudePlugin) {
258
+ logger.debug(`Validating resource directory: ${fullPath}`);
259
+ const result = await validate(fullPath);
260
+ results.push(result);
261
+ }
262
+ // Recurse into subdirectories (both plugin/marketplace dirs and regular dirs)
263
+ if (recursive) {
264
+ const subResults = await scanDirectory(fullPath, recursive, options, logger);
265
+ results.push(...subResults);
266
+ }
267
+ return results;
268
+ }
269
+ async function scanDirectory(dirPath, recursive, options, logger) {
270
+ const fs = await import('node:fs/promises');
271
+ const results = [];
272
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
273
+ for (const entry of entries) {
274
+ const fullPath = path.join(dirPath, entry.name);
275
+ if (entry.isFile()) {
276
+ const result = await handleFileEntry(entry, fullPath, options, logger);
277
+ if (result !== null) {
278
+ results.push(result);
279
+ }
280
+ }
281
+ else if (entry.isDirectory()) {
282
+ const dirResults = await handleDirectoryEntry(fullPath, recursive, options, logger);
283
+ results.push(...dirResults);
284
+ }
285
+ }
286
+ return results;
287
+ }
288
+ /**
289
+ * Calculate overall status from validation results
290
+ */
291
+ function calculateOverallStatus(results) {
292
+ const errorCount = results.filter((r) => r.status === 'error').length;
293
+ const warningCount = results.filter((r) => r.status === 'warning').length;
294
+ if (errorCount > 0) {
295
+ return 'error';
296
+ }
297
+ if (warningCount > 0) {
298
+ return 'warning';
299
+ }
300
+ return 'success';
301
+ }
302
+ /**
303
+ * Count all skills in hierarchical output
304
+ */
305
+ function countAllSkills(hierarchical) {
306
+ let total = 0;
307
+ // Count marketplace skills
308
+ for (const marketplace of hierarchical.marketplaces) {
309
+ for (const plugin of marketplace.plugins) {
310
+ total += plugin.skills.length;
311
+ }
312
+ }
313
+ // Count cached plugin skills
314
+ for (const plugin of hierarchical.cachedPlugins) {
315
+ total += plugin.skills.length;
316
+ }
317
+ // Count standalone plugin skills
318
+ for (const plugin of hierarchical.standalonePlugins) {
319
+ total += plugin.skills.length;
320
+ }
321
+ // Count standalone skills
322
+ total += hierarchical.standaloneSkills.length;
323
+ return total;
324
+ }
325
+ /**
326
+ * Calculate issue counts from validation results
327
+ */
328
+ function calculateIssueCounts(results) {
329
+ const successCount = results.filter((r) => r.status === 'success').length;
330
+ const warningCount = results.filter((r) => r.status === 'warning').length;
331
+ const errorCount = results.filter((r) => r.status === 'error').length;
332
+ const totalErrors = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'error').length, 0);
333
+ const totalWarnings = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'warning').length, 0);
334
+ const totalInfo = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'info').length, 0);
335
+ return {
336
+ successCount,
337
+ warningCount,
338
+ errorCount,
339
+ totalErrors,
340
+ totalWarnings,
341
+ totalInfo,
342
+ };
343
+ }
344
+ /**
345
+ * Build base summary structure (used by both flat and hierarchical)
346
+ */
347
+ function buildBaseSummary(results, startTime) {
348
+ const counts = calculateIssueCounts(results);
349
+ const status = calculateOverallStatus(results);
350
+ return {
351
+ status,
352
+ summary: {
353
+ filesScanned: results.length,
354
+ success: counts.successCount,
355
+ warnings: counts.warningCount,
356
+ errors: counts.errorCount,
357
+ },
358
+ issues: {
359
+ errors: counts.totalErrors,
360
+ warnings: counts.totalWarnings,
361
+ info: counts.totalInfo,
362
+ },
363
+ duration: `${Date.now() - startTime}ms`,
364
+ };
365
+ }
366
+ /**
367
+ * Calculate summary for hierarchical output
368
+ */
369
+ function calculateHierarchicalSummary(results, hierarchical, startTime) {
370
+ const base = buildBaseSummary(results, startTime);
371
+ return {
372
+ ...base,
373
+ summary: {
374
+ ...base.summary,
375
+ marketplaces: hierarchical.marketplaces.length,
376
+ cachedPlugins: hierarchical.cachedPlugins.length,
377
+ standalonePlugins: hierarchical.standalonePlugins.length,
378
+ standaloneSkills: hierarchical.standaloneSkills.length,
379
+ },
380
+ hierarchical,
381
+ };
382
+ }
383
+ /**
384
+ * Log hierarchical summary to stderr
385
+ */
386
+ function logHierarchicalSummary(results, hierarchical, logger) {
387
+ const status = calculateOverallStatus(results);
388
+ const skillsWithIssues = countAllSkills(hierarchical);
389
+ const totalSkills = results.length;
390
+ if (status === 'error') {
391
+ const errorCount = results.filter((r) => r.status === 'error').length;
392
+ logger.error(`Audit failed: ${errorCount} skill(s) with errors (${totalSkills} scanned, ${skillsWithIssues} with issues)`);
393
+ process.exit(1);
394
+ }
395
+ if (status === 'warning') {
396
+ const warningCount = results.filter((r) => r.status === 'warning').length;
397
+ logger.info(`Audit passed with warnings: ${warningCount} skill(s) (${totalSkills} scanned, ${skillsWithIssues} with issues)`);
398
+ }
399
+ else {
400
+ logger.info(`Audit successful: ${totalSkills} skill(s) passed`);
401
+ }
402
+ process.exit(0);
403
+ }
404
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Doctor Command
3
+ *
4
+ * Diagnoses common issues with vat setup:
5
+ * - Environment checks (Node.js version, git)
6
+ * - Configuration validation
7
+ * - Version checks
8
+ */
9
+ import type { Command } from 'commander';
10
+ /**
11
+ * Result of a single doctor check
12
+ */
13
+ export interface DoctorCheckResult {
14
+ /** Name of the check */
15
+ name: string;
16
+ /** Whether the check passed */
17
+ passed: boolean;
18
+ /** Message describing the result */
19
+ message: string;
20
+ /** Optional suggestion for fixing the issue */
21
+ suggestion?: string;
22
+ }
23
+ /**
24
+ * Project context information
25
+ */
26
+ export interface ProjectContext {
27
+ /** Current working directory */
28
+ currentDir: string;
29
+ /** Detected project root (null if not found) */
30
+ projectRoot: string | null;
31
+ /** Detected config file path (null if not found) */
32
+ configPath: string | null;
33
+ }
34
+ /**
35
+ * Overall doctor diagnostic result
36
+ */
37
+ export interface DoctorResult {
38
+ /** Whether all checks passed */
39
+ allPassed: boolean;
40
+ /** Individual check results */
41
+ checks: DoctorCheckResult[];
42
+ /** Total number of checks run */
43
+ totalChecks: number;
44
+ /** Number of checks that passed */
45
+ passedChecks: number;
46
+ /** Project context information */
47
+ projectContext: ProjectContext;
48
+ }
49
+ /**
50
+ * Version checker interface for dependency injection (enables fast tests)
51
+ */
52
+ export interface VersionChecker {
53
+ /** Fetch latest version from npm registry */
54
+ fetchLatestVersion(): Promise<string>;
55
+ }
56
+ /**
57
+ * Options for running doctor checks
58
+ */
59
+ export interface DoctorOptions {
60
+ /** Show all checks including passing ones */
61
+ verbose?: boolean;
62
+ /** Version checker (for testing) */
63
+ versionChecker?: VersionChecker;
64
+ }
65
+ /**
66
+ * Check Node.js version meets requirements
67
+ */
68
+ export declare function checkNodeVersion(): DoctorCheckResult;
69
+ /**
70
+ * Check if git is installed
71
+ */
72
+ export declare function checkGitInstalled(): DoctorCheckResult;
73
+ /**
74
+ * Check if current directory is a git repository
75
+ */
76
+ export declare function checkGitRepository(): DoctorCheckResult;
77
+ /**
78
+ * Check if configuration file exists
79
+ *
80
+ * Uses findConfigPath() to walk up directory tree.
81
+ */
82
+ export declare function checkConfigFile(): DoctorCheckResult;
83
+ /**
84
+ * Check if configuration is valid
85
+ */
86
+ export declare function checkConfigValid(): DoctorCheckResult;
87
+ /**
88
+ * Check if vat version is up to date (advisory only)
89
+ */
90
+ export declare function checkVatVersion(versionChecker?: VersionChecker): Promise<DoctorCheckResult>;
91
+ /**
92
+ * Check if CLI build is in sync with source code (development mode only)
93
+ */
94
+ export declare function checkCliBuildSync(): DoctorCheckResult;
95
+ /**
96
+ * Run all doctor checks
97
+ *
98
+ * @param options - Doctor options
99
+ * @returns Doctor result
100
+ */
101
+ export declare function runDoctor(options?: DoctorOptions): Promise<DoctorResult>;
102
+ /**
103
+ * Main command handler for Commander.js
104
+ */
105
+ export declare function doctorCommand(program: Command): void;
106
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oDAAoD;IACpD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAcD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CA6CpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CA2BrD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,CAmCtD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CA2BnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CAqCpD;AAgBD;;GAEG;AACH,wBAAsB,eAAe,CACnC,cAAc,GAAE,cAAsC,GACrD,OAAO,CAAC,iBAAiB,CAAC,CAkD5B;AA8CD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAoDrD;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA0ClF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwCpD"}