@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.
- package/README.md +67 -4
- package/dist/bin.js +17 -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 +19 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +404 -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/mcp/collections.d.ts +48 -0
- package/dist/commands/mcp/collections.d.ts.map +1 -0
- package/dist/commands/mcp/collections.js +130 -0
- package/dist/commands/mcp/collections.js.map +1 -0
- package/dist/commands/mcp/index.d.ts +9 -0
- package/dist/commands/mcp/index.d.ts.map +1 -0
- package/dist/commands/mcp/index.js +80 -0
- package/dist/commands/mcp/index.js.map +1 -0
- package/dist/commands/mcp/list-collections.d.ts +11 -0
- package/dist/commands/mcp/list-collections.d.ts.map +1 -0
- package/dist/commands/mcp/list-collections.js +43 -0
- package/dist/commands/mcp/list-collections.js.map +1 -0
- package/dist/commands/mcp/serve.d.ts +12 -0
- package/dist/commands/mcp/serve.d.ts.map +1 -0
- package/dist/commands/mcp/serve.js +87 -0
- package/dist/commands/mcp/serve.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/docs/mcp.md +317 -0
- package/package.json +14 -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/docs/mcp.md
ADDED
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# MCP Commands
|
|
2
|
+
|
|
3
|
+
Expose VAT agents via Model Context Protocol (MCP) for Claude Desktop and other MCP clients.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The MCP Gateway exposes VAT agents as tools that LLM systems can discover and invoke. This enables:
|
|
8
|
+
|
|
9
|
+
- **Claude Desktop integration** - Use agents through conversational UI
|
|
10
|
+
- **Agent orchestration** - LLMs coordinate multiple agents for complex tasks
|
|
11
|
+
- **Standardized discovery** - Clients can find and understand available tools
|
|
12
|
+
|
|
13
|
+
## Commands
|
|
14
|
+
|
|
15
|
+
### `vat mcp list-collections`
|
|
16
|
+
|
|
17
|
+
List known MCP agent packages.
|
|
18
|
+
|
|
19
|
+
**Usage:**
|
|
20
|
+
```bash
|
|
21
|
+
vat mcp list-collections [options]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Options:**
|
|
25
|
+
- `--debug` - Enable debug logging
|
|
26
|
+
|
|
27
|
+
**Output:**
|
|
28
|
+
Lists all known packages that export MCP agent collections.
|
|
29
|
+
|
|
30
|
+
**Example:**
|
|
31
|
+
```bash
|
|
32
|
+
$ vat mcp list-collections
|
|
33
|
+
|
|
34
|
+
Available MCP agent packages:
|
|
35
|
+
|
|
36
|
+
@vibe-agent-toolkit/vat-example-cat-agents
|
|
37
|
+
Example cat breeding agents (haiku validator, photo analyzer)
|
|
38
|
+
|
|
39
|
+
Usage:
|
|
40
|
+
vat mcp serve <package> # Start MCP server
|
|
41
|
+
vat mcp serve <package> --print-config # Show Claude Desktop config
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### `vat mcp serve`
|
|
45
|
+
|
|
46
|
+
Start an MCP stdio server exposing agents from a package.
|
|
47
|
+
|
|
48
|
+
**Usage:**
|
|
49
|
+
```bash
|
|
50
|
+
vat mcp serve <package> [options]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Arguments:**
|
|
54
|
+
- `<package>` - Package name or file path
|
|
55
|
+
- Package: `@scope/package` (from node_modules)
|
|
56
|
+
- File path: `./path` or `/abs/path` (local development)
|
|
57
|
+
- Collection suffix: `package:collection-name` (if multiple)
|
|
58
|
+
|
|
59
|
+
**Options:**
|
|
60
|
+
- `--debug` - Enable debug logging
|
|
61
|
+
- `--print-config` - Print Claude Desktop configuration and exit
|
|
62
|
+
|
|
63
|
+
**Behavior:**
|
|
64
|
+
- Runs until terminated (Ctrl+C)
|
|
65
|
+
- Writes MCP protocol messages to stdout
|
|
66
|
+
- Writes logs to stderr (does not interfere with protocol)
|
|
67
|
+
|
|
68
|
+
**Example - Production:**
|
|
69
|
+
```bash
|
|
70
|
+
vat mcp serve @vibe-agent-toolkit/vat-example-cat-agents
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Example - Local Development:**
|
|
74
|
+
```bash
|
|
75
|
+
vat mcp serve ./packages/vat-example-cat-agents
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Example - Show Configuration:**
|
|
79
|
+
```bash
|
|
80
|
+
$ vat mcp serve @vibe-agent-toolkit/vat-example-cat-agents --print-config
|
|
81
|
+
|
|
82
|
+
Claude Desktop configuration for '@vibe-agent-toolkit/vat-example-cat-agents':
|
|
83
|
+
|
|
84
|
+
Add this to ~/.claude/config.json:
|
|
85
|
+
|
|
86
|
+
{
|
|
87
|
+
"mcpServers": {
|
|
88
|
+
"vat-example-cat-agents": {
|
|
89
|
+
"command": "vat",
|
|
90
|
+
"args": ["mcp", "serve", "@vibe-agent-toolkit/vat-example-cat-agents"]
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
Then restart Claude Desktop to load the MCP server.
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Claude Desktop Integration
|
|
99
|
+
|
|
100
|
+
### Configuration File
|
|
101
|
+
|
|
102
|
+
MCP servers are configured in:
|
|
103
|
+
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
104
|
+
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
105
|
+
- **Linux:** `~/.config/Claude/claude_desktop_config.json`
|
|
106
|
+
|
|
107
|
+
### Basic Setup
|
|
108
|
+
|
|
109
|
+
1. **Generate configuration:**
|
|
110
|
+
```bash
|
|
111
|
+
vat mcp serve <package> --print-config
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
2. **Add to Claude Desktop config:**
|
|
115
|
+
Copy the generated JSON to your `claude_desktop_config.json`
|
|
116
|
+
|
|
117
|
+
3. **Restart Claude Desktop:**
|
|
118
|
+
Completely quit and reopen the application
|
|
119
|
+
|
|
120
|
+
4. **Verify connection:**
|
|
121
|
+
Check Claude Desktop developer console (View → Developer → Toggle Developer Tools)
|
|
122
|
+
|
|
123
|
+
### Development Setup
|
|
124
|
+
|
|
125
|
+
For local development with unreleased code:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"mcpServers": {
|
|
130
|
+
"my-agents-dev": {
|
|
131
|
+
"command": "node",
|
|
132
|
+
"args": [
|
|
133
|
+
"/path/to/vibe-agent-toolkit/packages/cli/dist/bin/vat",
|
|
134
|
+
"mcp",
|
|
135
|
+
"serve",
|
|
136
|
+
"@my-scope/my-agents"
|
|
137
|
+
],
|
|
138
|
+
"env": {
|
|
139
|
+
"VAT_ROOT_DIR": "/path/to/vibe-agent-toolkit"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
The `VAT_ROOT_DIR` environment variable tells the wrapper to use local development code.
|
|
147
|
+
|
|
148
|
+
## Package Structure
|
|
149
|
+
|
|
150
|
+
MCP agent packages must export collections via the `/mcp-collections` entrypoint.
|
|
151
|
+
|
|
152
|
+
### Example: `src/mcp-collections.ts`
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
import type { Agent, OneShotAgentOutput } from '@vibe-agent-toolkit/agent-schema';
|
|
156
|
+
import { createSuccess } from '@vibe-agent-toolkit/agent-schema';
|
|
157
|
+
|
|
158
|
+
export interface MCPAgentRegistration {
|
|
159
|
+
name: string;
|
|
160
|
+
agent: Agent<unknown, OneShotAgentOutput<unknown, string>>;
|
|
161
|
+
description: string;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export interface MCPCollection {
|
|
165
|
+
name: string;
|
|
166
|
+
description: string;
|
|
167
|
+
agents: MCPAgentRegistration[];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Wrap stateless agents for MCP
|
|
171
|
+
function wrapStatelessAgent<TInput, TOutput>(
|
|
172
|
+
agent: { name: string; manifest: unknown; execute: (input: TInput) => TOutput | Promise<TOutput> }
|
|
173
|
+
): Agent<TInput, OneShotAgentOutput<TOutput, string>> {
|
|
174
|
+
return {
|
|
175
|
+
name: agent.name,
|
|
176
|
+
manifest: agent.manifest as any,
|
|
177
|
+
execute: async (input: TInput) => {
|
|
178
|
+
const data = await Promise.resolve(agent.execute(input));
|
|
179
|
+
return {
|
|
180
|
+
result: createSuccess(data),
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export const myAgents: MCPCollection = {
|
|
187
|
+
name: 'my-agents',
|
|
188
|
+
description: 'My agent collection',
|
|
189
|
+
agents: [
|
|
190
|
+
{
|
|
191
|
+
name: 'my-agent',
|
|
192
|
+
agent: wrapStatelessAgent(myAgent),
|
|
193
|
+
description: 'Agent description',
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export const collections: Record<string, MCPCollection> = {
|
|
199
|
+
'my-agents': myAgents,
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export const defaultCollection = myAgents;
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Example: `package.json`
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"name": "@my-scope/my-agents",
|
|
210
|
+
"exports": {
|
|
211
|
+
".": {
|
|
212
|
+
"types": "./dist/index.d.ts",
|
|
213
|
+
"default": "./dist/index.js"
|
|
214
|
+
},
|
|
215
|
+
"./mcp-collections": {
|
|
216
|
+
"types": "./dist/mcp-collections.d.ts",
|
|
217
|
+
"default": "./dist/mcp-collections.js"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Troubleshooting
|
|
224
|
+
|
|
225
|
+
### Server Won't Start
|
|
226
|
+
|
|
227
|
+
**Check logs:**
|
|
228
|
+
- **macOS:** `~/Library/Logs/Claude/mcp-server-<name>.log`
|
|
229
|
+
- **Windows:** `%APPDATA%\Claude\logs\mcp-server-<name>.log`
|
|
230
|
+
- **Linux:** `~/.config/Claude/logs/mcp-server-<name>.log`
|
|
231
|
+
|
|
232
|
+
**Common issues:**
|
|
233
|
+
1. **Package not installed:** Run `npm install <package>` or `bun install <package>`
|
|
234
|
+
2. **Package not built:** Run `bun run build` in development workspace
|
|
235
|
+
3. **Wrong path:** Verify command path in config matches your setup
|
|
236
|
+
4. **Missing entrypoint:** Ensure package exports `/mcp-collections`
|
|
237
|
+
|
|
238
|
+
### Tools Not Appearing
|
|
239
|
+
|
|
240
|
+
**Verify server is running:**
|
|
241
|
+
1. Open Claude Desktop developer console
|
|
242
|
+
2. Look for MCP connection logs
|
|
243
|
+
3. Check for error messages
|
|
244
|
+
|
|
245
|
+
**Test server manually:**
|
|
246
|
+
```bash
|
|
247
|
+
# Send initialize request
|
|
248
|
+
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | vat mcp serve <package>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Should receive JSON-RPC response on stdout.
|
|
252
|
+
|
|
253
|
+
### Development Mode Not Working
|
|
254
|
+
|
|
255
|
+
**Ensure VAT_ROOT_DIR is set:**
|
|
256
|
+
```bash
|
|
257
|
+
# Test in terminal first
|
|
258
|
+
VAT_ROOT_DIR=/path/to/workspace vat --version
|
|
259
|
+
# Should show "-dev" suffix
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Check config includes env:**
|
|
263
|
+
```json
|
|
264
|
+
{
|
|
265
|
+
"env": {
|
|
266
|
+
"VAT_ROOT_DIR": "/absolute/path/to/workspace"
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Architecture
|
|
272
|
+
|
|
273
|
+
### Stdio Transport
|
|
274
|
+
|
|
275
|
+
The MCP server uses stdio transport for Claude Desktop:
|
|
276
|
+
- **stdin** - Receives JSON-RPC requests
|
|
277
|
+
- **stdout** - Sends JSON-RPC responses (protocol messages ONLY)
|
|
278
|
+
- **stderr** - Logs, debug output, errors
|
|
279
|
+
|
|
280
|
+
### Process Lifetime
|
|
281
|
+
|
|
282
|
+
The server runs until stdin closes:
|
|
283
|
+
1. Claude Desktop spawns the process
|
|
284
|
+
2. Server waits for JSON-RPC messages on stdin
|
|
285
|
+
3. Server sends responses on stdout
|
|
286
|
+
4. When stdin closes, server terminates
|
|
287
|
+
|
|
288
|
+
### Protocol Compliance
|
|
289
|
+
|
|
290
|
+
All implementations must:
|
|
291
|
+
- Write ONLY JSON-RPC to stdout
|
|
292
|
+
- Write all logs to stderr
|
|
293
|
+
- Handle stdio cleanup properly
|
|
294
|
+
- Support graceful shutdown on SIGINT
|
|
295
|
+
|
|
296
|
+
## Current Implementation
|
|
297
|
+
|
|
298
|
+
**Supported:**
|
|
299
|
+
- ✅ Stateless agents (pure function tools, one-shot LLM analyzers)
|
|
300
|
+
- ✅ Package-scoped collections
|
|
301
|
+
- ✅ Claude Desktop integration
|
|
302
|
+
- ✅ Local development with VAT_ROOT_DIR
|
|
303
|
+
|
|
304
|
+
**Not Yet Supported:**
|
|
305
|
+
- ❌ Stateful agents (conversational assistants)
|
|
306
|
+
- ❌ Global discovery registry
|
|
307
|
+
- ❌ HTTP transport
|
|
308
|
+
- ❌ WebSocket transport
|
|
309
|
+
- ❌ Multi-session management
|
|
310
|
+
|
|
311
|
+
See [MCP Gateway README](../../gateway-mcp/README.md) for planned features.
|
|
312
|
+
|
|
313
|
+
## See Also
|
|
314
|
+
|
|
315
|
+
- [MCP Gateway README](../../gateway-mcp/README.md)
|
|
316
|
+
- [Example Cat Agents](../../vat-example-cat-agents/README.md)
|
|
317
|
+
- [VAT Architecture](../../../docs/architecture/README.md)
|
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.2-rc.1",
|
|
4
4
|
"description": "Command-line interface for vibe-agent-toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -40,21 +40,27 @@
|
|
|
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/
|
|
45
|
-
"@vibe-agent-toolkit/
|
|
46
|
-
"@vibe-agent-toolkit/
|
|
47
|
-
"@vibe-agent-toolkit/
|
|
48
|
-
"@vibe-agent-toolkit/
|
|
49
|
-
"@vibe-agent-toolkit/
|
|
43
|
+
"@vibe-agent-toolkit/agent-config": "0.1.2-rc.1",
|
|
44
|
+
"@vibe-agent-toolkit/agent-schema": "0.1.2-rc.1",
|
|
45
|
+
"@vibe-agent-toolkit/discovery": "0.1.2-rc.1",
|
|
46
|
+
"@vibe-agent-toolkit/gateway-mcp": "0.1.2-rc.1",
|
|
47
|
+
"@vibe-agent-toolkit/rag": "0.1.2-rc.1",
|
|
48
|
+
"@vibe-agent-toolkit/rag-lancedb": "0.1.2-rc.1",
|
|
49
|
+
"@vibe-agent-toolkit/resources": "0.1.2-rc.1",
|
|
50
|
+
"@vibe-agent-toolkit/runtime-claude-skills": "0.1.2-rc.1",
|
|
51
|
+
"@vibe-agent-toolkit/utils": "0.1.2-rc.1",
|
|
52
|
+
"@vibe-agent-toolkit/vat-example-cat-agents": "0.1.2-rc.1",
|
|
50
53
|
"commander": "^12.1.0",
|
|
51
54
|
"js-yaml": "^4.1.0",
|
|
55
|
+
"semver": "^7.7.3",
|
|
52
56
|
"zod": "^3.24.1"
|
|
53
57
|
},
|
|
54
58
|
"devDependencies": {
|
|
55
59
|
"@types/js-yaml": "^4.0.9",
|
|
56
60
|
"@types/node": "^22.10.5",
|
|
61
|
+
"@types/semver": "^7.7.1",
|
|
57
62
|
"rimraf": "^6.0.1",
|
|
63
|
+
"tar": "^7.5.2",
|
|
58
64
|
"typescript": "^5.7.3",
|
|
59
65
|
"vitest": "^2.1.8"
|
|
60
66
|
},
|
|
@@ -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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"}
|