@vibe-agent-toolkit/cli 0.1.41-rc.6 → 0.1.41-rc.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +4 -3
  2. package/dist/bin/vat +25 -2
  3. package/dist/bin/vat.js +25 -2
  4. package/dist/bin/vat.js.map +1 -1
  5. package/dist/bin.js +12 -1
  6. package/dist/bin.js.map +1 -1
  7. package/dist/commands/agent/list.d.ts +11 -0
  8. package/dist/commands/agent/list.d.ts.map +1 -1
  9. package/dist/commands/agent/list.js +30 -11
  10. package/dist/commands/agent/list.js.map +1 -1
  11. package/dist/commands/audit/hierarchical-output.d.ts +6 -2
  12. package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
  13. package/dist/commands/audit/hierarchical-output.js +93 -50
  14. package/dist/commands/audit/hierarchical-output.js.map +1 -1
  15. package/dist/commands/audit-settings.d.ts +35 -0
  16. package/dist/commands/audit-settings.d.ts.map +1 -1
  17. package/dist/commands/audit-settings.js +121 -51
  18. package/dist/commands/audit-settings.js.map +1 -1
  19. package/dist/commands/audit.d.ts +97 -2
  20. package/dist/commands/audit.d.ts.map +1 -1
  21. package/dist/commands/audit.js +505 -231
  22. package/dist/commands/audit.js.map +1 -1
  23. package/dist/commands/build.d.ts +14 -0
  24. package/dist/commands/build.d.ts.map +1 -1
  25. package/dist/commands/build.js +126 -32
  26. package/dist/commands/build.js.map +1 -1
  27. package/dist/commands/claude/marketplace/license-utils.d.ts +39 -2
  28. package/dist/commands/claude/marketplace/license-utils.d.ts.map +1 -1
  29. package/dist/commands/claude/marketplace/license-utils.js +114 -68
  30. package/dist/commands/claude/marketplace/license-utils.js.map +1 -1
  31. package/dist/commands/claude/marketplace/publish.js +5 -4
  32. package/dist/commands/claude/marketplace/publish.js.map +1 -1
  33. package/dist/commands/claude/marketplace/validate.d.ts +97 -0
  34. package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
  35. package/dist/commands/claude/marketplace/validate.js +157 -49
  36. package/dist/commands/claude/marketplace/validate.js.map +1 -1
  37. package/dist/commands/claude/org/skills.d.ts +11 -3
  38. package/dist/commands/claude/org/skills.d.ts.map +1 -1
  39. package/dist/commands/claude/org/skills.js +70 -20
  40. package/dist/commands/claude/org/skills.js.map +1 -1
  41. package/dist/commands/claude/org/stubs.d.ts +9 -1
  42. package/dist/commands/claude/org/stubs.d.ts.map +1 -1
  43. package/dist/commands/claude/org/stubs.js +11 -3
  44. package/dist/commands/claude/org/stubs.js.map +1 -1
  45. package/dist/commands/claude/plugin/build.d.ts +116 -0
  46. package/dist/commands/claude/plugin/build.d.ts.map +1 -1
  47. package/dist/commands/claude/plugin/build.js +173 -40
  48. package/dist/commands/claude/plugin/build.js.map +1 -1
  49. package/dist/commands/claude/plugin/marketplace-json.d.ts +36 -0
  50. package/dist/commands/claude/plugin/marketplace-json.d.ts.map +1 -0
  51. package/dist/commands/claude/plugin/marketplace-json.js +34 -0
  52. package/dist/commands/claude/plugin/marketplace-json.js.map +1 -0
  53. package/dist/commands/claude/plugin/plugin-json-merge.d.ts +30 -1
  54. package/dist/commands/claude/plugin/plugin-json-merge.d.ts.map +1 -1
  55. package/dist/commands/claude/plugin/plugin-json-merge.js +107 -14
  56. package/dist/commands/claude/plugin/plugin-json-merge.js.map +1 -1
  57. package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
  58. package/dist/commands/claude/plugin/tree-copy.js +0 -1
  59. package/dist/commands/claude/plugin/tree-copy.js.map +1 -1
  60. package/dist/commands/corpus/report.d.ts +22 -4
  61. package/dist/commands/corpus/report.d.ts.map +1 -1
  62. package/dist/commands/corpus/report.js +1 -0
  63. package/dist/commands/corpus/report.js.map +1 -1
  64. package/dist/commands/corpus/runner.d.ts +16 -1
  65. package/dist/commands/corpus/runner.d.ts.map +1 -1
  66. package/dist/commands/corpus/runner.js +55 -48
  67. package/dist/commands/corpus/runner.js.map +1 -1
  68. package/dist/commands/doctor.d.ts +57 -8
  69. package/dist/commands/doctor.d.ts.map +1 -1
  70. package/dist/commands/doctor.js +142 -67
  71. package/dist/commands/doctor.js.map +1 -1
  72. package/dist/commands/inventory.d.ts +2 -0
  73. package/dist/commands/inventory.d.ts.map +1 -1
  74. package/dist/commands/inventory.js +45 -4
  75. package/dist/commands/inventory.js.map +1 -1
  76. package/dist/commands/phase-utils.d.ts +240 -11
  77. package/dist/commands/phase-utils.d.ts.map +1 -1
  78. package/dist/commands/phase-utils.js +352 -15
  79. package/dist/commands/phase-utils.js.map +1 -1
  80. package/dist/commands/rag/query-command.d.ts +40 -0
  81. package/dist/commands/rag/query-command.d.ts.map +1 -1
  82. package/dist/commands/rag/query-command.js +47 -20
  83. package/dist/commands/rag/query-command.js.map +1 -1
  84. package/dist/commands/resources/index.d.ts.map +1 -1
  85. package/dist/commands/resources/index.js +38 -13
  86. package/dist/commands/resources/index.js.map +1 -1
  87. package/dist/commands/resources/scan.d.ts +37 -0
  88. package/dist/commands/resources/scan.d.ts.map +1 -1
  89. package/dist/commands/resources/scan.js +47 -32
  90. package/dist/commands/resources/scan.js.map +1 -1
  91. package/dist/commands/resources/validate.d.ts +136 -1
  92. package/dist/commands/resources/validate.d.ts.map +1 -1
  93. package/dist/commands/resources/validate.js +121 -68
  94. package/dist/commands/resources/validate.js.map +1 -1
  95. package/dist/commands/skill/review.d.ts.map +1 -1
  96. package/dist/commands/skill/review.js +40 -23
  97. package/dist/commands/skill/review.js.map +1 -1
  98. package/dist/commands/skill/test/run.d.ts +1 -1
  99. package/dist/commands/skill/test/run.d.ts.map +1 -1
  100. package/dist/commands/skill/test/run.js +8 -6
  101. package/dist/commands/skill/test/run.js.map +1 -1
  102. package/dist/commands/skills/build.d.ts +140 -0
  103. package/dist/commands/skills/build.d.ts.map +1 -1
  104. package/dist/commands/skills/build.js +348 -94
  105. package/dist/commands/skills/build.js.map +1 -1
  106. package/dist/commands/skills/command-helpers.d.ts +6 -10
  107. package/dist/commands/skills/command-helpers.d.ts.map +1 -1
  108. package/dist/commands/skills/command-helpers.js +6 -22
  109. package/dist/commands/skills/command-helpers.js.map +1 -1
  110. package/dist/commands/skills/list.d.ts +18 -0
  111. package/dist/commands/skills/list.d.ts.map +1 -1
  112. package/dist/commands/skills/list.js +41 -15
  113. package/dist/commands/skills/list.js.map +1 -1
  114. package/dist/commands/skills/package.d.ts +17 -0
  115. package/dist/commands/skills/package.d.ts.map +1 -1
  116. package/dist/commands/skills/package.js +72 -43
  117. package/dist/commands/skills/package.js.map +1 -1
  118. package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
  119. package/dist/commands/skills/skill-discovery.js +9 -1
  120. package/dist/commands/skills/skill-discovery.js.map +1 -1
  121. package/dist/commands/skills/validate-command.d.ts.map +1 -1
  122. package/dist/commands/skills/validate-command.js +22 -6
  123. package/dist/commands/skills/validate-command.js.map +1 -1
  124. package/dist/commands/skills/validate.d.ts +79 -0
  125. package/dist/commands/skills/validate.d.ts.map +1 -1
  126. package/dist/commands/skills/validate.js +268 -79
  127. package/dist/commands/skills/validate.js.map +1 -1
  128. package/dist/commands/validate.d.ts +18 -0
  129. package/dist/commands/validate.d.ts.map +1 -1
  130. package/dist/commands/validate.js +79 -66
  131. package/dist/commands/validate.js.map +1 -1
  132. package/dist/commands/verify.d.ts +38 -1
  133. package/dist/commands/verify.d.ts.map +1 -1
  134. package/dist/commands/verify.js +247 -84
  135. package/dist/commands/verify.js.map +1 -1
  136. package/dist/index.d.ts +1 -1
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +7 -1
  139. package/dist/index.js.map +1 -1
  140. package/dist/skill-resolution/index.d.ts +1 -1
  141. package/dist/skill-resolution/index.d.ts.map +1 -1
  142. package/dist/skill-resolution/index.js +1 -1
  143. package/dist/skill-resolution/index.js.map +1 -1
  144. package/dist/skill-resolution/packaging-config.d.ts +15 -2
  145. package/dist/skill-resolution/packaging-config.d.ts.map +1 -1
  146. package/dist/skill-resolution/packaging-config.js +39 -2
  147. package/dist/skill-resolution/packaging-config.js.map +1 -1
  148. package/dist/utils/command-error.d.ts +34 -1
  149. package/dist/utils/command-error.d.ts.map +1 -1
  150. package/dist/utils/command-error.js +32 -1
  151. package/dist/utils/command-error.js.map +1 -1
  152. package/dist/utils/config-loader.d.ts.map +1 -1
  153. package/dist/utils/config-loader.js +0 -2
  154. package/dist/utils/config-loader.js.map +1 -1
  155. package/dist/utils/help-loader.d.ts +6 -2
  156. package/dist/utils/help-loader.d.ts.map +1 -1
  157. package/dist/utils/help-loader.js +9 -16
  158. package/dist/utils/help-loader.js.map +1 -1
  159. package/dist/utils/issue-anchor.d.ts +26 -0
  160. package/dist/utils/issue-anchor.d.ts.map +1 -0
  161. package/dist/utils/issue-anchor.js +39 -0
  162. package/dist/utils/issue-anchor.js.map +1 -0
  163. package/dist/utils/issue-rendering.d.ts +149 -0
  164. package/dist/utils/issue-rendering.d.ts.map +1 -0
  165. package/dist/utils/issue-rendering.js +229 -0
  166. package/dist/utils/issue-rendering.js.map +1 -0
  167. package/dist/utils/output.d.ts +80 -9
  168. package/dist/utils/output.d.ts.map +1 -1
  169. package/dist/utils/output.js +138 -23
  170. package/dist/utils/output.js.map +1 -1
  171. package/dist/utils/project-root-policy.d.ts +2 -2
  172. package/dist/utils/project-root-policy.js +2 -2
  173. package/dist/utils/relativize-paths.d.ts +45 -0
  174. package/dist/utils/relativize-paths.d.ts.map +1 -0
  175. package/dist/utils/relativize-paths.js +67 -0
  176. package/dist/utils/relativize-paths.js.map +1 -0
  177. package/dist/utils/resource-loader.d.ts +21 -2
  178. package/dist/utils/resource-loader.d.ts.map +1 -1
  179. package/dist/utils/resource-loader.js +85 -11
  180. package/dist/utils/resource-loader.js.map +1 -1
  181. package/dist/utils/skill-packaging-config.d.ts +22 -1
  182. package/dist/utils/skill-packaging-config.d.ts.map +1 -1
  183. package/dist/utils/skill-packaging-config.js +26 -0
  184. package/dist/utils/skill-packaging-config.js.map +1 -1
  185. package/dist/utils/validate-help-files.d.ts +3 -2
  186. package/dist/utils/validate-help-files.d.ts.map +1 -1
  187. package/dist/utils/validate-help-files.js +48 -5
  188. package/dist/utils/validate-help-files.js.map +1 -1
  189. package/dist/utils/verdict-helpers.d.ts +14 -5
  190. package/dist/utils/verdict-helpers.d.ts.map +1 -1
  191. package/dist/utils/verdict-helpers.js +19 -16
  192. package/dist/utils/verdict-helpers.js.map +1 -1
  193. package/docs/audit.md +40 -14
  194. package/docs/doctor.md +46 -10
  195. package/docs/index.md +1 -1
  196. package/docs/rag.md +9 -4
  197. package/docs/resources.md +54 -22
  198. package/docs/skills.md +11 -7
  199. package/package.json +12 -12
