@vibe-agent-toolkit/agent-skills 0.1.39-rc.9 → 0.1.40-rc.1

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 (95) hide show
  1. package/dist/files-config.d.ts +61 -0
  2. package/dist/files-config.d.ts.map +1 -1
  3. package/dist/files-config.js +262 -6
  4. package/dist/files-config.js.map +1 -1
  5. package/dist/index.d.ts +4 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/plugin-distribution-layout.d.ts +70 -0
  10. package/dist/plugin-distribution-layout.d.ts.map +1 -0
  11. package/dist/plugin-distribution-layout.js +97 -0
  12. package/dist/plugin-distribution-layout.js.map +1 -0
  13. package/dist/skill-packager.d.ts +43 -1
  14. package/dist/skill-packager.d.ts.map +1 -1
  15. package/dist/skill-packager.js +131 -53
  16. package/dist/skill-packager.js.map +1 -1
  17. package/dist/skill-source/git-clone.d.ts +2 -2
  18. package/dist/skill-source/git-clone.d.ts.map +1 -1
  19. package/dist/skill-source/git-clone.js +33 -10
  20. package/dist/skill-source/git-clone.js.map +1 -1
  21. package/dist/skill-source/sources/url-source.d.ts.map +1 -1
  22. package/dist/skill-source/sources/url-source.js +23 -8
  23. package/dist/skill-source/sources/url-source.js.map +1 -1
  24. package/dist/skill-source/sources/workspace-source.d.ts.map +1 -1
  25. package/dist/skill-source/sources/workspace-source.js +16 -8
  26. package/dist/skill-source/sources/workspace-source.js.map +1 -1
  27. package/dist/skill-source/stage.js +6 -2
  28. package/dist/skill-source/stage.js.map +1 -1
  29. package/dist/skill-test/configure-writer.d.ts +19 -11
  30. package/dist/skill-test/configure-writer.d.ts.map +1 -1
  31. package/dist/skill-test/configure-writer.js +23 -15
  32. package/dist/skill-test/configure-writer.js.map +1 -1
  33. package/dist/skill-test/declared-env.d.ts +72 -0
  34. package/dist/skill-test/declared-env.d.ts.map +1 -0
  35. package/dist/skill-test/declared-env.js +85 -0
  36. package/dist/skill-test/declared-env.js.map +1 -0
  37. package/dist/skill-test/eval-inputs.d.ts +159 -0
  38. package/dist/skill-test/eval-inputs.d.ts.map +1 -0
  39. package/dist/skill-test/eval-inputs.js +158 -0
  40. package/dist/skill-test/eval-inputs.js.map +1 -0
  41. package/dist/skill-test/evals-template.d.ts.map +1 -1
  42. package/dist/skill-test/evals-template.js +27 -10
  43. package/dist/skill-test/evals-template.js.map +1 -1
  44. package/dist/skill-test/exit-codes.d.ts +43 -5
  45. package/dist/skill-test/exit-codes.d.ts.map +1 -1
  46. package/dist/skill-test/exit-codes.js +60 -9
  47. package/dist/skill-test/exit-codes.js.map +1 -1
  48. package/dist/skill-test/experimenter-prompt.d.ts +22 -0
  49. package/dist/skill-test/experimenter-prompt.d.ts.map +1 -1
  50. package/dist/skill-test/experimenter-prompt.js +38 -2
  51. package/dist/skill-test/experimenter-prompt.js.map +1 -1
  52. package/dist/skill-test/grading-adapter.d.ts +42 -0
  53. package/dist/skill-test/grading-adapter.d.ts.map +1 -1
  54. package/dist/skill-test/grading-adapter.js +63 -1
  55. package/dist/skill-test/grading-adapter.js.map +1 -1
  56. package/dist/skill-test/grading-schema.d.ts +73 -5
  57. package/dist/skill-test/grading-schema.d.ts.map +1 -1
  58. package/dist/skill-test/grading-schema.js +20 -5
  59. package/dist/skill-test/grading-schema.js.map +1 -1
  60. package/dist/skill-test/harness-location.d.ts +22 -4
  61. package/dist/skill-test/harness-location.d.ts.map +1 -1
  62. package/dist/skill-test/harness-location.js +83 -18
  63. package/dist/skill-test/harness-location.js.map +1 -1
  64. package/dist/skill-test/index.d.ts +7 -4
  65. package/dist/skill-test/index.d.ts.map +1 -1
  66. package/dist/skill-test/index.js +7 -4
  67. package/dist/skill-test/index.js.map +1 -1
  68. package/dist/skill-test/lock.d.ts +23 -0
  69. package/dist/skill-test/lock.d.ts.map +1 -1
  70. package/dist/skill-test/lock.js +34 -0
  71. package/dist/skill-test/lock.js.map +1 -1
  72. package/dist/skill-test/preflight.d.ts.map +1 -1
  73. package/dist/skill-test/preflight.js +1 -2
  74. package/dist/skill-test/preflight.js.map +1 -1
  75. package/dist/skill-test/run-harness.d.ts +193 -19
  76. package/dist/skill-test/run-harness.d.ts.map +1 -1
  77. package/dist/skill-test/run-harness.js +366 -76
  78. package/dist/skill-test/run-harness.js.map +1 -1
  79. package/dist/skill-test/staging.d.ts.map +1 -1
  80. package/dist/skill-test/staging.js +31 -15
  81. package/dist/skill-test/staging.js.map +1 -1
  82. package/dist/skill-test/vendor-manifest.d.ts +3 -3
  83. package/dist/skill-test/vendor-manifest.d.ts.map +1 -1
  84. package/dist/skill-test/vendor-manifest.js +13 -3
  85. package/dist/skill-test/vendor-manifest.js.map +1 -1
  86. package/dist/validators/packaging-validator.d.ts.map +1 -1
  87. package/dist/validators/packaging-validator.js +134 -1
  88. package/dist/validators/packaging-validator.js.map +1 -1
  89. package/dist/validators/skill-validator.d.ts.map +1 -1
  90. package/dist/validators/skill-validator.js +18 -14
  91. package/dist/validators/skill-validator.js.map +1 -1
  92. package/dist/walk-link-graph.d.ts.map +1 -1
  93. package/dist/walk-link-graph.js +26 -1
  94. package/dist/walk-link-graph.js.map +1 -1
  95. package/package.json +6 -5
