@vibe-agent-toolkit/cli 0.1.39-rc.6 → 0.1.39-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 (34) hide show
  1. package/dist/commands/audit/git-url-clone.d.ts +1 -1
  2. package/dist/commands/audit/git-url-clone.d.ts.map +1 -1
  3. package/dist/commands/audit/git-url-clone.js +3 -67
  4. package/dist/commands/audit/git-url-clone.js.map +1 -1
  5. package/dist/commands/audit.d.ts.map +1 -1
  6. package/dist/commands/audit.js +1 -2
  7. package/dist/commands/audit.js.map +1 -1
  8. package/dist/commands/consistency-check.d.ts +13 -0
  9. package/dist/commands/consistency-check.d.ts.map +1 -1
  10. package/dist/commands/consistency-check.js +98 -1
  11. package/dist/commands/consistency-check.js.map +1 -1
  12. package/dist/commands/corpus/runner.d.ts.map +1 -1
  13. package/dist/commands/corpus/runner.js +1 -2
  14. package/dist/commands/corpus/runner.js.map +1 -1
  15. package/dist/commands/skill/index.d.ts.map +1 -1
  16. package/dist/commands/skill/index.js +2 -0
  17. package/dist/commands/skill/index.js.map +1 -1
  18. package/dist/commands/skill/test/configure.d.ts +22 -0
  19. package/dist/commands/skill/test/configure.d.ts.map +1 -0
  20. package/dist/commands/skill/test/configure.js +127 -0
  21. package/dist/commands/skill/test/configure.js.map +1 -0
  22. package/dist/commands/skill/test/index.d.ts +6 -0
  23. package/dist/commands/skill/test/index.d.ts.map +1 -0
  24. package/dist/commands/skill/test/index.js +16 -0
  25. package/dist/commands/skill/test/index.js.map +1 -0
  26. package/dist/commands/skill/test/run.d.ts +38 -0
  27. package/dist/commands/skill/test/run.d.ts.map +1 -0
  28. package/dist/commands/skill/test/run.js +327 -0
  29. package/dist/commands/skill/test/run.js.map +1 -0
  30. package/package.json +11 -11
  31. package/dist/utils/git-url.d.ts +0 -43
  32. package/dist/utils/git-url.d.ts.map +0 -1
  33. package/dist/utils/git-url.js +0 -135
  34. package/dist/utils/git-url.js.map +0 -1
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { Command } from 'commander';
9
9
  import { createSkillReviewCommand } from './review.js';