@@ -4,6 +4,8 @@
4
4
  * Discovers skills from config yaml skills.include/exclude, validates each
5
5
  * using validateSkillForPackaging with merged packaging config.
6
6
  */
7
+ import { type SeverityCounts, type ValidationIssue } from '@vibe-agent-toolkit/agent-schema';
8
+ import { type PackagingValidationResult } from '@vibe-agent-toolkit/agent-skills';
7
9
  /**
8
10
  * Skills validate command options
9
11
  */
@@ -12,8 +14,85 @@ export interface SkillsValidateCommandOptions {
12
14
  debug?: boolean;
13
15
  verbose?: boolean;
14
16
  }
17
+ /** The vocabulary of a validation verdict: worst ACTIONABLE severity. */
18
+ type ValidationStatus = 'success' | 'warning' | 'error';
19
+ /**
20
+ * Findings about the RUN rather than about any one skill — currently the
21
+ * `validation.allow` entries no skill in the batch matched (ALLOW_UNUSED).
22
+ *
23
+ * They are a separate parameter, not folded into a skill's result, because
24
+ * that is what they are: `validation.allow` is declared once per package, so
25
+ * attributing "nothing matched this entry" to whichever skill happened to be
26
+ * validated at the time is what produced 78 warnings from 3 real entries.
27
+ */
28
+ type RunIssues = readonly ValidationIssue[];
29
+ /**
30
+ * Build the YAML summary object.
31
+ *
32
+ * `status` is the shared `issues → status` collapse over the WHOLE batch, so it
33
+ * can say `warning`. It previously read
34
+ * `results.some(r => r.status === 'error') ? 'error' : 'success'` — a two-value
35
+ * collapse that could never report the warning case, and so reported 33 active
36
+ * warnings as `success`.
37
+ *
38
+ * The header total counts BOTH the per-skill findings and the run-level ones,
39
+ * because the exit code does too — dropping run issues from the header would
40
+ * divorce the published verdict from the code the process actually returns.
41
+ * That is why `runIssueCounts` exists beside them: on a large real repo the
42
+ * header read 1814 warnings against a per-skill sum of 1800, and the missing 14
43
+ * were run-level ALLOW_UNUSED entries published only as a bare LIST. The
44
+ * identity `issueCounts === Σ results[].issueCounts + runIssueCounts` now holds
45
+ * by construction, so a consumer can reconcile the two numbers instead of
46
+ * hand-counting a list to find out whether anything went missing.
47
+ *
48
+ * That identity survives the default mode dropping every finding-free skill from
49
+ * `results[]`, because a dropped row contributes exactly zero to each bucket —
50
+ * and it survives the default row publishing its counts flat with zero buckets
51
+ * omitted, because an absent bucket reads as zero. Only the per-asset ROWS omit
52
+ * zeros: `issueCounts` and `runIssueCounts` keep their complete
53
+ * `{errors, warnings, info}` shape in both modes, because they are the
54
+ * reconciliation identity rather than something a reader scans.
55
+ */
56
+ export declare function buildValidateSummary(results: PackagingValidationResult[], duration: number, verbose: boolean, runIssues: RunIssues): {
57
+ status: ValidationStatus;
58
+ issueCounts: SeverityCounts;
59
+ runIssueCounts: SeverityCounts;
60
+ skillsValidated: number;
61
+ results: unknown[];
62
+ runIssues: ValidationIssue[];
63
+ durationSecs: number;
64
+ };
65
+ /**
66
+ * Human-readable report lines for the whole batch.
67
+ *
68
+ * Renders every skill with ANY emitted finding, not just the ones that failed
69
+ * the gate: a warning-only or info-only run used to print the success banner and
70
+ * nothing else, so the findings existed only in the YAML on stdout.
71
+ *
72
+ * Every skill with findings gets its summary row at every verbosity; `verbose`
73
+ * picks only which findings are ALSO rendered in full beneath that row, per
74
+ * {@link issuesToRenderAtVerbosity} — errors always, `warning`/`info` when
75
+ * asked, `ignore` never. `verbose` deliberately does NOT gate errors: a default
76
+ * run that collapsed the error it exited 1 on into a count line forced the reader
77
+ * to re-run with a flag to learn what broke.
78
+ *
79
+ * Run-level findings and the banner are printed in full either way — there are
80
+ * ~14 of the former, and they belong to the project config rather than to any
81
+ * asset, so there is no row for them to collapse into.
82
+ */
83
+ export declare function formatValidationReportLines(results: PackagingValidationResult[], runIssues: RunIssues, verbose: boolean): string[];
84
+ /**
85
+ * Log validation progress for a single skill.
86
+ *
87
+ * The per-skill glyph follows the shared collapse (`⚠️` for a warning-only
88
+ * skill), and the severity breakdown is always spelled out. A skill with
89
+ * warnings used to print a bare `✅ <name>`, which is the same reassuring
90
+ * collapse as the batch banner, one line earlier.
91
+ */
92
+ export declare function formatSkillProgressLine(skillName: string, result: PackagingValidationResult): string[];
15
93
  /**
16
94
  * Skills validate command implementation
17
95
  */