@@ -5,9 +5,11 @@
5
5
  * - Merging defaults + per-skill entries (additive, per-skill wins on dest collision)
6
6
  * - Matching auto-discovered links to files entries
7
7
  * - Computing deferred paths for validation
8
+ * - Copying declared build artifacts into a skill output dir (every build path)
8
9
  */
9
10
  import type { SkillFileEntry } from '@vibe-agent-toolkit/resources';
10
11
  export type { SkillFileEntry } from '@vibe-agent-toolkit/resources';
12
+ export declare function buildArtifactHint(source: string): string;
11
13
  /** Result of matching a link target against files config */
12
14
  export interface FilesMatchResult {
13
15
  /** Whether the link matched source or dest */
@@ -30,6 +32,12 @@ export declare function mergeFilesConfig(defaults: SkillFileEntry[] | undefined,
30
32
  * Returns the matching entry and whether it matched on source or dest.
31
33
  * Source matches take priority over dest matches.
32
34
  *
35
+ * For GLOB entries (`isGlob(entry.source)`), matching is by directory prefix:
36
+ * - source match: link is equal to or under the glob's static base
37
+ * - dest match: link is equal to or under entry.dest
38
+ *
39
+ * Single-file entries still match EXACTLY (unchanged).
40
+ *
33
41
  * @param linkTarget - Resolved link target path (relative to project root)
34
42
  * @param files - Merged files config entries
35
43
  * @returns Match result or null if no match
@@ -91,4 +99,57 @@ export interface ComputeDeferredPathsOpts {
91
99
  * - source paths are deferred only when the target does not yet exist on disk
92
100
  */
93
101
  export declare function computeDeferredPaths(files: SkillFileEntry[], opts: ComputeDeferredPathsOpts): DeferredPaths;
102
+ /** Options for {@link applyFilesConfig}. */
103
+ export interface ApplyFilesConfigOptions {
104
+ /** Merged `files:` entries to copy. */
105
+ filesConfig: SkillFileEntry[];
106
+ /** Absolute project root; each `source` resolves relative to it. */
107
+ projectRoot: string;
108
+ /** Absolute skill output dir; each `dest` resolves relative to it. */
109
+ skillOutputDir: string;
110
+ /**
111
+ * Absolute source paths already materialized by link traversal — skipped so
112
+ * a linked-and-copied asset isn't copied twice. Defaults to none (copy all).
113
+ */
114
+ bundledFiles?: string[];
115
+ }
116
+ /**
117
+ * Verify that each (absSource, absDest) pair has byte-identical content.
118
+ *
119
+ * Throws with a message naming the offending dest path on any mismatch or
120
+ * missing dest. Intended to be called after a copy operation to assert the
121
+ * copy was faithful. Exported so it can be tested directly without running a
122
+ * full applyFilesConfig round-trip.
123
+ */
124
+ export declare function verifyFilesIntegrity(pairs: {
125
+ absSource: string;
126
+ absDest: string;
127
+ }[]): void;
128
+ /**
129
+ * Verify that the on-disk contents of a glob entry's dest subtree EXACTLY match
130
+ * the set of rel paths the copy step intended to write — no missing, no extra.
131
+ *
132
+ * Why a SET comparison and not just `verifyFilesIntegrity`'s byte check:
133
+ * `verifyFilesIntegrity` hashes the (absSource, absDest) pairs that the SAME copy
134
+ * code computed. If the rebase/glob-mapping logic maps a match to the WRONG dest,
135
+ * that wrong dest rides along in the pair, so `hash(absSource) === hash(absDest)`
136
+ * still passes and the bug slips through. Enumerating the dest subtree and
137
+ * diffing against the expected rel set is what catches a misrouted rebase, a
138
+ * stale leftover, or a dropped file.
139
+ *
140
+ * SAFETY ASSUMPTION (why this can't false-positive): a glob entry OWNS its dest
141
+ * directory (`skillOutputDir/<entry.dest>`) and the build wipes the skill output
142
+ * dir before copying (skill-packager.ts removes `resolvedOutput` recursively
143
+ * before any copy). Nothing else writes into this subtree, so any EXTRA file is a
144
+ * genuine bug, not a co-tenant. This scoping is what makes the set check safe
145
+ * here even though a project-wide "no extra files" check would not be.
146
+ *
147
+ * @param destDir Absolute path to the glob entry's dest subtree.
148
+ * @param expectedRel Forward-slash rel paths (relative to `destDir`) the copy
149
+ * step wrote for THIS entry.
150
+ * @param source The entry's `source` (for error messages only).
151
+ * @throws if the actual subtree omits an expected file or contains an extra one.
152
+ */
153
+ export declare function verifyDestSet(destDir: string, expectedRel: string[], source: string): Promise<void>;
154
+ export declare function applyFilesConfig(opts: ApplyFilesConfigOptions): Promise<string[]>;
94
155
  //# sourceMappingURL=files-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"files-config.d.ts","sourceRoot":"","sources":["../src/files-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGpE,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,+BAA+B;IAC/B,KAAK,EAAE,cAAc,CAAC;CACvB;AAaD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EAAE,GAAG,SAAS,EACtC,QAAQ,EAAE,cAAc,EAAE,GAAG,SAAS,GACrC,cAAc,EAAE,CA6ClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,cAAc,EAAE,GACtB,gBAAgB,GAAG,IAAI,CAkBzB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,+FAA+F;IAC/F,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,wBAAwB,GAC7B,aAAa,CAgBf"}
1
+ {"version":3,"file":"files-config.d.ts","sourceRoot":"","sources":["../src/files-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAYpE,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAapE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,+BAA+B;IAC/B,KAAK,EAAE,cAAc,CAAC;CACvB;AAaD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EAAE,GAAG,SAAS,EACtC,QAAQ,EAAE,cAAc,EAAE,GAAG,SAAS,GACrC,cAAc,EAAE,CA6ClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,cAAc,EAAE,GACtB,gBAAgB,GAAG,IAAI,CAiCzB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,+FAA+F;IAC/F,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,wBAAwB,GAC7B,aAAa,CAqBf;AAED,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAC9C,IAAI,CAgBN;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAyBf;AA2KD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYvF"}
@@ -5,8 +5,33 @@
5
5
  * - Merging defaults + per-skill entries (additive, per-skill wins on dest collision)
6
6
  * - Matching auto-discovered links to files entries
7
7
  * - Computing deferred paths for validation
8
+ * - Copying declared build artifacts into a skill output dir (every build path)
8
9
  */
9
- import { toForwardSlash, safePath } from '@vibe-agent-toolkit/utils';
10
+ import { existsSync, statSync } from 'node:fs';
11
+ import { copyFile, mkdir } from 'node:fs/promises';
12
+ import { dirname } from 'node:path';
13
+ import { fileContentHash, globMagicRemainder, hasParentTraversalSegment, isGlob, safePath, staticGlobBase, toForwardSlash, } from '@vibe-agent-toolkit/utils';
14
+ import { glob } from 'glob';
15
+ /**
16
+ * Returns a hint clause (with a leading space) when `source` looks like a build
17
+ * artifact that hasn't been produced yet, otherwise returns `''`.
18
+ *
19
+ * Heuristic (conservative):
20
+ * - The source path contains a `dist/`, `build/`, or `out/` path *segment* (exact
21
+ * segment equality, so `redistribute/data.json` does NOT match), OR
22
+ * - The source ends in a bundle-ish extension: `.mjs`, `.cjs`, `.js`, `.bundle.*`
23
+ */
24
+ const BUILD_SEGMENTS = new Set(['dist', 'build', 'out']);
25
+ export function buildArtifactHint(source) {
26
+ const normalized = toForwardSlash(source);
27
+ const segments = normalized.split('/');
28
+ const hasArtifactSegment = segments.some((seg) => BUILD_SEGMENTS.has(seg));
29
+ const hasArtifactExtension = /\.(mjs|cjs|js)$/.test(normalized) || /\.bundle\.[^./]+$/.test(normalized);
30
+ if (hasArtifactSegment || hasArtifactExtension) {
31
+ return ' This looks like a build artifact — run your project\'s build to produce it before testing.';
32
+ }
33
+ return '';
34
+ }
10
35
  /**
11
36
  * Normalize a path for comparison: strip leading ./ and normalize slashes.
12
37
  */
@@ -70,21 +95,43 @@ export function mergeFilesConfig(defaults, perSkill) {
70
95
  * Returns the matching entry and whether it matched on source or dest.
71
96
  * Source matches take priority over dest matches.
72
97
  *
98
+ * For GLOB entries (`isGlob(entry.source)`), matching is by directory prefix:
99
+ * - source match: link is equal to or under the glob's static base
100
+ * - dest match: link is equal to or under entry.dest
101
+ *
102
+ * Single-file entries still match EXACTLY (unchanged).
103
+ *
73
104
  * @param linkTarget - Resolved link target path (relative to project root)
74
105
  * @param files - Merged files config entries
75
106
  * @returns Match result or null if no match
76
107
  */
77
108
  export function matchLinkToFiles(linkTarget, files) {
78
109
  const normalized = normalizePath(linkTarget);
79
- // Source match has priority
110
+ /** True when `candidate` equals `normalized` or is a path-prefix of it. */
111
+ function isPrefixMatch(candidate) {
112
+ return normalized === candidate || normalized.startsWith(candidate + '/');
113
+ }
114
+ // Source match has priority (checked before dest across all entries)
80
115
  for (const entry of files) {
81
- if (normalizePath(entry.source) === normalized) {
116
+ if (isGlob(entry.source)) {
117
+ const base = normalizePath(staticGlobBase(entry.source));
118
+ if (isPrefixMatch(base)) {
119
+ return { match: 'source', entry };
120
+ }
121
+ }
122
+ else if (normalizePath(entry.source) === normalized) {
82
123
  return { match: 'source', entry };
83
124
  }
84
125
  }
85
126
  // Then check dest match
86
127
  for (const entry of files) {
87
- if (normalizePath(entry.dest) === normalized) {
128
+ if (isGlob(entry.source)) {
129
+ const destBase = normalizePath(entry.dest);
130
+ if (isPrefixMatch(destBase)) {
131
+ return { match: 'dest', entry };
132
+ }
133
+ }
134
+ else if (normalizePath(entry.dest) === normalized) {
88
135
  return { match: 'dest', entry };
89
136
  }
90
137
  }
@@ -123,11 +170,220 @@ export function computeDeferredPaths(files, opts) {
123
170
  for (const entry of files) {
124
171
  // dest is authored relative to skillDir (skill-packager: resolve(skillDir, dest))
125
172
  destPaths.add(toForwardSlash(safePath.relative(opts.projectRoot, safePath.resolve(opts.skillDir, entry.dest))));
126
- // source is authored relative to projectRoot. Mirror skill-packager exactly:
173
+ // source is authored relative to projectRoot. For GLOB entries, register the
174
+ // static base (e.g. 'dist/packs' for 'dist/packs/**/*') so that prefix
175
+ // matching in checkDeferred() can defer links under the glob's expansion tree
176
+ // without executing the glob at validate time (late-bound, pattern-derived).
177
+ // For single-file entries, mirror skill-packager exactly:
127
178
  // resolve(join(projectRoot, source)) so absolute-looking sources root under
128
179
  // projectRoot rather than escaping it.
129
- sourcePaths.add(toForwardSlash(safePath.relative(opts.projectRoot, safePath.resolve(safePath.join(opts.projectRoot, entry.source)))));
180
+ const effectiveSource = isGlob(entry.source) ? staticGlobBase(entry.source) : entry.source;
181
+ sourcePaths.add(toForwardSlash(safePath.relative(opts.projectRoot, safePath.resolve(safePath.join(opts.projectRoot, effectiveSource)))));
130
182
  }
131
183
  return { destPaths, sourcePaths };
132
184
  }
185
+ /**
186
+ * Verify that each (absSource, absDest) pair has byte-identical content.
187
+ *
188
+ * Throws with a message naming the offending dest path on any mismatch or
189
+ * missing dest. Intended to be called after a copy operation to assert the
190
+ * copy was faithful. Exported so it can be tested directly without running a
191
+ * full applyFilesConfig round-trip.
192
+ */
193
+ export function verifyFilesIntegrity(pairs) {
194
+ for (const { absSource, absDest } of pairs) {
195
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- paths from validated config
196
+ if (!existsSync(absDest)) {
197
+ throw new Error(`files: integrity check failed — dest file missing: ${toForwardSlash(absDest)}`);
198
+ }
199
+ const srcHash = fileContentHash(absSource);
200
+ const dstHash = fileContentHash(absDest);
201
+ if (srcHash !== dstHash) {
202
+ throw new Error(`files: integrity check failed — content mismatch at dest: ${toForwardSlash(absDest)}`);
203
+ }
204
+ }
205
+ }
206
+ /**
207
+ * Verify that the on-disk contents of a glob entry's dest subtree EXACTLY match
208
+ * the set of rel paths the copy step intended to write — no missing, no extra.
209
+ *
210
+ * Why a SET comparison and not just `verifyFilesIntegrity`'s byte check:
211
+ * `verifyFilesIntegrity` hashes the (absSource, absDest) pairs that the SAME copy
212
+ * code computed. If the rebase/glob-mapping logic maps a match to the WRONG dest,
213
+ * that wrong dest rides along in the pair, so `hash(absSource) === hash(absDest)`
214
+ * still passes and the bug slips through. Enumerating the dest subtree and
215
+ * diffing against the expected rel set is what catches a misrouted rebase, a
216
+ * stale leftover, or a dropped file.
217
+ *
218
+ * SAFETY ASSUMPTION (why this can't false-positive): a glob entry OWNS its dest
219
+ * directory (`skillOutputDir/<entry.dest>`) and the build wipes the skill output
220
+ * dir before copying (skill-packager.ts removes `resolvedOutput` recursively
221
+ * before any copy). Nothing else writes into this subtree, so any EXTRA file is a
222
+ * genuine bug, not a co-tenant. This scoping is what makes the set check safe
223
+ * here even though a project-wide "no extra files" check would not be.
224
+ *
225
+ * @param destDir Absolute path to the glob entry's dest subtree.
226
+ * @param expectedRel Forward-slash rel paths (relative to `destDir`) the copy
227
+ * step wrote for THIS entry.
228
+ * @param source The entry's `source` (for error messages only).
229
+ * @throws if the actual subtree omits an expected file or contains an extra one.
230
+ */
231
+ export async function verifyDestSet(destDir, expectedRel, source) {
232
+ // dot: true to stay symmetric with the copy glob (M10) — both sides must see
233
+ // hidden files, otherwise a dropped dot-file is invisible to integrity.
234
+ const actual = (await glob('**/*', { cwd: destDir, nodir: true, dot: true }))
235
+ .map((m) => toForwardSlash(m))
236
+ .sort((a, b) => a.localeCompare(b));
237
+ const expected = [...expectedRel].sort((a, b) => a.localeCompare(b));
238
+ const expectedSet = new Set(expected);
239
+ const actualSet = new Set(actual);
240
+ for (const rel of actual) {
241
+ if (!expectedSet.has(rel)) {
242
+ throw new Error(`files: integrity check for '${source}' found unexpected file '${rel}' under dest '${toForwardSlash(destDir)}'`);
243
+ }
244
+ }
245
+ for (const rel of expected) {
246
+ if (!actualSet.has(rel)) {
247
+ throw new Error(`files: integrity check for '${source}' missing expected file '${rel}' under dest '${toForwardSlash(destDir)}'`);
248
+ }
249
+ }
250
+ }
251
+ /**
252
+ * Copy a single (non-glob) files entry into the skill output dir.
253
+ *
254
+ * Returns `[destPath]` (the single entry.dest string) on success.
255
+ * Throws on missing source or if source is a directory.
256
+ */
257
+ async function copyNonGlobEntry(entry, absoluteSource, skillOutputDir) {
258
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- source path from validated config
259
+ if (!existsSync(absoluteSource)) {
260
+ throw new Error(`files: source '${entry.source}' does not exist (resolved to ${absoluteSource}).${buildArtifactHint(entry.source)}`);
261
+ }
262
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- source path from validated config
263
+ if (statSync(absoluteSource).isDirectory()) {
264
+ throw new Error(`files: source '${entry.source}' is a directory; use a glob like '${entry.source}/**/*' to copy its contents.`);
265
+ }
266
+ // joinUnderRoot rejects a dest that escapes the skill output dir (absolute /
267
+ // drive-letter / '..'), defense-in-depth beyond the schema refine.
268
+ const absoluteDest = safePath.joinUnderRoot(skillOutputDir, entry.dest);
269
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- dest path from validated config
270
+ await mkdir(dirname(absoluteDest), { recursive: true });
271
+ await copyFile(absoluteSource, absoluteDest);
272
+ return { relDest: entry.dest, absSource: absoluteSource, absDest: absoluteDest };
273
+ }
274
+ /**
275
+ * Expand a glob entry, copy all matched files, and return copied rel-dest paths
276
+ * plus source/dest pairs for optional integrity verification.
277
+ */
278
+ async function copyGlobEntry(entry, projectRoot, skillOutputDir, bundledFileSet) {
279
+ const base = staticGlobBase(entry.source);
280
+ const remainder = globMagicRemainder(entry.source);
281
+ // H2: the static base may legitimately contain leading '..' (the deliberate
282
+ // sibling-base monorepo feature), but the MAGIC REMAINDER must never contain a
283
+ // '..' segment — `glob` honors it and climbs above absoluteBase. Reject it.
284
+ if (hasParentTraversalSegment(remainder)) {
285
+ throw new Error(`files: source '${entry.source}' (glob) has a '..' segment in its glob portion ('${remainder}'); ` +
286
+ `parent-directory traversal is not allowed after the static base.`);
287
+ }
288
+ const absoluteBase = safePath.resolve(safePath.join(projectRoot, base));
289
+ // dot: true so hidden files under the source subtree are included — keeps the
290
+ // package symmetric with verifyDestSet (M10: silent dot-file drop).
291
+ const rawMatches = await glob(remainder, { cwd: absoluteBase, nodir: true, dot: true });
292
+ const matches = rawMatches.map((m) => toForwardSlash(m)).sort((a, b) => a.localeCompare(b));
293
+ if (matches.length === 0) {
294
+ throw new Error(`files: source '${entry.source}' (glob) matched no files under ${absoluteBase} — has your build run?`);
295
+ }
296
+ const copied = [];
297
+ const pairs = [];
298
+ // rels are dest-subtree-relative (relative to skillOutputDir/<entry.dest>),
299
+ // which equals the matched `rel` for files actually copied — the expected set
300
+ // verifyDestSet diffs the on-disk subtree against.
301
+ const rels = [];
302
+ for (const rel of matches) {
303
+ // joinUnderRoot asserts each matched file stays under absoluteBase (read) and
304
+ // that the rebased dest stays under the skill output dir (write) — H1/H2
305
+ // defense-in-depth against a traversal that slipped past earlier guards.
306
+ const absSource = safePath.joinUnderRoot(absoluteBase, rel);
307
+ if (bundledFileSet.has(toForwardSlash(absSource)))
308
+ continue;
309
+ const relDest = toForwardSlash(safePath.join(entry.dest, rel));
310
+ const absDest = safePath.joinUnderRoot(skillOutputDir, entry.dest, rel);
311
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- dest path from validated config
312
+ await mkdir(dirname(absDest), { recursive: true });
313
+ await copyFile(absSource, absDest);
314
+ copied.push(relDest);
315
+ pairs.push({ absSource, absDest });
316
+ rels.push(toForwardSlash(rel));
317
+ }
318
+ return { copied, pairs, rels };
319
+ }
320
+ /**
321
+ * Copy each `files:` entry's `source` → `dest` into the skill output directory.
322
+ *
323
+ * This is the single copy primitive shared by every build path so that
324
+ * build-provided artifacts (a bundled engine, generated data, a catalog) are
325
+ * VAT-managed end-to-end: the shared-pool `vat skills build` packager and the
326
+ * Claude plugin marketplace build both call it, instead of the latter relying on
327
+ * an external inject script VAT can't see. `source` is resolved the same way the
328
+ * packager does (`resolve(join(projectRoot, source))`, so an absolute-looking
329
+ * source roots UNDER the project). Returns the dest paths actually copied.
330
+ *
331
+ * Glob entries (`source` containing `*`, `?`, or `[`) expand late-bound at
332
+ * copy time: all matched files are rebased under `dest` preserving their
333
+ * path relative to the glob's static base. Zero matches → error.
334
+ *
335
+ * When `integrity: true` is set on an entry, `verifyFilesIntegrity` is called
336
+ * after copying to assert byte-identical content. For GLOB entries it ALSO runs
337
+ * `verifyDestSet` to assert the dest subtree contains exactly the copied rels
338
+ * (no missing, no extra) — catching a misrouted rebase the byte check misses.
339
+ * Single-file entries get only the byte check (dest is a file, not a subtree).
340
+ *
341
+ * @throws if a declared `source` does not exist — a declared build artifact must
342
+ * be present at copy time (callers that defer existence validate it upstream).
343
+ */
344
+ /** Copy + optionally integrity-check one GLOB `files:` entry; returns the copied rel-dests. */
345
+ async function applyGlobFileEntry(fileEntry, opts, bundledFileSet) {
346
+ const { copied, pairs, rels } = await copyGlobEntry(fileEntry, opts.projectRoot, opts.skillOutputDir, bundledFileSet);
347
+ if (fileEntry.integrity === true) {
348
+ verifyFilesIntegrity(pairs);
349
+ // Scoped set check: the glob entry owns its dest subtree and the build wiped
350
+ // the output dir first, so the on-disk subtree must equal exactly the rels we
351
+ // copied — catches a misrouted rebase the pair-hash misses.
352
+ await verifyDestSet(safePath.joinUnderRoot(opts.skillOutputDir, fileEntry.dest), rels, fileEntry.source);
353
+ }
354
+ return copied;
355
+ }
356
+ /** Copy + optionally integrity-check one NON-GLOB `files:` entry; returns the copied rel-dests. */
357
+ async function applyNonGlobFileEntry(fileEntry, opts, bundledFileSet) {
358
+ const absoluteSource = safePath.resolve(safePath.join(opts.projectRoot, fileEntry.source));
359
+ if (bundledFileSet.has(toForwardSlash(absoluteSource))) {
360
+ // Already materialized by link traversal (copied to entry.dest via the path
361
+ // map) — don't copy it a second time. But a requested `integrity` check must
362
+ // NOT be silently skipped just because the copy was: verify the link-bundled
363
+ // dest is byte-identical to the source, exactly as the copy path below would.
364
+ // (The bundled copy lands at entry.dest — see applyNonGlobEntriesToPathMap in
365
+ // skill-packager.ts.)
366
+ if (fileEntry.integrity === true) {
367
+ const absDest = safePath.joinUnderRoot(opts.skillOutputDir, fileEntry.dest);
368
+ verifyFilesIntegrity([{ absSource: absoluteSource, absDest }]);
369
+ }
370
+ return [];
371
+ }
372
+ const { relDest, absSource, absDest } = await copyNonGlobEntry(fileEntry, absoluteSource, opts.skillOutputDir);
373
+ if (fileEntry.integrity === true) {
374
+ verifyFilesIntegrity([{ absSource, absDest }]);
375
+ }
376
+ return [relDest];
377
+ }
378
+ export async function applyFilesConfig(opts) {
379
+ const bundledFileSet = new Set((opts.bundledFiles ?? []).map((f) => toForwardSlash(f)));
380
+ const copied = [];
381
+ for (const fileEntry of opts.filesConfig) {
382
+ const entryCopied = isGlob(fileEntry.source)
383
+ ? await applyGlobFileEntry(fileEntry, opts, bundledFileSet)
384
+ : await applyNonGlobFileEntry(fileEntry, opts, bundledFileSet);
385
+ copied.push(...entryCopied);
386
+ }
387
+ return copied;
388
+ }
133
389
  //# sourceMappingURL=files-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"files-config.js","sourceRoot":"","sources":["../src/files-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files-config.js","sourceRoot":"","sources":["../src/files-config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,10 +3,10 @@
3
3
  * Build, validate, and package agent skills in the Agent Skills format
4
4
  */
5
5
  export { buildAgentSkill, type BuildOptions, type BuildResult } from './builder.js';
6
- export { extractH1Title, packageSkill, packageSkills, ZipSizeLimitError, type PackageSkillOptions, type PackageSkillResult, type PackagingTarget, type SkillBuildSpec, type SkillMetadata, } from './skill-packager.js';
6
+ export { extractH1Title, packageSkill, packageSkills, packagingConfigToPackageOptions, ZipSizeLimitError, type PackageSkillOptions, type PackageSkillResult, type PackagingTarget, type SkillBuildSpec, type SkillMetadata, } from './skill-packager.js';
7
7
  export { walkLinkGraph, type ExcludeRule, type LinkGraphResult, type LinkResolution, type WalkableRegistry, type WalkLinkGraphOptions, } from './walk-link-graph.js';
8
8
  export { getTargetSubdir, CONTENT_TYPE_ROUTING_MAP, type TargetSubdirCategory, } from './content-type-routing.js';
9
- export { mergeFilesConfig, matchLinkToFiles, computeDeferredPaths, type ComputeDeferredPathsOpts, type DeferredPaths, type FilesMatchResult, } from './files-config.js';
9
+ export { applyFilesConfig, mergeFilesConfig, matchLinkToFiles, computeDeferredPaths, type ApplyFilesConfigOptions, type ComputeDeferredPathsOpts, type DeferredPaths, type FilesMatchResult, } from './files-config.js';
10
10
  export { AgentSkillFrontmatterJsonSchema, AgentSkillFrontmatterSchema, VATAgentSkillFrontmatterSchema, type AgentSkillFrontmatter, type VATAgentSkillFrontmatter, } from './schemas/agent-skill-frontmatter.js';
11
11
  export { MarketplaceManifestJsonSchema, MarketplaceManifestSchema, type MarketplaceManifest } from './schemas/marketplace-manifest.js';
12
12
  export { PluginJsonSchema, type PluginJson } from './schemas/plugin-json.js';
@@ -32,4 +32,6 @@ export type { DeriveObservationsOptions, DerivationSubject } from './evidence/in
32
32
  export type { AnyInventory, BaseInventory, ComponentRef, DeclaredList, HookRef, InstallInventory, LspRef, MarketplaceInventory, McpRef, ParseError as InventoryParseError, PluginInventory, PluginRef, ResolvedReference, SkillInventory, } from './inventory/index.js';
33
33
  export { isInstallInventory, isMarketplaceInventory, isPluginInventory, isSkillInventory, serializeInventory, serializeInventoryShallow, INVENTORY_SCHEMA_VERSION, detectDeclaredButMissing, detectMarketplacePluginSourceMissing, detectPresentButUndeclared, detectReferenceTargetMissing, } from './inventory/index.js';
34
34
  export * from './skill-test/index.js';
35
+ export { checkBrokenPackagedLinks } from './post-build-checks.js';
36
+ export { computeTreeCopiedSkillLocations, findDistributedSkillLocationBySource, getPluginOutputDir, getPluginSourceDir, listPluginSourceSkillDirs, skillNameToFsPath, type DistributedSkillLocation, } from './plugin-distribution-layout.js';
35
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,10 +3,10 @@
3
3
  * Build, validate, and package agent skills in the Agent Skills format
4
4
  */
5
5
  export { buildAgentSkill } from './builder.js';
6
- export { extractH1Title, packageSkill, packageSkills, ZipSizeLimitError, } from './skill-packager.js';
6
+ export { extractH1Title, packageSkill, packageSkills, packagingConfigToPackageOptions, ZipSizeLimitError, } from './skill-packager.js';
7
7
  export { walkLinkGraph, } from './walk-link-graph.js';
8
8
  export { getTargetSubdir, CONTENT_TYPE_ROUTING_MAP, } from './content-type-routing.js';
9
- export { mergeFilesConfig, matchLinkToFiles, computeDeferredPaths, } from './files-config.js';
9
+ export { applyFilesConfig, mergeFilesConfig, matchLinkToFiles, computeDeferredPaths, } from './files-config.js';
10
10
  export { AgentSkillFrontmatterJsonSchema, AgentSkillFrontmatterSchema, VATAgentSkillFrontmatterSchema, } from './schemas/agent-skill-frontmatter.js';
11
11
  export { MarketplaceManifestJsonSchema, MarketplaceManifestSchema } from './schemas/marketplace-manifest.js';
12
12
  export { PluginJsonSchema } from './schemas/plugin-json.js';
@@ -29,4 +29,6 @@ export { resolveSkillSource } from './skill-source/resolve-skill-source.js';
29
29
  export { PATTERN_REGISTRY, getPatternDefinition, assertPatternRegistered, deriveObservationsFromEvidence, } from './evidence/index.js';
30
30
  export { isInstallInventory, isMarketplaceInventory, isPluginInventory, isSkillInventory, serializeInventory, serializeInventoryShallow, INVENTORY_SCHEMA_VERSION, detectDeclaredButMissing, detectMarketplacePluginSourceMissing, detectPresentButUndeclared, detectReferenceTargetMissing, } from './inventory/index.js';
31
31
  export * from './skill-test/index.js';
32
+ export { checkBrokenPackagedLinks } from './post-build-checks.js';
33
+ export { computeTreeCopiedSkillLocations, findDistributedSkillLocationBySource, getPluginOutputDir, getPluginSourceDir, listPluginSourceSkillDirs, skillNameToFsPath, } from './plugin-distribution-layout.js';
32
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAuC,MAAM,cAAc,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,GAMlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,GAMd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GAIrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,GAG/B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAA4B,MAAM,mCAAmC,CAAC;AAEvI,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,gBAAgB,GAEjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAyB,MAAM,sCAAsC,CAAC;AACvG,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAA+B,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAK1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,GAItB,MAAM,kCAAkC,CAAC;AAQ1C,OAAO,EACL,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AAErB,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAuB,MAAM,6BAA6B,CAAC;AAElF,8CAA8C;AAC9C,OAAO,EAAE,kBAAkB,EAAkC,MAAM,wCAAwC,CAAC;AAgB5G,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,oCAAoC,EACpC,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAE9B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAuC,MAAM,cAAc,CAAC;AAEpF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,+BAA+B,EAC/B,iBAAiB,GAMlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,GAMd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,GAG/B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAA4B,MAAM,mCAAmC,CAAC;AAEvI,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EACL,gBAAgB,GAEjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAyB,MAAM,sCAAsC,CAAC;AACvG,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAA+B,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAK1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,GAItB,MAAM,kCAAkC,CAAC;AAQ1C,OAAO,EACL,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AAErB,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAuB,MAAM,6BAA6B,CAAC;AAElF,8CAA8C;AAC9C,OAAO,EAAE,kBAAkB,EAAkC,MAAM,wCAAwC,CAAC;AAgB5G,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,oCAAoC,EACpC,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAE9B,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EACL,+BAA+B,EAC/B,oCAAoC,EACpC,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,GAElB,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Plugin distribution layout helpers.
3
+ *
4
+ * Shared primitives for locating where `vat build --only claude` places
5
+ * tree-copied plugin skills in the output tree, and where it reads them from.
6
+ *
7
+ * Consumed by `vat build`, `vat verify`, and consistency-check so the path
8
+ * conventions can never drift between those commands.
9
+ */
10
+ import type { ProjectConfig } from '@vibe-agent-toolkit/resources';
11
+ /**
12
+ * Absolute path to the built plugin output directory.
13
+ *
14
+ * Shape: `<configDir>/dist/.claude/plugins/marketplaces/<mp>/plugins/<name>/`
15
+ *
16
+ * Extracted verbatim from build.ts lines 577–580 so that build can later adopt
17
+ * this helper with zero behavior change.
18
+ */
19
+ export declare function getPluginOutputDir(configDir: string, marketplaceName: string, pluginName: string): string;
20
+ /**
21
+ * Absolute path to the plugin source directory.
22
+ *
23
+ * Resolves to `<configDir>/<plugin.source>` when the plugin declares a custom
24
+ * source, otherwise `<configDir>/plugins/<plugin.name>`.
25
+ *
26
+ * Extracted verbatim from build.ts lines 581–584.
27
+ */
28
+ export declare function getPluginSourceDir(configDir: string, plugin: {
29
+ name: string;
30
+ source?: string | undefined;
31
+ }): string;
32
+ /**
33
+ * Names of immediate skill subdirectories under `<pluginSourceDir>/skills/`.
34
+ *
35
+ * Returns `[]` when the `skills/` directory does not exist (pool-only plugin).
36
+ * Non-directory entries (files, symlinks, …) are silently skipped.
37
+ *
38
+ * Mirrors `listSubdirectories` in install.ts.
39
+ */
40
+ export declare function listPluginSourceSkillDirs(pluginSourceDir: string): string[];
41
+ /** Location of a single skill shipped via source tree-copy. */
42
+ export interface DistributedSkillLocation {
43
+ /** Name of the marketplace this skill ships through. */
44
+ marketplaceName: string;
45
+ /** Name of the plugin that contains this skill. */
46
+ pluginName: string;
47
+ /** Directory name under the plugin's `skills/` source dir (also the skill fs path segment). */
48
+ skillDirName: string;
49
+ /** Absolute SOURCE skill dir: `<pluginSourceDir>/skills/<skillDirName>`. */
50
+ skillSourceDir: string;
51
+ /** Absolute output path where `vat build` places the skill: `getPluginOutputDir(...)/skills/<skillDirName>`. */
52
+ skillOutputDir: string;
53
+ }
54
+ /**
55
+ * Every skill shipped via source tree-copy across all marketplaces in the
56
+ * config, paired with the output directory where `vat build` places it.
57
+ *
58
+ * Pool-only plugins — those whose source `skills/` directory is absent on disk
59
+ * — contribute nothing to the result.
60
+ */
61
+ export declare function computeTreeCopiedSkillLocations(config: ProjectConfig, configDir: string): DistributedSkillLocation[];
62
+ /** FS-safe single path segment for a skill name (colon → `__`, invalid on Windows). */
63
+ export declare function skillNameToFsPath(name: string): string;
64
+ /**
65
+ * Find the tree-copied location whose SOURCE skill dir equals `skillSourceDir`
66
+ * (compared via resolved absolute paths). Returns `undefined` for pool skills
67
+ * or skills not declared in any plugin's `skills/` source dir.
68
+ */
69
+ export declare function findDistributedSkillLocationBySource(config: ProjectConfig, configDir: string, skillSourceDir: string): DistributedSkillLocation | undefined;
70
+ //# sourceMappingURL=plugin-distribution-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-distribution-layout.d.ts","sourceRoot":"","sources":["../src/plugin-distribution-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACpD,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ3E;AAED,+DAA+D;AAC/D,MAAM,WAAW,wBAAwB;IACvC,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,gHAAgH;IAChH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,wBAAwB,EAAE,CA0B5B;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,wBAAwB,GAAG,SAAS,CAKtC"}