@vibe-agent-toolkit/cli 0.1.34-rc.2 → 0.1.35

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 (72) hide show
  1. package/dist/bin.js +4 -0
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/audit/git-url-clone.d.ts +32 -0
  4. package/dist/commands/audit/git-url-clone.d.ts.map +1 -0
  5. package/dist/commands/audit/git-url-clone.js +135 -0
  6. package/dist/commands/audit/git-url-clone.js.map +1 -0
  7. package/dist/commands/audit/provenance.d.ts +33 -0
  8. package/dist/commands/audit/provenance.d.ts.map +1 -0
  9. package/dist/commands/audit/provenance.js +57 -0
  10. package/dist/commands/audit/provenance.js.map +1 -0
  11. package/dist/commands/audit.d.ts.map +1 -1
  12. package/dist/commands/audit.js +218 -72
  13. package/dist/commands/audit.js.map +1 -1
  14. package/dist/commands/claude/marketplace/git-publish.d.ts +11 -0
  15. package/dist/commands/claude/marketplace/git-publish.d.ts.map +1 -1
  16. package/dist/commands/claude/marketplace/git-publish.js +78 -1
  17. package/dist/commands/claude/marketplace/git-publish.js.map +1 -1
  18. package/dist/commands/claude/marketplace/publish-tree.d.ts +9 -0
  19. package/dist/commands/claude/marketplace/publish-tree.d.ts.map +1 -1
  20. package/dist/commands/claude/marketplace/publish-tree.js +14 -1
  21. package/dist/commands/claude/marketplace/publish-tree.js.map +1 -1
  22. package/dist/commands/claude/marketplace/publish.d.ts.map +1 -1
  23. package/dist/commands/claude/marketplace/publish.js +19 -0
  24. package/dist/commands/claude/marketplace/publish.js.map +1 -1
  25. package/dist/commands/claude/marketplace/tag-utils.d.ts +11 -0
  26. package/dist/commands/claude/marketplace/tag-utils.d.ts.map +1 -0
  27. package/dist/commands/claude/marketplace/tag-utils.js +17 -0
  28. package/dist/commands/claude/marketplace/tag-utils.js.map +1 -0
  29. package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
  30. package/dist/commands/claude/marketplace/validate.js +2 -1
  31. package/dist/commands/claude/marketplace/validate.js.map +1 -1
  32. package/dist/commands/claude/plugin/build.d.ts.map +1 -1
  33. package/dist/commands/claude/plugin/build.js +49 -25
  34. package/dist/commands/claude/plugin/build.js.map +1 -1
  35. package/dist/commands/claude/plugin/plugin-changelog.d.ts +18 -0
  36. package/dist/commands/claude/plugin/plugin-changelog.d.ts.map +1 -0
  37. package/dist/commands/claude/plugin/plugin-changelog.js +27 -0
  38. package/dist/commands/claude/plugin/plugin-changelog.js.map +1 -0
  39. package/dist/commands/claude/plugin/plugin-json-merge.d.ts +29 -0
  40. package/dist/commands/claude/plugin/plugin-json-merge.d.ts.map +1 -1
  41. package/dist/commands/claude/plugin/plugin-json-merge.js +28 -14
  42. package/dist/commands/claude/plugin/plugin-json-merge.js.map +1 -1
  43. package/dist/commands/corpus/index.d.ts +6 -0
  44. package/dist/commands/corpus/index.d.ts.map +1 -0
  45. package/dist/commands/corpus/index.js +53 -0
  46. package/dist/commands/corpus/index.js.map +1 -0
  47. package/dist/commands/corpus/report.d.ts +75 -0
  48. package/dist/commands/corpus/report.d.ts.map +1 -0
  49. package/dist/commands/corpus/report.js +83 -0
  50. package/dist/commands/corpus/report.js.map +1 -0
  51. package/dist/commands/corpus/runner.d.ts +24 -0
  52. package/dist/commands/corpus/runner.d.ts.map +1 -0
  53. package/dist/commands/corpus/runner.js +246 -0
  54. package/dist/commands/corpus/runner.js.map +1 -0
  55. package/dist/commands/corpus/scan.d.ts +15 -0
  56. package/dist/commands/corpus/scan.d.ts.map +1 -0
  57. package/dist/commands/corpus/scan.js +90 -0
  58. package/dist/commands/corpus/scan.js.map +1 -0
  59. package/dist/commands/corpus/seed.d.ts +178 -0
  60. package/dist/commands/corpus/seed.d.ts.map +1 -0
  61. package/dist/commands/corpus/seed.js +63 -0
  62. package/dist/commands/corpus/seed.js.map +1 -0
  63. package/dist/commands/inventory.d.ts +17 -0
  64. package/dist/commands/inventory.d.ts.map +1 -0
  65. package/dist/commands/inventory.js +90 -0
  66. package/dist/commands/inventory.js.map +1 -0
  67. package/dist/utils/git-url.d.ts +43 -0
  68. package/dist/utils/git-url.d.ts.map +1 -0
  69. package/dist/utils/git-url.js +135 -0
  70. package/dist/utils/git-url.js.map +1 -0
  71. package/docs/audit.md +54 -3
  72. package/package.json +11 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-changelog.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-changelog.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACxC,MAAM,GAAG,SAAS,CASpB"}