18
96
  export declare function validateCommand(pathArg: string | undefined, options: SkillsValidateCommandOptions): Promise<void>;
97
+ export {};
19
98
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/skills/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyOD;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAyEf"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/skills/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAGL,KAAK,yBAAyB,EAG/B,MAAM,kCAAkC,CAAC;AA8B1C;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,yEAAyE;AACzE,KAAK,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAaxD;;;;;;;;GAQG;AACH,KAAK,SAAS,GAAG,SAAS,eAAe,EAAE,CAAC;AA6D5C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,yBAAyB,EAAE,EACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,GACnB;IACD,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,cAAc,CAAC;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB,CAgBA;AAkGD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,yBAAyB,EAAE,EACpC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,GACf,MAAM,EAAE,CAeV;AAkCD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,yBAAyB,GAChC,MAAM,EAAE,CAeV;AAkGD;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CA4Ff"}
@@ -4,87 +4,253 @@
4
4
  * Discovers skills from config yaml skills.include/exclude, validates each
5
5
  * using validateSkillForPackaging with merged packaging config.
6
6
  */
7
+ import { allowUnusedIssues, calculateValidationStatus, countBySeverity, createAllowUsageLedger, } from '@vibe-agent-toolkit/agent-schema';
7
8
  import { validateSkillForPackaging, } from '@vibe-agent-toolkit/agent-skills';