10
+ import { createSkillTestCommand } from './test/index.js';
10
11
  export function createSkillCommand() {
11
12
  const command = new Command('skill');
12
13
  command
@@ -20,6 +21,7 @@ For detailed command help:
20
21
  $ vat skill <command> --help
21
22
  `);
22
23
  command.addCommand(createSkillReviewCommand());
24
+ command.addCommand(createSkillTestCommand());
23
25
  return command;
24
26
  }
25
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/skill/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO;SACJ,WAAW,CAAC,oEAAoE,CAAC;SACjF,WAAW,CAAC,KAAK,CAAC;SAClB,WAAW,CACV,OAAO,EACP;;;;;;CAML,CACI,CAAC;IAEJ,OAAO,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAE/C,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/skill/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO;SACJ,WAAW,CAAC,oEAAoE,CAAC;SACjF,WAAW,CAAC,KAAK,CAAC;SAClB,WAAW,CACV,OAAO,EACP;;;;;;CAML,CACI,CAAC;IAEJ,OAAO,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `vat skill test configure <skill-name>` — upsert `skills.config.<skill>.test`
3
+ * in vibe-agent-toolkit.config.yaml without disturbing comments or key ordering.
4
+ *
5
+ * Orchestration only. Domain logic lives in upsertTestConfig (agent-skills).
6
+ * Mirrors review.ts error-handling conventions (handleCommandError / projectRootOrNull).
7
+ */
8
+ import { Command } from 'commander';
9
+ export interface SkillTestConfigureOptions {
10
+ auth?: string;
11
+ maxTurns?: string;
12
+ maxBudgetUsd?: string;
13
+ timeout?: string;
14
+ stall?: string;
15
+ model?: string;
16
+ baseline?: boolean;
17
+ evals?: string;
18
+ print?: boolean;
19
+ debug?: boolean;
20
+ }
21
+ export declare function createSkillTestConfigureCommand(): Command;
22
+ //# sourceMappingURL=configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../../../src/commands/skill/test/configure.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqGD,wBAAgB,+BAA+B,IAAI,OAAO,CAmCzD"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * `vat skill test configure <skill-name>` — upsert `skills.config.<skill>.test`
3
+ * in vibe-agent-toolkit.config.yaml without disturbing comments or key ordering.
4
+ *
5
+ * Orchestration only. Domain logic lives in upsertTestConfig (agent-skills).
6
+ * Mirrors review.ts error-handling conventions (handleCommandError / projectRootOrNull).
7
+ */
8
+ import { readFileSync, writeFileSync } from 'node:fs';
9
+ import { upsertTestConfig } from '@vibe-agent-toolkit/agent-skills';
10
+ import { ProjectConfigSchema } from '@vibe-agent-toolkit/resources';
11
+ import { findProjectRoot, safePath } from '@vibe-agent-toolkit/utils';
12
+ import { Command } from 'commander';
13
+ import * as yaml from 'yaml';
14
+ import { handleCommandError } from '../../../utils/command-error.js';
15
+ import { createLogger } from '../../../utils/logger.js';
16
+ const CONFIG_FILENAME = 'vibe-agent-toolkit.config.yaml';
17
+ const VALID_AUTH_VALUES = ['inherit', 'subscription', 'api-key', 'auto'];
18
+ function parsePositiveInt(value, flag) {
19
+ const n = Number.parseInt(value, 10);
20
+ if (!Number.isInteger(n) || n <= 0) {
21
+ throw new Error(`${flag} must be a positive integer. Got: ${value}`);
22
+ }
23
+ return n;
24
+ }
25
+ function parsePositiveFloat(value, flag) {
26
+ const n = Number.parseFloat(value);
27
+ if (!Number.isFinite(n) || n <= 0) {
28
+ throw new Error(`${flag} must be a positive number. Got: ${value}`);
29
+ }
30
+ return n;
31
+ }
32
+ function buildKnobs(options) {
33
+ const knobs = {};
34
+ if (options.auth !== undefined) {
35
+ if (!VALID_AUTH_VALUES.includes(options.auth)) {
36
+ throw new Error(`--auth must be one of: ${VALID_AUTH_VALUES.join(', ')}. Got: ${options.auth}`);
37
+ }
38
+ knobs.auth = options.auth;
39
+ }
40
+ if (options.maxTurns !== undefined) {
41
+ knobs.maxTurns = parsePositiveInt(options.maxTurns, '--max-turns');
42
+ }
43
+ if (options.maxBudgetUsd !== undefined) {
44
+ knobs.maxBudgetUsd = parsePositiveFloat(options.maxBudgetUsd, '--max-budget-usd');
45
+ }
46
+ if (options.timeout !== undefined) {
47
+ knobs.timeout = parsePositiveInt(options.timeout, '--timeout');
48
+ }
49
+ if (options.stall !== undefined) {
50
+ knobs.stall = parsePositiveInt(options.stall, '--stall');
51
+ }
52
+ if (options.model !== undefined) {
53
+ knobs.model = options.model;
54
+ }
55
+ if (options.baseline !== undefined) {
56
+ knobs.baseline = options.baseline;
57
+ }
58
+ if (options.evals !== undefined) {
59
+ knobs.evals = options.evals;
60
+ }
61
+ return knobs;
62
+ }
63
+ async function configureCommand(skillName, options) {
64
+ const logger = createLogger(options.debug ? { debug: true } : {});
65
+ const startTime = Date.now();
66
+ try {
67
+ const projectRoot = findProjectRoot(process.cwd());
68
+ if (projectRoot === null) {
69
+ throw new Error('skill test configure requires a vibe-agent-toolkit.config.yaml or .git/ ancestor. ' +
70
+ 'Run from inside a VAT project or initialize one.');
71
+ }
72
+ const configPath = safePath.join(projectRoot, CONFIG_FILENAME);
73
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- configPath constructed from trusted projectRoot
74
+ const yamlText = readFileSync(configPath, 'utf-8');
75
+ const knobs = buildKnobs(options);
76
+ const updatedYaml = upsertTestConfig(yamlText, skillName, knobs);
77
+ // Validate the FULL updated config before writing.
78
+ const parsed = yaml.parse(updatedYaml);
79
+ const validation = ProjectConfigSchema.safeParse(parsed);
80
+ if (!validation.success) {
81
+ throw new Error(`Updated config would fail schema validation: ${validation.error.message}`);
82
+ }
83
+ if (options.print) {
84
+ process.stdout.write(updatedYaml);
85
+ }
86
+ else {
87
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- configPath constructed from trusted projectRoot
88
+ writeFileSync(configPath, updatedYaml, 'utf-8');
89
+ logger.info(`Updated ${configPath}`);
90
+ }
91
+ }
92
+ catch (error) {
93
+ handleCommandError(error, logger, startTime, 'SkillTestConfigure');
94
+ }
95
+ }
96
+ export function createSkillTestConfigureCommand() {
97
+ const command = new Command('configure');
98
+ command
99
+ .description('Upsert the test block for a skill in vibe-agent-toolkit.config.yaml')
100
+ .argument('<skill>', 'Skill name (key under skills.config)')
101
+ .option('--auth <mode>', 'Auth mechanism: inherit | subscription | api-key | auto')
102
+ .option('--max-turns <n>', 'Cap on experimenter turns (positive integer)')
103
+ .option('--max-budget-usd <n>', 'Hard USD budget cap (positive number)')
104
+ .option('--timeout <s>', 'Wall-clock timeout in seconds (positive integer)')
105
+ .option('--stall <s>', 'Stall-watchdog seconds (positive integer)')
106
+ .option('--model <id>', 'Pinned model ID for reproducibility')
107
+ .option('--baseline', 'Enable with/without A/B baseline run')
108
+ .option('--evals <path>', 'Path to evals.json (relative to skill source)')
109
+ .option('--print', 'Print the updated YAML to stdout instead of writing the file')
110
+ .option('--debug', 'Enable debug logging')
111
+ .action(configureCommand)
112
+ .addHelpText('after', `
113
+ Description:
114
+ Reads vibe-agent-toolkit.config.yaml from the project root and upserts the
115
+ test block for the named skill. Comments and key ordering are preserved.
116
+ Only the knobs you pass are changed; other knob values remain intact.
117
+
118
+ Exit Codes:
119
+ 0 - Config updated successfully (or printed with --print)
120
+ 2 - Error (invalid option value, config validation failure, file not found)
121
+
122
+ Example:
123
+ $ vat skill test configure my-skill --auth subscription --max-turns 20
124
+ `);
125
+ return command;
126
+ }
127
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../../src/commands/skill/test/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `vat skill test` command group — behavioral testing of packaged skills in isolation.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createSkillTestCommand(): Command;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/skill/test/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `vat skill test` command group — behavioral testing of packaged skills in isolation.
3
+ */
4
+ import { Command } from 'commander';
5
+ import { createSkillTestConfigureCommand } from './configure.js';
6
+ import { createSkillTestRunCommand } from './run.js';
7
+ export function createSkillTestCommand() {
8
+ const command = new Command('test');
9
+ command
10
+ .description('Behaviorally test a packaged skill in isolation (run) or configure its test block (configure)')
11
+ .helpCommand(false);
12
+ command.addCommand(createSkillTestRunCommand());
13
+ command.addCommand(createSkillTestConfigureCommand());
14
+ return command;
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/skill/test/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,UAAU,sBAAsB;IACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;SACJ,WAAW,CACV,+FAA+F,CAChG;SACA,WAAW,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,UAAU,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * `vat skill test run <skill...>` — execute a packaged skill's eval suite in isolation.
3
+ *
4
+ * Thin orchestration layer: parse flags, resolve precedence (flag > config > default),
5
+ * print the §12 security warning, call runSkillTestHarness, map result/error to exit code.
6
+ * All domain logic lives in run-harness.ts (agent-skills package).
7
+ */
8
+ import { Command } from 'commander';
9
+ export interface SkillTestRunOptions {
10
+ with?: string[];
11
+ withOptional?: string[];
12
+ refresh?: boolean;
13
+ workdir?: string;
14
+ out?: string;
15
+ keep?: boolean;
16
+ dryRun?: boolean;
17
+ auth?: string;
18
+ requireAuth?: string;
19
+ baseline?: boolean;
20
+ allowUnverifiedSkillSource?: boolean;
21
+ iUnderstandThisRunsSkillCode?: boolean;
22
+ model?: string;
23
+ maxTurns?: string;
24
+ maxBudgetUsd?: string;
25
+ timeout?: string;
26
+ stall?: string;
27
+ debug?: boolean;
28
+ }
29
+ /**
30
+ * The unit-testable action for `vat skill test run`. Exported so tests can
31
+ * call it directly without parsing CLI args. Calls process.exit on completion.
32
+ *
33
+ * Note: the security ack enforcement lives inside runSkillTestHarness (domain),
34
+ * NOT here — this ensures the mock in tests can bypass it cleanly.
35
+ */
36
+ export declare function runSkillTestRun(skills: string[], options: SkillTestRunOptions): Promise<void>;
37
+ export declare function createSkillTestRunCommand(): Command;
38
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/skill/test/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA4OD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAMD,wBAAgB,yBAAyB,IAAI,OAAO,CA0DnD"}
@@ -0,0 +1,327 @@
1
+ /**
2
+ * `vat skill test run <skill...>` — execute a packaged skill's eval suite in isolation.
3
+ *
4
+ * Thin orchestration layer: parse flags, resolve precedence (flag > config > default),
5
+ * print the §12 security warning, call runSkillTestHarness, map result/error to exit code.
6
+ * All domain logic lives in run-harness.ts (agent-skills package).
7
+ */
8
+ import { basename } from 'node:path';
9
+ import { BootstrapNeededError, mapErrorToExitCode, runSkillTestHarness } from '@vibe-agent-toolkit/agent-skills';
10
+ import { findProjectRoot, toForwardSlash } from '@vibe-agent-toolkit/utils';
11
+ import { Command } from 'commander';
12
+ import { loadConfig } from '../../../utils/config-loader.js';
13
+ /** Extract the trailing path segment (cross-platform) from a path-like string. */
14
+ function lastPathSegment(p) {
15
+ return basename(toForwardSlash(p));
16
+ }
17
+ // ---------------------------------------------------------------------------
18
+ // Security warning (§12)
19
+ // ---------------------------------------------------------------------------
20
+ const SECURITY_WARNING = `
21
+ WARNING: vat skill test run executes arbitrary skill code inside a headless
22
+ Claude session. The experimenter prompt and all staged skill files run with
23
+ bypassPermissions. Pass --i-understand-this-runs-skill-code to acknowledge
24
+ this and proceed.
25
+ `.trim();
26
+ function printSecurityWarning() {
27
+ process.stderr.write(SECURITY_WARNING + '\n\n');
28
+ }
29
+ // ---------------------------------------------------------------------------
30
+ // Knob coercion helpers
31
+ // ---------------------------------------------------------------------------
32
+ function coercePositiveInt(value, flagName) {
33
+ if (value === undefined)
34
+ return undefined;
35
+ const n = Number.parseInt(value, 10);
36
+ if (!Number.isInteger(n) || n <= 0) {
37
+ throw new Error(`${flagName} must be a positive integer. Got: ${value}`);
38
+ }
39
+ return n;
40
+ }
41
+ function coercePositiveFloat(value, flagName) {
42
+ if (value === undefined)
43
+ return undefined;
44
+ const n = Number.parseFloat(value);
45
+ if (!Number.isFinite(n) || n <= 0) {
46
+ throw new Error(`${flagName} must be a positive number. Got: ${value}`);
47
+ }
48
+ return n;
49
+ }
50
+ function coerceKnobs(options) {
51
+ const result = {};
52
+ const maxTurns = coercePositiveInt(options.maxTurns, '--max-turns');
53
+ if (maxTurns !== undefined)
54
+ result.maxTurns = maxTurns;
55
+ const maxBudgetUsd = coercePositiveFloat(options.maxBudgetUsd, '--max-budget-usd');
56
+ if (maxBudgetUsd !== undefined)
57
+ result.maxBudgetUsd = maxBudgetUsd;
58
+ const timeout = coercePositiveInt(options.timeout, '--timeout');
59
+ if (timeout !== undefined)
60
+ result.timeout = timeout;
61
+ const stall = coercePositiveInt(options.stall, '--stall');
62
+ if (stall !== undefined)
63
+ result.stall = stall;
64
+ return result;
65
+ }
66
+ /**
67
+ * Parse a single `name=src` pair into a [name, SkillSourceSpec] tuple. The
68
+ * source half uses a `kind:value` prefix:
69
+ * workspace:foo · npm:@scope/s@1.2.3 · url:https://… · path:../baz · vendored
70
+ * A bare value without `name=` is rejected — every injected dep needs a name so
71
+ * the domain can key it (and so the skill resolves under that name in staging).
72
+ */
73
+ function parseWithPair(pair) {
74
+ const eq = pair.indexOf('=');
75
+ if (eq <= 0) {
76
+ throw new Error(`--with entries must be "name=<src>" (e.g. mydep=workspace:foo, bar=npm:@scope/s@1.2.3, baz=path:../baz). Got: ${pair}`);
77
+ }
78
+ const name = pair.slice(0, eq);
79
+ const src = pair.slice(eq + 1);
80
+ return [name, parseSourceSpec(src, pair)];
81
+ }
82
+ /** Parse the `kind:value` source half of a --with pair into a SkillSourceSpec. */
83
+ function parseSourceSpec(src, original) {
84
+ if (src === 'vendored')
85
+ return { vendored: true };
86
+ const colon = src.indexOf(':');
87
+ const kind = colon === -1 ? src : src.slice(0, colon);
88
+ const value = colon === -1 ? '' : src.slice(colon + 1);
89
+ switch (kind) {
90
+ case 'workspace': return requireValue(value, original, () => ({ workspace: value }));
91
+ case 'npm': return requireValue(value, original, () => ({ npm: value }));
92
+ case 'path': return requireValue(value, original, () => ({ path: value }));
93
+ case 'url': return requireValue(value, original, () => ({ url: value }));
94
+ default:
95
+ throw new Error(`--with source must start with workspace:|npm:|url:|path:|vendored. Got: ${original}`);
96
+ }
97
+ }
98
+ function requireValue(value, original, build) {
99
+ if (!value) {
100
+ throw new Error(`--with source is missing a value: ${original}`);
101
+ }
102
+ return build();
103
+ }
104
+ /** Parse an array of `name=src` flag values into a name→spec record. */
105
+ function parseWithFlags(pairs) {
106
+ if (pairs === undefined || pairs.length === 0)
107
+ return undefined;
108
+ const record = {};
109
+ for (const pair of pairs) {
110
+ const [name, spec] = parseWithPair(pair);
111
+ record[name] = spec;
112
+ }
113
+ return record;
114
+ }
115
+ /** Derive a stable name for a config-supplied (nameless) skill source descriptor. */
116
+ function descriptorName(d) {
117
+ if ('workspace' in d)
118
+ return d.workspace;
119
+ if ('npm' in d)
120
+ return d.npm.replace(/@[^@/]+$/, '');
121
+ if ('path' in d)
122
+ return lastPathSegment(d.path) || d.path;
123
+ if ('url' in d)
124
+ return 'url-dep';
125
+ return 'skill-creator';
126
+ }
127
+ /** Map a config descriptor array (with/optional) into a name→spec record. */
128
+ function descriptorsToRecord(list) {
129
+ if (list === undefined || list.length === 0)
130
+ return undefined;
131
+ const record = {};
132
+ for (const d of list)
133
+ record[descriptorName(d)] = d;
134
+ return record;
135
+ }
136
+ // ---------------------------------------------------------------------------
137
+ // Precedence resolution: flag > config > default
138
+ // ---------------------------------------------------------------------------
139
+ /**
140
+ * Load the persisted `skills.config.<skill>.test` block for the subject skill.
141
+ * The subject is the first positional skill name (a path or skill key). We key
142
+ * the config by its basename so `./dist/skills/my-skill/` matches `my-skill`.
143
+ * Missing config / missing file → undefined (defaults apply).
144
+ */
145
+ function loadTestConfig(skills) {
146
+ const projectRoot = findProjectRoot(process.cwd());
147
+ if (projectRoot === null)
148
+ return undefined;
149
+ let config;
150
+ try {
151
+ config = loadConfig(projectRoot);
152
+ }
153
+ catch {
154
+ return undefined; // tolerate a broken/absent config → defaults
155
+ }
156
+ const perSkill = config?.skills?.config;
157
+ if (perSkill === undefined)
158
+ return undefined;
159
+ const subject = skills[0] ?? '';
160
+ const base = lastPathSegment(subject) || subject;
161
+ return perSkill[subject]?.test ?? perSkill[base]?.test;
162
+ }
163
+ /** Resolve the project root used as the harness repoRoot anchor. */
164
+ function resolveRepoRoot() {
165
+ return findProjectRoot(process.cwd()) ?? process.cwd();
166
+ }
167
+ /** Copy flag-only passthrough options (no config counterpart) onto opts. */
168
+ function applyFlagOnlyOptions(opts, options) {
169
+ if (options.refresh !== undefined)
170
+ opts.refresh = options.refresh;
171
+ if (options.workdir !== undefined)
172
+ opts.workdir = options.workdir;
173
+ if (options.out !== undefined)
174
+ opts.out = options.out;
175
+ if (options.keep !== undefined)
176
+ opts.keep = options.keep;
177
+ if (options.dryRun !== undefined)
178
+ opts.dryRun = options.dryRun;
179
+ if (options.allowUnverifiedSkillSource !== undefined)
180
+ opts.allowUnverifiedSkillSource = options.allowUnverifiedSkillSource;
181
+ if (options.iUnderstandThisRunsSkillCode !== undefined)
182
+ opts.acknowledgedRunsSkillCode = options.iUnderstandThisRunsSkillCode;
183
+ }
184
+ /** Apply flag>config merges for scalar knobs (auth, model, baseline, eval/prompt). */
185
+ function applyScalarMerges(opts, options, config) {
186
+ const authMode = options.auth ?? config?.auth;
187
+ if (authMode !== undefined)
188
+ opts.auth = authMode;
189
+ const authRequirement = options.requireAuth ?? config?.requireAuth;
190
+ if (authRequirement !== undefined)
191
+ opts.requireAuth = authRequirement;
192
+ const baseline = options.baseline ?? config?.baseline;
193
+ if (baseline !== undefined)
194
+ opts.baseline = baseline;
195
+ const model = options.model ?? config?.model;
196
+ if (model !== undefined)
197
+ opts.model = model;
198
+ if (config?.evals !== undefined)
199
+ opts.evalsSubpath = config.evals;
200
+ if (config?.experimenterPrompt !== undefined)
201
+ opts.promptOverride = config.experimenterPrompt;
202
+ }
203
+ /** Apply flag>config merges for numeric knobs (turns/budget/timeout/stall). */
204
+ function applyKnobMerges(opts, knobs, config) {
205
+ const maxTurns = knobs.maxTurns ?? config?.maxTurns;
206
+ if (maxTurns !== undefined)
207
+ opts.maxTurns = maxTurns;
208
+ const maxBudgetUsd = knobs.maxBudgetUsd ?? config?.maxBudgetUsd;
209
+ if (maxBudgetUsd !== undefined)
210
+ opts.maxBudgetUsd = maxBudgetUsd;
211
+ const timeout = knobs.timeout ?? config?.timeout;
212
+ if (timeout !== undefined)
213
+ opts.timeout = timeout;
214
+ const stall = knobs.stall ?? config?.stall;
215
+ if (stall !== undefined)
216
+ opts.stall = stall;
217
+ }
218
+ /** Apply flag>config merges for injected-dependency records. */
219
+ function applyDepMerges(opts, options, config) {
220
+ const withSources = parseWithFlags(options.with) ?? descriptorsToRecord(config?.with);
221
+ if (withSources !== undefined)
222
+ opts.withSources = withSources;
223
+ const withOptional = parseWithFlags(options.withOptional) ?? descriptorsToRecord(config?.optional);
224
+ if (withOptional !== undefined)
225
+ opts.withOptional = withOptional;
226
+ }
227
+ /**
228
+ * Resolve CLI flags → RunHarnessOptions, applying flag > config > default
229
+ * precedence. CLI flags win; config (`skills.config.<skill>.test`) fills gaps;
230
+ * built-in defaults (inside the domain) are the final fallback.
231
+ */
232
+ function buildHarnessOpts(skills, options, knobs, config) {
233
+ const opts = { skills, repoRoot: resolveRepoRoot() };
234
+ applyFlagOnlyOptions(opts, options);
235
+ applyScalarMerges(opts, options, config);
236
+ applyKnobMerges(opts, knobs, config);
237
+ applyDepMerges(opts, options, config);
238
+ return opts;
239
+ }
240
+ // ---------------------------------------------------------------------------
241
+ // Testable action
242
+ // ---------------------------------------------------------------------------
243
+ /**
244
+ * The unit-testable action for `vat skill test run`. Exported so tests can
245
+ * call it directly without parsing CLI args. Calls process.exit on completion.
246
+ *
247
+ * Note: the security ack enforcement lives inside runSkillTestHarness (domain),
248
+ * NOT here — this ensures the mock in tests can bypass it cleanly.
249
+ */
250
+ export async function runSkillTestRun(skills, options) {
251
+ printSecurityWarning();
252
+ const knobs = coerceKnobs(options);
253
+ const config = loadTestConfig(skills);
254
+ const harnessOpts = buildHarnessOpts(skills, options, knobs, config);
255
+ try {
256
+ const result = await runSkillTestHarness(harnessOpts);
257
+ process.stderr.write(`Harness: ${result.harnessPath}\n`);
258
+ process.stderr.write(`Summary: ${result.summary}\n`);
259
+ process.exit(result.exitCode);
260
+ return;
261
+ }
262
+ catch (err) {
263
+ const exitCode = mapErrorToExitCode(err);
264
+ // BootstrapNeededError (exit 3) is the happy "wrote a template, fill it in
265
+ // and re-run" path — surface its message plainly, not as a hard `Error:`.
266
+ if (err instanceof BootstrapNeededError) {
267
+ process.stderr.write(`${err.message}\n`);
268
+ }
269
+ else {
270
+ process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
271
+ }
272
+ process.exit(exitCode);
273
+ return;
274
+ }
275
+ }
276
+ // ---------------------------------------------------------------------------
277
+ // Commander command builder
278
+ // ---------------------------------------------------------------------------
279
+ export function createSkillTestRunCommand() {
280
+ const command = new Command('run');
281
+ command
282
+ .description('Execute the eval suite for a packaged skill in a headless Claude sandbox')
283
+ .argument('<skill...>', 'Skill name(s) to test (primary subject set)')
284
+ .option('--with <pair...>', 'Inject a declared-dependency skill as name=<src>, where <src> is workspace:<pkg> | npm:<spec> | url:<u> | path:<dir> | vendored (e.g. mydep=npm:@scope/s@1.2.3)')
285
+ .option('--with-optional <pair...>', 'Inject an optional skill as name=<src> (same syntax as --with)')
286
+ .option('--refresh', 'Force a full re-stage (ignore existing staged content)')
287
+ .option('--workdir <dir>', 'Override the harness working directory')
288
+ .option('--out <dir>', 'Override the harness output directory')
289
+ .option('--keep', 'Keep the harness directory after the run')
290
+ .option('--dry-run', 'Assemble the command without spawning Claude')
291
+ .option('--auth <mode>', 'Auth mechanism: inherit | subscription | api-key | auto')
292
+ .option('--require-auth <mech>', 'Require a specific auth mechanism: subscription | api-key')
293
+ .option('--baseline', 'Enable A/B baseline run (with/without skill)')
294
+ .option('--allow-unverified-skill-source', 'Skip the vendored manifest integrity check')
295
+ .option('--i-understand-this-runs-skill-code', 'Acknowledge this command executes skill code (required)')
296
+ .option('--model <id>', 'Pinned model ID override')
297
+ .option('--max-turns <n>', 'Cap on experimenter turns (positive integer)')
298
+ .option('--max-budget-usd <n>', 'Hard USD budget cap (positive number)')
299
+ .option('--timeout <s>', 'Wall-clock timeout in seconds (positive integer)')
300
+ .option('--stall <s>', 'Stall-watchdog in seconds (positive integer)')
301
+ .option('--debug', 'Enable debug logging')
302
+ .action(runSkillTestRun)
303
+ .addHelpText('after', `
304
+ Description:
305
+ Stages the named skill(s) into an isolated tmp directory, runs preflight
306
+ checks (claude binary, auth, eval inputs, budget), then spawns a headless
307
+ Claude session with a non-interactive experimenter prompt. The experimenter
308
+ grades each eval against the skill's expectations and writes grading.json.
309
+
310
+ IMPORTANT: This command executes arbitrary skill code. You MUST pass
311
+ --i-understand-this-runs-skill-code to acknowledge this and proceed.
312
+
313
+ Exit Codes:
314
+ 0 - Harness ran to completion and produced a valid grading.json (check summary/grading.json for pass/fail counts)
315
+ 1 - Internal error (grading.json absent/invalid, experimenter crash, stall/timeout)
316
+ 2 - Preflight failed (missing binary, auth error, eval inputs absent, unsafe workdir, ack missing)
317
+ 3 - Bootstrap needed: evals.json was absent, so VAT wrote a starter template next to the skill source. Fill it in and re-run.
318
+
319
+ Note: eval pass/fail is NOT reflected in the exit code. Read the printed summary
320
+ ("PASS N/N" or "FAIL N/N") or grading.json to determine whether expectations passed.
321
+
322
+ Example:
323
+ $ vat skill test run my-skill --i-understand-this-runs-skill-code
324
+ `);
325
+ return command;
326
+ }
327
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/skill/test/run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/cli",
3
- "version": "0.1.39-rc.6",
3
+ "version": "0.1.39-rc.8",
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.39-rc.6",
45
- "@vibe-agent-toolkit/agent-schema": "0.1.39-rc.6",
46
- "@vibe-agent-toolkit/agent-skills": "0.1.39-rc.6",
47
- "@vibe-agent-toolkit/claude-marketplace": "0.1.39-rc.6",
48
- "@vibe-agent-toolkit/discovery": "0.1.39-rc.6",
49
- "@vibe-agent-toolkit/gateway-mcp": "0.1.39-rc.6",
50
- "@vibe-agent-toolkit/rag": "0.1.39-rc.6",
51
- "@vibe-agent-toolkit/rag-lancedb": "0.1.39-rc.6",
52
- "@vibe-agent-toolkit/resources": "0.1.39-rc.6",
53
- "@vibe-agent-toolkit/utils": "0.1.39-rc.6",
44
+ "@vibe-agent-toolkit/agent-config": "0.1.39-rc.8",
45
+ "@vibe-agent-toolkit/agent-schema": "0.1.39-rc.8",
46
+ "@vibe-agent-toolkit/agent-skills": "0.1.39-rc.8",
47
+ "@vibe-agent-toolkit/claude-marketplace": "0.1.39-rc.8",
48
+ "@vibe-agent-toolkit/discovery": "0.1.39-rc.8",
49
+ "@vibe-agent-toolkit/gateway-mcp": "0.1.39-rc.8",
50
+ "@vibe-agent-toolkit/rag": "0.1.39-rc.8",
51
+ "@vibe-agent-toolkit/rag-lancedb": "0.1.39-rc.8",
52
+ "@vibe-agent-toolkit/resources": "0.1.39-rc.8",
53
+ "@vibe-agent-toolkit/utils": "0.1.39-rc.8",
54
54
  "adm-zip": "^0.5.16",
55
55
  "commander": "^12.1.0",
56
56
  "picomatch": "^4.0.3",