@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
package/docs/index.md
CHANGED
|
@@ -79,6 +79,38 @@ vat resources scan docs/ # Scan specific directory
|
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
|
82
|
+
### `doctor`
|
|
83
|
+
|
|
84
|
+
Diagnose vat setup and environment health
|
|
85
|
+
|
|
86
|
+
**What it does:**
|
|
87
|
+
|
|
88
|
+
- Checks Node.js version (>=20 required)
|
|
89
|
+
- Checks Git installation and repository
|
|
90
|
+
- Validates configuration file exists and is valid
|
|
91
|
+
- Checks vat version and available updates
|
|
92
|
+
- Verifies CLI build status (in VAT source tree)
|
|
93
|
+
|
|
94
|
+
**When to use:** Before starting development, after updates, or debugging issues
|
|
95
|
+
|
|
96
|
+
**Exit codes:**
|
|
97
|
+
|
|
98
|
+
- `0` - All checks passed
|
|
99
|
+
- `1` - One or more checks failed
|
|
100
|
+
|
|
101
|
+
**Creates/modifies:** None (read-only diagnostics)
|
|
102
|
+
|
|
103
|
+
**Examples:**
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
vat doctor # Run diagnostic checks
|
|
107
|
+
vat doctor --verbose # Show all checks (including passing)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**More details:** `vat doctor --help` or see `packages/cli/docs/doctor.md`
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
82
114
|
### `agent build`
|
|
83
115
|
|
|
84
116
|
Build agent for deployment to target runtime
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Command-line interface for vibe-agent-toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -40,21 +40,24 @@
|
|
|
40
40
|
"license": "MIT",
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
43
|
-
"@vibe-agent-toolkit/agent-config": "0.1.
|
|
44
|
-
"@vibe-agent-toolkit/discovery": "0.1.
|
|
45
|
-
"@vibe-agent-toolkit/rag": "0.1.
|
|
46
|
-
"@vibe-agent-toolkit/rag-lancedb": "0.1.
|
|
47
|
-
"@vibe-agent-toolkit/resources": "0.1.
|
|
48
|
-
"@vibe-agent-toolkit/runtime-claude-skills": "0.1.
|
|
49
|
-
"@vibe-agent-toolkit/utils": "0.1.
|
|
43
|
+
"@vibe-agent-toolkit/agent-config": "0.1.1",
|
|
44
|
+
"@vibe-agent-toolkit/discovery": "0.1.1",
|
|
45
|
+
"@vibe-agent-toolkit/rag": "0.1.1",
|
|
46
|
+
"@vibe-agent-toolkit/rag-lancedb": "0.1.1",
|
|
47
|
+
"@vibe-agent-toolkit/resources": "0.1.1",
|
|
48
|
+
"@vibe-agent-toolkit/runtime-claude-skills": "0.1.1",
|
|
49
|
+
"@vibe-agent-toolkit/utils": "0.1.1",
|
|
50
50
|
"commander": "^12.1.0",
|
|
51
51
|
"js-yaml": "^4.1.0",
|
|
52
|
+
"semver": "^7.7.3",
|
|
52
53
|
"zod": "^3.24.1"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@types/js-yaml": "^4.0.9",
|
|
56
57
|
"@types/node": "^22.10.5",
|
|
58
|
+
"@types/semver": "^7.7.1",
|
|
57
59
|
"rimraf": "^6.0.1",
|
|
60
|
+
"tar": "^7.5.2",
|
|
58
61
|
"typescript": "^5.7.3",
|
|
59
62
|
"vitest": "^2.1.8"
|
|
60
63
|
},
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent audit command - audits Claude Skills for quality and compatibility
|
|
3
|
-
*/
|
|
4
|
-
export interface AuditCommandOptions {
|
|
5
|
-
debug?: boolean;
|
|
6
|
-
recursive?: boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare function auditCommand(targetPath: string | undefined, options: AuditCommandOptions): Promise<void>;
|
|
9
|
-
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/audit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent audit command - audits Claude Skills for quality and compatibility
|
|
3
|
-
*/
|
|
4
|
-
import * as path from 'node:path';
|
|
5
|
-
import { detectFormat } from '@vibe-agent-toolkit/discovery';
|
|
6
|
-
import { validateSkill } from '@vibe-agent-toolkit/runtime-claude-skills';
|
|
7
|
-
import { handleCommandError } from '../../utils/command-error.js';
|
|
8
|
-
import { createLogger } from '../../utils/logger.js';
|
|
9
|
-
import { writeYamlOutput } from '../../utils/output.js';
|
|
10
|
-
export async function auditCommand(targetPath, options) {
|
|
11
|
-
const logger = createLogger(options.debug ? { debug: true } : {});
|
|
12
|
-
const startTime = Date.now();
|
|
13
|
-
try {
|
|
14
|
-
const scanPath = targetPath ? path.resolve(targetPath) : process.cwd();
|
|
15
|
-
logger.debug(`Auditing Claude Skills at: ${scanPath}`);
|
|
16
|
-
// Get validation results
|
|
17
|
-
const results = await getValidationResults(scanPath, options.recursive ?? false, logger);
|
|
18
|
-
// Calculate and output summary
|
|
19
|
-
const summary = calculateSummary(results, startTime);
|
|
20
|
-
writeYamlOutput(summary);
|
|
21
|
-
// Log human-readable output and exit
|
|
22
|
-
handleAuditResults(results, summary, logger);
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
handleCommandError(error, logger, startTime, 'AgentAudit');
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
async function getValidationResults(scanPath, recursive, logger) {
|
|
29
|
-
const format = detectFormat(scanPath);
|
|
30
|
-
if (format === 'claude-skill') {
|
|
31
|
-
logger.debug('Detected single Claude Skill');
|
|
32
|
-
const result = await validateSkill({ skillPath: scanPath });
|
|
33
|
-
return [result];
|
|
34
|
-
}
|
|
35
|
-
if (format === 'vat-agent') {
|
|
36
|
-
const skillPath = path.join(scanPath, 'SKILL.md');
|
|
37
|
-
logger.debug('Detected VAT agent, validating SKILL.md');
|
|
38
|
-
const result = await validateSkill({ skillPath, isVATGenerated: true });
|
|
39
|
-
return [result];
|
|
40
|
-
}
|
|
41
|
-
logger.debug('Scanning directory for Claude Skills');
|
|
42
|
-
return scanDirectory(scanPath, recursive, logger);
|
|
43
|
-
}
|
|
44
|
-
function calculateSummary(results, startTime) {
|
|
45
|
-
const successCount = results.filter((r) => r.status === 'success').length;
|
|
46
|
-
const warningCount = results.filter((r) => r.status === 'warning').length;
|
|
47
|
-
const errorCount = results.filter((r) => r.status === 'error').length;
|
|
48
|
-
const totalErrors = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'error').length, 0);
|
|
49
|
-
const totalWarnings = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'warning').length, 0);
|
|
50
|
-
const totalInfo = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'info').length, 0);
|
|
51
|
-
let status;
|
|
52
|
-
if (errorCount > 0) {
|
|
53
|
-
status = 'error';
|
|
54
|
-
}
|
|
55
|
-
else if (warningCount > 0) {
|
|
56
|
-
status = 'warning';
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
status = 'success';
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
status,
|
|
63
|
-
summary: {
|
|
64
|
-
filesScanned: results.length,
|
|
65
|
-
success: successCount,
|
|
66
|
-
warnings: warningCount,
|
|
67
|
-
errors: errorCount,
|
|
68
|
-
},
|
|
69
|
-
issues: {
|
|
70
|
-
errors: totalErrors,
|
|
71
|
-
warnings: totalWarnings,
|
|
72
|
-
info: totalInfo,
|
|
73
|
-
},
|
|
74
|
-
files: results,
|
|
75
|
-
duration: `${Date.now() - startTime}ms`,
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
function handleAuditResults(results, summary, logger) {
|
|
79
|
-
const { errors: errorCount, warnings: warningCount, success: successCount } = summary.summary;
|
|
80
|
-
if (errorCount > 0) {
|
|
81
|
-
logErrors(results, errorCount, logger);
|
|
82
|
-
process.exit(1);
|
|
83
|
-
}
|
|
84
|
-
if (warningCount > 0) {
|
|
85
|
-
logWarnings(results, warningCount, logger);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
logger.info(`Audit successful: ${successCount} file(s) passed`);
|
|
89
|
-
}
|
|
90
|
-
process.exit(0);
|
|
91
|
-
}
|
|
92
|
-
function logErrors(results, errorCount, logger) {
|
|
93
|
-
logger.error(`Audit failed: ${errorCount} file(s) with errors`);
|
|
94
|
-
const errorResults = results.filter((r) => r.status === 'error');
|
|
95
|
-
for (const result of errorResults) {
|
|
96
|
-
logger.error(`\n${result.path}:`);
|
|
97
|
-
const errorIssues = result.issues.filter((i) => i.severity === 'error');
|
|
98
|
-
logIssues(errorIssues, logger.error.bind(logger));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
function logWarnings(results, warningCount, logger) {
|
|
102
|
-
logger.info(`Audit passed with warnings: ${warningCount} file(s)`);
|
|
103
|
-
const warningResults = results.filter((r) => r.status === 'warning');
|
|
104
|
-
for (const result of warningResults) {
|
|
105
|
-
logger.info(`\n${result.path}:`);
|
|
106
|
-
const warningIssues = result.issues.filter((i) => i.severity === 'warning');
|
|
107
|
-
logIssues(warningIssues, logger.info.bind(logger));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
function logIssues(issues, logFn) {
|
|
111
|
-
for (const issue of issues) {
|
|
112
|
-
logFn(` [${issue.code}] ${issue.message}`);
|
|
113
|
-
if (issue.location) {
|
|
114
|
-
logFn(` at: ${issue.location}`);
|
|
115
|
-
}
|
|
116
|
-
if (issue.fix) {
|
|
117
|
-
logFn(` fix: ${issue.fix}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
async function scanDirectory(dirPath, recursive, logger) {
|
|
122
|
-
const fs = await import('node:fs/promises');
|
|
123
|
-
const results = [];
|
|
124
|
-
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
125
|
-
for (const entry of entries) {
|
|
126
|
-
const fullPath = path.join(dirPath, entry.name);
|
|
127
|
-
if (entry.isFile() && entry.name === 'SKILL.md') {
|
|
128
|
-
logger.debug(`Validating: ${fullPath}`);
|
|
129
|
-
const result = await validateSkill({ skillPath: fullPath });
|
|
130
|
-
results.push(result);
|
|
131
|
-
}
|
|
132
|
-
else if (entry.isDirectory() && recursive) {
|
|
133
|
-
const subResults = await scanDirectory(fullPath, recursive, logger);
|
|
134
|
-
results.push(...subResults);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return results;
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/commands/agent/audit.ts"],"names":[],"mappings":"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"}
|