@@ -0,0 +1,27 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { safePath } from '@vibe-agent-toolkit/utils';
3
+ /**
4
+ * Resolve the per-plugin CHANGELOG file path for a marketplace publish.
5
+ *
6
+ * Resolution order:
7
+ * 1. If `entry.changelog` is provided, treat it as a path relative to the
8
+ * plugin source dir. Returns the absolute path if the file exists; else
9
+ * `undefined` (a config-supplied path that doesn't resolve is a no-op).
10
+ * 2. Otherwise, default to `<pluginSourceDir>/CHANGELOG.md` if that file
11
+ * exists; else `undefined`.
12
+ *
13
+ * The default path is anchored to the plugin's *source* dir (the `source`
14
+ * field on the marketplace plugin entry, default `plugins/<name>`). Callers
15
+ * pass the resolved source dir directly — this helper does not assume layout.
16
+ */
17
+ export function resolvePluginChangelogPath(pluginSourceDir, entry) {
18
+ if (entry.changelog) {
19
+ const configured = safePath.join(pluginSourceDir, entry.changelog);
20
+ // eslint-disable-next-line security/detect-non-literal-fs-filename
21
+ return existsSync(configured) ? configured : undefined;
22
+ }
23
+ const defaulted = safePath.join(pluginSourceDir, 'CHANGELOG.md');
24
+ // eslint-disable-next-line security/detect-non-literal-fs-filename
25
+ return existsSync(defaulted) ? defaulted : undefined;
26
+ }
27
+ //# sourceMappingURL=plugin-changelog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-changelog.js","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-changelog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CACxC,eAAuB,EACvB,KAAyC;IAEzC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACnE,mEAAmE;QACnE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IACjE,mEAAmE;IACnE,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
@@ -6,10 +6,21 @@
6
6
  * - Author wins on: all other keys (keywords, repository, homepage, license, ...)
7
7
  * - description: config.description ?? author.description ?? `${name} plugin`
8
8
  *
9
+ * Version resolution lives in `resolveVersion` (config > plugin.json > root) and
10
+ * happens at the caller in `build.ts`. By the time `mergePluginJson` runs, the
11
+ * value passed in `vat.version` IS the resolved answer — this function does no
12
+ * additional precedence work for version.
13
+ *
9
14
  * Mismatches on VAT-winning fields produce warnings — never errors.
10
15
  */
