@vibe-agent-toolkit/cli 0.1.41-rc.5 → 0.1.41-rc.7
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 +4 -3
- package/dist/bin/vat +1 -1
- package/dist/bin/vat.js +1 -1
- package/dist/bin/vat.js.map +1 -1
- package/dist/bin.js +2 -4
- package/dist/bin.js.map +1 -1
- package/dist/commands/agent/help.d.ts.map +1 -1
- package/dist/commands/agent/help.js +2 -4
- package/dist/commands/agent/help.js.map +1 -1
- package/dist/commands/audit/hierarchical-output.d.ts +6 -2
- package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
- package/dist/commands/audit/hierarchical-output.js +93 -50
- package/dist/commands/audit/hierarchical-output.js.map +1 -1
- package/dist/commands/audit-settings.d.ts +35 -0
- package/dist/commands/audit-settings.d.ts.map +1 -1
- package/dist/commands/audit-settings.js +121 -51
- package/dist/commands/audit-settings.js.map +1 -1
- package/dist/commands/audit.d.ts +63 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +329 -187
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +47 -18
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/claude/marketplace/license-utils.d.ts +39 -2
- package/dist/commands/claude/marketplace/license-utils.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/license-utils.js +114 -68
- package/dist/commands/claude/marketplace/license-utils.js.map +1 -1
- package/dist/commands/claude/marketplace/publish.js +5 -4
- package/dist/commands/claude/marketplace/publish.js.map +1 -1
- package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/validate.js +13 -19
- package/dist/commands/claude/marketplace/validate.js.map +1 -1
- package/dist/commands/claude/org/skills.d.ts +21 -0
- package/dist/commands/claude/org/skills.d.ts.map +1 -1
- package/dist/commands/claude/org/skills.js +107 -30
- package/dist/commands/claude/org/skills.js.map +1 -1
- package/dist/commands/claude/plugin/build.d.ts +94 -1
- package/dist/commands/claude/plugin/build.d.ts.map +1 -1
- package/dist/commands/claude/plugin/build.js +307 -106
- package/dist/commands/claude/plugin/build.js.map +1 -1
- package/dist/commands/claude/plugin/install.d.ts.map +1 -1
- package/dist/commands/claude/plugin/install.js +7 -2
- package/dist/commands/claude/plugin/install.js.map +1 -1
- package/dist/commands/claude/plugin/marketplace-json.d.ts +36 -0
- package/dist/commands/claude/plugin/marketplace-json.d.ts.map +1 -0
- package/dist/commands/claude/plugin/marketplace-json.js +34 -0
- package/dist/commands/claude/plugin/marketplace-json.js.map +1 -0
- package/dist/commands/claude/plugin/plugin-json-merge.d.ts +30 -1
- package/dist/commands/claude/plugin/plugin-json-merge.d.ts.map +1 -1
- package/dist/commands/claude/plugin/plugin-json-merge.js +92 -14
- package/dist/commands/claude/plugin/plugin-json-merge.js.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.d.ts +10 -3
- package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.js +0 -1
- package/dist/commands/claude/plugin/tree-copy.js.map +1 -1
- package/dist/commands/claude/plugin/uninstall.d.ts.map +1 -1
- package/dist/commands/claude/plugin/uninstall.js +10 -2
- package/dist/commands/claude/plugin/uninstall.js.map +1 -1
- package/dist/commands/corpus/runner.d.ts.map +1 -1
- package/dist/commands/corpus/runner.js +15 -26
- package/dist/commands/corpus/runner.js.map +1 -1
- package/dist/commands/doctor.d.ts +57 -8
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +142 -67
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/phase-utils.d.ts +62 -2
- package/dist/commands/phase-utils.d.ts.map +1 -1
- package/dist/commands/phase-utils.js +74 -2
- package/dist/commands/phase-utils.js.map +1 -1
- package/dist/commands/rag/help.d.ts.map +1 -1
- package/dist/commands/rag/help.js +2 -4
- package/dist/commands/rag/help.js.map +1 -1
- package/dist/commands/resources/help.d.ts.map +1 -1
- package/dist/commands/resources/help.js +2 -4
- package/dist/commands/resources/help.js.map +1 -1
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +13 -6
- package/dist/commands/resources/index.js.map +1 -1
- package/dist/commands/resources/validate.d.ts +19 -0
- package/dist/commands/resources/validate.d.ts.map +1 -1
- package/dist/commands/resources/validate.js +89 -24
- package/dist/commands/resources/validate.js.map +1 -1
- package/dist/commands/skill/review.d.ts.map +1 -1
- package/dist/commands/skill/review.js +33 -20
- package/dist/commands/skill/review.js.map +1 -1
- package/dist/commands/skill/test/configure.d.ts.map +1 -1
- package/dist/commands/skill/test/configure.js +1 -1
- package/dist/commands/skill/test/configure.js.map +1 -1
- package/dist/commands/skill/test/run.d.ts +29 -2
- package/dist/commands/skill/test/run.d.ts.map +1 -1
- package/dist/commands/skill/test/run.js +67 -19
- package/dist/commands/skill/test/run.js.map +1 -1
- package/dist/commands/skills/build.d.ts +51 -0
- package/dist/commands/skills/build.d.ts.map +1 -1
- package/dist/commands/skills/build.js +94 -86
- package/dist/commands/skills/build.js.map +1 -1
- package/dist/commands/skills/install.d.ts.map +1 -1
- package/dist/commands/skills/install.js +79 -25
- package/dist/commands/skills/install.js.map +1 -1
- package/dist/commands/skills/list.d.ts.map +1 -1
- package/dist/commands/skills/list.js +9 -5
- package/dist/commands/skills/list.js.map +1 -1
- package/dist/commands/skills/package.d.ts +2 -0
- package/dist/commands/skills/package.d.ts.map +1 -1
- package/dist/commands/skills/package.js +61 -42
- package/dist/commands/skills/package.js.map +1 -1
- package/dist/commands/skills/skill-discovery.d.ts +7 -0
- package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
- package/dist/commands/skills/skill-discovery.js +14 -4
- package/dist/commands/skills/skill-discovery.js.map +1 -1
- package/dist/commands/skills/validate.d.ts +38 -0
- package/dist/commands/skills/validate.d.ts.map +1 -1
- package/dist/commands/skills/validate.js +125 -70
- package/dist/commands/skills/validate.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +11 -5
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +76 -28
- package/dist/commands/verify.js.map +1 -1
- package/dist/skill-resolution/classify.d.ts +7 -2
- package/dist/skill-resolution/classify.d.ts.map +1 -1
- package/dist/skill-resolution/classify.js +7 -2
- package/dist/skill-resolution/classify.js.map +1 -1
- package/dist/skill-resolution/resolve-skill-reference.d.ts +10 -8
- package/dist/skill-resolution/resolve-skill-reference.d.ts.map +1 -1
- package/dist/skill-resolution/resolve-skill-reference.js +62 -23
- package/dist/skill-resolution/resolve-skill-reference.js.map +1 -1
- package/dist/skill-resolution/types.d.ts +3 -2
- package/dist/skill-resolution/types.d.ts.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +0 -2
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/help-loader.d.ts +16 -0
- package/dist/utils/help-loader.d.ts.map +1 -1
- package/dist/utils/help-loader.js +31 -1
- package/dist/utils/help-loader.js.map +1 -1
- package/dist/utils/issue-anchor.d.ts +26 -0
- package/dist/utils/issue-anchor.d.ts.map +1 -0
- package/dist/utils/issue-anchor.js +39 -0
- package/dist/utils/issue-anchor.js.map +1 -0
- package/dist/utils/issue-rendering.d.ts +61 -0
- package/dist/utils/issue-rendering.d.ts.map +1 -0
- package/dist/utils/issue-rendering.js +135 -0
- package/dist/utils/issue-rendering.js.map +1 -0
- package/dist/utils/output.d.ts +26 -4
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +27 -6
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/project-root-policy.d.ts +2 -2
- package/dist/utils/project-root-policy.js +2 -2
- package/dist/utils/skill-packaging-config.d.ts +15 -6
- package/dist/utils/skill-packaging-config.d.ts.map +1 -1
- package/dist/utils/skill-packaging-config.js +23 -5
- package/dist/utils/skill-packaging-config.js.map +1 -1
- package/dist/utils/validate-help-files.d.ts +3 -2
- package/dist/utils/validate-help-files.d.ts.map +1 -1
- package/dist/utils/validate-help-files.js +48 -5
- package/dist/utils/validate-help-files.js.map +1 -1
- package/dist/utils/verdict-helpers.d.ts +10 -2
- package/dist/utils/verdict-helpers.d.ts.map +1 -1
- package/dist/utils/verdict-helpers.js +13 -3
- package/dist/utils/verdict-helpers.js.map +1 -1
- package/docs/audit.md +40 -14
- package/docs/doctor.md +46 -10
- package/docs/index.md +1 -1
- package/docs/resources.md +24 -8
- package/docs/skill-test.md +47 -3
- package/docs/skills.md +28 -6
- package/package.json +12 -12
package/docs/audit.md
CHANGED
|
@@ -183,9 +183,9 @@ detection strategy doc, workstream B).
|
|
|
183
183
|
status: success
|
|
184
184
|
summary:
|
|
185
185
|
filesScanned: 42
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
filesPassed: 40
|
|
187
|
+
filesWithWarnings: 2
|
|
188
|
+
filesWithErrors: 0
|
|
189
189
|
marketplaces: 2
|
|
190
190
|
standalonePlugins: 3
|
|
191
191
|
standaloneSkills: 5
|
|
@@ -313,31 +313,57 @@ Warnings indicate potential issues but don't prevent usage:
|
|
|
313
313
|
Structured YAML report for programmatic parsing:
|
|
314
314
|
|
|
315
315
|
```yaml
|
|
316
|
+
root: /abs/path/to/scan/root # The ONE absolute path in the document
|
|
316
317
|
status: success | warning | error
|
|
317
318
|
summary:
|
|
318
319
|
filesScanned: number
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
errors: number
|
|
324
|
-
warnings: number
|
|
325
|
-
info: number
|
|
320
|
+
filesPassed: number # Files with no ACTIONABLE issues (info-only counts as passed)
|
|
321
|
+
filesWithWarnings: number # Files whose worst actionable severity is warning
|
|
322
|
+
filesWithErrors: number # Files carrying at least one error
|
|
323
|
+
issueCounts: # FINDINGS, not files — same field name and meaning
|
|
324
|
+
errors: number # as the `issueCounts` on each entry below
|
|
325
|
+
warnings: number
|
|
326
|
+
info: number
|
|
326
327
|
duration: "123ms"
|
|
327
328
|
files:
|
|
328
|
-
- path: /
|
|
329
|
+
- path: plugins/my-plugin # relative to `root`
|
|
329
330
|
status: success | warning | error
|
|
330
331
|
type: plugin | marketplace | registry | skill
|
|
331
|
-
issues:
|
|
332
|
+
issues:
|
|
333
|
+
- location: plugins/my-plugin/.claude-plugin/plugin.json # relative to `root`
|
|
332
334
|
```
|
|
333
335
|
|
|
336
|
+
#### One stated root, and everything relative to it
|
|
337
|
+
|
|
338
|
+
`root` is the invocation scan root and the only absolute path a report contains.
|
|
339
|
+
Every `path` and every issue `location` beneath it is forward-slashed and
|
|
340
|
+
relative to that root, so:
|
|
341
|
+
|
|
342
|
+
- `join(root, path)` and `join(root, location)` name real files — a consumer
|
|
343
|
+
never has to guess, or reimplement, the base a value was written against.
|
|
344
|
+
- A `location` identifies a file uniquely across the whole document, even when a
|
|
345
|
+
run spans several projects that share internal layout (two `plugins/plugin-a`
|
|
346
|
+
directories under different parents cannot collapse to one string).
|
|
347
|
+
- Nothing but `root` can leak the developer's or CI runner's home directory.
|
|
348
|
+
|
|
349
|
+
The scan root is an ANCHOR, not a validation-policy boundary. Per-skill
|
|
350
|
+
packaging rules still come from each skill's nearest-ancestor
|
|
351
|
+
`vibe-agent-toolkit.config.yaml` (configs do not compose); that discovery has no
|
|
352
|
+
say in how a path is spelled.
|
|
353
|
+
|
|
354
|
+
`--user` scans three sibling directories (`plugins/`, `skills/`,
|
|
355
|
+
`marketplaces/`), so its `root` is their shared Claude config dir
|
|
356
|
+
(`$CLAUDE_CONFIG_DIR`, else `~/.claude`). A URL audit omits `root`: the clone
|
|
357
|
+
lives in a random tempdir that nothing downstream can resolve, so the provenance
|
|
358
|
+
header states the base instead and paths are relative to the cloned repo.
|
|
359
|
+
|
|
334
360
|
### Standard Error (stderr)
|
|
335
361
|
|
|
336
|
-
Human-readable error messages and logs:
|
|
362
|
+
Human-readable error messages and logs. Paths are root-relative here too:
|
|
337
363
|
|
|
338
364
|
```
|
|
339
365
|
ERROR: Audit failed: 2 file(s) with errors
|
|
340
|
-
ERROR: /
|
|
366
|
+
ERROR: skills/my-skill/SKILL.md:
|
|
341
367
|
ERROR: [SKILL_MISSING_NAME] name field is required in frontmatter
|
|
342
368
|
ERROR: at: line 1
|
|
343
369
|
ERROR: fix: Add 'name: skill-name' to frontmatter
|
package/docs/doctor.md
CHANGED
|
@@ -21,13 +21,24 @@ providing actionable suggestions for any problems found.
|
|
|
21
21
|
7. CLI build status (when running from VAT source tree)
|
|
22
22
|
|
|
23
23
|
**Options:**
|
|
24
|
-
- `--verbose` - Show all checks (including passing ones)
|
|
24
|
+
- `--verbose` - Show all checks (including passing and skipped ones)
|
|
25
|
+
|
|
26
|
+
**Check outcomes:**
|
|
27
|
+
|
|
28
|
+
| Icon | Outcome | Meaning |
|
|
29
|
+
|------|---------|---------|
|
|
30
|
+
| ✅ | `pass` | The check ran and the thing is fine |
|
|
31
|
+
| ❌ | `fail` | The check ran and the thing is wrong — the only outcome that affects the exit code |
|
|
32
|
+
| ❓ | `undetermined` | The check could not reach an answer (registry unreachable, file unreadable). **Nothing was verified** — this is not a pass |
|
|
33
|
+
| ⏭️ | `skipped` | The check does not apply here (e.g. a VAT-source-tree-only check outside the source tree) |
|
|
25
34
|
|
|
26
35
|
**Exit Codes:**
|
|
27
|
-
- `0` -
|
|
36
|
+
- `0` - No check failed (an undetermined check is reported in the output, not fatal)
|
|
28
37
|
- `1` - One or more checks failed
|
|
29
38
|
|
|
30
|
-
**Output:** Human-friendly formatted text with emojis
|
|
39
|
+
**Output:** Human-friendly formatted text with emojis. The summary always prints the
|
|
40
|
+
full outcome distribution and, when the concise view hides checks, how many it hid —
|
|
41
|
+
so the counts can never contradict the list above them.
|
|
31
42
|
|
|
32
43
|
## Usage Examples
|
|
33
44
|
|
|
@@ -39,17 +50,34 @@ Check all diagnostic items and show only failures:
|
|
|
39
50
|
vat doctor
|
|
40
51
|
```
|
|
41
52
|
|
|
42
|
-
Output when all checks pass:
|
|
53
|
+
Output when all checks pass (the concise view prints no check blocks, and says so):
|
|
43
54
|
```
|
|
44
55
|
🩺 vat doctor
|
|
45
56
|
|
|
46
57
|
Running diagnostic checks...
|
|
47
58
|
|
|
48
|
-
📊 Results: 7
|
|
59
|
+
📊 Results: 7 checks — 7 passed, 0 failed, 0 undetermined, 0 skipped
|
|
60
|
+
7 not shown (nothing to report) — re-run with --verbose to see every check.
|
|
49
61
|
|
|
50
62
|
✨ All checks passed! Your vat setup looks healthy.
|
|
51
63
|
```
|
|
52
64
|
|
|
65
|
+
Output when a check could not be determined (here: the npm registry was unreachable):
|
|
66
|
+
```
|
|
67
|
+
🩺 vat doctor
|
|
68
|
+
|
|
69
|
+
Running diagnostic checks...
|
|
70
|
+
|
|
71
|
+
❓ vat version
|
|
72
|
+
Unable to check for updates: not found: npm
|
|
73
|
+
|
|
74
|
+
📊 Results: 7 checks — 6 passed, 0 failed, 1 undetermined, 0 skipped
|
|
75
|
+
6 not shown (nothing to report) — re-run with --verbose to see every check.
|
|
76
|
+
|
|
77
|
+
❓ Nothing failed, but 1 check(s) could not be determined — that is not the same as healthy.
|
|
78
|
+
```
|
|
79
|
+
Exit code is still `0` — nothing failed — but the run is *not* reported as healthy.
|
|
80
|
+
|
|
53
81
|
### Verbose Mode
|
|
54
82
|
|
|
55
83
|
Show all checks including passing ones:
|
|
@@ -85,7 +113,7 @@ Running diagnostic checks...
|
|
|
85
113
|
✅ CLI build status
|
|
86
114
|
Build is up to date (v0.1.0)
|
|
87
115
|
|
|
88
|
-
📊 Results: 7
|
|
116
|
+
📊 Results: 7 checks — 7 passed, 0 failed, 0 undetermined, 0 skipped
|
|
89
117
|
|
|
90
118
|
✨ All checks passed! Your vat setup looks healthy.
|
|
91
119
|
```
|
|
@@ -110,7 +138,8 @@ Output:
|
|
|
110
138
|
|
|
111
139
|
Running diagnostic checks...
|
|
112
140
|
|
|
113
|
-
📊 Results: 7
|
|
141
|
+
📊 Results: 7 checks — 7 passed, 0 failed, 0 undetermined, 0 skipped
|
|
142
|
+
7 not shown (nothing to report) — re-run with --verbose to see every check.
|
|
114
143
|
|
|
115
144
|
✨ All checks passed! Your vat setup looks healthy.
|
|
116
145
|
```
|
|
@@ -250,14 +279,20 @@ fi
|
|
|
250
279
|
### VAT Version Check
|
|
251
280
|
|
|
252
281
|
- **Purpose:** Inform about available updates (advisory only)
|
|
253
|
-
- **
|
|
282
|
+
- **Never fails:** an available update is a `pass` with a suggestion
|
|
283
|
+
- **Undetermined:** if the npm registry cannot be reached, the outcome is
|
|
284
|
+
`undetermined` (❓), not `pass` — doctor did not verify that you are current
|
|
254
285
|
- **Suggestion:** Shows upgrade command if update available
|
|
255
286
|
|
|
256
287
|
### CLI Build Status Check
|
|
257
288
|
|
|
258
289
|
- **When:** Only runs when in VAT source tree
|
|
259
290
|
- **Purpose:** Ensure CLI build matches source version (for VAT developers)
|
|
260
|
-
- **Skipped:** When running installed VAT globally
|
|
291
|
+
- **Skipped (⏭️):** When running installed VAT globally, or when no project root
|
|
292
|
+
was detected — the check does not apply
|
|
293
|
+
- **Undetermined (❓):** When the version files exist but cannot be read or
|
|
294
|
+
parsed. Doctor cannot tell whether the build is stale, which is different from
|
|
295
|
+
the check not applying
|
|
261
296
|
- **Fix:** Run `bun run build` in VAT source directory
|
|
262
297
|
|
|
263
298
|
## Requirements
|
|
@@ -278,4 +313,5 @@ for terminology.
|
|
|
278
313
|
- Run `vat doctor` before reporting issues to verify environment
|
|
279
314
|
- Use `--verbose` flag when debugging to see all check details
|
|
280
315
|
- Doctor checks can be run from any subdirectory in your project
|
|
281
|
-
- Exit code 0 means
|
|
316
|
+
- Exit code 0 means no check *failed*; read the counts line to see whether any
|
|
317
|
+
check was undetermined (useful for scripts)
|
package/docs/index.md
CHANGED
|
@@ -102,7 +102,7 @@ Diagnose vat setup and environment health
|
|
|
102
102
|
|
|
103
103
|
**Exit codes:**
|
|
104
104
|
|
|
105
|
-
- `0` -
|
|
105
|
+
- `0` - No check failed (a check that could not be determined is reported as ❓, not fatal)
|
|
106
106
|
- `1` - One or more checks failed
|
|
107
107
|
|
|
108
108
|
**Creates/modifies:** None (read-only diagnostics)
|
package/docs/resources.md
CHANGED
|
@@ -117,20 +117,25 @@ vat resources validate docs/
|
|
|
117
117
|
```bash
|
|
118
118
|
vat resources validate docs/
|
|
119
119
|
|
|
120
|
-
# stderr:
|
|
121
|
-
# docs/README.md:15:25: Link target not found: ./missing.md
|
|
122
|
-
# docs/guide.md:42:10: Broken anchor: #non-existent-section
|
|
120
|
+
# stderr: (file:line:column: severity: message — only `error` fails the run)
|
|
121
|
+
# docs/README.md:15:25: error: Link target not found: ./missing.md
|
|
122
|
+
# docs/guide.md:42:10: error: Broken anchor: #non-existent-section
|
|
123
123
|
|
|
124
124
|
# stdout:
|
|
125
125
|
# ---
|
|
126
126
|
# status: failed
|
|
127
127
|
# errorsFound: 2
|
|
128
|
-
#
|
|
128
|
+
# filesWithErrors: 2
|
|
129
|
+
# issueCounts: { errors: 2, warnings: 0, info: 0 }
|
|
130
|
+
# issueSummary: { LINK_BROKEN_FILE: 1, LINK_BROKEN_ANCHOR: 1 }
|
|
131
|
+
# issues:
|
|
129
132
|
# - file: docs/README.md
|
|
130
|
-
#
|
|
131
|
-
#
|
|
132
|
-
#
|
|
133
|
-
#
|
|
133
|
+
# issues:
|
|
134
|
+
# - line: 15
|
|
135
|
+
# column: 25
|
|
136
|
+
# code: LINK_BROKEN_FILE
|
|
137
|
+
# severity: error
|
|
138
|
+
# message: Link target not found: ./missing.md
|
|
134
139
|
# duration: 456ms
|
|
135
140
|
# ---
|
|
136
141
|
```
|
|
@@ -182,6 +187,17 @@ resources:
|
|
|
182
187
|
FRONTMATTER_SCHEMA_ERROR: error
|
|
183
188
|
```
|
|
184
189
|
|
|
190
|
+
**Dot-directories are scanned.** `**` traverses path segments beginning with a
|
|
191
|
+
dot, so the default `**/*.md` reaches `.claude/`, `.github/` and the like — as do
|
|
192
|
+
your own patterns. Visibility is decided by git and by `exclude`, never by a
|
|
193
|
+
leading dot. To keep a dotted tree out of the scan, exclude it by name:
|
|
194
|
+
|
|
195
|
+
```yaml
|
|
196
|
+
resources:
|
|
197
|
+
exclude:
|
|
198
|
+
- ".claude/worktrees/**"
|
|
199
|
+
```
|
|
200
|
+
|
|
185
201
|
## Integration with vibe-validate
|
|
186
202
|
|
|
187
203
|
The test-format error output (stderr) integrates seamlessly with vibe-validate:
|
package/docs/skill-test.md
CHANGED
|
@@ -64,14 +64,14 @@ Every field is optional; an omitted knob falls back to its default.
|
|
|
64
64
|
| `maxBudgetUsd` | number > 0 | none | `--max-budget-usd <n>` | Hard USD budget cap passed to the CLI. |
|
|
65
65
|
| `timeout` | integer, **seconds** | scales with eval count: ~`2min + 2min/eval`, floored at 5min, capped at 1h | `--timeout <s>` | Wall-clock timeout. An explicit value always overrides the scaled default. |
|
|
66
66
|
| `stall` | integer, **seconds** | none | `--stall <s>` | Stall watchdog — kill the spawn after this long with no stream output. |
|
|
67
|
-
| `evals` | string (path) |
|
|
67
|
+
| `evals` | string (path or npm specifier) | auto-detected `evals/evals.json` (see below) | `--evals <path>` | Which `evals.json` to grade against. `test.evals` resolves **relative to the skill source**; `--evals` resolves **relative to the current directory**. Either may be absolute, and either may be an npm bare specifier. An explicit value always wins over the default convention. |
|
|
68
68
|
| `auth` | `inherit` \| `subscription` \| `api-key` \| `auto` | `inherit` | `--auth <mode>` | Auth mechanism for the spawned session. |
|
|
69
69
|
| `requireAuth` | `subscription` \| `api-key` | none | `--require-auth <mech>` | Fail-fast guard: preflight exits `2` if the effective mechanism isn't this. |
|
|
70
70
|
| `baseline` | boolean | `false` | `--baseline` | Run the opt-in with/without A/B skill-lift comparison. |
|
|
71
71
|
| `skillCreator` | source descriptor | `{ vendored: true }` | — | Source for the vendored skill-creator rubric. |
|
|
72
72
|
| `with` | array of source descriptors | none | `--with name=<src>` | **Required** companion skills staged alongside the subject, invocable by it. |
|
|
73
73
|
| `optional` | array of source descriptors | none | `--with-optional name=<src>` | **Optional** companions — skipped with a warning if unresolvable. |
|
|
74
|
-
| `env` | map string→string | none | `--env KEY=VALUE` | Env vars injected into the **executor** spawn. Values interpolate `${fixturesDir}`, `${stagedSkillDir}`, `${harnessRoot}`, `${resultsDir}`. Protected names (PATH, auth, model, admin) cannot be overridden. |
|
|
74
|
+
| `env` | map string→string | none | `--env KEY=VALUE` | Env vars injected into the **executor** spawn. Values interpolate `${fixturesDir}`, `${stagedSkillDir}`, `${harnessRoot}`, `${resultsDir}`. `${fixturesDir}` is **per-eval** — it names that eval's own staged workspace (`fixtures/` under the executor's working directory), so the eval must declare input `files`; using it on an eval without them fails the run (exit 2). Protected names (PATH, auth, model, admin) cannot be overridden. |
|
|
75
75
|
| `passEnv` | array of strings | none | `--pass-env KEY` | Names of host env vars to forward to the executor spawn if present. Protected names are ignored with a warning. |
|
|
76
76
|
| `build` | string (shell command) | none | — | Command run **once, before staging**, to generate build artifacts. Runs with `cwd` = config root. A non-zero exit aborts the run (exit `2`). |
|
|
77
77
|
|
|
@@ -94,6 +94,50 @@ unbuilt source only when the failure is non-destructive. Each declared skill bui
|
|
|
94
94
|
Staging the same name twice across the subject, `--with`, and `--with-optional` is a
|
|
95
95
|
duplicate-name error (exit `2`).
|
|
96
96
|
|
|
97
|
+
### The default eval-suite convention
|
|
98
|
+
|
|
99
|
+
**You do not need a `test:` block to have an eval suite.** If a skill has a file at:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
<skill-source-dir>/evals/evals.json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
VAT treats that as the skill's suite — the same path `vat skill test run` has always defaulted to. Two things follow from it, and they are deliberately the same two things an explicit `test:` block would give you:
|
|
106
|
+
|
|
107
|
+
1. `vat skill test run <skill>` finds and runs the suite.
|
|
108
|
+
2. **The suite directory is excluded from packaged output.** It holds the `expected_output` / `expectations` answer key, so shipping it would both publish the answers and let a skill under test read its own key.
|
|
109
|
+
|
|
110
|
+
This is **auto-detection, not a requirement**. It is keyed on the suite *file* existing:
|
|
111
|
+
|
|
112
|
+
| On disk | Treated as a suite? |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `<skill>/evals/evals.json` | **Yes** — run by the harness, excluded from the bundle |
|
|
115
|
+
| `<skill>/evals/` with no `evals.json` | No — ordinary content, ships normally |
|
|
116
|
+
| `<skill>/docs/evals/…` (any other location named `evals`) | No — ordinary content, ships normally |
|
|
117
|
+
| No `evals/` directory at all | No — nothing happens, no error, no warning |
|
|
118
|
+
|
|
119
|
+
A skill with no suite is completely unaffected: it packages exactly as it would have, with no error and nothing excluded. The convention never makes evals mandatory.
|
|
120
|
+
|
|
121
|
+
**Set `test.evals` explicitly** when your suite lives anywhere else — a shared directory, a per-skill subdirectory (VAT's own repo uses `evals/<skill-name>/evals.json`), or outside the skill tree. An explicit path always overrides the convention.
|
|
122
|
+
|
|
123
|
+
> Both lanes honor this. Before it was shared, the harness auto-detected the suite while the packager did not, so a skill relying on the default had its answer key published even though the harness was protecting it.
|
|
124
|
+
|
|
125
|
+
### Testing a skill you did not author
|
|
126
|
+
|
|
127
|
+
A correctly packaged skill ships **no** eval suite — the suite is the answer key, and excluding it from the bundle is the whole point of the convention above. So for any skill you install rather than write, there is nothing in its tree to grade against, and you have to supply the suite yourself:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
vat skill test run npm:@vendor/their-skill \
|
|
131
|
+
--evals ./our-audit-corpus/their-skill.json \
|
|
132
|
+
--i-understand-this-runs-skill-code
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`--evals` resolves against the directory you run it from, so the path means what you typed. It may point anywhere — including outside the skill's tree entirely, which is the normal case here. It also accepts an npm bare specifier (`--evals @acme/skill-evals/their-skill.json`), honoring that package's `exports` map, so a shared corpus can be distributed as a package.
|
|
136
|
+
|
|
137
|
+
The suite is never copied into anything the executor can reach. Each eval's declared input `files` are resolved relative to the **suite's** directory and staged into that eval's own workspace, so fixtures travel with the suite rather than with the skill.
|
|
138
|
+
|
|
139
|
+
> **On sensitive fixtures.** `workspaces/` and `results/` are created `0700`, so a fixture that was never in your repo is not left readable by other local users. That is necessary but **not** sufficient: `grading.json` quotes the executor transcript verbatim as evidence, so anything the skill *reads out of* a fixture is written into `results/` as text — and `results/` survives `--keep` by design. Treat the harness output as being as sensitive as the fixtures you feed it.
|
|
140
|
+
|
|
97
141
|
## Global knobs (top-level `test:`)
|
|
98
142
|
|
|
99
143
|
| Config key | Type | Default | CLI flag | Purpose |
|
|
@@ -109,7 +153,7 @@ duplicate-name error (exit `2`).
|
|
|
109
153
|
| `--no-build` | Stage existing `dist` instead of building. Errors if absent for the subject or a **required** companion; an optional companion falls back to raw source with a warning. |
|
|
110
154
|
| `--refresh` | Force a full re-stage, ignoring existing staged content. |
|
|
111
155
|
| `--keep` | Keep the harness directory after the run (needed to inspect `results/`). |
|
|
112
|
-
| `--dry-run` |
|
|
156
|
+
| `--dry-run` | Build and stage exactly as a real run would, then stop without spawning Claude — no session, no tokens. It **does build** (when `--i-understand-this-runs-skill-code` is passed), because the question a dry run answers is "what happens if I drop this flag", and a preview built from a stale `dist/` answers it wrongly. **Without** the acknowledgement it does not build — building runs the repo's `test.build` hook, an arbitrary shell command — so it falls back to an existing `dist/` and warns it may be stale. `--no-build` skips the build either way. |
|
|
113
157
|
| `--out <dir>` / `--workdir <dir>` | Override the harness output / working directory. |
|
|
114
158
|
| `--allow-eval-failure` | Opt out of fail-closed: exit `0` even when an eval fails. For interactive iteration. |
|
|
115
159
|
| `--allow-unverified-skill-source` | Skip the vendored manifest integrity check. |
|
package/docs/skills.md
CHANGED
|
@@ -22,9 +22,9 @@ skills:
|
|
|
22
22
|
LINK_TO_NAVIGATION_FILE: ignore # this skill links to READMEs on purpose
|
|
23
23
|
ALLOW_EXPIRED: error # zero-tolerance expiry
|
|
24
24
|
allow:
|
|
25
|
-
|
|
25
|
+
LINK_TO_GITIGNORED_FILE:
|
|
26
26
|
- paths: ["templates/runtime.json"]
|
|
27
|
-
reason: "
|
|
27
|
+
reason: "generated at install time, deliberately untracked"
|
|
28
28
|
expires: "2026-09-30"
|
|
29
29
|
SKILL_LENGTH_EXCEEDS_RECOMMENDED:
|
|
30
30
|
- reason: "whole-skill concern; paths defaults to ['**/*']"
|
|
@@ -315,14 +315,22 @@ for terminology.
|
|
|
315
315
|
|
|
316
316
|
**What it does:**
|
|
317
317
|
1. Resolves the source (local directory, ZIP, .tgz, or npm package)
|
|
318
|
-
2. Discovers one or more
|
|
318
|
+
2. Discovers one or more skill directories inside the source
|
|
319
319
|
3. Pre-validates every skill with `validateSkill()` — zero files written if validation fails
|
|
320
|
-
4.
|
|
321
|
-
5.
|
|
322
|
-
6.
|
|
320
|
+
4. Reads each skill's declared name, which is the name it installs under
|
|
321
|
+
5. Builds an install plan, detecting conflicts before touching the filesystem
|
|
322
|
+
6. Copies skill(s) to the resolved platform directory (all-or-nothing semantics)
|
|
323
|
+
7. Emits a YAML summary on stdout
|
|
323
324
|
|
|
324
325
|
Both `--target` and `--scope` are **required** — there are no defaults.
|
|
325
326
|
|
|
327
|
+
**Installed name:** a skill installs under the `name` its `SKILL.md` frontmatter
|
|
328
|
+
declares — the same identity `vat skills build` and the plugin build key on — not
|
|
329
|
+
the name of the directory it came from. A ZIP or npm source has no meaningful
|
|
330
|
+
directory name to use. If two skills in one source declare the same name, the
|
|
331
|
+
whole install fails rather than one silently overwriting the other. Use `--name`
|
|
332
|
+
to override (single-skill sources only).
|
|
333
|
+
|
|
326
334
|
**Supported Sources:**
|
|
327
335
|
- **Local directory:** `./path/to/skill-dir` — must contain `SKILL.md` at root or in subdirectories
|
|
328
336
|
- **Local ZIP file:** `./path/to/skill.zip` — extracted to a temp directory, then installed
|
|
@@ -354,6 +362,16 @@ Both `--target` and `--scope` are **required** — there are no defaults.
|
|
|
354
362
|
| `windsurf` | `~/.codeium/windsurf/skills/` | `.windsurf/skills/` |
|
|
355
363
|
| `agents` | `~/.agents/skills/` | `.agents/skills/` |
|
|
356
364
|
|
|
365
|
+
These paths were last reviewed against vendor conventions on 2026-04-08 and are
|
|
366
|
+
not verified at build or test time — the tests assert the table's shape, never
|
|
367
|
+
that a path is where a platform actually looks. If a vendor moves its convention,
|
|
368
|
+
installs land somewhere unread and every VAT check still passes. Re-check the
|
|
369
|
+
vendor's documentation before relying on a non-`claude` target.
|
|
370
|
+
|
|
371
|
+
**Visibility:** VAT's own inspection commands are Claude-scoped — `vat skills
|
|
372
|
+
list --user` and `vat audit --user` read `~/.claude` only. A skill installed to
|
|
373
|
+
any other target lands correctly but is invisible to them.
|
|
374
|
+
|
|
357
375
|
**Exit Codes:**
|
|
358
376
|
- `0` - Install successful (or dry-run complete)
|
|
359
377
|
- `1` - Install error (validation failed, conflict without `--force`, source not found, bad target/scope)
|
|
@@ -438,6 +456,10 @@ for terminology.
|
|
|
438
456
|
2. Reports validation status for each skill
|
|
439
457
|
3. Shows skill metadata (name, description, path)
|
|
440
458
|
|
|
459
|
+
The reported `name` is the one the skill's frontmatter declares — matching what
|
|
460
|
+
`vat skills install` would install it as — falling back to the directory name
|
|
461
|
+
only when the `SKILL.md` declares none.
|
|
462
|
+
|
|
441
463
|
**Modes:**
|
|
442
464
|
|
|
443
465
|
**Project mode (default):**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/cli",
|
|
3
|
-
"version": "0.1.41-rc.
|
|
3
|
+
"version": "0.1.41-rc.7",
|
|
4
4
|
"description": "Command-line interface for vibe-agent-toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -41,16 +41,16 @@
|
|
|
41
41
|
"//dependencies-note": "DO NOT add example agent packages or adopter packages here. Adopter packages (like vat-development-agents) depend on the CLI binary at build time — declaring them as deps creates a circular build dependency. They are built in a second turbo pass via package#task overrides in turbo.json.",
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
44
|
-
"@vibe-agent-toolkit/agent-config": "0.1.41-rc.
|
|
45
|
-
"@vibe-agent-toolkit/agent-schema": "0.1.41-rc.
|
|
46
|
-
"@vibe-agent-toolkit/agent-skills": "0.1.41-rc.
|
|
47
|
-
"@vibe-agent-toolkit/claude-marketplace": "0.1.41-rc.
|
|
48
|
-
"@vibe-agent-toolkit/discovery": "0.1.41-rc.
|
|
49
|
-
"@vibe-agent-toolkit/gateway-mcp": "0.1.41-rc.
|
|
50
|
-
"@vibe-agent-toolkit/rag": "0.1.41-rc.
|
|
51
|
-
"@vibe-agent-toolkit/rag-lancedb": "0.1.41-rc.
|
|
52
|
-
"@vibe-agent-toolkit/resources": "0.1.41-rc.
|
|
53
|
-
"@vibe-agent-toolkit/utils": "0.1.41-rc.
|
|
44
|
+
"@vibe-agent-toolkit/agent-config": "0.1.41-rc.7",
|
|
45
|
+
"@vibe-agent-toolkit/agent-schema": "0.1.41-rc.7",
|
|
46
|
+
"@vibe-agent-toolkit/agent-skills": "0.1.41-rc.7",
|
|
47
|
+
"@vibe-agent-toolkit/claude-marketplace": "0.1.41-rc.7",
|
|
48
|
+
"@vibe-agent-toolkit/discovery": "0.1.41-rc.7",
|
|
49
|
+
"@vibe-agent-toolkit/gateway-mcp": "0.1.41-rc.7",
|
|
50
|
+
"@vibe-agent-toolkit/rag": "0.1.41-rc.7",
|
|
51
|
+
"@vibe-agent-toolkit/rag-lancedb": "0.1.41-rc.7",
|
|
52
|
+
"@vibe-agent-toolkit/resources": "0.1.41-rc.7",
|
|
53
|
+
"@vibe-agent-toolkit/utils": "0.1.41-rc.7",
|
|
54
54
|
"adm-zip": "^0.6.0",
|
|
55
55
|
"commander": "^12.1.0",
|
|
56
56
|
"picomatch": "^4.0.3",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"@types/picomatch": "^4.0.2",
|
|
66
66
|
"@types/semver": "^7.7.1",
|
|
67
67
|
"@types/tar": "^6.1.13",
|
|
68
|
-
"@vibe-agent-toolkit/dev-tools": "0.1.41-rc.
|
|
68
|
+
"@vibe-agent-toolkit/dev-tools": "0.1.41-rc.7",
|
|
69
69
|
"rimraf": "^6.0.1",
|
|
70
70
|
"typescript": "^5.7.3",
|
|
71
71
|
"vitest": "^3.2.4"
|