@vibe-agent-toolkit/cli 0.1.0 → 0.1.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.
- package/README.md +67 -4
- package/dist/bin.js +15 -12
- package/dist/bin.js.map +1 -1
- package/dist/commands/agent/index.d.ts.map +1 -1
- package/dist/commands/agent/index.js +0 -37
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/audit/cache-detector.d.ts +32 -0
- package/dist/commands/audit/cache-detector.d.ts.map +1 -0
- package/dist/commands/audit/cache-detector.js +68 -0
- package/dist/commands/audit/cache-detector.js.map +1 -0
- package/dist/commands/audit/hierarchical-output.d.ts +41 -0
- package/dist/commands/audit/hierarchical-output.d.ts.map +1 -0
- package/dist/commands/audit/hierarchical-output.js +267 -0
- package/dist/commands/audit/hierarchical-output.js.map +1 -0
- package/dist/commands/audit.d.ts +18 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +386 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/doctor.d.ts +106 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +499 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/resources/scan.d.ts.map +1 -1
- package/dist/commands/resources/scan.js +8 -0
- package/dist/commands/resources/scan.js.map +1 -1
- package/dist/utils/config-loader.d.ts +6 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +18 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/docs/audit.md +446 -0
- package/docs/doctor.md +268 -0
- package/docs/index.md +32 -0
- package/package.json +11 -8
- package/dist/commands/agent/audit.d.ts +0 -9
- package/dist/commands/agent/audit.d.ts.map +0 -1
- package/dist/commands/agent/audit.js +0 -139
- 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,18 @@
|
|
|
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
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create audit command
|
|
14
|
+
* Top-level command: vat audit [path]
|
|
15
|
+
*/
|
|
16
|
+
export declare function createAuditCommand(): Command;
|
|
17
|
+
export declare function auditCommand(targetPath: string | undefined, options: AuditCommandOptions): Promise<void>;
|
|
18
|
+
//# 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;AAaH,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;CACnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAyD5C;AAWD,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
|
|
@@ -0,0 +1,386 @@
|
|
|
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('--debug', 'Enable debug logging')
|
|
28
|
+
.action(auditCommand)
|
|
29
|
+
.addHelpText('after', `
|
|
30
|
+
Description:
|
|
31
|
+
Audits Claude plugins, marketplaces, registries, and Claude Skills for
|
|
32
|
+
quality, correctness, and compatibility. Automatically detects resource
|
|
33
|
+
type and validates accordingly. Outputs YAML report to stdout,
|
|
34
|
+
errors/warnings to stderr.
|
|
35
|
+
|
|
36
|
+
Supported resource types:
|
|
37
|
+
- Plugin directories (.claude-plugin/plugin.json)
|
|
38
|
+
- Marketplace directories (.claude-plugin/marketplace.json)
|
|
39
|
+
- Registry files (installed_plugins.json, known_marketplaces.json)
|
|
40
|
+
- Claude Skills (SKILL.md files)
|
|
41
|
+
- VAT agents (agent.yaml + SKILL.md)
|
|
42
|
+
|
|
43
|
+
Path can be: resource directory, registry file, SKILL.md file, or scan directory
|
|
44
|
+
Default: current directory
|
|
45
|
+
Use --user to audit user-level installation (~/.claude/plugins) automatically
|
|
46
|
+
|
|
47
|
+
Validation Checks:
|
|
48
|
+
Errors (must fix):
|
|
49
|
+
- Missing or invalid manifests/frontmatter
|
|
50
|
+
- Schema validation failures
|
|
51
|
+
- Broken links to other files (Skills only)
|
|
52
|
+
- Reserved words in names (Skills only)
|
|
53
|
+
- XML tags in frontmatter fields (Skills only)
|
|
54
|
+
- Windows-style backslashes in paths (Skills only)
|
|
55
|
+
|
|
56
|
+
Warnings (should fix):
|
|
57
|
+
- Skill exceeds recommended length (>5000 lines)
|
|
58
|
+
- References console-incompatible tools (Skills only)
|
|
59
|
+
|
|
60
|
+
Exit Codes:
|
|
61
|
+
0 - Success | 1 - Errors found | 2 - System error
|
|
62
|
+
|
|
63
|
+
Examples:
|
|
64
|
+
$ vat audit --user # Audit user-level plugins installation
|
|
65
|
+
$ vat audit # Audit current directory
|
|
66
|
+
$ vat audit ./my-plugin # Audit plugin directory
|
|
67
|
+
$ vat audit installed_plugins.json # Audit registry file
|
|
68
|
+
$ vat audit ./resources --recursive # Audit all resources recursively
|
|
69
|
+
`);
|
|
70
|
+
return audit;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the user-level Claude plugins directory
|
|
74
|
+
* Cross-platform: ~/.claude/plugins on macOS/Linux, %USERPROFILE%\.claude\plugins on Windows
|
|
75
|
+
*/
|
|
76
|
+
function getUserPluginsDir() {
|
|
77
|
+
const homeDir = os.homedir();
|
|
78
|
+
return path.join(homeDir, '.claude', 'plugins');
|
|
79
|
+
}
|
|
80
|
+
export async function auditCommand(targetPath, options) {
|
|
81
|
+
const logger = createLogger(options.debug ? { debug: true } : {});
|
|
82
|
+
const startTime = Date.now();
|
|
83
|
+
try {
|
|
84
|
+
let scanPath;
|
|
85
|
+
let recursive = options.recursive ?? false;
|
|
86
|
+
// Handle --user flag
|
|
87
|
+
if (options.user) {
|
|
88
|
+
const userPluginsDir = getUserPluginsDir();
|
|
89
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- safe: path constructed from os.homedir()
|
|
90
|
+
if (!fs.existsSync(userPluginsDir)) {
|
|
91
|
+
logger.error(`User plugins directory not found: ${userPluginsDir}`);
|
|
92
|
+
logger.error('Claude plugins have not been installed yet.');
|
|
93
|
+
process.exit(2);
|
|
94
|
+
}
|
|
95
|
+
scanPath = userPluginsDir;
|
|
96
|
+
recursive = true; // Always recursive for user-level audit
|
|
97
|
+
logger.debug(`Auditing user-level plugins at: ${scanPath}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
scanPath = targetPath ? path.resolve(targetPath) : process.cwd();
|
|
101
|
+
logger.debug(`Auditing resources at: ${scanPath}`);
|
|
102
|
+
}
|
|
103
|
+
// Get validation results
|
|
104
|
+
const results = await getValidationResults(scanPath, recursive, logger);
|
|
105
|
+
// Use hierarchical output for --user flag, flat output otherwise
|
|
106
|
+
if (options.user) {
|
|
107
|
+
// Filter to only include claude-skill type for hierarchical output
|
|
108
|
+
const skillResults = results.filter((r) => r.type === 'claude-skill');
|
|
109
|
+
const hierarchical = buildHierarchicalOutput(skillResults, options.verbose ?? false);
|
|
110
|
+
const summary = calculateHierarchicalSummary(results, hierarchical, startTime);
|
|
111
|
+
writeYamlOutput(summary);
|
|
112
|
+
logHierarchicalSummary(results, hierarchical, logger);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Standard flat output
|
|
116
|
+
const summary = calculateSummary(results, startTime);
|
|
117
|
+
writeYamlOutput(summary);
|
|
118
|
+
handleAuditResults(results, summary, logger);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
handleCommandError(error, logger, startTime, 'AgentAudit');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function getValidationResults(scanPath, recursive, logger) {
|
|
126
|
+
const format = detectFormat(scanPath);
|
|
127
|
+
// Special handling for direct SKILL.md file
|
|
128
|
+
if (format === 'claude-skill') {
|
|
129
|
+
logger.debug('Detected single Claude Skill');
|
|
130
|
+
const result = await validateSkill({ skillPath: scanPath });
|
|
131
|
+
return [result];
|
|
132
|
+
}
|
|
133
|
+
// Special handling for VAT agent: validate its SKILL.md
|
|
134
|
+
if (format === 'vat-agent') {
|
|
135
|
+
const skillPath = path.join(scanPath, 'SKILL.md');
|
|
136
|
+
logger.debug('Detected VAT agent, validating SKILL.md');
|
|
137
|
+
const result = await validateSkill({ skillPath, isVATGenerated: true });
|
|
138
|
+
return [result];
|
|
139
|
+
}
|
|
140
|
+
// For plugin/marketplace directories or registry files, use unified validator
|
|
141
|
+
const resourceFormat = await detectResourceFormat(scanPath);
|
|
142
|
+
if (resourceFormat.type !== 'unknown') {
|
|
143
|
+
logger.debug(`Detected ${resourceFormat.type} at: ${scanPath}`);
|
|
144
|
+
const result = await validate(scanPath);
|
|
145
|
+
return [result];
|
|
146
|
+
}
|
|
147
|
+
// If unknown format, check if it's a directory we can scan
|
|
148
|
+
const fs = await import('node:fs/promises');
|
|
149
|
+
try {
|
|
150
|
+
const stat = await fs.stat(scanPath);
|
|
151
|
+
if (stat.isDirectory()) {
|
|
152
|
+
logger.debug('Scanning directory for resources');
|
|
153
|
+
return scanDirectory(scanPath, recursive, logger);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Path doesn't exist or not accessible, let validate() handle it
|
|
158
|
+
}
|
|
159
|
+
// Unknown resource type - use unified validator which will return appropriate error
|
|
160
|
+
logger.debug(`Unknown resource type at: ${scanPath}`);
|
|
161
|
+
const result = await validate(scanPath);
|
|
162
|
+
return [result];
|
|
163
|
+
}
|
|
164
|
+
function calculateSummary(results, startTime) {
|
|
165
|
+
const base = buildBaseSummary(results, startTime);
|
|
166
|
+
return {
|
|
167
|
+
...base,
|
|
168
|
+
files: results,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function handleAuditResults(results, summary, logger) {
|
|
172
|
+
const { errors: errorCount, warnings: warningCount, success: successCount } = summary.summary;
|
|
173
|
+
if (errorCount > 0) {
|
|
174
|
+
logErrors(results, errorCount, logger);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
if (warningCount > 0) {
|
|
178
|
+
logWarnings(results, warningCount, logger);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
logger.info(`Audit successful: ${successCount} file(s) passed`);
|
|
182
|
+
}
|
|
183
|
+
process.exit(0);
|
|
184
|
+
}
|
|
185
|
+
function logErrors(results, errorCount, logger) {
|
|
186
|
+
logger.error(`Audit failed: ${errorCount} file(s) with errors`);
|
|
187
|
+
const errorResults = results.filter((r) => r.status === 'error');
|
|
188
|
+
for (const result of errorResults) {
|
|
189
|
+
logger.error(`\n${result.path}:`);
|
|
190
|
+
const errorIssues = result.issues.filter((i) => i.severity === 'error');
|
|
191
|
+
logIssues(errorIssues, logger.error.bind(logger));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function logWarnings(results, warningCount, logger) {
|
|
195
|
+
logger.info(`Audit passed with warnings: ${warningCount} file(s)`);
|
|
196
|
+
const warningResults = results.filter((r) => r.status === 'warning');
|
|
197
|
+
for (const result of warningResults) {
|
|
198
|
+
logger.info(`\n${result.path}:`);
|
|
199
|
+
const warningIssues = result.issues.filter((i) => i.severity === 'warning');
|
|
200
|
+
logIssues(warningIssues, logger.info.bind(logger));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function logIssues(issues, logFn) {
|
|
204
|
+
for (const issue of issues) {
|
|
205
|
+
logFn(` [${issue.code}] ${issue.message}`);
|
|
206
|
+
if (issue.location) {
|
|
207
|
+
logFn(` at: ${issue.location}`);
|
|
208
|
+
}
|
|
209
|
+
if (issue.fix) {
|
|
210
|
+
logFn(` fix: ${issue.fix}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Handle file entry during directory scan
|
|
216
|
+
*/
|
|
217
|
+
async function handleFileEntry(entry, fullPath, logger) {
|
|
218
|
+
// Check for registry files
|
|
219
|
+
if (entry.name === 'installed_plugins.json' || entry.name === 'known_marketplaces.json') {
|
|
220
|
+
logger.debug(`Validating registry: ${fullPath}`);
|
|
221
|
+
return validate(fullPath);
|
|
222
|
+
}
|
|
223
|
+
// Check for SKILL.md
|
|
224
|
+
if (entry.name === 'SKILL.md') {
|
|
225
|
+
logger.debug(`Validating Claude Skill: ${fullPath}`);
|
|
226
|
+
return validateSkill({ skillPath: fullPath });
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Handle directory entry during directory scan
|
|
232
|
+
*/
|
|
233
|
+
async function handleDirectoryEntry(fullPath, recursive, logger) {
|
|
234
|
+
const fs = await import('node:fs/promises');
|
|
235
|
+
const results = [];
|
|
236
|
+
// Check if directory contains a plugin or marketplace
|
|
237
|
+
const claudePluginDir = path.join(fullPath, '.claude-plugin');
|
|
238
|
+
const hasClaudePlugin = await fs.access(claudePluginDir).then(() => true).catch(() => false);
|
|
239
|
+
if (hasClaudePlugin) {
|
|
240
|
+
logger.debug(`Validating resource directory: ${fullPath}`);
|
|
241
|
+
const result = await validate(fullPath);
|
|
242
|
+
results.push(result);
|
|
243
|
+
}
|
|
244
|
+
// Recurse into subdirectories (both plugin/marketplace dirs and regular dirs)
|
|
245
|
+
if (recursive) {
|
|
246
|
+
const subResults = await scanDirectory(fullPath, recursive, logger);
|
|
247
|
+
results.push(...subResults);
|
|
248
|
+
}
|
|
249
|
+
return results;
|
|
250
|
+
}
|
|
251
|
+
async function scanDirectory(dirPath, recursive, logger) {
|
|
252
|
+
const fs = await import('node:fs/promises');
|
|
253
|
+
const results = [];
|
|
254
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
255
|
+
for (const entry of entries) {
|
|
256
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
257
|
+
if (entry.isFile()) {
|
|
258
|
+
const result = await handleFileEntry(entry, fullPath, logger);
|
|
259
|
+
if (result !== null) {
|
|
260
|
+
results.push(result);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else if (entry.isDirectory()) {
|
|
264
|
+
const dirResults = await handleDirectoryEntry(fullPath, recursive, logger);
|
|
265
|
+
results.push(...dirResults);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return results;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Calculate overall status from validation results
|
|
272
|
+
*/
|
|
273
|
+
function calculateOverallStatus(results) {
|
|
274
|
+
const errorCount = results.filter((r) => r.status === 'error').length;
|
|
275
|
+
const warningCount = results.filter((r) => r.status === 'warning').length;
|
|
276
|
+
if (errorCount > 0) {
|
|
277
|
+
return 'error';
|
|
278
|
+
}
|
|
279
|
+
if (warningCount > 0) {
|
|
280
|
+
return 'warning';
|
|
281
|
+
}
|
|
282
|
+
return 'success';
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Count all skills in hierarchical output
|
|
286
|
+
*/
|
|
287
|
+
function countAllSkills(hierarchical) {
|
|
288
|
+
let total = 0;
|
|
289
|
+
// Count marketplace skills
|
|
290
|
+
for (const marketplace of hierarchical.marketplaces) {
|
|
291
|
+
for (const plugin of marketplace.plugins) {
|
|
292
|
+
total += plugin.skills.length;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Count cached plugin skills
|
|
296
|
+
for (const plugin of hierarchical.cachedPlugins) {
|
|
297
|
+
total += plugin.skills.length;
|
|
298
|
+
}
|
|
299
|
+
// Count standalone plugin skills
|
|
300
|
+
for (const plugin of hierarchical.standalonePlugins) {
|
|
301
|
+
total += plugin.skills.length;
|
|
302
|
+
}
|
|
303
|
+
// Count standalone skills
|
|
304
|
+
total += hierarchical.standaloneSkills.length;
|
|
305
|
+
return total;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Calculate issue counts from validation results
|
|
309
|
+
*/
|
|
310
|
+
function calculateIssueCounts(results) {
|
|
311
|
+
const successCount = results.filter((r) => r.status === 'success').length;
|
|
312
|
+
const warningCount = results.filter((r) => r.status === 'warning').length;
|
|
313
|
+
const errorCount = results.filter((r) => r.status === 'error').length;
|
|
314
|
+
const totalErrors = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'error').length, 0);
|
|
315
|
+
const totalWarnings = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'warning').length, 0);
|
|
316
|
+
const totalInfo = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'info').length, 0);
|
|
317
|
+
return {
|
|
318
|
+
successCount,
|
|
319
|
+
warningCount,
|
|
320
|
+
errorCount,
|
|
321
|
+
totalErrors,
|
|
322
|
+
totalWarnings,
|
|
323
|
+
totalInfo,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Build base summary structure (used by both flat and hierarchical)
|
|
328
|
+
*/
|
|
329
|
+
function buildBaseSummary(results, startTime) {
|
|
330
|
+
const counts = calculateIssueCounts(results);
|
|
331
|
+
const status = calculateOverallStatus(results);
|
|
332
|
+
return {
|
|
333
|
+
status,
|
|
334
|
+
summary: {
|
|
335
|
+
filesScanned: results.length,
|
|
336
|
+
success: counts.successCount,
|
|
337
|
+
warnings: counts.warningCount,
|
|
338
|
+
errors: counts.errorCount,
|
|
339
|
+
},
|
|
340
|
+
issues: {
|
|
341
|
+
errors: counts.totalErrors,
|
|
342
|
+
warnings: counts.totalWarnings,
|
|
343
|
+
info: counts.totalInfo,
|
|
344
|
+
},
|
|
345
|
+
duration: `${Date.now() - startTime}ms`,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Calculate summary for hierarchical output
|
|
350
|
+
*/
|
|
351
|
+
function calculateHierarchicalSummary(results, hierarchical, startTime) {
|
|
352
|
+
const base = buildBaseSummary(results, startTime);
|
|
353
|
+
return {
|
|
354
|
+
...base,
|
|
355
|
+
summary: {
|
|
356
|
+
...base.summary,
|
|
357
|
+
marketplaces: hierarchical.marketplaces.length,
|
|
358
|
+
cachedPlugins: hierarchical.cachedPlugins.length,
|
|
359
|
+
standalonePlugins: hierarchical.standalonePlugins.length,
|
|
360
|
+
standaloneSkills: hierarchical.standaloneSkills.length,
|
|
361
|
+
},
|
|
362
|
+
hierarchical,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Log hierarchical summary to stderr
|
|
367
|
+
*/
|
|
368
|
+
function logHierarchicalSummary(results, hierarchical, logger) {
|
|
369
|
+
const status = calculateOverallStatus(results);
|
|
370
|
+
const skillsWithIssues = countAllSkills(hierarchical);
|
|
371
|
+
const totalSkills = results.length;
|
|
372
|
+
if (status === 'error') {
|
|
373
|
+
const errorCount = results.filter((r) => r.status === 'error').length;
|
|
374
|
+
logger.error(`Audit failed: ${errorCount} skill(s) with errors (${totalSkills} scanned, ${skillsWithIssues} with issues)`);
|
|
375
|
+
process.exit(1);
|
|
376
|
+
}
|
|
377
|
+
if (status === 'warning') {
|
|
378
|
+
const warningCount = results.filter((r) => r.status === 'warning').length;
|
|
379
|
+
logger.info(`Audit passed with warnings: ${warningCount} skill(s) (${totalSkills} scanned, ${skillsWithIssues} with issues)`);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
logger.info(`Audit successful: ${totalSkills} skill(s) passed`);
|
|
383
|
+
}
|
|
384
|
+
process.exit(0);
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,aAAa,GAEd,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AASzE;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC,KAAK;SACF,WAAW,CAAC,4DAA4D,CAAC;SACzE,QAAQ,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,qDAAqD,CAAC;SAChF,MAAM,CAAC,QAAQ,EAAE,kEAAkE,CAAC;SACpF,MAAM,CAAC,WAAW,EAAE,4DAA4D,CAAC;SACjF,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,YAAY,CAAC;SACpB,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCL,CACI,CAAC;IAEJ,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAA8B,EAC9B,OAA4B;IAE5B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,QAAgB,CAAC;QACrB,IAAI,SAAS,GAAY,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAEpD,qBAAqB;QACrB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;YAC3C,+GAA+G;YAC/G,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,KAAK,CAAC,qCAAqC,cAAc,EAAE,CAAC,CAAC;gBACpE,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,QAAQ,GAAG,cAAc,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC,CAAC,wCAAwC;YAC1D,MAAM,CAAC,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAExE,iEAAiE;QACjE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,mEAAmE;YACnE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;YACxF,MAAM,YAAY,GAAG,uBAAuB,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAC/E,eAAe,CAAC,OAAO,CAAC,CAAC;YACzB,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrD,eAAe,CAAC,OAAO,CAAC,CAAC;YACzB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAAgB,EAChB,SAAkB,EAClB,MAAuC;IAEvC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEtC,4CAA4C;IAC5C,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,wDAAwD;IACxD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE5D,IAAI,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,YAAY,cAAc,CAAC,IAAI,QAAQ,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,2DAA2D;IAC3D,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACjD,OAAO,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,oFAAoF;IACpF,MAAM,CAAC,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA2B,EAAE,SAAiB;IACtE,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAClD,OAAO;QACL,GAAG,IAAI;QACP,KAAK,EAAE,OAAO;KACf,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA2B,EAC3B,OAA2E,EAC3E,MAAuC;IAEvC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAE9F,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,qBAAqB,YAAY,iBAAiB,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAChB,OAA2B,EAC3B,UAAkB,EAClB,MAAuC;IAEvC,MAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,sBAAsB,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAEnF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;QAC9F,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,OAA2B,EAC3B,YAAoB,EACpB,MAAuC;IAEvC,MAAM,CAAC,IAAI,CAAC,+BAA+B,YAAY,UAAU,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAEvF,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACjC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QAClG,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,MAAiF,EACjF,KAAgC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,WAAW,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,CAAC,YAAY,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,KAAuB,EACvB,QAAgB,EAChB,MAAuC;IAEvC,2BAA2B;IAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CACjC,QAAgB,EAChB,SAAkB,EAClB,MAAuC;IAEvC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,sDAAsD;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAE7F,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,8EAA8E;IAC9E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAe,EACf,SAAkB,EAClB,MAAuC;IAEvC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,OAA2B;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IACxF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAE5F,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,YAAwD;IAC9E,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,2BAA2B;IAC3B,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACzC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;QAChD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,iCAAiC;IACjC,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACpD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,0BAA0B;IAC1B,KAAK,IAAI,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAE9C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,OAA2B;IACvD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAC5F,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAC5F,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAExF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAmB,EAAE,EAAE,CACtE,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAC7D,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAmB,EAAE,EAAE,CACxE,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,CAC/D,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAmB,EAAE,EAAE,CACpE,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAC5D,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,YAAY;QACZ,UAAU;QACV,WAAW;QACX,aAAa;QACb,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,OAA2B,EAC3B,SAAiB;IAOjB,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE/C,OAAO;QACL,MAAM;QACN,OAAO,EAAE;YACP,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,QAAQ,EAAE,MAAM,CAAC,YAAY;YAC7B,MAAM,EAAE,MAAM,CAAC,UAAU;SAC1B;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,QAAQ,EAAE,MAAM,CAAC,aAAa;YAC9B,IAAI,EAAE,MAAM,CAAC,SAAS;SACvB;QACD,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CACnC,OAA2B,EAC3B,YAAwD,EACxD,SAAiB;IAEjB,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAElD,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE;YACP,GAAG,IAAI,CAAC,OAAO;YACf,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM;YAC9C,aAAa,EAAE,YAAY,CAAC,aAAa,CAAC,MAAM;YAChD,iBAAiB,EAAE,YAAY,CAAC,iBAAiB,CAAC,MAAM;YACxD,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,CAAC,MAAM;SACvD;QACD,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,OAA2B,EAC3B,YAAwD,EACxD,MAAuC;IAEvC,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAEnC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,0BAA0B,WAAW,aAAa,gBAAgB,eAAe,CAAC,CAAC;QAC3H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC5F,MAAM,CAAC,IAAI,CAAC,+BAA+B,YAAY,cAAc,WAAW,aAAa,gBAAgB,eAAe,CAAC,CAAC;IAChI,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,qBAAqB,WAAW,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -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"}
|