11
16
  export interface VatGeneratedFields {
12
17
  name: string;
18
+ /**
19
+ * The resolved plugin version (already gone through the precedence chain in
20
+ * `resolveVersion`). `undefined` only when all sources (config, plugin.json,
21
+ * root package.json) are absent — in which case `version` is omitted from
22
+ * the merged output entirely.
23
+ */
13
24
  version: string | undefined;
14
25
  author: {
15
26
  name: string;
@@ -25,5 +36,23 @@ export interface MergePluginJsonResult {
25
36
  merged: Record<string, unknown>;
26
37
  warnings: string[];
27
38
  }
39
+ export interface ResolveVersionLogger {
40
+ warn(message: string): void;
41
+ }
42
+ /**
43
+ * Resolve the effective plugin version using the precedence chain:
44
+ * marketplace-config-supplied version > plugin.json:version > root package.json version
45
+ *
46
+ * If both the config and plugin.json supply a version and they disagree, a warning is
47
+ * emitted via the supplied logger (config still wins). When agreement holds — or when
48
+ * one side is absent — no warning is emitted.
49
+ *
50
+ * Returns `undefined` only when all three sources are absent.
51
+ */
52
+ export declare function resolveVersion(configEntry: {
53
+ version?: string | undefined;
54
+ } | undefined, authorJson: {
55
+ version?: string | undefined;
56
+ } | undefined, rootVersion: string | undefined, logger?: ResolveVersionLogger): string | undefined;
28
57
  export declare function mergePluginJson(args: MergePluginJsonArgs): MergePluginJsonResult;
29
58
  //# sourceMappingURL=plugin-json-merge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-json-merge.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-json-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,kBAAkB,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA6ED,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,CAgBhF"}
1
+ {"version":3,"file":"plugin-json-merge.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-json-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,kBAAkB,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AA+CD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,EACzD,UAAU,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,EACxD,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,GAAE,oBAA8B,GACrC,MAAM,GAAG,SAAS,CAYpB;AAcD,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,CAiBhF"}
@@ -6,6 +6,11 @@
6
6
  * - Author wins on: all other keys (keywords, repository, homepage, license, ...)
7
7
  * - description: config.description ?? author.description ?? `${name} plugin`
8
8
  *
9
+ * Version resolution lives in `resolveVersion` (config > plugin.json > root) and
10
+ * happens at the caller in `build.ts`. By the time `mergePluginJson` runs, the
11
+ * value passed in `vat.version` IS the resolved answer — this function does no
12
+ * additional precedence work for version.
13
+ *
9
14
  * Mismatches on VAT-winning fields produce warnings — never errors.
10
15
  */
11
16
  const VAT_OWNED_KEYS = new Set(['name', 'version', 'author']);
@@ -37,22 +42,30 @@ function collectWarnings(vat, authorJson, mergedAuthor) {
37
42
  if ('name' in authorJson && authorJson['name'] !== vat.name) {
38
43
  warnings.push(`plugin.json "name" mismatch: author value ${JSON.stringify(authorJson['name'])} ignored; using VAT-generated "${vat.name}".`);
39
44
  }
40
- if (vat.version !== undefined &&
41
- 'version' in authorJson &&
42
- authorJson['version'] !== vat.version) {
43
- warnings.push(`plugin.json "version" mismatch: author value ${JSON.stringify(authorJson['version'])} ignored; using VAT-generated "${vat.version}".`);
44
- }
45
45
  if ('author' in authorJson && !deepEqual(authorJson['author'], mergedAuthor)) {
46
46
  warnings.push(`plugin.json "author" mismatch: author-supplied value discarded; using VAT-generated author object.`);
47
47
  }
48
48
  return warnings;
49
49
  }
50
- function resolveVersion(vat, authorJson) {
51
- if (vat.version !== undefined)
52
- return vat.version;
53
- if (authorJson && typeof authorJson['version'] === 'string')
54
- return authorJson['version'];
55
- return undefined;
50
+ /**
51
+ * Resolve the effective plugin version using the precedence chain:
52
+ * marketplace-config-supplied version > plugin.json:version > root package.json version
53
+ *
54
+ * If both the config and plugin.json supply a version and they disagree, a warning is
55
+ * emitted via the supplied logger (config still wins). When agreement holds — or when
56
+ * one side is absent — no warning is emitted.
57
+ *
58
+ * Returns `undefined` only when all three sources are absent.
59
+ */
60
+ export function resolveVersion(configEntry, authorJson, rootVersion, logger = console) {
61
+ const config = configEntry?.version;
62
+ const author = authorJson?.version;
63
+ if (config && author && config !== author) {
64
+ logger.warn(`Plugin version mismatch: marketplace config declares ${config}, ` +
65
+ `plugin.json declares ${author}. Using config (${config}). ` +
66
+ `Reconcile by removing one or the other.`);
67
+ }
68
+ return config ?? author ?? rootVersion;
56
69
  }
57
70
  function resolveDescription(vat, configDescription, authorJson) {
58
71
  const authorDescription = authorJson && typeof authorJson['description'] === 'string'
@@ -64,9 +77,10 @@ export function mergePluginJson(args) {
64
77
  const { vat, configDescription, authorJson } = args;
65
78
  const merged = collectAuthorPassthrough(authorJson);
66
79
  merged['name'] = vat.name;
67
- const version = resolveVersion(vat, authorJson);
68
- if (version !== undefined) {
69
- merged['version'] = version;
80
+ // Version is already resolved by the caller via resolveVersion.
81
+ // Omit entirely when no source supplied a value.
82
+ if (vat.version !== undefined) {
83
+ merged['version'] = vat.version;
70
84
  }
71
85
  merged['author'] = buildAuthorObject(vat);
72
86
  merged['description'] = resolveDescription(vat, configDescription, authorJson);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-json-merge.js","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-json-merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-json-merge.js","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-json-merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Corpus command group — Phase 1 ships only `scan`.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createCorpusCommand(): Command;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/corpus/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,mBAAmB,IAAI,OAAO,CAoD7C"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Corpus command group — Phase 1 ships only `scan`.
3
+ */
4
+ import { Command } from 'commander';
5
+ import { corpusScanCommand } from './scan.js';
6
+ export function createCorpusCommand() {
7
+ const corpus = new Command('corpus');
8
+ corpus
9
+ .description('Run vat audit (and optionally vat skill review) at scale across a tracked plugin seed')
10
+ .helpCommand(false);
11
+ corpus
12
+ .command('scan [seed-file]')
13
+ .description('Audit each plugin in the seed; write a per-run snapshot under --out')
14
+ .argument('[seed-file]', 'Path to seed YAML (default: corpus/seed.yaml)')
15
+ .requiredOption('--out <dir>', 'Output directory for the run snapshot (no default — must be specified)')
16
+ .option('--with-review', 'Also invoke vat skill review per plugin (LLM-backed; uses API tokens)')
17
+ .option('--debug', 'Enable debug logging and preserve cloned tempdirs')
18
+ .action(async function (seedFile) {
19
+ await corpusScanCommand(seedFile, this.optsWithGlobals());
20
+ })
21
+ .addHelpText('after', `
22
+ Description:
23
+ Reads a seed YAML listing plugins to audit (each entry: { source, name,
24
+ validation? }), runs 'vat audit' against each (and optionally 'vat skill
25
+ review' with --with-review), writes summary.yaml plus per-plugin sibling
26
+ files into a date-sha subdirectory of --out.
27
+
28
+ source forms accepted (same as vat audit):
29
+ - local path (absolute or relative)
30
+ - https://host/owner/repo.git[#ref[:subpath]]
31
+ - GitHub web URL (https://github.com/owner/repo/tree/<ref>/<subpath>)
32
+ - GitHub shorthand (owner/repo, with optional #ref:subpath)
33
+ - SSH URL (git@host:owner/repo.git or ssh://...)
34
+ - file:// URL (local bare-repo testing)
35
+
36
+ Output:
37
+ <--out>/<UTC-date>-<vat-short-sha>/
38
+ summary.yaml # index: per-plugin status + totals
39
+ <name>-audit.yaml # full audit output per plugin
40
+ <name>-review.md # full skill-review output (only with --with-review)
41
+
42
+ Exit codes:
43
+ 0 - scan completed (regardless of unloadable plugins)
44
+ 2 - scan failed to start (seed missing, --out missing, etc.)
45
+ 130 - interrupted by SIGINT (partial results written)
46
+
47
+ Example:
48
+ $ vat corpus scan --out ~/scratch/vat-corpus-runs
49
+ $ vat corpus scan corpus/seed.yaml --out ~/scratch/vat-corpus-runs --with-review
50
+ `);
51
+ return corpus;
52
+ }
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/corpus/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAA0B,MAAM,WAAW,CAAC;AAEtE,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM;SACH,WAAW,CAAC,uFAAuF,CAAC;SACpG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEtB,MAAM;SACH,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,qEAAqE,CAAC;SAClF,QAAQ,CAAC,aAAa,EAAE,+CAA+C,CAAC;SACxE,cAAc,CAAC,aAAa,EAAE,wEAAwE,CAAC;SACvG,MAAM,CAAC,eAAe,EAAE,uEAAuE,CAAC;SAChG,MAAM,CAAC,SAAS,EAAE,mDAAmD,CAAC;SACtE,MAAM,CAAC,KAAK,WAA0B,QAA4B;QACjE,MAAM,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAuB,CAAC,CAAC;IACjF,CAAC,CAAC;SACD,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BL,CACI,CAAC;IAEJ,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Run-summary types + writer for `vat corpus scan`.
3
+ *
4
+ * `summary.yaml` is the index for one scan run. Per-plugin full audit
5
+ * outputs and full skill-review outputs are written as sibling files
6
+ * referenced by relative `output_path`. Totals are derived from the
7
+ * per-plugin rows so callers can pass raw rows and let this module
8
+ * compute aggregates.
9
+ */
10
+ export type AuditStatus = 'success' | 'warning' | 'error' | 'unloadable';
11
+ export type ReviewStatus = 'ok' | 'error' | 'skipped';
12
+ export interface AuditSummary {
13
+ errors: number;
14
+ warnings: number;
15
+ info: number;
16
+ files_scanned: number;
17
+ }
18
+ export interface AuditOutcome {
19
+ status: AuditStatus;
20
+ duration_ms: number;
21
+ summary?: AuditSummary;
22
+ findings_emitted?: number;
23
+ output_path?: string;
24
+ error?: string;
25
+ }
26
+ export interface ReviewOutcome {
27
+ status: ReviewStatus;
28
+ duration_ms: number;
29
+ output_path?: string;
30
+ error?: string;
31
+ }
32
+ export interface PluginRow {
33
+ source: string;
34
+ name: string;
35
+ validation_applied: boolean;
36
+ audit: AuditOutcome;
37
+ review: ReviewOutcome;
38
+ }
39
+ export interface RunReport {
40
+ schema_version: 1;
41
+ generated_at: string;
42
+ vat_version: string;
43
+ vat_commit: string;
44
+ seed_file: string;
45
+ flags: {
46
+ with_review: boolean;
47
+ debug: boolean;
48
+ };
49
+ plugins: PluginRow[];
50
+ }
51
+ export interface RunTotals {
52
+ plugins: number;
53
+ audit_clean: number;
54
+ audit_warning: number;
55
+ audit_error: number;
56
+ unloadable: number;
57
+ reviewed?: number;
58
+ }
59
+ /**
60
+ * Compute totals over the per-plugin rows.
61
+ */
62
+ export declare function computeTotals(report: RunReport): RunTotals;
63
+ /**
64
+ * Build the run directory name: `<YYYY-MM-DD>-<vat-short-sha>`.
65
+ * Date is the UTC date of `generated_at`.
66
+ */
67
+ export declare function runDirectoryName(report: RunReport): string;
68
+ /**
69
+ * Write `summary.yaml` (and create the run directory) under `outDir`.
70
+ * Returns the absolute path of the created run directory. Per-plugin
71
+ * sibling files (audit outputs, review outputs) are written by the
72
+ * runner — this function only writes the summary index.
73
+ */
74
+ export declare function writeRunReport(report: RunReport, outDir: string): Promise<string>;
75
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/commands/corpus/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,OAAO,CAAC;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,CAAC,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAmC1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAG1D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBvF"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Run-summary types + writer for `vat corpus scan`.
3
+ *
4
+ * `summary.yaml` is the index for one scan run. Per-plugin full audit
5
+ * outputs and full skill-review outputs are written as sibling files
6
+ * referenced by relative `output_path`. Totals are derived from the
7
+ * per-plugin rows so callers can pass raw rows and let this module
8
+ * compute aggregates.
9
+ */
10
+ import { mkdirSync, writeFileSync } from 'node:fs';
11
+ import { safePath } from '@vibe-agent-toolkit/utils';
12
+ import * as yaml from 'js-yaml';
13
+ /**
14
+ * Compute totals over the per-plugin rows.
15
+ */
16
+ export function computeTotals(report) {
17
+ const totals = {
18
+ plugins: report.plugins.length,
19
+ audit_clean: 0,
20
+ audit_warning: 0,
21
+ audit_error: 0,
22
+ unloadable: 0,
23
+ };
24
+ for (const row of report.plugins) {
25
+ switch (row.audit.status) {
26
+ case 'success': {
27
+ totals.audit_clean += 1;
28
+ break;
29
+ }
30
+ case 'warning': {
31
+ totals.audit_warning += 1;
32
+ break;
33
+ }
34
+ case 'error': {
35
+ totals.audit_error += 1;
36
+ break;
37
+ }
38
+ case 'unloadable': {
39
+ totals.unloadable += 1;
40
+ break;
41
+ }
42
+ }
43
+ }
44
+ if (report.flags.with_review) {
45
+ totals.reviewed = report.plugins.filter((p) => p.review.status !== 'skipped').length;
46
+ }
47
+ return totals;
48
+ }
49
+ /**
50
+ * Build the run directory name: `<YYYY-MM-DD>-<vat-short-sha>`.
51
+ * Date is the UTC date of `generated_at`.
52
+ */
53
+ export function runDirectoryName(report) {
54
+ const datePart = report.generated_at.slice(0, 10); // 'YYYY-MM-DD'
55
+ return `${datePart}-${report.vat_commit}`;
56
+ }
57
+ /**
58
+ * Write `summary.yaml` (and create the run directory) under `outDir`.
59
+ * Returns the absolute path of the created run directory. Per-plugin
60
+ * sibling files (audit outputs, review outputs) are written by the
61
+ * runner — this function only writes the summary index.
62
+ */
63
+ export async function writeRunReport(report, outDir) {
64
+ const runDir = safePath.join(outDir, runDirectoryName(report));
65
+ // eslint-disable-next-line local/no-fs-mkdirSync, security/detect-non-literal-fs-filename -- the corpus output dir is caller-supplied; mkdir-recursive is the right call here
66
+ mkdirSync(runDir, { recursive: true });
67
+ const totals = computeTotals(report);
68
+ const dump = {
69
+ schema_version: report.schema_version,
70
+ generated_at: report.generated_at,
71
+ vat_version: report.vat_version,
72
+ vat_commit: report.vat_commit,
73
+ seed_file: report.seed_file,
74
+ flags: report.flags,
75
+ plugins: report.plugins,
76
+ totals,
77
+ };
78
+ const summaryPath = safePath.join(runDir, 'summary.yaml');
79
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- summaryPath composed under our run dir
80
+ writeFileSync(summaryPath, yaml.dump(dump, { lineWidth: -1 }), 'utf-8');
81
+ return runDir;
82
+ }
83
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/commands/corpus/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAuDhC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,MAAM,MAAM,GAAc;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QAC9B,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;KACd,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,QAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzB,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;gBACxB,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;gBAC1B,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;gBACxB,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;gBACvB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACvF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;IAClE,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAiB,EAAE,MAAc;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,8KAA8K;IAC9K,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG;QACX,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM;KACP,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1D,6GAA6G;IAC7G,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAExE,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Per-plugin orchestrator for `vat corpus scan`.
3
+ *
4
+ * Phase 1 scope: resolve source (local or URL), optionally overlay a
5
+ * synthetic `vibe-agent-toolkit.config.yaml` from the entry's `validation:`
6
+ * block, run `vat audit` in-process, optionally invoke `vat skill review`,
7
+ * write per-plugin sibling files into the run directory, and return a
8
+ * PluginRow. Per-plugin failures never abort the loop.
9
+ *
10
+ * URL handling clones via Layer 1's `withClonedRepo` helper. Validation
11
+ * overlay (Task 5) is added on top of this base.
12
+ */
13
+ import type { PluginRow } from './report.js';
14
+ import type { PluginEntry } from './seed.js';
15
+ export interface RunnerOptions {
16
+ runDir: string;
17
+ withReview: boolean;
18
+ debug: boolean;
19
+ }
20
+ /**
21
+ * Run audit + optional review against one plugin entry.
22
+ */
23
+ export declare function auditOnePlugin(entry: PluginEntry, opts: RunnerOptions): Promise<PluginRow>;
24
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/commands/corpus/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,OAAO,KAAK,EAA2C,SAAS,EAAiB,MAAM,aAAa,CAAC;AACrG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAqB7C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AA0BD;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,SAAS,CAAC,CAKpB"}