8
9
  import { ResourceRegistry } from '@vibe-agent-toolkit/resources';
9
10
  import { findProjectRoot, gitFindRoot, GitTracker, safePath } from '@vibe-agent-toolkit/utils';
10
11
  import * as yaml from 'yaml';
12
+ import { handleCommandError } from '../../utils/command-error.js';
11
13
  import { loadConfig } from '../../utils/config-loader.js';
12
14
  import { formatDurationSecs } from '../../utils/duration.js';
15
+ import { formatIssueLines, formatRunIssueLines, formatSeverityBreakdown, issuesToRenderAtVerbosity, summarizeFindings, sumSeverityCounts, } from '../../utils/issue-rendering.js';
13
16
  import { requireProjectRoot } from '../../utils/project-root-policy.js';
14
- import { mergeSkillPackagingConfig } from '../../utils/skill-packaging-config.js';
17
+ import { collectDeclaredEvalSuites, mergeSkillPackagingConfig } from '../../utils/skill-packaging-config.js';
15
18
  import { renderSkillQualityFooter } from '../../utils/skill-quality-footer.js';
16
19
  import { applyConfigVerdicts } from '../../utils/verdict-helpers.js';
17
- import { filterSkillsByName, handleCommandError, setupCommandContext, } from './command-helpers.js';
20
+ import { filterSkillsByName, setupCommandContext, } from './command-helpers.js';
18
21
  import { discoverSkillsFromConfig } from './skill-discovery.js';
19
22
  /**
20
- * Strip excludedReferences from results metadata for non-verbose YAML output.
23
+ * Every issue emitted across the batch, after severity resolution.
24
+ *
25
+ * `allErrors` is the full emitted set INCLUDING info despite the name (see the
26
+ * doc comment on `PackagingValidationResult`), and excluding issues suppressed
27
+ * by `validation.allow` — those live in `ignoredErrors`.
21
28
  */
