@vibe-agent-toolkit/cli 0.1.41-rc.3 → 0.1.41-rc.5

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.
@@ -8,6 +8,7 @@
8
8
  import { runSkillTestHarness, type SkillPackagingConfig } from '@vibe-agent-toolkit/agent-skills';
9
9
  import type { SkillSourceDescriptor } from '@vibe-agent-toolkit/resources';
10
10
  import { Command } from 'commander';
11
+ import { type BuildableReference } from '../../../skill-resolution/index.js';
11
12
  export interface SkillTestRunOptions {
12
13
  with?: string[];
13
14
  withOptional?: string[];
@@ -103,18 +104,105 @@ export interface ResolvedSubject {
103
104
  */
104
105
  declaredExecutables?: DeclaredExecutable[];
105
106
  }
107
+ /**
108
+ * Build GATING for a declared skill: the flags that decide IF a build happens.
109
+ * Assembled once per run in {@link runSkillTestRun} and threaded, unchanged, through
110
+ * SUBJECT and COMPANION resolution so both arms share one gate.
111
+ *
112
+ * Deliberately carries NO `test.build` command. That hook is per-SKILL, not per-run:
113
+ * it is declared by one skill in one config and runs with THAT config's root as cwd,
114
+ * so it travels beside the ref being built (see {@link buildDeclaredSkill}'s
115
+ * `buildCommand`), never inside this shared gate. A subject's command riding in here
116
+ * would execute against every companion's config root.
117
+ */
118
+ export interface BuildFlags {
119
+ /** Skip the build entirely and stage the existing dist (errors if absent). */
120
+ noBuild: boolean;
121
+ /** Assemble a preview only — never build, never spawn. */
122
+ dryRun: boolean;
123
+ /** The §12 security acknowledgment: required before ANY build command runs. */
124
+ acknowledged: boolean;
125
+ }
106
126
  /**
107
127
  * Project-aware subject resolution for `vat skill test run`. Resolves the subject
108
128
  * reference; for a declared skill, builds it (real entry points) and returns the
109
129
  * dist dir to stage; everything else is staged as-is. Throws SkillBuildError
110
130
  * (exit 2) for name-miss / not-found / --no-build-without-dist / build failure.
131
+ *
132
+ * `memo` is the per-run build memo (see {@link BuildMemo}) — pass the SAME map used
133
+ * for companion resolution so a skill that is both subject and companion builds once.
134
+ *
135
+ * `buildCommand` is the SUBJECT's own `test.build` hook, resolved by
136
+ * {@link loadTestConfig} (which carries a bare-name/basename fallback a raw config
137
+ * lookup lacks). It applies to the subject's build ONLY — companions resolve theirs
138
+ * from their own governing config.
111
139
  */
112
- export declare function resolveSubjectForTest(ref: string, cwd: string, flags: {
113
- noBuild: boolean;
114
- dryRun: boolean;
115
- acknowledged: boolean;
116
- build?: string;
117
- }): Promise<ResolvedSubject>;
140
+ export declare function resolveSubjectForTest(ref: string, cwd: string, flags: BuildFlags, memo: BuildMemo, buildCommand: string | undefined): Promise<ResolvedSubject>;
141
+ /** Result of {@link buildDeclaredSkill}: where the built (or reused) dist landed. */
142
+ export interface BuildDeclaredSkillResult {
143
+ distDir: string;
144
+ rebuilt: boolean;
145
+ /**
146
+ * Set only under --dry-run: true = an existing dist was staged WITHOUT
147
+ * rebuilding (may be stale); false = no dist existed yet so the preview fell
148
+ * back to the source dir. Absent for a real (non-dry-run) build.
149
+ */
150
+ dryRunStagedExistingDist?: boolean;
151
+ }
152
+ /**
153
+ * Per-run memo of BUILD OPERATIONS, so one build operation never runs twice in a
154
+ * run. Two disjoint key namespaces share the set: the declared-skill build itself
155
+ * (`pool:` / `plugin:`, see {@link buildMemoKey}) and the `test.build` pre-stage
156
+ * shell hook (`hook:`, see {@link preStageHookMemoKey}) — the hook needs its own
157
+ * because two DIFFERENT skills in one config may declare the SAME command, which
158
+ * is one hook invocation but two distinct builds.
159
+ *
160
+ * A `Set` of operation keys, NOT a `Map` caching results: the key identifies an
161
+ * OPERATION, not a skill, and a
162
+ * `plugin-local` operation rebuilds the WHOLE marketplace, so two different skills
163
+ * in that marketplace deliberately share one key while having DIFFERENT
164
+ * `expectedDistDir`s. A result cached under that shared key would be valid only for
165
+ * the ref that recorded it — handing it to the other ref would stage the WRONG
166
+ * skill's dist. {@link verifyBuiltDist} is what a memo hit re-derives (always keyed
167
+ * off THIS ref, never a cached value) to avoid exactly that bug.
168
+ */
169
+ export type BuildMemo = Set<string>;
170
+ /**
171
+ * Identity of the BUILD OPERATION a {@link BuildableReference} triggers — the memo key.
172
+ *
173
+ * A `pool` skill is built by `packageSkill` into its own `expectedDistDir`, so that
174
+ * dir IS the operation's identity. A `plugin-local` skill is built by
175
+ * `runClaudePluginBuild`, which `rm -rf`s and rebuilds EVERY plugin in the whole
176
+ * marketplace — so the operation's identity is the (configRoot, marketplace) pair,
177
+ * NOT the skill. Keying plugin-local per skill would make a second companion in the
178
+ * same marketplace trigger a full marketplace wipe-and-rebuild that reproduces work
179
+ * the first call already did.
180
+ */
181
+ export declare function buildMemoKey(ref: BuildableReference): string;
182
+ /**
183
+ * Companion analog of {@link resolveBuildableSubject} (issue #158): resolve every
184
+ * `--with`/`--with-optional` companion whose spec is a `{ path }` pointing at a
185
+ * declared skill's SOURCE directory to that skill's BUILT dist, via the exact same
186
+ * {@link buildDeclaredSkill} the subject uses. Anything else — workspace:/npm:/
187
+ * url:/vendored specs, or a path outside this project's config — is "a different
188
+ * story" (per the issue's own framing): left untouched, staged as today.
189
+ *
190
+ * The `test.build` hook used is the COMPANION's own — read from the config that
191
+ * governs IT ({@link declaredSkillTestConfig}), not the subject's. The subject's hook
192
+ * is a different skill's command in a (possibly) different package, and running it
193
+ * here would execute it with the companion's config root as cwd.
194
+ *
195
+ * FAILURE HANDLING. A REQUIRED companion's failure ALWAYS propagates (the existing
196
+ * "--with fails if a source cannot be resolved" contract, extended to "cannot be
197
+ * built"), re-messaged to name the alias the user typed. An OPTIONAL companion
198
+ * degrades to the ORIGINAL (unbuilt) path spec — with a mandatory stderr note — only
199
+ * for the narrow, non-destructive case {@link isSurvivableCompanionFailure} allows;
200
+ * every other failure propagates for it too. Staging's existing skip-with-warning
201
+ * fallback still applies if the raw copy also fails to stage.
202
+ */
203
+ export declare function resolveCompanionSpec(name: string, spec: SkillSourceSpec, repoRoot: string, flags: BuildFlags, optional: boolean, memo: BuildMemo): Promise<SkillSourceSpec>;
204
+ /** Resolve every entry of a `--with`/`--with-optional` companion record (see {@link resolveCompanionSpec}). */
205
+ export declare function resolveCompanionSources(sources: Record<string, SkillSourceSpec> | undefined, repoRoot: string, flags: BuildFlags, optional: boolean, memo: BuildMemo): Promise<Record<string, SkillSourceSpec> | undefined>;
118
206
  /**
119
207
  * True when the resolved subject is a CONFIG-BLIND path target: a `{ path }` source
120
208
  * staged AS-IS (not built) that does NOT map back to a declared skill, so the project's
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/skill/test/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAQL,mBAAmB,EAKnB,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAiB,qBAAqB,EAAc,MAAM,+BAA+B,CAAC;AAEtG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+CpC,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,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA6DD,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,KAAK,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,2FAA2F;AAC3F,KAAK,kBAAkB,GAAG,WAAW,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,GAC/C,kBAAkB,EAAE,GAAG,SAAS,CAQlC;AAwBD,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAWvG;AAWD,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,qBAAqB,EAAE,GAAG,SAAS,GACxC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAY7C;AAuFD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAWpB;AAiID,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,aAAa,EAAE,eAAe,CAAC;IAC/B,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2GAA2G;IAC3G,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC5C;AAuBD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAwFD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,eAAe,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,OAAO,CAEV;AAuED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyDf;AAMD,wBAAgB,yBAAyB,IAAI,OAAO,CAgHnD"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/skill/test/run.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@ import { BootstrapNeededError, DuplicateStagedSkillError, isAcknowledged, mapErr
11
11
  import { findProjectRoot, safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
12
12
  import { Command } from 'commander';
13
13
  import { parseSourceSpec } from '../../../skill-resolution/classify.js';
14
- import { findDeclaredSkillForPath, resolveSkillReference, } from '../../../skill-resolution/index.js';
15
- import { ConfigLoadError, loadConfig } from '../../../utils/config-loader.js';
14
+ import { findDeclaredSkillForPath, findDeclaredSkillForSourceDir, resolveSkillReference, } from '../../../skill-resolution/index.js';
15
+ import { ConfigLoadError, loadConfig, loadConfigCached } from '../../../utils/config-loader.js';
16
16
  import { runClaudePluginBuild } from '../../claude/plugin/build.js';
17
17
  import { assertValidAuth, assertValidRequireAuth } from './auth-flags.js';
18
18
  /** Extract the trailing path segment (cross-platform) from a path-like string. */
@@ -164,6 +164,17 @@ export function descriptorsToRecord(list) {
164
164
  // ---------------------------------------------------------------------------
165
165
  // Precedence resolution: flag > config > default
166
166
  // ---------------------------------------------------------------------------
167
+ /**
168
+ * Read a DECLARED skill's own `skills.config.<name>.test` block from the config that
169
+ * governs IT — keyed by the declared name against that skill's `configRoot`, never by
170
+ * cwd. The one lookup used wherever "what did THIS skill declare?" is the question:
171
+ * {@link loadTestConfig}'s path-target arm and companion `test.build` resolution
172
+ * ({@link resolveCompanionSpec}), so a companion in a nested config never inherits the
173
+ * subject's block.
174
+ */
175
+ function declaredSkillTestConfig(link) {
176
+ return loadConfigCached(link.configRoot)?.skills?.config?.[link.name]?.test;
177
+ }
167
178
  /**
168
179
  * Load the persisted `skills.config.<skill>.test` block for the subject skill,
169
180
  * PROJECT-AWARE (mirrors the resolver — not a parallel cwd+basename resolver).
@@ -183,9 +194,8 @@ async function loadTestConfig(subject, cwd) {
183
194
  // Path target → resolve the declared skill it materializes, and read its test
184
195
  // block from that skill's own governing config root (cwd-independent).
185
196
  const link = await findDeclaredSkillForPath(subject, cwd);
186
- if (link !== undefined) {
187
- return loadConfig(link.configRoot)?.skills?.config?.[link.name]?.test;
188
- }
197
+ if (link !== undefined)
198
+ return declaredSkillTestConfig(link);
189
199
  const projectRoot = findProjectRoot(cwd);
190
200
  if (projectRoot === null)
191
201
  return undefined;
@@ -399,8 +409,16 @@ function sourceScaffoldFields(source, declaredSkill, cwd) {
399
409
  * reference; for a declared skill, builds it (real entry points) and returns the
400
410
  * dist dir to stage; everything else is staged as-is. Throws SkillBuildError
401
411
  * (exit 2) for name-miss / not-found / --no-build-without-dist / build failure.
412
+ *
413
+ * `memo` is the per-run build memo (see {@link BuildMemo}) — pass the SAME map used
414
+ * for companion resolution so a skill that is both subject and companion builds once.
415
+ *
416
+ * `buildCommand` is the SUBJECT's own `test.build` hook, resolved by
417
+ * {@link loadTestConfig} (which carries a bare-name/basename fallback a raw config
418
+ * lookup lacks). It applies to the subject's build ONLY — companions resolve theirs
419
+ * from their own governing config.
402
420
  */
403
- export async function resolveSubjectForTest(ref, cwd, flags) {
421
+ export async function resolveSubjectForTest(ref, cwd, flags, memo, buildCommand) {
404
422
  const resolved = await resolveSkillReference(ref, cwd);
405
423
  switch (resolved.kind) {
406
424
  case 'source':
@@ -418,51 +436,157 @@ export async function resolveSubjectForTest(ref, cwd, flags) {
418
436
  // A buildable ref carries `packagingConfig` — the ONE cleanly-reachable place
419
437
  // the subject's declared executables live — so attach the grader recognition
420
438
  // aid here (a plain source has no packaging config and leaves it undefined).
421
- const subject = await resolveBuildableSubject(resolved, flags);
439
+ const subject = await resolveBuildableSubject(resolved, flags, memo, buildCommand);
422
440
  const declaredExecutables = deriveDeclaredExecutableNames(resolved.packagingConfig.executables);
423
441
  return declaredExecutables === undefined ? subject : { ...subject, declaredExecutables };
424
442
  }
425
443
  }
426
444
  }
427
445
  /**
428
- * Resolve a buildable subject under --no-build or --dry-run (no build step). Stage
446
+ * --no-build / --dry-run branch of {@link buildDeclaredSkill}: never builds. Stage
429
447
  * the existing dist if present; for a dry-run with no dist yet, fall back to the
430
- * source dir so the preview still assembles without triggering a build. Throws when
431
- * --no-build is set but no dist exists.
448
+ * source dir so the preview still assembles without triggering a build. Throws
449
+ * when --no-build is set but no dist exists.
432
450
  */
433
- function resolveNoBuildDryRunBranch(ref, scaffoldDir, flags) {
451
+ function resolveExistingDistOrThrow(ref, flags) {
434
452
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- expectedDistDir derived from project config
435
453
  if (existsSync(ref.expectedDistDir)) {
436
454
  if (flags.noBuild) {
437
455
  process.stderr.write(`Using existing dist (NOT rebuilt): ${ref.expectedDistDir}\n`);
438
456
  }
439
457
  return {
440
- subjectSource: { path: ref.expectedDistDir },
441
- subjectScaffoldDir: scaffoldDir,
458
+ distDir: ref.expectedDistDir,
442
459
  rebuilt: false,
443
- wouldBuild: true,
444
460
  // For a dry-run that staged an existing (unbuilt) dist, flag it as
445
461
  // potentially stale so the summary can warn the user.
446
462
  ...(flags.dryRun ? { dryRunStagedExistingDist: true } : {}),
447
463
  };
448
464
  }
449
465
  if (flags.dryRun) {
450
- return {
451
- subjectSource: { path: scaffoldDir },
452
- subjectScaffoldDir: scaffoldDir,
453
- rebuilt: false,
454
- wouldBuild: true,
455
- dryRunStagedExistingDist: false,
456
- };
466
+ return { distDir: dirname(ref.sourcePath), rebuilt: false, dryRunStagedExistingDist: false };
457
467
  }
458
- throw new SkillBuildError(`--no-build: no built dist at ${ref.expectedDistDir}. Run \`vat build\` first, or point at a built path.`);
468
+ throw new SkillBuildError(`--no-build: no built dist at ${ref.expectedDistDir} for '${ref.name}'. Run \`vat build\` first, or point at a built path.`);
459
469
  }
460
- /** Build a declared skill (or stage its existing dist under --no-build/--dry-run), then return the dist to stage. */
461
- async function resolveBuildableSubject(ref, flags) {
462
- const scaffoldDir = dirname(ref.sourcePath);
470
+ /**
471
+ * Identity of the BUILD OPERATION a {@link BuildableReference} triggers — the memo key.
472
+ *
473
+ * A `pool` skill is built by `packageSkill` into its own `expectedDistDir`, so that
474
+ * dir IS the operation's identity. A `plugin-local` skill is built by
475
+ * `runClaudePluginBuild`, which `rm -rf`s and rebuilds EVERY plugin in the whole
476
+ * marketplace — so the operation's identity is the (configRoot, marketplace) pair,
477
+ * NOT the skill. Keying plugin-local per skill would make a second companion in the
478
+ * same marketplace trigger a full marketplace wipe-and-rebuild that reproduces work
479
+ * the first call already did.
480
+ */
481
+ export function buildMemoKey(ref) {
482
+ return ref.distribution.kind === 'pool'
483
+ ? `pool:${ref.expectedDistDir}`
484
+ : `plugin:${ref.configRoot}:${ref.distribution.marketplaceName}`;
485
+ }
486
+ /**
487
+ * Assert a completed build actually MATERIALIZED `ref.expectedDistDir` with a real
488
+ * skill in it, and return the result to stage. A build that reports success but
489
+ * writes nothing (or writes an empty shell with no `SKILL.md`) would otherwise hand
490
+ * back a path a required companion then fails opaquely at staging, or an OPTIONAL
491
+ * one silently skips — the exact non-functional-companion-with-no-diagnostic
492
+ * symptom of issue #158. Two distinct checks, two distinct messages, so the error
493
+ * tells the author which failure mode they hit:
494
+ * 1. `expectedDistDir` itself is missing — "no output at all".
495
+ * 2. `expectedDistDir` exists but has no `SKILL.md` — an empty/incomplete shell.
496
+ *
497
+ * Also runs on a memo HIT, because a plugin-local hit may have been recorded by a
498
+ * DIFFERENT skill in the same marketplace: the dist dir always comes from THIS ref
499
+ * and is always checked.
500
+ */
501
+ function verifyBuiltDist(ref) {
502
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- expectedDistDir derived from project config
503
+ if (!existsSync(ref.expectedDistDir)) {
504
+ throw new SkillBuildError(`Skill build for '${ref.name}' reported success but produced no output at ${ref.expectedDistDir}. ` +
505
+ `Check the skill's packaging config (\`vat build\` should create this directory).`);
506
+ }
507
+ const skillMdPath = safePath.join(ref.expectedDistDir, 'SKILL.md');
508
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- skillMdPath derived from project config
509
+ if (!existsSync(skillMdPath)) {
510
+ throw new SkillBuildError(`Skill build for '${ref.name}' reported success but produced no SKILL.md at ${ref.expectedDistDir}. ` +
511
+ `Check the skill's packaging config (\`vat build\` should create this file).`);
512
+ }
513
+ return { distDir: ref.expectedDistDir, rebuilt: true };
514
+ }
515
+ /**
516
+ * Identity of a `test.build` PRE-STAGE HOOK invocation — the (cwd, command) pair, which
517
+ * is everything that distinguishes one shell invocation from another. Namespaced `hook:`
518
+ * so it can never collide with a {@link buildMemoKey} entry in the shared {@link BuildMemo}.
519
+ */
520
+ function preStageHookMemoKey(configRoot, buildCommand) {
521
+ return `hook:${configRoot}:${buildCommand}`;
522
+ }
523
+ /**
524
+ * Run a skill's `test.build` pre-stage hook, at most ONCE per (configRoot, command)
525
+ * within a run — the "runs that shell command ONCE before staging" contract documented
526
+ * on {@link runPreStageBuild}, preserved now that a run may build several skills.
527
+ *
528
+ * The command ALWAYS runs with the config root of the skill that DECLARED it as cwd
529
+ * (both values come from the same ref), so a subject's hook can never execute against
530
+ * a companion's package root. Memoized only on SUCCESS: a hook that failed and was
531
+ * tolerated (optional companion) is retried rather than treated as done.
532
+ *
533
+ * KNOWN LIMITATION: for `plugin-local` skills, the memo key this call is gated behind
534
+ * ({@link buildMemoKey} in {@link buildDeclaredSkill}) is the shared `plugin:<configRoot>:
535
+ * <marketplace>` key, not a per-skill one — because one marketplace build serves every
536
+ * participant. When two declared skills share a marketplace, only the FIRST participant's
537
+ * `test.build` hook runs; the second skill's own hook is silently skipped, since by the
538
+ * time its build call is reached the memo already reports the marketplace as built and
539
+ * this function is never invoked for it. Fixing that requires gathering the hook set for
540
+ * every marketplace participant BEFORE the one marketplace build — out of scope here.
541
+ */
542
+ function runPreStageBuildOnce(buildCommand, configRoot, memo) {
543
+ if (buildCommand === undefined)
544
+ return;
545
+ const key = preStageHookMemoKey(configRoot, buildCommand);
546
+ if (memo.has(key))
547
+ return;
548
+ runPreStageBuild({ buildCommand, configRoot });
549
+ memo.add(key);
550
+ }
551
+ /** Dispatch the real build for a declared skill, by how it ships. Throws the raw build error. */
552
+ async function runDeclaredSkillBuild(ref) {
553
+ if (ref.distribution.kind === 'pool') {
554
+ await packageSkill(ref.sourcePath, packagingConfigToPackageOptions(ref.packagingConfig, {
555
+ skillPath: ref.sourcePath,
556
+ outputPath: ref.expectedDistDir,
557
+ }));
558
+ return;
559
+ }
560
+ await runClaudePluginBuild(ref.configRoot, { marketplace: ref.distribution.marketplaceName });
561
+ }
562
+ /**
563
+ * Build a declared skill (BuildableReference) into its `expectedDistDir`, or reuse
564
+ * the existing dist under --no-build/--dry-run. Shared by SUBJECT resolution
565
+ * ({@link resolveBuildableSubject}) and `--with`/`--with-optional` COMPANION
566
+ * resolution ({@link resolveCompanionSpec}) so a companion that maps to a declared
567
+ * skill gets the exact same build treatment as the subject (issue #158) — its
568
+ * `files:` injection runs before staging, instead of a raw, possibly
569
+ * build-artifact-incomplete, source-tree copy.
570
+ *
571
+ * `buildCommand` is the `test.build` pre-stage hook DECLARED BY THIS REF's skill —
572
+ * never a shared per-run flag. It runs with `ref.configRoot` as cwd, so command and
573
+ * cwd always come from the same skill's config (see {@link runPreStageBuildOnce}).
574
+ * GUARANTEED to run (once, on the first call for this ref) for a `pool`-distributed
575
+ * skill, whose memo key is per-skill. KNOWN LIMITATION for `plugin-local` skills: the
576
+ * memo key is the shared marketplace build, so when two declared skills share a
577
+ * marketplace, only the FIRST participant reaching this function gets its hook run —
578
+ * the second skill's build is served by the memo hit at the check below, and its own
579
+ * `test.build` hook is silently skipped (see {@link runPreStageBuildOnce}).
580
+ *
581
+ * `memo` collapses repeat work within ONE run (see {@link buildMemoKey}). It is
582
+ * consulted only AFTER the no-build/dry-run short-circuit and AFTER the security-ack
583
+ * gate: a cached build result must never be handed to a caller that has not passed
584
+ * the ack, and the no-build branch performs no build to memoize.
585
+ */
586
+ async function buildDeclaredSkill(ref, flags, memo, buildCommand) {
463
587
  // --no-build and --dry-run never build — delegate to the dedicated branch helper.
464
588
  if (flags.noBuild || flags.dryRun) {
465
- return resolveNoBuildDryRunBranch(ref, scaffoldDir, flags);
589
+ return resolveExistingDistOrThrow(ref, flags);
466
590
  }
467
591
  // SECURITY (§12): reaching here means a real build WOULD run — runPreStageBuild
468
592
  // executes an ARBITRARY shell command from the repo's committed `test.build`, and
@@ -472,25 +596,156 @@ async function resolveBuildableSubject(ref, flags) {
472
596
  if (!flags.acknowledged) {
473
597
  throw new SecurityAckError();
474
598
  }
599
+ const key = buildMemoKey(ref);
600
+ // Memo HIT: this operation already ran in THIS process — skip the rebuild, but
601
+ // still verify this ref's own dist (the hit may be a marketplace sibling's).
602
+ if (memo.has(key))
603
+ return verifyBuiltDist(ref);
475
604
  // test.build hook (upstream artifacts) BEFORE the skill build -- ordering matters.
476
- if (flags.build !== undefined) {
477
- runPreStageBuild({ buildCommand: flags.build, configRoot: ref.configRoot });
478
- }
605
+ runPreStageBuildOnce(buildCommand, ref.configRoot, memo);
606
+ // ANY error thrown here is wrapped as `SkillBuildError` below, not just a narrowly-
607
+ // scoped build-tool failure — see {@link isSurvivableCompanionFailure} for why that
608
+ // matters to companion degradation. `err.stack` is also captured at construction,
609
+ // so it keeps reflecting THIS un-prefixed message even after a caller mutates
610
+ // `.message` in place (see {@link rethrowNamingCompanion}).
479
611
  try {
480
- if (ref.distribution.kind === 'pool') {
481
- await packageSkill(ref.sourcePath, packagingConfigToPackageOptions(ref.packagingConfig, {
482
- skillPath: ref.sourcePath,
483
- outputPath: ref.expectedDistDir,
484
- }));
485
- }
486
- else {
487
- await runClaudePluginBuild(ref.configRoot, { marketplace: ref.distribution.marketplaceName });
488
- }
612
+ await runDeclaredSkillBuild(ref);
489
613
  }
490
614
  catch (e) {
491
615
  throw new SkillBuildError(`Skill build failed for '${ref.name}': ${e instanceof Error ? e.message : String(e)}`);
492
616
  }
493
- return { subjectSource: { path: ref.expectedDistDir }, subjectScaffoldDir: scaffoldDir, rebuilt: true, wouldBuild: true };
617
+ // Record the operation as soon as the build COMMAND succeeded — before verifying
618
+ // this ref's output. The build did run; a marketplace sibling must not re-run it
619
+ // just because this skill's own dist turned out to be missing. Verification is
620
+ // deliberately OUTSIDE the try/catch so its SkillBuildError is not re-wrapped into
621
+ // a doubled "Skill build failed for 'x': Skill build for 'x' reported success…".
622
+ memo.add(key);
623
+ return verifyBuiltDist(ref);
624
+ }
625
+ /** Build a declared skill (or stage its existing dist under --no-build/--dry-run), then return the dist to stage. */
626
+ async function resolveBuildableSubject(ref, flags, memo, buildCommand) {
627
+ const scaffoldDir = dirname(ref.sourcePath);
628
+ const build = await buildDeclaredSkill(ref, flags, memo, buildCommand);
629
+ return {
630
+ subjectSource: { path: build.distDir },
631
+ subjectScaffoldDir: scaffoldDir,
632
+ rebuilt: build.rebuilt,
633
+ wouldBuild: true,
634
+ ...(build.dryRunStagedExistingDist === undefined
635
+ ? {}
636
+ : { dryRunStagedExistingDist: build.dryRunStagedExistingDist }),
637
+ };
638
+ }
639
+ /**
640
+ * May an OPTIONAL companion's failure be DEGRADED to "stage its raw source instead"
641
+ * rather than failing the run? True for a genuine build failure ({@link SkillBuildError})
642
+ * that could not have been DESTRUCTIVE. Both narrowings matter:
643
+ *
644
+ * - **Error class.** Everything else reaching the catch is a user-fixable PREFLIGHT
645
+ * problem, not a degraded companion: a {@link SecurityAckError} (the fix is
646
+ * `--i-understand-this-runs-skill-code`, not "your companion didn't build"), a
647
+ * `ConfigLoadError` (a broken config reported as a build failure), or a
648
+ * `BuildHookError` (a genuinely misconfigured `test.build`). Swallowing those
649
+ * replaces the actionable message with a misleading one. Note that
650
+ * {@link buildDeclaredSkill} wraps ANY error `runDeclaredSkillBuild` throws —
651
+ * including a malformed packaging config or a stray `TypeError` deep inside
652
+ * `packageSkill` — into `SkillBuildError`, so "genuine build failure" here really
653
+ * means "anything the build call raised", not just a narrowly-scoped build error.
654
+ * - **Destructiveness.** A `plugin-local` build is DESTRUCTIVE once it reaches
655
+ * `runClaudePluginBuild`: that function `rm -rf`s the whole marketplace output
656
+ * tree BEFORE building, so a failure THERE may leave the user's
657
+ * `dist/.claude/plugins/marketplaces/<mp>/` already gone. Continuing would stage
658
+ * from an inconsistent dist and finish SUCCESS with the build output deleted — a
659
+ * test command must never destroy build output and report only a "Note:". A
660
+ * `pool` build writes only its own `expectedDistDir` and destroys nothing, so
661
+ * falling back to the raw source tree is always safe there. And under
662
+ * `--no-build`/`--dry-run`, `resolveExistingDistOrThrow` throws BEFORE
663
+ * `buildDeclaredSkill` reaches any build path at all — no build was attempted,
664
+ * plugin-local or not, so nothing was wiped either way and degrading is safe.
665
+ *
666
+ * A real (non `--no-build`/`--dry-run`) `plugin-local` failure stays fail-closed
667
+ * because it MAY have failed mid-wipe; `runClaudePluginBuild` can also throw BEFORE
668
+ * the `rm` (broken config, colliding plugin names), but those are indistinguishable
669
+ * from outside once wrapped in `SkillBuildError`, so fail-closed is deliberate there.
670
+ */
671
+ function isSurvivableCompanionFailure(err, declared, optional, flags) {
672
+ if (!optional || !(err instanceof SkillBuildError))
673
+ return false;
674
+ return declared.distribution.kind === 'pool' || flags.noBuild || flags.dryRun;
675
+ }
676
+ /**
677
+ * Rethrow a companion failure with the `--with`/`--with-optional` ALIAS the user
678
+ * TYPED prefixed onto its message. Build errors name only the DECLARED skill, which
679
+ * with several companions leaves the user unable to tell which flag to fix.
680
+ *
681
+ * The message is prefixed IN PLACE so the error's CLASS (and therefore its
682
+ * `exitCode` / {@link mapErrorToExitCode} mapping) is unchanged — no new error class,
683
+ * no re-wrapping. Prefixing is skipped when the message is ALREADY prefixed (starts
684
+ * with `companion '`) — this makes the function idempotent against repeat rethrows of
685
+ * the SAME error object, structurally, rather than relying on a hand-maintained
686
+ * argument that no caught error class is ever cached/reused across companions.
687
+ * {@link ConfigLoadError} instances ARE cached and re-thrown per config root by
688
+ * `loadConfigCached`, so mutating one in place would otherwise corrupt the cache; the
689
+ * already-prefixed check covers this case too (in practice `ConfigLoadError` is
690
+ * thrown by the lookup ABOVE this try and never reaches here — belt-and-braces).
691
+ *
692
+ * NOTE: `err.stack` was captured at construction time and therefore still reflects
693
+ * the UN-PREFIXED message — mutating `.message` afterward does not update `.stack`.
694
+ * Debug output that prints `.stack` can disagree with the prefixed text on stderr.
695
+ */
696
+ function rethrowNamingCompanion(err, alias, declaredName) {
697
+ if (err instanceof Error && !err.message.startsWith("companion '")) {
698
+ err.message = `companion '${alias}' (declared skill '${declaredName}'): ${err.message}`;
699
+ }
700
+ throw err;
701
+ }
702
+ /**
703
+ * Companion analog of {@link resolveBuildableSubject} (issue #158): resolve every
704
+ * `--with`/`--with-optional` companion whose spec is a `{ path }` pointing at a
705
+ * declared skill's SOURCE directory to that skill's BUILT dist, via the exact same
706
+ * {@link buildDeclaredSkill} the subject uses. Anything else — workspace:/npm:/
707
+ * url:/vendored specs, or a path outside this project's config — is "a different
708
+ * story" (per the issue's own framing): left untouched, staged as today.
709
+ *
710
+ * The `test.build` hook used is the COMPANION's own — read from the config that
711
+ * governs IT ({@link declaredSkillTestConfig}), not the subject's. The subject's hook
712
+ * is a different skill's command in a (possibly) different package, and running it
713
+ * here would execute it with the companion's config root as cwd.
714
+ *
715
+ * FAILURE HANDLING. A REQUIRED companion's failure ALWAYS propagates (the existing
716
+ * "--with fails if a source cannot be resolved" contract, extended to "cannot be
717
+ * built"), re-messaged to name the alias the user typed. An OPTIONAL companion
718
+ * degrades to the ORIGINAL (unbuilt) path spec — with a mandatory stderr note — only
719
+ * for the narrow, non-destructive case {@link isSurvivableCompanionFailure} allows;
720
+ * every other failure propagates for it too. Staging's existing skip-with-warning
721
+ * fallback still applies if the raw copy also fails to stage.
722
+ */
723
+ export async function resolveCompanionSpec(name, spec, repoRoot, flags, optional, memo) {
724
+ if (!('path' in spec))
725
+ return spec;
726
+ const declared = await findDeclaredSkillForSourceDir(spec.path, repoRoot);
727
+ if (declared === undefined)
728
+ return spec;
729
+ try {
730
+ const build = await buildDeclaredSkill(declared, flags, memo, declaredSkillTestConfig(declared)?.build);
731
+ return { path: build.distDir };
732
+ }
733
+ catch (e) {
734
+ if (!isSurvivableCompanionFailure(e, declared, optional, flags))
735
+ rethrowNamingCompanion(e, name, declared.name);
736
+ process.stderr.write(`Note: companion '${name}' (declared skill '${declared.name}') failed to build; staging its raw source instead: ${e instanceof Error ? e.message : String(e)}\n`);
737
+ return spec;
738
+ }
739
+ }
740
+ /** Resolve every entry of a `--with`/`--with-optional` companion record (see {@link resolveCompanionSpec}). */
741
+ export async function resolveCompanionSources(sources, repoRoot, flags, optional, memo) {
742
+ if (sources === undefined)
743
+ return undefined;
744
+ const resolved = {};
745
+ for (const [name, spec] of Object.entries(sources)) {
746
+ resolved[name] = await resolveCompanionSpec(name, spec, repoRoot, flags, optional, memo);
747
+ }
748
+ return resolved;
494
749
  }
495
750
  /**
496
751
  * True when the resolved subject is a CONFIG-BLIND path target: a `{ path }` source
@@ -540,6 +795,19 @@ async function preflightKnobsAndConfig(subject, options, cwd) {
540
795
  process.exit(SkillTestExitCode.Preflight);
541
796
  }
542
797
  }
798
+ /**
799
+ * Exit code for an error escaping EITHER phase of {@link runSkillTestRun}.
800
+ *
801
+ * A broken governing config ({@link ConfigLoadError}) is a user-fixable PREFLIGHT
802
+ * problem (exit 2), not an internal harness failure — {@link mapErrorToExitCode} has
803
+ * no case for it and falls through to Internal (1). ONE helper shared by BOTH catch
804
+ * blocks so the SUBJECT arm and the COMPANION arm can never drift: a companion's
805
+ * governing config root can differ from the subject's, so a broken config is
806
+ * reachable from either arm and must report the same code from both.
807
+ */
808
+ function exitCodeForRunError(err) {
809
+ return err instanceof ConfigLoadError ? SkillTestExitCode.Preflight : mapErrorToExitCode(err);
810
+ }
543
811
  /**
544
812
  * Copy the resolved-subject fields onto the harness options. Optional fields are
545
813
  * only assigned when present (exactOptionalPropertyTypes). Extracted so
@@ -580,19 +848,24 @@ export async function runSkillTestRun(subject, options) {
580
848
  dryRun: options.dryRun === true,
581
849
  acknowledgedRunsSkillCode: options.iUnderstandThisRunsSkillCode === true,
582
850
  });
851
+ // Shared by subject AND companion resolution (issue #158) so a --with/--with-optional
852
+ // companion that maps to a declared skill gets the exact same build GATING (no-build/
853
+ // dry-run/security-ack) as the subject. The `test.build` hook is deliberately NOT in
854
+ // here: it is per-skill (see BuildFlags), so the subject's own command is passed only
855
+ // to subject resolution and each companion resolves its own.
856
+ const buildFlags = { noBuild, dryRun: options.dryRun === true, acknowledged };
857
+ // ONE memo for the whole run, shared by subject AND companion resolution: a skill
858
+ // that is both the subject and a companion builds exactly once, and N companions
859
+ // in one marketplace trigger ONE marketplace build, not N.
860
+ const buildMemo = new Set();
583
861
  let resolvedSubject;
584
862
  try {
585
- resolvedSubject = await resolveSubjectForTest(subject, process.cwd(), {
586
- noBuild,
587
- dryRun: options.dryRun === true,
588
- acknowledged,
589
- ...(config?.build === undefined ? {} : { build: config.build }),
590
- });
863
+ resolvedSubject = await resolveSubjectForTest(subject, process.cwd(), buildFlags, buildMemo, config?.build);
591
864
  }
592
865
  catch (err) {
593
866
  // A broken governing config surfacing during subject resolution is a preflight
594
867
  // problem the user must fix (exit 2), not an internal harness failure (exit 1).
595
- const exitCode = err instanceof ConfigLoadError ? SkillTestExitCode.Preflight : mapErrorToExitCode(err);
868
+ const exitCode = exitCodeForRunError(err);
596
869
  process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
597
870
  process.exit(exitCode);
598
871
  return;
@@ -604,6 +877,16 @@ export async function runSkillTestRun(subject, options) {
604
877
  // name — inside the try so it maps to exit 2 like every other preflight error.
605
878
  const harnessOpts = buildHarnessOpts(subject, options, knobs, config, globalTest);
606
879
  applyResolvedSubject(harnessOpts, resolvedSubject);
880
+ // Companion build resolution (issue #158): a --with/--with-optional companion
881
+ // whose source is a path into a declared skill gets built (its `files:`
882
+ // injection runs) exactly like the subject, instead of a raw source-tree copy.
883
+ const repoRoot = resolveRepoRoot();
884
+ const withSources = await resolveCompanionSources(harnessOpts.withSources, repoRoot, buildFlags, false, buildMemo);
885
+ if (withSources !== undefined)
886
+ harnessOpts.withSources = withSources;
887
+ const withOptional = await resolveCompanionSources(harnessOpts.withOptional, repoRoot, buildFlags, true, buildMemo);
888
+ if (withOptional !== undefined)
889
+ harnessOpts.withOptional = withOptional;
607
890
  const result = await runSkillTestHarness(harnessOpts);
608
891
  process.stderr.write(`Harness: ${result.harnessPath}\n`);
609
892
  process.stdout.write(`Summary: ${result.summary}\n`);
@@ -611,7 +894,10 @@ export async function runSkillTestRun(subject, options) {
611
894
  return;
612
895
  }
613
896
  catch (err) {
614
- const exitCode = mapErrorToExitCode(err);
897
+ // Same rule as the subject arm above (see {@link exitCodeForRunError}): companion
898
+ // resolution can surface a ConfigLoadError from a DIFFERENT config root than the
899
+ // subject's, and that must exit 2 (preflight), not 1 (internal).
900
+ const exitCode = exitCodeForRunError(err);
615
901
  // BootstrapNeededError (exit 3) is the happy "wrote a template, fill it in
616
902
  // and re-run" path — surface its message plainly, not as a hard `Error:`.
617
903
  if (err instanceof BootstrapNeededError) {
@@ -632,12 +918,12 @@ export function createSkillTestRunCommand() {
632
918
  command
633
919
  .description('Execute a packaged skill\'s eval suite in a headless, context-isolated Claude session (runs the skill\'s code; not an OS sandbox)')
634
920
  .argument('<skill>', 'The skill to test')
635
- .option('--with <pair...>', 'Stage a REQUIRED companion skill the subject can invoke, as name=<src> (repeatable). <src> is workspace:<pkg> | npm:<spec> | url:<u> | path:<dir> | vendored (e.g. helper=npm:@scope/s@1.2.3). The run fails if a source cannot be resolved.')
636
- .option('--with-optional <pair...>', 'Stage an OPTIONAL companion skill, as name=<src> (same syntax, repeatable). Skipped with a warning if its source cannot be resolved; the run continues.')
921
+ .option('--with <pair...>', 'Stage a REQUIRED companion skill the subject can invoke, as name=<src> (repeatable). <src> is workspace:<pkg> | npm:<spec> | url:<u> | path:<dir> | vendored (e.g. helper=npm:@scope/s@1.2.3). A path:<dir> that maps to a declared skill is BUILT like the subject (files: build artifacts included), not tree-copied as raw source. The run fails if a source cannot be resolved or its build fails.')
922
+ .option('--with-optional <pair...>', 'Stage an OPTIONAL companion skill, as name=<src> (same syntax, repeatable). Staged from its raw (unbuilt) source with a warning if its source cannot be resolved, or if a non-destructive build fails; the run continues.')
637
923
  .option('--env <pair...>', 'Inject an env var into the executor spawn as KEY=VALUE (repeatable). Values support ${fixturesDir}, ${stagedSkillDir}, ${harnessRoot}, ${resultsDir}. CLI overrides config for the same key.')
638
924
  .option('--pass-env <key...>', 'Forward a host env var by NAME to the executor spawn if present (repeatable). Protected names (PATH, auth, model) are ignored.')
639
925
  .option('--refresh', 'Force a full re-stage (ignore existing staged content)')
640
- .option('--no-build', 'Skip building a declared skill; stage its existing dist instead (errors if absent)')
926
+ .option('--no-build', 'Skip building declared skills (subject and any --with/--with-optional companion); stage existing dist instead. Errors if absent for the subject or a REQUIRED companion; an OPTIONAL companion falls back to raw source with a warning.')
641
927
  .option('--workdir <dir>', 'Override the harness working directory')
642
928
  .option('--out <dir>', 'Override the harness output directory')
643
929
  .option('--keep', 'Keep the harness directory after the run')
@@ -692,7 +978,7 @@ Model:
692
978
  Exit Codes:
693
979
  0 - Harness ran to completion and every eval passed (or --allow-eval-failure suppressed a failing verdict)
694
980
  1 - Internal error (grader fragment absent/invalid, summary/expectations skew, executor/grader crash, stall/timeout)
695
- 2 - Preflight failed (missing binary, auth error, eval inputs absent, unsafe workdir, ack missing, skill build failed, or --no-build with no existing dist)
981
+ 2 - Preflight failed (missing binary, auth error, eval inputs absent, unsafe workdir, ack missing, broken project config, a required skill -- subject or --with companion -- failed to build, --no-build with no existing dist for one of them, or an OPTIONAL --with-optional companion hitting a non-survivable failure: a destructive plugin-local build failure, missing security ack, or broken config)
696
982
  3 - Bootstrap needed: evals.json was absent, so VAT wrote a starter template next to the skill source. Fill it in and re-run.
697
983
  4 - An eval FAILED (the harness completed and produced a valid grading.json; expectations did not all pass). This is the fail-closed DEFAULT -- suppress with --allow-eval-failure.
698
984
 
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/skill/test/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,+BAA+B,EAC/B,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,GAElB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GAGtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,kFAAkF;AAClF,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;CAcxB,CAAC,IAAI,EAAE,CAAC;AAET,SAAS,oBAAoB;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;AAClD,CAAC;AAqCD,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,KAAyB,EAAE,QAAgB;IACpE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,qCAAqC,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyB,EAAE,QAAgB;IACtE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,oCAAoC,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,OAA4B;IAO/C,MAAM,MAAM,GAMR,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACpE,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEvD,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACnF,IAAI,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnE,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChE,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEpD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAE9C,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC5E,IAAI,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAEhE,OAAO,MAAM,CAAC;AAChB,CAAC;AAYD;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAC3C,WAAgD;IAEhD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,iHAAiH,IAAI,EAAE,CACxH,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,KAA2B;IACxD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACzC,4EAA4E;QAC5E,gFAAgF;QAChF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAAE,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qFAAqF;AACrF,SAAS,cAAc,CAAC,CAAwB;IAC9C,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,SAAS,CAAC;IACzC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAC1D,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CACjC,IAAyC;IAEzC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC/B,+EAA+E;QAC/E,2EAA2E;QAC3E,sEAAsE;QACtE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAAE,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,GAAW;IACxD,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACxE,CAAC;IACD,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC;IACzD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IACjD,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AACzD,CAAC;AAED,oEAAoE;AACpE,SAAS,eAAe;IACtB,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACzD,CAAC;AAKD;;;;;;;;;;;GAWG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;AACvC,CAAC;AAED,4EAA4E;AAC5E,SAAS,oBAAoB,CAAC,IAAiB,EAAE,OAA4B;IAC3E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAClE,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAClE,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/D,IAAI,OAAO,CAAC,0BAA0B,KAAK,SAAS;QAAE,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAC3H,IAAI,OAAO,CAAC,4BAA4B,KAAK,SAAS;QAAE,IAAI,CAAC,yBAAyB,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAC9H,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;QAAE,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAClG,CAAC;AAED,sFAAsF;AACtF,SAAS,iBAAiB,CAAC,IAAiB,EAAE,OAA4B,EAAE,MAA8B;IACxG,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,GAAG,QAA2D,CAAC;IACpG,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,WAAW,CAAC;IACnE,IAAI,eAAe,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,eAA6C,CAAC;IACpG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,QAAQ,CAAC;IACtD,IAAI,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,KAAK,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC5C,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAA6B,EAC7B,WAA+B,EAC/B,GAAW,EACX,QAAgB;IAEhB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,WAAW,SAAS,QAAQ,qCAAqC,GAAG,WAAW,GAAG,IAAI;YAC1G,mEAAmE,QAAQ,8BAA8B,CAC5G,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,+EAA+E;AAC/E,SAAS,eAAe,CACtB,IAAiB,EACjB,KAAqC,EACrC,MAA8B;IAE9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACtH,IAAI,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACrD,MAAM,YAAY,GAAG,iBAAiB,CACpC,KAAK,CAAC,YAAY,EAClB,MAAM,EAAE,YAAY,EACpB,uBAAuB,CAAC,YAAY,EACpC,kBAAkB,CACnB,CAAC;IACF,IAAI,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACjE,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACvH,IAAI,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAClD,iFAAiF;IACjF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,MAAM,EAAE,KAAK,CAAC;IAC3C,IAAI,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,uGAAuG,IAAI,EAAE,CAC9G,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,kFAAkF;AAClF,SAAS,aAAa,CAAC,KAA2B;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mFAAmF;AACnF,SAAS,QAAQ,CACf,SAA6C,EAC7C,MAA0C;IAE1C,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;AACrC,CAAC;AAED,wEAAwE;AACxE,SAAS,YAAY,CACnB,UAAgC,EAChC,OAA6B;IAE7B,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CAAC,IAAiB,EAAE,OAA4B,EAAE,MAA8B;IACrG,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,IAAI,GAAG,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACtC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACpD,CAAC;AAED,gFAAgF;AAChF,SAAS,cAAc,CAAC,IAAiB,EAAE,OAA4B,EAAE,MAA8B;IACrG,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtF,IAAI,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnG,IAAI,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACnE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CACxB,IAAiB,EACjB,OAA4B,EAC5B,KAAqC,EACrC,UAAiC;IAEjC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,UAAU,EAAE,WAAW,CAAC;IACnE,IAAI,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,UAAU,EAAE,WAAW,CAAC;IACjE,IAAI,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,OAAe,EACf,OAA4B,EAC5B,KAAqC,EACrC,MAA8B,EAC9B,UAAiC;IAEjC,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,MAAM,IAAI,GAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAChD,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACtC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAwCD;;;;;;GAMG;AACH,SAAS,oBAAoB,CAC3B,MAAuB,EACvB,aAA4C,EAC5C,GAAW;IAEX,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAChG,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAW,EACX,GAAW,EACX,KAAmF;IAEnF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO;gBACL,aAAa,EAAE,QAAQ,CAAC,MAAM;gBAC9B,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,KAAK;gBACjB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC;aACtE,CAAC;QACJ,KAAK,WAAW;YACd,MAAM,IAAI,eAAe,CACvB,mBAAmB,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,UAAU,mBAAmB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,8BAA8B,QAAQ,CAAC,IAAI,KAAK,CAC1K,CAAC;QACJ,KAAK,WAAW;YACd,MAAM,IAAI,eAAe,CACvB,YAAY,QAAQ,CAAC,GAAG,uFAAuF,CAChH,CAAC;QACJ,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,8EAA8E;YAC9E,6EAA6E;YAC7E,6EAA6E;YAC7E,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,mBAAmB,GAAG,6BAA6B,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAChG,OAAO,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,mBAAmB,EAAE,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CACjC,GAAuB,EACvB,WAAmB,EACnB,KAA4C;IAE5C,kHAAkH;IAClH,IAAI,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;QACtF,CAAC;QACD,OAAO;YACL,aAAa,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,eAAe,EAAE;YAC5C,kBAAkB,EAAE,WAAW;YAC/B,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,IAAI;YAChB,mEAAmE;YACnE,sDAAsD;YACtD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO;YACL,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;YACpC,kBAAkB,EAAE,WAAW;YAC/B,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,IAAI;YAChB,wBAAwB,EAAE,KAAK;SAChC,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,eAAe,CACvB,gCAAgC,GAAG,CAAC,eAAe,sDAAsD,CAC1G,CAAC;AACJ,CAAC;AAED,qHAAqH;AACrH,KAAK,UAAU,uBAAuB,CACpC,GAAuB,EACvB,KAAmF;IAEnF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE5C,kFAAkF;IAClF,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,0BAA0B,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,gFAAgF;IAChF,kFAAkF;IAClF,iFAAiF;IACjF,iFAAiF;IACjF,iFAAiF;IACjF,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAC/B,CAAC;IAED,mFAAmF;IACnF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,gBAAgB,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrC,MAAM,YAAY,CAChB,GAAG,CAAC,UAAU,EACd,+BAA+B,CAAC,GAAG,CAAC,eAAe,EAAE;gBACnD,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,UAAU,EAAE,GAAG,CAAC,eAAe;aAChC,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CACvB,2BAA2B,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC5H,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAIlC;IACC,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,qBAAqB,KAAK,IAAI,CAAC;AAC1G,CAAC;AAED;;;;;;GAMG;AACH,SAAS,8BAA8B,CAAC,OAAwB;IAC9D,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAAE,OAAO;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4EAA4E;QAC1E,sFAAsF;QACtF,sCAAsC,CACzC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;GAKG;AACH,KAAK,UAAU,uBAAuB,CACpC,OAAe,EACf,OAA4B,EAC5B,GAAW;IAMX,IAAI,CAAC;QACH,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC;YAC1C,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC;SACtC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,WAAwB,EAAE,OAAwB;IAC9E,WAAW,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAClD,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACtC,WAAW,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAC5C,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC7C,WAAW,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;QACnD,WAAW,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC9C,WAAW,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAA4B;IAE5B,oBAAoB,EAAE,CAAC;IAEvB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAErG,uFAAuF;IACvF,gDAAgD;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,IAAK,OAA+B,CAAC,KAAK,KAAK,KAAK,CAAC;IAC7F,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,YAAY,GAAG,cAAc,CAAC;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;QAC/B,yBAAyB,EAAE,OAAO,CAAC,4BAA4B,KAAK,IAAI;KACzE,CAAC,CAAC;IACH,IAAI,eAAgC,CAAC;IACrC,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;YACpE,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;YAC/B,YAAY;YACZ,GAAG,CAAC,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+EAA+E;QAC/E,gFAAgF;QAChF,MAAM,QAAQ,GAAG,GAAG,YAAY,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,8BAA8B,CAAC,eAAe,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,+EAA+E;QAC/E,gFAAgF;QAChF,+EAA+E;QAC/E,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAClF,oBAAoB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAEtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACzC,2EAA2E;QAC3E,0EAA0E;QAC1E,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAEnC,OAAO;SACJ,WAAW,CAAC,mIAAmI,CAAC;SAChJ,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;SACxC,MAAM,CACL,kBAAkB,EAClB,8OAA8O,CAC/O;SACA,MAAM,CACL,2BAA2B,EAC3B,yJAAyJ,CAC1J;SACA,MAAM,CACL,iBAAiB,EACjB,8LAA8L,CAC/L;SACA,MAAM,CACL,qBAAqB,EACrB,gIAAgI,CACjI;SACA,MAAM,CAAC,WAAW,EAAE,wDAAwD,CAAC;SAC7E,MAAM,CAAC,YAAY,EAAE,oFAAoF,CAAC;SAC1G,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;SACnE,MAAM,CAAC,aAAa,EAAE,uCAAuC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC;SAC5D,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,yDAAyD,CAAC;SAClF,MAAM,CAAC,uBAAuB,EAAE,2DAA2D,CAAC;SAC5F,MAAM,CAAC,YAAY,EAAE,8CAA8C,CAAC;SACpE,MAAM,CACL,sBAAsB,EACtB,kMAAkM,CACnM;SACA,MAAM,CAAC,iCAAiC,EAAE,4CAA4C,CAAC;SACvF,MAAM,CAAC,qCAAqC,EAAE,yDAAyD,CAAC;SACxG,MAAM,CACL,cAAc,EACd,wOAAwO,CACzO;SACA,MAAM,CACL,qBAAqB,EACrB,oLAAoL,CACrL;SACA,MAAM,CAAC,iBAAiB,EAAE,2DAA2D,CAAC;SACtF,MAAM,CAAC,sBAAsB,EAAE,uCAAuC,CAAC;SACvE,MAAM,CAAC,eAAe,EAAE,kDAAkD,CAAC;SAC3E,MAAM,CAAC,aAAa,EAAE,8CAA8C,CAAC;SACrE,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;SACzF,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,eAAe,CAAC;SACvB,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDL,CACI,CAAC;IAEJ,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/skill/test/run.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { findDeclaredSkillForPath, resolveSkillReference } from './resolve-skill-reference.js';
1
+ export { findDeclaredSkillForPath, findDeclaredSkillForSourceDir, resolveSkillReference, } from './resolve-skill-reference.js';
2
2
  export { classifyToken, parseSourceSpec } from './classify.js';
3
3
  export { getDiscoveredSkillsByPath, resetSkillDiscoveryCache, resolveSkillPackagingConfig, stripValidationAllowForDisplay, } from './packaging-config.js';
4
4
  export type { BuildableReference, DeclaredSkillLink, SkillDistribution, SkillReference } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
- export { findDeclaredSkillForPath, resolveSkillReference } from './resolve-skill-reference.js';
1
+ export { findDeclaredSkillForPath, findDeclaredSkillForSourceDir, resolveSkillReference, } from './resolve-skill-reference.js';
2
2
  export { classifyToken, parseSourceSpec } from './classify.js';
3
3
  export { getDiscoveredSkillsByPath, resetSkillDiscoveryCache, resolveSkillPackagingConfig, stripValidationAllowForDisplay, } from './packaging-config.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-resolution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-resolution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC"}
@@ -1,11 +1,23 @@
1
- import type { DeclaredSkillLink, SkillReference } from './types.js';
1
+ import type { BuildableReference, DeclaredSkillLink, SkillReference } from './types.js';
2
2
  /**
3
- * Reverse-lookup: does this PATH target point at a declared skill's built dist? Walks
4
- * up from the path (config-first, so a monorepo package config beats the repo `.git`)
5
- * to the governing config, then matches the resolved path against each declared skill's
6
- * `expectedDistDir`. Returns the linkage on a match, else undefined (a config-blind
7
- * path). Pure classification — no build, no side effects. Exported for reuse + tests.
3
+ * Reverse-lookup: does this PATH target point at a declared skill's built dist?
4
+ * Matches the resolved path against each declared skill's `expectedDistDir`.
5
+ * Returns the linkage on a match, else undefined (a config-blind path). Pure
6
+ * classification — no build, no side effects. Exported for reuse + tests.
8
7
  */
9
8
  export declare function findDeclaredSkillForPath(pathRef: string, cwd: string): Promise<DeclaredSkillLink | undefined>;
9
+ /**
10
+ * Forward-lookup companion of {@link findDeclaredSkillForPath} (which matches a
11
+ * DIST path): does this SOURCE path point at a declared skill's authored directory
12
+ * (dirname of its SKILL.md)? A `--with`/`--with-optional` companion given as
13
+ * `path:<source-dir>` has no bare-name grammar to trigger the `buildable` rung of
14
+ * the disambiguation ladder — this is the reverse mapping that lets a companion
15
+ * get the SAME build treatment as the subject (its `files:` injection runs before
16
+ * staging) without inventing new `--with` syntax. Pure classification; no build.
17
+ * Returns undefined when the path matches no declared skill (a companion outside
18
+ * this project's config — npm-packaged, workspace, or an undeclared local dir —
19
+ * is unaffected and stays a plain source).
20
+ */
21
+ export declare function findDeclaredSkillForSourceDir(pathRef: string, cwd: string): Promise<BuildableReference | undefined>;
10
22
  export declare function resolveSkillReference(ref: string, cwd: string): Promise<SkillReference>;
11
23
  //# sourceMappingURL=resolve-skill-reference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-skill-reference.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/resolve-skill-reference.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAsB,iBAAiB,EAAqB,cAAc,EAAE,MAAM,YAAY,CAAC;AAsC3G;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAexC;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoD7F"}
1
+ {"version":3,"file":"resolve-skill-reference.d.ts","sourceRoot":"","sources":["../../src/skill-resolution/resolve-skill-reference.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAqB,cAAc,EAAE,MAAM,YAAY,CAAC;AA2E3G;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAQxC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAKzC;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoD7F"}
@@ -29,6 +29,7 @@
29
29
  * PURE LOOKUP/CLASSIFICATION — no side effects, no build. Build is the caller's job.
30
30
  */
31
31
  import { existsSync } from 'node:fs';
32
+ import { dirname } from 'node:path';
32
33
  import { findDistributedSkillLocationBySource, skillNameToFsPath, } from '@vibe-agent-toolkit/agent-skills';
33
34
  import { findProjectRoot, safePath } from '@vibe-agent-toolkit/utils';
34
35
  import { loadConfigCached } from '../utils/config-loader.js';
@@ -64,14 +65,22 @@ function computeSkillDistribution(name, sourcePath, configRoot, config) {
64
65
  };
65
66
  }
66
67
  /**
67
- * Reverse-lookup: does this PATH target point at a declared skill's built dist? Walks
68
- * up from the path (config-first, so a monorepo package config beats the repo `.git`)
69
- * to the governing config, then matches the resolved path against each declared skill's
70
- * `expectedDistDir`. Returns the linkage on a match, else undefined (a config-blind
71
- * path). Pure classification — no build, no side effects. Exported for reuse + tests.
68
+ * Shared config+discovery lookup for both the reverse (dist-path) and forward
69
+ * (source-path) declared-skill matchers below: walk up from `absPath` (config-first,
70
+ * so a monorepo package config beats the repo `.git`) to the governing config, then
71
+ * return its declared-skills-by-path map. Undefined when there's no governing
72
+ * config, or no `skills` section declared.
72
73
  */
73
- export async function findDeclaredSkillForPath(pathRef, cwd) {
74
- const absPath = safePath.resolve(cwd, pathRef);
74
+ /**
75
+ * Shared engine for both the reverse (dist-path) and forward (source-path)
76
+ * declared-skill matchers below: walk up from `absPath` (config-first, so a
77
+ * monorepo package config beats the repo `.git`) to the governing config, then
78
+ * scan its declared skills for the first one `matches` accepts. `matches` returns
79
+ * the caller's result shape (or undefined to keep scanning) — the two matchers
80
+ * differ only in WHICH path each declared skill is compared against and WHAT they
81
+ * build from a hit, not in the walk-up/scan itself.
82
+ */
83
+ async function findFirstDeclaredSkillEntry(absPath, matches) {
75
84
  const configRoot = findProjectRoot(absPath);
76
85
  if (configRoot === null)
77
86
  return undefined;
@@ -80,13 +89,43 @@ export async function findDeclaredSkillForPath(pathRef, cwd) {
80
89
  return undefined;
81
90
  const byPath = await getDiscoveredSkillsByPath(config.skills, configRoot);
82
91
  for (const [sourcePath, name] of byPath.entries()) {
83
- const { expectedDistDir } = computeSkillDistribution(name, sourcePath, configRoot, config);
84
- if (safePath.resolve(expectedDistDir) === absPath) {
85
- return { name, configRoot, sourcePath, expectedDistDir };
86
- }
92
+ const result = await matches(sourcePath, name, configRoot, config);
93
+ if (result !== undefined)
94
+ return result;
87
95
  }
88
96
  return undefined;
89
97
  }
98
+ /**
99
+ * Reverse-lookup: does this PATH target point at a declared skill's built dist?
100
+ * Matches the resolved path against each declared skill's `expectedDistDir`.
101
+ * Returns the linkage on a match, else undefined (a config-blind path). Pure
102
+ * classification — no build, no side effects. Exported for reuse + tests.
103
+ */
104
+ export async function findDeclaredSkillForPath(pathRef, cwd) {
105
+ const absPath = safePath.resolve(cwd, pathRef);
106
+ return findFirstDeclaredSkillEntry(absPath, (sourcePath, name, configRoot, config) => {
107
+ const { expectedDistDir } = computeSkillDistribution(name, sourcePath, configRoot, config);
108
+ return safePath.resolve(expectedDistDir) === absPath
109
+ ? { name, configRoot, sourcePath, expectedDistDir }
110
+ : undefined;
111
+ });
112
+ }
113
+ /**
114
+ * Forward-lookup companion of {@link findDeclaredSkillForPath} (which matches a
115
+ * DIST path): does this SOURCE path point at a declared skill's authored directory
116
+ * (dirname of its SKILL.md)? A `--with`/`--with-optional` companion given as
117
+ * `path:<source-dir>` has no bare-name grammar to trigger the `buildable` rung of
118
+ * the disambiguation ladder — this is the reverse mapping that lets a companion
119
+ * get the SAME build treatment as the subject (its `files:` injection runs before
120
+ * staging) without inventing new `--with` syntax. Pure classification; no build.
121
+ * Returns undefined when the path matches no declared skill (a companion outside
122
+ * this project's config — npm-packaged, workspace, or an undeclared local dir —
123
+ * is unaffected and stays a plain source).
124
+ */
125
+ export async function findDeclaredSkillForSourceDir(pathRef, cwd) {
126
+ const absPath = safePath.resolve(cwd, pathRef);
127
+ return findFirstDeclaredSkillEntry(absPath, (sourcePath, name, configRoot, config) => safePath.resolve(dirname(sourcePath)) === absPath ? buildBuildable(name, sourcePath, configRoot, config) : undefined);
128
+ }
90
129
  export async function resolveSkillReference(ref, cwd) {
91
130
  const shape = classifyToken(ref);
92
131
  if (shape.shape === 'source-spec')
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-skill-reference.js","sourceRoot":"","sources":["../../src/skill-resolution/resolve-skill-reference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-skill-reference.js","sourceRoot":"","sources":["../../src/skill-resolution/resolve-skill-reference.ts"],"names":[],"mappings":"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"}
package/docs/index.md CHANGED
@@ -180,6 +180,45 @@ vat agent run ./my-agent --debug
180
180
 
181
181
  ---
182
182
 
183
+ ### `skill test`
184
+
185
+ Run a packaged skill's eval suite in a headless, context-isolated Claude session
186
+
187
+ **What it does:**
188
+
189
+ 1. Builds and stages the skill (plus any `--with` companion skills)
190
+ 2. Runs each eval with a blind **executor** — the skill under test
191
+ 3. Grades the captured transcript with a separate **grader** model
192
+ 4. Writes `grading.json`, `friction.json`, and `tool-eval.json` to `results/`
193
+
194
+ **When to use:** Verifying a skill actually works before publishing it
195
+
196
+ **Exit codes:**
197
+
198
+ - `0` - Run completed, all expectations passed
199
+ - `1` - Harness broke (internal error, stall, timeout)
200
+ - `2` - Preflight failure (bad config, unresolvable required companion, auth guard)
201
+ - `3` - Bootstrap failure
202
+ - `4` - Eval failure (run completed, expectations did not all pass)
203
+
204
+ **Creates/modifies:** A harness directory (removed unless `--keep`)
205
+
206
+ **Note:** This command executes skill code. It is context-isolated, not an OS
207
+ sandbox — `--i-understand-this-runs-skill-code` is required.
208
+
209
+ **Examples:**
210
+
211
+ ```bash
212
+ vat skill test run my-skill --i-understand-this-runs-skill-code
213
+ vat skill test run my-skill --keep --model claude-opus-5
214
+ vat skill test configure my-skill --auth subscription
215
+ ```
216
+
217
+ **More details:** `packages/cli/docs/skill-test.md` — full knob table for the
218
+ per-skill `skills.config.<skill>.test` block and the global `test:` node
219
+
220
+ ---
221
+
183
222
  ### `rag index`
184
223
 
185
224
  Create vector embeddings for semantic search over documentation
@@ -0,0 +1,169 @@
1
+ # vat skill test - Eval Harness Commands
2
+
3
+ ## Overview
4
+
5
+ The `vat skill test` commands run a packaged skill's eval suite in a headless,
6
+ context-isolated Claude session. Each eval runs in two roles: a blind **executor**
7
+ (the skill under test) performs the task, then a separate **grader** judges the
8
+ captured transcript and emits a verdict.
9
+
10
+ ```bash
11
+ vat skill test run <skill> # execute the eval suite
12
+ vat skill test configure <skill> # persist knobs into vibe-agent-toolkit.config.yaml
13
+ ```
14
+
15
+ > **This command executes skill code.** It is context-isolated, not an OS sandbox.
16
+ > `--i-understand-this-runs-skill-code` is required to acknowledge that.
17
+
18
+ Note the singular `vat skill` — distinct from the `vat skills` (plural) packaging
19
+ commands documented in [skills.md](./skills.md).
20
+
21
+ ## Two config homes
22
+
23
+ Most knobs exist both as a CLI flag (one-off) and a config key (persisted). **Flags
24
+ override config.** There are two places config lives:
25
+
26
+ | Home | Location | Holds |
27
+ |---|---|---|
28
+ | **Per-skill** | `skills.config.<skill>.test` | Everything about testing *one* skill — model under test, budgets, evals, companions |
29
+ | **Global** | top-level `test:` node | Judge/pipeline knobs shared by every skill — `graderModel`, `concurrency` |
30
+
31
+ ```yaml
32
+ # vibe-agent-toolkit.config.yaml
33
+ test: # GLOBAL — the judge and the pipeline
34
+ graderModel: claude-sonnet-5
35
+ concurrency: 4
36
+
37
+ skills:
38
+ config:
39
+ my-skill:
40
+ test: # PER-SKILL — the thing under test
41
+ model: claude-opus-5
42
+ timeout: 1500
43
+ auth: subscription
44
+ requireAuth: subscription
45
+ evals: evals/suite.json
46
+ ```
47
+
48
+ Both blocks are validated under a **strict** schema — an unknown key is a config
49
+ error, not a silent no-op. (This is the deliberate inverse of `evals.json`, which
50
+ VAT reads liberally as adopter-authored data.)
51
+
52
+ `vat skill test configure <skill>` writes the **per-skill** block using a
53
+ comment-preserving YAML upsert, and validates values before writing. Prefer it over
54
+ hand-editing.
55
+
56
+ ## Per-skill knobs (`skills.config.<skill>.test`)
57
+
58
+ Every field is optional; an omitted knob falls back to its default.
59
+
60
+ | Config key | Type / unit | Default | CLI flag | Purpose |
61
+ |---|---|---|---|---|
62
+ | `model` | string | claude's own default | `--model <id>` | Model for the **executor** (the skill under test). Passed **verbatim** to `claude --model` — VAT does no mapping or validation. Pin it for reproducible runs. |
63
+ | `maxTurns` | integer > 0 | none | `--max-turns <n>` | Per-spawn cap on executor/grader turns. |
64
+ | `maxBudgetUsd` | number > 0 | none | `--max-budget-usd <n>` | Hard USD budget cap passed to the CLI. |
65
+ | `timeout` | integer, **seconds** | scales with eval count: ~`2min + 2min/eval`, floored at 5min, capped at 1h | `--timeout <s>` | Wall-clock timeout. An explicit value always overrides the scaled default. |
66
+ | `stall` | integer, **seconds** | none | `--stall <s>` | Stall watchdog — kill the spawn after this long with no stream output. |
67
+ | `evals` | string (path) | bootstrapped suite | `--evals <path>` | Path to `evals.json`, **relative to the skill source**. |
68
+ | `auth` | `inherit` \| `subscription` \| `api-key` \| `auto` | `inherit` | `--auth <mode>` | Auth mechanism for the spawned session. |
69
+ | `requireAuth` | `subscription` \| `api-key` | none | `--require-auth <mech>` | Fail-fast guard: preflight exits `2` if the effective mechanism isn't this. |
70
+ | `baseline` | boolean | `false` | `--baseline` | Run the opt-in with/without A/B skill-lift comparison. |
71
+ | `skillCreator` | source descriptor | `{ vendored: true }` | — | Source for the vendored skill-creator rubric. |
72
+ | `with` | array of source descriptors | none | `--with name=<src>` | **Required** companion skills staged alongside the subject, invocable by it. |
73
+ | `optional` | array of source descriptors | none | `--with-optional name=<src>` | **Optional** companions — skipped with a warning if unresolvable. |
74
+ | `env` | map string→string | none | `--env KEY=VALUE` | Env vars injected into the **executor** spawn. Values interpolate `${fixturesDir}`, `${stagedSkillDir}`, `${harnessRoot}`, `${resultsDir}`. Protected names (PATH, auth, model, admin) cannot be overridden. |
75
+ | `passEnv` | array of strings | none | `--pass-env KEY` | Names of host env vars to forward to the executor spawn if present. Protected names are ignored with a warning. |
76
+ | `build` | string (shell command) | none | — | Command run **once, before staging**, to generate build artifacts. Runs with `cwd` = config root. A non-zero exit aborts the run (exit `2`). |
77
+
78
+ A **source descriptor** is one of `{ workspace: <pkg> }`, `{ npm: <spec> }`,
79
+ `{ url: <u>, sha256?: <hash> }`, `{ path: <dir> }`, or `{ vendored: true }`. On the
80
+ command line the same sources are written as `name=workspace:<pkg>`,
81
+ `name=npm:<spec>`, `name=url:<u>`, `name=path:<dir>`, or `name=vendored` — the CLI
82
+ form requires an explicit companion `name=`, the config form derives it from the
83
+ resolved skill.
84
+
85
+ ### Companion staging and builds
86
+
87
+ A `path:` companion whose source directory maps to a **declared** skill is **built**
88
+ first, exactly like the subject, so its `files:` build artifacts are injected — a
89
+ companion backed by a bundled executable stages functional rather than inert. A
90
+ required companion's build failure fails the run; an optional one falls back to raw
91
+ unbuilt source only when the failure is non-destructive. Each declared skill builds
92
+ **at most once per run**.
93
+
94
+ Staging the same name twice across the subject, `--with`, and `--with-optional` is a
95
+ duplicate-name error (exit `2`).
96
+
97
+ ## Global knobs (top-level `test:`)
98
+
99
+ | Config key | Type | Default | CLI flag | Purpose |
100
+ |---|---|---|---|---|
101
+ | `graderModel` | string | `claude-sonnet-5` | `--grader-model <id>` | Model for the fixed grader/judge. Passed verbatim to `claude --model`. Independent of `model` — you can run the skill under one model and grade under another. |
102
+ | `concurrency` | integer > 0 | `4` | `--concurrency <n>` | Width of the bounded-parallel executor→grader pipeline. |
103
+
104
+ ## Run-only flags (no config key)
105
+
106
+ | Flag | Purpose |
107
+ |---|---|
108
+ | `--i-understand-this-runs-skill-code` | **Required.** Acknowledges the command executes skill code. |
109
+ | `--no-build` | Stage existing `dist` instead of building. Errors if absent for the subject or a **required** companion; an optional companion falls back to raw source with a warning. |
110
+ | `--refresh` | Force a full re-stage, ignoring existing staged content. |
111
+ | `--keep` | Keep the harness directory after the run (needed to inspect `results/`). |
112
+ | `--dry-run` | Assemble the command without spawning Claude. Note this **skips the build**, so it does not preview `files:` injection. |
113
+ | `--out <dir>` / `--workdir <dir>` | Override the harness output / working directory. |
114
+ | `--allow-eval-failure` | Opt out of fail-closed: exit `0` even when an eval fails. For interactive iteration. |
115
+ | `--allow-unverified-skill-source` | Skip the vendored manifest integrity check. |
116
+ | `--debug` | Enable debug logging. |
117
+
118
+ ## Exit codes
119
+
120
+ The harness deliberately separates "the evals failed" from "the harness broke", so
121
+ CI can tolerate one and gate on the other.
122
+
123
+ - `0` - Run completed, all expectations passed
124
+ - `1` - Harness broke (internal error, stall, timeout, grader nonce failure)
125
+ - `2` - Preflight failure (bad config, unresolvable required companion, auth guard, `build` hook failed)
126
+ - `3` - Bootstrap failure
127
+ - `4` - **Eval failure** — the run completed but expectations did not all pass
128
+
129
+ ```bash
130
+ vat skill test run my-skill --i-understand-this-runs-skill-code
131
+ case $? in
132
+ 0) ;;
133
+ 4) echo "evals failed (tolerated)" ;;
134
+ *) exit 1 ;; # harness broke — fail the build
135
+ esac
136
+ ```
137
+
138
+ ## Results
139
+
140
+ With `--keep`, the harness directory retains a `results/` tree that VAT is the sole
141
+ writer of:
142
+
143
+ - `grading.json` - per-expectation verdicts and the pass/total summary
144
+ - `friction.json` - packaging issues observed during the run (advisory)
145
+ - `tool-eval.json` - tool-expectation verdicts; always written, so check
146
+ `.evals.length` rather than file existence
147
+
148
+ ## Examples
149
+
150
+ ```bash
151
+ # Run a declared skill's suite, honoring its test: config
152
+ vat skill test run my-skill --i-understand-this-runs-skill-code
153
+
154
+ # Pin both models independently, keep the harness for inspection
155
+ vat skill test run my-skill --model claude-opus-5 --grader-model claude-sonnet-5 \
156
+ --keep --i-understand-this-runs-skill-code
157
+
158
+ # Stage a required companion the subject is expected to invoke
159
+ vat skill test run router-skill --with helper=path:./skills/helper \
160
+ --i-understand-this-runs-skill-code
161
+
162
+ # Persist knobs instead of passing them every time
163
+ vat skill test configure my-skill --auth subscription --require-auth subscription
164
+ ```
165
+
166
+ ## See Also
167
+
168
+ - [skills.md](./skills.md) - `vat skills` (plural): packaging, validation, install
169
+ - [index.md](./index.md) - full CLI command index
package/docs/skills.md CHANGED
@@ -729,6 +729,8 @@ name: my-help # Instead of "help"
729
729
 
730
730
  ## Related Commands
731
731
 
732
+ - `vat skill test` - Run a skill's eval suite (note the **singular** `skill`); its
733
+ `test:` config surface is documented separately in [skill-test.md](./skill-test.md)
732
734
  - `vat audit` - Comprehensive validation for plugins, marketplaces, and skills
733
735
  - `vat resources validate` - Validate markdown resources (links, anchors)
734
736
  - `vat doctor` - Check environment and installation health
@@ -738,5 +740,6 @@ name: my-help # Instead of "help"
738
740
  ## See Also
739
741
 
740
742
  - [CLI Reference](./index.md) - Complete CLI documentation
743
+ - [Skill Test Command](./skill-test.md) - `vat skill test` eval harness and its config knobs
741
744
  - [Audit Command](./audit.md) - Comprehensive validation
742
745
  - [Resources Command](./resources.md) - Markdown resource validation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/cli",
3
- "version": "0.1.41-rc.3",
3
+ "version": "0.1.41-rc.5",
4
4
  "description": "Command-line interface for vibe-agent-toolkit",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,17 +41,17 @@
41
41
  "//dependencies-note": "DO NOT add example agent packages or adopter packages here. Adopter packages (like vat-development-agents) depend on the CLI binary at build time — declaring them as deps creates a circular build dependency. They are built in a second turbo pass via package#task overrides in turbo.json.",
42
42
  "dependencies": {
43
43
  "@anthropic-ai/sdk": "^0.71.2",
44
- "@vibe-agent-toolkit/agent-config": "0.1.41-rc.3",
45
- "@vibe-agent-toolkit/agent-schema": "0.1.41-rc.3",
46
- "@vibe-agent-toolkit/agent-skills": "0.1.41-rc.3",
47
- "@vibe-agent-toolkit/claude-marketplace": "0.1.41-rc.3",
48
- "@vibe-agent-toolkit/discovery": "0.1.41-rc.3",
49
- "@vibe-agent-toolkit/gateway-mcp": "0.1.41-rc.3",
50
- "@vibe-agent-toolkit/rag": "0.1.41-rc.3",
51
- "@vibe-agent-toolkit/rag-lancedb": "0.1.41-rc.3",
52
- "@vibe-agent-toolkit/resources": "0.1.41-rc.3",
53
- "@vibe-agent-toolkit/utils": "0.1.41-rc.3",
54
- "adm-zip": "^0.5.16",
44
+ "@vibe-agent-toolkit/agent-config": "0.1.41-rc.5",
45
+ "@vibe-agent-toolkit/agent-schema": "0.1.41-rc.5",
46
+ "@vibe-agent-toolkit/agent-skills": "0.1.41-rc.5",
47
+ "@vibe-agent-toolkit/claude-marketplace": "0.1.41-rc.5",
48
+ "@vibe-agent-toolkit/discovery": "0.1.41-rc.5",
49
+ "@vibe-agent-toolkit/gateway-mcp": "0.1.41-rc.5",
50
+ "@vibe-agent-toolkit/rag": "0.1.41-rc.5",
51
+ "@vibe-agent-toolkit/rag-lancedb": "0.1.41-rc.5",
52
+ "@vibe-agent-toolkit/resources": "0.1.41-rc.5",
53
+ "@vibe-agent-toolkit/utils": "0.1.41-rc.5",
54
+ "adm-zip": "^0.6.0",
55
55
  "commander": "^12.1.0",
56
56
  "picomatch": "^4.0.3",
57
57
  "semver": "^7.7.3",
@@ -65,7 +65,7 @@
65
65
  "@types/picomatch": "^4.0.2",
66
66
  "@types/semver": "^7.7.1",
67
67
  "@types/tar": "^6.1.13",
68
- "@vibe-agent-toolkit/dev-tools": "0.1.41-rc.3",
68
+ "@vibe-agent-toolkit/dev-tools": "0.1.41-rc.5",
69
69
  "rimraf": "^6.0.1",
70
70
  "typescript": "^5.7.3",
71
71
  "vitest": "^3.2.4"