22
- function stripExcludedReferencePaths(results) {
23
- return results.map((result) => {
24
- const { skillLines, totalLines, fileCount, directFileCount, maxLinkDepth, excludedReferenceCount } = result.metadata;
25
- return {
26
- ...result,
27
- metadata: { skillLines, totalLines, fileCount, directFileCount, maxLinkDepth, excludedReferenceCount },
28
- };
29
- });
29
+ function batchIssues(results) {
30
+ return results.flatMap((r) => r.allErrors);
30
31
  }
31
32
  /**
32
- * Output YAML summary to stdout
33
+ * One skill's VERBOSE YAML entry: the whole result plus the per-severity counts
34
+ * its two-valued `status` cannot express.
35
+ *
36
+ * The per-skill `status` stays the gate verdict (`error` iff an active error) —
37
+ * that is what the exit code is derived from. `issueCounts` beside it is what
38
+ * makes `success` readable: "nothing you must act on", not "nothing was found".
39
+ *
40
+ * This shape is optimized for `> file` then `grep`, not for reading: on a
41
+ * 90-skill repo it is 17,262 of the 22,156 stdout lines `vat verify` emits.
42
+ */
43
+ function toVerboseYamlResult(result) {
44
+ return { ...result, issueCounts: countBySeverity(result.allErrors) };
45
+ }
46
+ /**
47
+ * Does this skill have anything to say? Emitted findings OR allow-suppressed
48
+ * ones — the same predicate the human report uses, so the two streams cannot
49
+ * disagree about which skills exist.
50
+ */
51
+ function hasFindings(result) {
52
+ return result.allErrors.length > 0 || result.ignoredErrors.length > 0;
53
+ }
54
+ /**
55
+ * One skill's DEFAULT YAML entry: which asset has problems, how many, of what
56
+ * code — and nothing else.
57
+ *
58
+ * Why the per-code tally is a summary rather than N findings: 1,728 of the 1,897
59
+ * findings on a real 90-skill repo are one code, LINK_DROPPED_BY_DEPTH, and the
60
+ * four remedies its `fix` hint proposes (`linkFollowDepth`, `files:`,
61
+ * `validation.allow`, `excludeReferencesFromBundle`) are all SKILL-level config
62
+ * edits — so 348 findings on one skill propose the same four edits 348 times.
63
+ * The skill is the unit the reader acts on, so the skill is the unit we publish.
64
+ * Aggregating at EMISSION instead would break `validation.allow`'s per-`paths:`
65
+ * matching and per-path severity overrides, both of which need one issue per
66
+ * link; the collapse therefore has to happen here, after allow-filtering.
67
+ * Downgrading the code to `info` was considered and rejected: it would delete
68
+ * the signal the code exists for (a depth-limited walk may silently omit content
69
+ * the author expected to ship) and would contradict PACKAGED_TEST_INPUT, which
70
+ * `docs/validation-codes.md` keeps at `warning` on identical "this is configured
71
+ * behaviour, here is your receipt" reasoning.
72
+ *
73
+ * `allowed` is a scalar, not a list: an allow-suppressed finding is a fact about
74
+ * the skill a reader must not lose, but it is deliberately NOT in `codes`, which
75
+ * summarizes the EMITTED set.
76
+ */
77
+ function toSummaryYamlResult(result) {
78
+ const { codes, ...counts } = summarizeFindings(result.allErrors);
79
+ const allowedCount = result.ignoredErrors.length;
80
+ return {
81
+ skillName: result.skillName,
82
+ status: result.status,
83
+ ...counts,
84
+ ...(allowedCount > 0 ? { allowed: allowedCount } : {}),
85
+ codes,
86
+ };
87
+ }
88
+ /**
89
+ * Build the YAML summary object.
90
+ *
91
+ * `status` is the shared `issues → status` collapse over the WHOLE batch, so it
92
+ * can say `warning`. It previously read
93
+ * `results.some(r => r.status === 'error') ? 'error' : 'success'` — a two-value
94
+ * collapse that could never report the warning case, and so reported 33 active
95
+ * warnings as `success`.
96
+ *
97
+ * The header total counts BOTH the per-skill findings and the run-level ones,
98
+ * because the exit code does too — dropping run issues from the header would
99
+ * divorce the published verdict from the code the process actually returns.
100
+ * That is why `runIssueCounts` exists beside them: on a large real repo the
101
+ * header read 1814 warnings against a per-skill sum of 1800, and the missing 14
102
+ * were run-level ALLOW_UNUSED entries published only as a bare LIST. The
103
+ * identity `issueCounts === Σ results[].issueCounts + runIssueCounts` now holds
104
+ * by construction, so a consumer can reconcile the two numbers instead of
105
+ * hand-counting a list to find out whether anything went missing.
106
+ *
107
+ * That identity survives the default mode dropping every finding-free skill from
108
+ * `results[]`, because a dropped row contributes exactly zero to each bucket —
109
+ * and it survives the default row publishing its counts flat with zero buckets
110
+ * omitted, because an absent bucket reads as zero. Only the per-asset ROWS omit
111
+ * zeros: `issueCounts` and `runIssueCounts` keep their complete
112
+ * `{errors, warnings, info}` shape in both modes, because they are the
113
+ * reconciliation identity rather than something a reader scans.
33
114
  */
34
- function outputYamlSummary(results, duration, verbose) {
35
- const outputResults = verbose ? results : stripExcludedReferencePaths(results);
36
- const output = {
37
- status: results.some((r) => r.status === 'error') ? 'error' : 'success',
115
+ export function buildValidateSummary(results, duration, verbose, runIssues) {
116
+ const skillIssues = batchIssues(results);
117
+ const runIssueCounts = countBySeverity(runIssues);
118
+ return {
119
+ status: calculateValidationStatus([...skillIssues, ...runIssues]),
120
+ issueCounts: sumSeverityCounts([countBySeverity(skillIssues), runIssueCounts]),
121
+ runIssueCounts,
122
+ // `skillsValidated` stays the true denominator even though the default
123
+ // `results[]` lists only the skills with something to say.
38
124
  skillsValidated: results.length,
39
- results: outputResults,
125
+ results: verbose
126
+ ? results.map((r) => toVerboseYamlResult(r))
127
+ : results.filter((r) => hasFindings(r)).map((r) => toSummaryYamlResult(r)),
128
+ runIssues: [...runIssues],
40
129
  durationSecs: formatDurationSecs(duration),
41
130
  };
131
+ }
132
+ /**
133
+ * Output YAML summary to stdout
134
+ */
135
+ function outputYamlSummary(results, duration, verbose, runIssues) {
136
+ const output = buildValidateSummary(results, duration, verbose, runIssues);
42
137
  console.log(yaml.stringify(output, { indent: 2, lineWidth: 0, aliasDuplicateObjects: false }));
43
138
  }
44
139
  /**
45
- * Output a single validation error
140
+ * ONE line for one skill: its severity breakdown, its allowed count, and the
141
+ * codes behind it, dominant first.
142
+ *
143
+ * The stderr counterpart of {@link toSummaryYamlResult} — same unit (the asset),
144
+ * same reason (see that function's comment). The per-issue blocks below are what
145
+ * made this stream 6,261 lines on a 90-skill repo.
46
146
  */
47
- function outputSingleError(error) {
48
- console.error(` [${String(error.code)}] ${String(error.message)}`);
49
- if (error.location) {
50
- console.error(` Location: ${String(error.location)}`);
51
- }
52
- if (error.fix) {
53
- console.error(` Fix: ${String(error.fix)}`);
54
- }
147
+ function skillSummaryLine(result) {
148
+ const { codes } = summarizeFindings(result.allErrors);
149
+ const breakdown = formatSeverityBreakdown(countBySeverity(result.allErrors));
150
+ const allowed = result.ignoredErrors.length > 0
151
+ ? ` (+${result.ignoredErrors.length} allowed by config)`
152
+ : '';
153
+ const tally = Object.entries(codes).map(([code, count]) => `${code}: ${count}`).join(', ');
154
+ const codeSuffix = tally === '' ? '' : ` — ${tally}`;
155
+ return ` ${result.skillName}: ${breakdown}${allowed}${codeSuffix}`;
55
156
  }
56
157
  /**
57
- * Output detailed errors for a skill
158
+ * Lines for ONE skill: its summary row, then the findings that render in full
159
+ * beneath it at this verbosity.
160
+ *
161
+ * The row is unconditional — it is the only place a collapsed finding is
162
+ * counted, so a mode that replaced it with per-issue blocks would lose the
163
+ * allowed count and the per-code tally. What varies is what hangs below it, and
164
+ * that choice belongs to {@link issuesToRenderAtVerbosity}, not to this lane:
165
+ * an `error` renders in full at every verbosity (the reader must never have to
166
+ * re-run with `-v` to learn what failed the gate), while `warning`/`info`
167
+ * collapse into the row unless asked for.
168
+ *
169
+ * The allow-suppressed records are listed only under `verbose`; by default the
170
+ * row's `(+N allowed by config)` is their receipt.
58
171
  */
59
- function outputSkillErrors(result) {
60
- console.error(`Skill: ${result.skillName}`);
61
- if (result.activeErrors.length > 0) {
62
- console.error(` Active errors (${result.activeErrors.length}):`);
63
- for (const error of result.activeErrors) {
64
- outputSingleError(error);
65
- }
172
+ function skillReportLines(result, verbose) {
173
+ const lines = [skillSummaryLine(result)];
174
+ const rendered = issuesToRenderAtVerbosity(result.allErrors, verbose);
175
+ for (const issue of rendered) {
176
+ lines.push(...formatIssueLines(issue, ' '));
66
177
  }
67
- if (result.ignoredErrors.length > 0) {
68
- console.error(` Allowed issues (${result.ignoredErrors.length}):`);
178
+ const listAllowed = verbose && result.ignoredErrors.length > 0;
179
+ if (listAllowed) {
180
+ lines.push(` Allowed issues (${result.ignoredErrors.length}):`);
69
181
  for (const record of result.ignoredErrors) {
70
- console.error(` [${String(record.code)}] ${String(record.location)} (allowed: ${record.reason})`);
182
+ lines.push(` [${String(record.code)}] ${String(record.location)} (allowed: ${record.reason})`);
71
183
  }
72
184
  }
73
- const expiredWarnings = result.activeWarnings.filter(w => w.code === 'ALLOW_EXPIRED');
74
- if (expiredWarnings.length > 0) {
75
- console.error(` Expired allow entries (${expiredWarnings.length}):`);
76
- for (const warn of expiredWarnings) {
77
- console.error(` ${String(warn.message)}`);
78
- }
185
+ // A trailing blank line only when something was rendered beneath the row —
186
+ // otherwise consecutive one-line rows would be double-spaced.
187
+ if (rendered.length > 0 || listAllowed) {
188
+ lines.push('');
189
+ }
190
+ return lines;
191
+ }
192
+ /**
193
+ * One glyph per status value — total, so a status this renderer has not thought
194
+ * about cannot fall through to the reassuring `✅`.
195
+ */
196
+ const STATUS_GLYPHS = {
197
+ error: '❌',
198
+ warning: '⚠️ ',
199
+ success: '✅',
200
+ };
201
+ /** Banner naming what the run actually found. */
202
+ function reportBanner(status, counts) {
203
+ if (status === 'error') {
204
+ return `\n❌ Validation failed — ${formatSeverityBreakdown(counts)}:\n`;
205
+ }
206
+ if (status === 'warning') {
207
+ // Non-blocking (exit 0), which is exactly why this used to print
208
+ // "All validations passed" over the warnings.
209
+ return `\n⚠️ Validation passed with findings — ${formatSeverityBreakdown(counts)}:\n`;
210
+ }
211
+ return counts.info > 0
212
+ ? `\n✅ All validations passed — ${formatSeverityBreakdown(counts)}, nothing to act on:\n`
213
+ : '\n✅ All validations passed';
214
+ }
215
+ /**
216
+ * Human-readable report lines for the whole batch.
217
+ *
218
+ * Renders every skill with ANY emitted finding, not just the ones that failed
219
+ * the gate: a warning-only or info-only run used to print the success banner and
220
+ * nothing else, so the findings existed only in the YAML on stdout.
221
+ *
222
+ * Every skill with findings gets its summary row at every verbosity; `verbose`
223
+ * picks only which findings are ALSO rendered in full beneath that row, per
224
+ * {@link issuesToRenderAtVerbosity} — errors always, `warning`/`info` when
225
+ * asked, `ignore` never. `verbose` deliberately does NOT gate errors: a default
226
+ * run that collapsed the error it exited 1 on into a count line forced the reader
227
+ * to re-run with a flag to learn what broke.
228
+ *
229
+ * Run-level findings and the banner are printed in full either way — there are
230
+ * ~14 of the former, and they belong to the project config rather than to any
231
+ * asset, so there is no row for them to collapse into.
232
+ */
233
+ export function formatValidationReportLines(results, runIssues, verbose) {
234
+ const issues = [...batchIssues(results), ...runIssues];
235
+ const counts = countBySeverity(issues);
236
+ const status = calculateValidationStatus(issues);
237
+ const lines = [reportBanner(status, counts)];
238
+ for (const result of results) {
239
+ if (!hasFindings(result))
240
+ continue;
241
+ lines.push(...skillReportLines(result, verbose));
79
242
  }
80
- console.error('');
243
+ const runLines = formatRunIssueLines(runIssues);
244
+ if (runLines.length > 0) {
245
+ lines.push(...runLines, '');
246
+ }
247
+ return lines;
81
248
  }
82
249
  /**
83
250
  * Output validation report to stdout (YAML) and stderr (human-readable)
84
251
  */
85
- function outputValidationReport(results, duration, logger, verbose) {
86
- outputYamlSummary(results, duration, verbose);
87
- const failedSkills = results.filter((r) => r.status === 'error');
252
+ function outputValidationReport(results, duration, logger, verbose, runIssues) {
253
+ outputYamlSummary(results, duration, verbose, runIssues);
88
254
  // Collect all emitted codes across skills (both errors and warnings) to drive the footer
89
255
  const emittedCodes = new Set();
90
256
  for (const r of results) {
@@ -92,39 +258,41 @@ function outputValidationReport(results, duration, logger, verbose) {
92
258
  emittedCodes.add(issue.code);
93
259
  }
94
260
  }
95
- const hasSkillFindings = results.some((r) => r.activeErrors.length > 0 || r.activeWarnings.length > 0);
96
- if (failedSkills.length === 0) {
97
- logger.info('\n✅ All validations passed');
98
- renderSkillQualityFooter(logger, hasSkillFindings, emittedCodes);
99
- return;
261
+ for (const issue of runIssues) {
262
+ emittedCodes.add(issue.code);
100
263
  }
101
- console.error('\n❌ Validation errors:\n');
102
- for (const result of failedSkills) {
103
- outputSkillErrors(result);
264
+ const hasSkillFindings = results.some((r) => calculateValidationStatus(r.allErrors) !== 'success');
265
+ for (const line of formatValidationReportLines(results, runIssues, verbose)) {
266
+ logger.info(line);
104
267
  }
105
268
  renderSkillQualityFooter(logger, hasSkillFindings, emittedCodes);
106
269
  }
107
270
  /**
108
- * Log validation progress for a single skill
271
+ * Log validation progress for a single skill.
272
+ *
273
+ * The per-skill glyph follows the shared collapse (`⚠️` for a warning-only
274
+ * skill), and the severity breakdown is always spelled out. A skill with
275
+ * warnings used to print a bare `✅ <name>`, which is the same reassuring
276
+ * collapse as the batch banner, one line earlier.
109
277
  */
110
- function logSkillProgress(skillName, result, logger) {
111
- if (result.status === 'error') {
112
- const activeCount = result.activeErrors.length;
113
- const allowedCount = result.ignoredErrors.length;
114
- const expiredCount = result.activeWarnings.filter(w => w.code === 'ALLOW_EXPIRED').length;
115
- logger.error(` ❌ ${skillName}: ${activeCount} error${activeCount === 1 ? '' : 's'}`);
116
- if (allowedCount > 0) {
117
- logger.info(` (${allowedCount} allowed by config)`);
118
- }
119
- if (expiredCount > 0) {
120
- logger.error(` (${expiredCount} expired allow entr${expiredCount === 1 ? 'y' : 'ies'})`);
121
- }
278
+ export function formatSkillProgressLine(skillName, result) {
279
+ const counts = countBySeverity(result.allErrors);
280
+ const status = calculateValidationStatus(result.allErrors);
281
+ const glyph = STATUS_GLYPHS[status];
282
+ const detail = result.allErrors.length > 0 ? `: ${formatSeverityBreakdown(counts)}` : '';
283
+ const lines = [` ${glyph} ${skillName}${detail}`];
284
+ if (result.ignoredErrors.length > 0) {
285
+ lines.push(` (${result.ignoredErrors.length} allowed by config)`);
122
286
  }
123
- else if (result.ignoredErrors.length > 0) {
124
- logger.info(` ✅ ${skillName} (${result.ignoredErrors.length} allowed by config)`);
287
+ const expiredCount = result.allErrors.filter(w => w.code === 'ALLOW_EXPIRED').length;
288
+ if (expiredCount > 0) {
289
+ lines.push(` (${expiredCount} expired allow entr${expiredCount === 1 ? 'y' : 'ies'})`);
125
290
  }
126
- else {
127
- logger.info(` ✅ ${skillName}`);
291
+ return lines;
292
+ }
293
+ function logSkillProgress(skillName, result, logger) {
294
+ for (const line of formatSkillProgressLine(skillName, result)) {
295
+ logger.info(line);
128
296
  }
129
297
  }
130
298
  /**
@@ -141,9 +309,17 @@ function logSkillProgress(skillName, result, logger) {
141
309
  * returns an empty context and validators transparently fall back to their
142
310
  * legacy per-skill setup — correctness first, perf second.
143
311
  */
144
- async function buildSharedValidationContext(skills, logger) {
312
+ async function buildSharedValidationContext(skills, projectSkills, logger) {
313
+ // The allow-entry ledger is not an optimization like the two below — it is
314
+ // what makes ALLOW_UNUSED true. `validation.allow` is declared once for the
315
+ // package and matched per skill, so only the batch can say an entry matched
316
+ // nothing. Always present, so no early return can drop it.
317
+ const allowLedger = createAllowUsageLedger();
318
+ // Likewise not an optimization: the test-input rule is project-wide, so this
319
+ // lane must model a bundle that excludes EVERY declared suite, not just the
320
+ // subject's. Present even for an empty batch, so no early return can drop it.
145
321
  if (skills.length === 0) {
146
- return {};
322
+ return { allowLedger, projectSkills };
147
323
  }
148
324
  const projectRoots = new Set();
149
325
  const gitRoots = new Set();
@@ -161,7 +337,7 @@ async function buildSharedValidationContext(skills, logger) {
161
337
  gitRoots.add(safePath.resolve(gitRoot));
162
338
  }
163
339
  }
164
- const context = {};
340
+ const context = { allowLedger, projectSkills };
165
341
  // Only reuse a single registry when every skill shares the same project
166
342
  // root. Otherwise the per-skill fallback path is correct and the cost is
167
343
  // unchanged from the pre-refactor baseline.
@@ -232,22 +408,35 @@ export async function validateCommand(pathArg, options) {
232
408
  // (for markdown parses) and the git tracker (for gitignore checks) can be
233
409
  // shared across every skill whose projectRoot + gitRoot match the derived
234
410
  // values, which is the common case for a single-repo `vat skills validate`.
235
- const sharedContext = await buildSharedValidationContext(skillsToValidate, logger);
411
+ // Every declared skill, not just `skillsToValidate`: `--skill x` narrows what is
412
+ // REPORTED on, never what counts as some skill's declared test input.
413
+ const projectSkills = collectDeclaredEvalSuites(config.skills, discovered);
414
+ const sharedContext = await buildSharedValidationContext(skillsToValidate, projectSkills, logger);
236
415
  // Validate each skill
237
416
  const results = [];
238
417
  for (const skill of skillsToValidate) {
239
418
  logger.info(` Validating: ${skill.name}`);
240
419
  logger.debug(` Source: ${skill.sourcePath}`);
241
420
  const result = await validateSkillForPackaging(skill.sourcePath, skill.packagingConfig, 'source', sharedContext);
242
- applyConfigVerdicts(result, skill.packagingConfig.targets, skill.sourcePath);
421
+ // `cwd` is the anchor root: config is read from it and discovery globs
422
+ // resolve against it, so every other location in this report is already
423
+ // relative to it.
424
+ applyConfigVerdicts(result, skill.packagingConfig.targets, skill.sourcePath, cwd);
243
425
  logSkillProgress(skill.name, result, logger);
244
426
  results.push(result);
245
427
  }
428
+ // Drain the run's allow ledger AFTER the last skill — an entry matched by
429
+ // any skill in the batch is used, so this is the first point at which
430
+ // "matched nothing" is answerable.
431
+ const runIssues = sharedContext.allowLedger === undefined
432
+ ? []
433
+ : allowUnusedIssues(sharedContext.allowLedger);
246
434
  // Output report and exit
247
435
  const duration = Date.now() - startTime;
248
436
  const verbose = options.verbose === true;
249
- outputValidationReport(results, duration, logger, verbose);
250
- const hasErrors = results.some(r => r.status === 'error');
437
+ outputValidationReport(results, duration, logger, verbose, runIssues);
438
+ const hasErrors = results.some(r => r.status === 'error')
439
+ || runIssues.some(i => i.severity === 'error');
251
440
  process.exit(hasErrors ? 1 : 0);
252
441
  }
253
442
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/skills/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/skills/validate.ts"],"names":[],"mappings":"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"}
@@ -22,10 +22,28 @@
22
22
  * build. If a single "validate the whole shippable thing" command is later
23
23
  * wanted, fold the marketplace phase in here (mirror verify.ts) — see #128.
24
24
  */
25
+ import { type ProjectConfig } from '@vibe-agent-toolkit/resources';
25
26
  import { Command } from 'commander';
27
+ import { type PhaseSelection } from './phase-utils.js';
26
28
  export interface ValidateCommandOptions {
29
+ /** Retired; declared only so {@link rejectRetiredOnly} can explain the removal. */
27
30
  only?: string;
28
31
  debug?: boolean;
32
+ verbose?: boolean;
29
33
  }
30
34
  export declare function createValidateTopLevelCommand(): Command;
35
+ /**
36
+ * Decide which validation surfaces to run.
37
+ *
38
+ * A surface is included only when its config block is present, so coverage is
39
+ * discovered rather than hand-composed — and with `--only` retired, config
40
+ * presence is now the ONLY input. There is no longer a way for a caller to
41
+ * narrow the run, so there is no longer a way for a CI gate to ask for coverage
42
+ * it cannot get; the class of silent-coverage-loss bug the `--only` failure arms
43
+ * existed to catch is now unreachable by construction rather than guarded.
44
+ *
45
+ * `only` is still passed to {@link decidePhaseSelection} as `undefined`: that
46
+ * helper is shared with `vat build`, which keeps its own `--only`.
47
+ */
48
+ export declare function selectValidateSurfaces(config: ProjectConfig | undefined, verbose?: boolean): PhaseSelection;
31
49
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,6BAA6B,IAAI,OAAO,CAgDvD"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,EAYL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AAqB1B,MAAM,WAAW,sBAAsB;IACrC,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD,wBAAgB,6BAA6B,IAAI,OAAO,CA0DvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,OAAO,UAAQ,GACd,cAAc,CAiBhB"}