@vibe-agent-toolkit/cli 0.1.33 → 0.1.34

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 (68) hide show
  1. package/dist/bin.js +4 -0
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/audit/git-url-clone.d.ts +32 -0
  4. package/dist/commands/audit/git-url-clone.d.ts.map +1 -0
  5. package/dist/commands/audit/git-url-clone.js +135 -0
  6. package/dist/commands/audit/git-url-clone.js.map +1 -0
  7. package/dist/commands/audit/hierarchical-output.js +2 -2
  8. package/dist/commands/audit/hierarchical-output.js.map +1 -1
  9. package/dist/commands/audit/provenance.d.ts +33 -0
  10. package/dist/commands/audit/provenance.d.ts.map +1 -0
  11. package/dist/commands/audit/provenance.js +57 -0
  12. package/dist/commands/audit/provenance.js.map +1 -0
  13. package/dist/commands/audit.d.ts.map +1 -1
  14. package/dist/commands/audit.js +257 -34
  15. package/dist/commands/audit.js.map +1 -1
  16. package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
  17. package/dist/commands/claude/marketplace/validate.js +2 -1
  18. package/dist/commands/claude/marketplace/validate.js.map +1 -1
  19. package/dist/commands/claude/plugin/build.d.ts +4 -3
  20. package/dist/commands/claude/plugin/build.d.ts.map +1 -1
  21. package/dist/commands/claude/plugin/build.js +178 -71
  22. package/dist/commands/claude/plugin/build.js.map +1 -1
  23. package/dist/commands/claude/plugin/plugin-files.d.ts +19 -0
  24. package/dist/commands/claude/plugin/plugin-files.d.ts.map +1 -0
  25. package/dist/commands/claude/plugin/plugin-files.js +53 -0
  26. package/dist/commands/claude/plugin/plugin-files.js.map +1 -0
  27. package/dist/commands/claude/plugin/plugin-json-merge.d.ts +29 -0
  28. package/dist/commands/claude/plugin/plugin-json-merge.d.ts.map +1 -0
  29. package/dist/commands/claude/plugin/plugin-json-merge.js +76 -0
  30. package/dist/commands/claude/plugin/plugin-json-merge.js.map +1 -0
  31. package/dist/commands/claude/plugin/plugin-validators.d.ts +13 -0
  32. package/dist/commands/claude/plugin/plugin-validators.d.ts.map +1 -0
  33. package/dist/commands/claude/plugin/plugin-validators.js +59 -0
  34. package/dist/commands/claude/plugin/plugin-validators.js.map +1 -0
  35. package/dist/commands/claude/plugin/tree-copy.d.ts +23 -0
  36. package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -0
  37. package/dist/commands/claude/plugin/tree-copy.js +68 -0
  38. package/dist/commands/claude/plugin/tree-copy.js.map +1 -0
  39. package/dist/commands/corpus/index.d.ts +6 -0
  40. package/dist/commands/corpus/index.d.ts.map +1 -0
  41. package/dist/commands/corpus/index.js +53 -0
  42. package/dist/commands/corpus/index.js.map +1 -0
  43. package/dist/commands/corpus/report.d.ts +75 -0
  44. package/dist/commands/corpus/report.d.ts.map +1 -0
  45. package/dist/commands/corpus/report.js +83 -0
  46. package/dist/commands/corpus/report.js.map +1 -0
  47. package/dist/commands/corpus/runner.d.ts +24 -0
  48. package/dist/commands/corpus/runner.d.ts.map +1 -0
  49. package/dist/commands/corpus/runner.js +246 -0
  50. package/dist/commands/corpus/runner.js.map +1 -0
  51. package/dist/commands/corpus/scan.d.ts +15 -0
  52. package/dist/commands/corpus/scan.d.ts.map +1 -0
  53. package/dist/commands/corpus/scan.js +90 -0
  54. package/dist/commands/corpus/scan.js.map +1 -0
  55. package/dist/commands/corpus/seed.d.ts +178 -0
  56. package/dist/commands/corpus/seed.d.ts.map +1 -0
  57. package/dist/commands/corpus/seed.js +63 -0
  58. package/dist/commands/corpus/seed.js.map +1 -0
  59. package/dist/commands/inventory.d.ts +17 -0
  60. package/dist/commands/inventory.d.ts.map +1 -0
  61. package/dist/commands/inventory.js +90 -0
  62. package/dist/commands/inventory.js.map +1 -0
  63. package/dist/utils/git-url.d.ts +43 -0
  64. package/dist/utils/git-url.d.ts.map +1 -0
  65. package/dist/utils/git-url.js +135 -0
  66. package/dist/utils/git-url.js.map +1 -0
  67. package/docs/audit.md +60 -3
  68. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/build.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAeD,wBAAgB,wBAAwB,IAAI,OAAO,CA2ClD"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/build.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAuBD,wBAAgB,wBAAwB,IAAI,OAAO,CA6ClD"}
@@ -1,34 +1,42 @@
1
1
  /**
2
- * `vat claude plugin build` — generate Claude plugin artifacts from pre-built skills
2
+ * `vat claude plugin build` — assemble Claude plugin artifacts from plugins/<name>/
3
3
  *
4
4
  * Reads vibe-agent-toolkit.config.yaml → claude.marketplaces.
5
- * Discovers available skills from dist/skills/ (built by `vat skills build`).
6
- * Wraps skills into Claude plugin directory structure with plugin.json metadata.
5
+ * For each plugin, assembles the plugin bundle from its own plugins/<name>/ directory
6
+ * (commands, hooks, agents, .mcp.json, skills/, .claude-plugin/plugin.json) and
7
+ * imports pool skills (from dist/skills/) via the `skills:` selector.
7
8
  */
8
- import { existsSync, readFileSync, cpSync } from 'node:fs';
9
+ import { cpSync, existsSync, readFileSync } from 'node:fs';
9
10
  import { mkdir, readdir, rm, writeFile } from 'node:fs/promises';
10
- import { safePath } from '@vibe-agent-toolkit/utils';
11
+ import { safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
11
12
  import { Command } from 'commander';
12
13
  import { handleCommandError } from '../../../utils/command-error.js';
13
14
  import { createLogger } from '../../../utils/logger.js';
14
15
  import { writeYamlOutput } from '../../../utils/output.js';
15
16
  import { loadClaudeProjectConfig } from '../claude-config.js';
17
+ import { applyPluginFiles } from './plugin-files.js';
18
+ import { mergePluginJson } from './plugin-json-merge.js';
19
+ import { parsePluginJsonFiles, verifyNoCaseCollidingPluginNames, verifyPluginDirCaseMatch, } from './plugin-validators.js';
20
+ import { treeCopyPlugin } from './tree-copy.js';
21
+ const CLAUDE_PLUGIN_DIRNAME = '.claude-plugin';
16
22
  export function createPluginBuildCommand() {
17
23
  const command = new Command('build');
18
24
  command
19
- .description('Generate Claude plugin artifacts from pre-built skills')
25
+ .description('Generate Claude plugin artifacts from plugin directories and pre-built skills')
20
26
  .option('--marketplace <name>', 'Build specific marketplace only')
21
27
  .option('--debug', 'Enable debug logging')
22
28
  .action(pluginBuildCommand)
23
29
  .addHelpText('after', `
24
30
  Description:
25
- Reads vibe-agent-toolkit.config.yaml to build Claude plugin artifacts
26
- from pre-built dist/skills/ output. Must run vat skills build first.
31
+ Reads vibe-agent-toolkit.config.yaml and assembles each Claude plugin bundle
32
+ from its own plugins/<name>/ directory, plus pool skills selected via the
33
+ plugin's skills: selector.
27
34
 
28
35
  For each marketplace, for each plugin:
29
- - Resolves skill selectors ("*" or name list) against dist/skills/ directories
30
- - Copies matched skills into plugin directory structure
31
- - Generates plugin.json with name, description, and author
36
+ - Tree-copies plugins/<name>/ (commands, hooks, agents, skills, .mcp.json) verbatim
37
+ - Imports pool skills (dist/skills/) via the plugin's skills: selector
38
+ - Applies explicit files: source→dest mappings for compiled artifacts
39
+ - Merges plugin.json with author, description, and VAT-supplied metadata
32
40
  - Generates marketplace.json with plugin registry and relative source paths
33
41
 
34
42
  Output structure:
@@ -44,7 +52,7 @@ Output:
44
52
 
45
53
  Exit Codes:
46
54
  0 - Build successful
47
- 1 - Build error (missing skills, invalid config)
55
+ 1 - Build error (empty plugin, invalid config)
48
56
  2 - System error
49
57
 
50
58
  Example:
@@ -91,13 +99,19 @@ async function pluginBuildCommand(options) {
91
99
  catch {
92
100
  // No package.json or unreadable — version will be omitted
93
101
  }
94
- // Discover available skills from dist/skills/
102
+ // Discover available skills from dist/skills/ for pool-to-plugin selectors
95
103
  const availableSkills = await discoverBuiltSkills(configDir);
96
104
  logger.info(`Building Claude plugin artifacts`);
97
105
  logger.info(` Config: ${configPath}`);
98
- logger.info(` Skills available: ${availableSkills.length} (${availableSkills.join(', ')})`);
106
+ logger.info(` Skills available: ${availableSkills.length}`);
99
107
  const results = [];
100
108
  const marketplaces = claudeConfig.marketplaces;
109
+ const allPluginNames = [];
110
+ for (const mp of Object.values(marketplaces)) {
111
+ for (const p of mp.plugins)
112
+ allPluginNames.push(p.name);
113
+ }
114
+ verifyNoCaseCollidingPluginNames(allPluginNames);
101
115
  for (const name of Object.keys(marketplaces)) {
102
116
  const mpConfig = marketplaces[name];
103
117
  // Skip if --marketplace filter specified and doesn't match
@@ -135,6 +149,12 @@ async function pluginBuildCommand(options) {
135
149
  name: p.pluginName,
136
150
  dir: p.pluginDir,
137
151
  skills: p.skillsCopied,
152
+ commandsCopied: p.commandsCopied,
153
+ hooksCopied: p.hooksCopied,
154
+ agentsCopied: p.agentsCopied,
155
+ mcpCopied: p.mcpCopied,
156
+ treeFilesCopied: p.treeFilesCopied,
157
+ explicitFilesCopied: p.explicitFilesCopied,
138
158
  })),
139
159
  })),
140
160
  duration: `${duration}ms`,
@@ -172,24 +192,20 @@ async function copyDistributionFiles(marketplaceDir, configDir, config, logger)
172
192
  async function buildMarketplace(name, config, availableSkills, configDir, packageVersion, logger) {
173
193
  const plugins = [];
174
194
  // Clean stale marketplace directory before rebuilding — removes orphaned plugins
175
- const marketplaceOutputDir = safePath.join(configDir, 'dist', '.claude', 'plugins', 'marketplaces', name);
195
+ const marketplaceBaseDir = safePath.join(configDir, 'dist', '.claude', 'plugins', 'marketplaces', name);
176
196
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved from config
177
- if (existsSync(marketplaceOutputDir)) {
178
- await rm(marketplaceOutputDir, { recursive: true, force: true });
197
+ if (existsSync(marketplaceBaseDir)) {
198
+ await rm(marketplaceBaseDir, { recursive: true, force: true });
179
199
  }
200
+ // Marketplace-level skills filter restricts pool available to plugins that use "*"
201
+ const marketplaceAvailable = resolveMarketplaceAvailableSkills(config, availableSkills);
180
202
  for (const pluginDef of config.plugins) {
181
- // Resolve which skills this plugin gets
182
- const resolvedSkills = resolvePluginSkills(pluginDef, availableSkills);
183
- logger.info(` Plugin "${pluginDef.name}": ${resolvedSkills.length} skill(s) matched`);
184
- if (resolvedSkills.length === 0) {
185
- logger.info(` (no skills matched selectors)`);
186
- }
187
- const pluginResult = await buildPlugin(name, pluginDef, resolvedSkills, configDir, config.owner, packageVersion, logger);
203
+ const pluginResult = await buildPlugin(name, pluginDef, marketplaceAvailable, configDir, config.owner, packageVersion, logger);
188
204
  plugins.push(pluginResult);
189
205
  }
190
206
  // Generate .claude-plugin/marketplace.json
191
- const marketplaceDir = safePath.join(configDir, 'dist', '.claude', 'plugins', 'marketplaces', name);
192
- const claudePluginDir = safePath.join(marketplaceDir, '.claude-plugin');
207
+ const marketplaceDir = marketplaceBaseDir;
208
+ const claudePluginDir = safePath.join(marketplaceDir, CLAUDE_PLUGIN_DIRNAME);
193
209
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved paths
194
210
  await mkdir(claudePluginDir, { recursive: true });
195
211
  const marketplaceJson = {
@@ -218,9 +234,30 @@ async function buildMarketplace(name, config, availableSkills, configDir, packag
218
234
  await copyDistributionFiles(marketplaceDir, configDir, config, logger);
219
235
  return { name, status: 'built', plugins };
220
236
  }
237
+ /**
238
+ * Resolve which pool skills are available to plugins in this marketplace.
239
+ *
240
+ * When marketplace declares `skills: [...]`, restricts the pool to matching skills
241
+ * (affecting plugins that use `skills: "*"`). Omit or `"*"` = allow all.
242
+ */
243
+ function resolveMarketplaceAvailableSkills(config, availableSkills) {
244
+ if (config.skills === undefined || config.skills === '*') {
245
+ return availableSkills;
246
+ }
247
+ const filter = new Set();
248
+ for (const selector of config.skills) {
249
+ for (const skillName of availableSkills) {
250
+ if (matchesSelector(skillName, selector)) {
251
+ filter.add(skillName);
252
+ }
253
+ }
254
+ }
255
+ return [...filter];
256
+ }
221
257
  /**
222
258
  * Resolve which skills a plugin gets based on its `skills` selector.
223
- * "*" means all available skills; string[] means match each selector against available skill names.
259
+ * "*" means all marketplace-available skills; string[] means match each selector
260
+ * against available skill names.
224
261
  */
225
262
  function resolvePluginSkills(pluginDef, availableSkills) {
226
263
  if (pluginDef.skills === '*') {
@@ -228,8 +265,7 @@ function resolvePluginSkills(pluginDef, availableSkills) {
228
265
  }
229
266
  const matched = new Set();
230
267
  for (const selector of pluginDef.skills) {
231
- // Also try the fs-safe form of the selector (colon __) since
232
- // availableSkills are directory names which use the fs-safe form.
268
+ // Also try the fs-safe form (colon -> __) since dist/skills/ dirnames use the fs-safe form.
233
269
  const fsSelector = skillNameToFsPath(selector);
234
270
  for (const skillName of availableSkills) {
235
271
  if (matchesSelector(skillName, selector) || matchesSelector(skillName, fsSelector)) {
@@ -241,66 +277,137 @@ function resolvePluginSkills(pluginDef, availableSkills) {
241
277
  }
242
278
  /**
243
279
  * Convert a skill name to a filesystem-safe path segment.
244
- *
245
- * Skill names use colon-namespacing (e.g. "vibe-agent-toolkit:vat-audit") which is
246
- * valid in YAML/JSON but invalid as a directory name on Windows. Replace colons with
247
- * double-underscore — unambiguous, reversible, and safe on all platforms.
280
+ * Colon-namespaced skill names (e.g. "pkg:sub-skill") are valid VAT identifiers
281
+ * but invalid on Windows; replace with `__`.
248
282
  */
249
283
  function skillNameToFsPath(name) {
250
284
  return name.replaceAll(':', '__');
251
285
  }
252
- async function buildPlugin(marketplaceName, pluginDef, skills, configDir, owner, packageVersion, logger) {
253
- const pluginDir = safePath.join(configDir, 'dist', '.claude', 'plugins', 'marketplaces', marketplaceName, 'plugins', pluginDef.name);
254
- const skillsCopied = [];
255
- logger.info(` Building plugin: ${pluginDef.name}`);
256
- for (const skillName of skills) {
286
+ /**
287
+ * Check if a skill name matches a selector.
288
+ * Supports exact match and simple glob patterns (prefix*, suffix*, *contains*).
289
+ */
290
+ function matchesSelector(skillName, selector) {
291
+ if (selector === '*') {
292
+ return true;
293
+ }
294
+ // eslint-disable-next-line security/detect-non-literal-regexp -- selector is from project config, bounded by name format
295
+ const regex = new RegExp(`^${selector.replaceAll('*', '.*')}$`);
296
+ return regex.test(skillName);
297
+ }
298
+ async function writeMergedPluginJson(pluginDef, pluginSourceDir, pluginDir, owner, packageVersion, logger) {
299
+ const pluginJsonDir = safePath.join(pluginDir, CLAUDE_PLUGIN_DIRNAME);
300
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved paths
301
+ await mkdir(pluginJsonDir, { recursive: true });
302
+ const authorPluginJsonPath = safePath.join(pluginSourceDir, CLAUDE_PLUGIN_DIRNAME, 'plugin.json');
303
+ let authorJson;
304
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- controlled path
305
+ if (existsSync(authorPluginJsonPath)) {
306
+ try {
307
+ authorJson = JSON.parse(
308
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- controlled path
309
+ readFileSync(authorPluginJsonPath, 'utf-8'));
310
+ }
311
+ catch (e) {
312
+ throw new Error(`Author .claude-plugin/plugin.json is not valid JSON: ${e.message}`);
313
+ }
314
+ }
315
+ const { merged, warnings } = mergePluginJson({
316
+ vat: {
317
+ name: pluginDef.name,
318
+ version: packageVersion,
319
+ author: { name: owner.name, ...(owner.email ? { email: owner.email } : {}) },
320
+ },
321
+ configDescription: pluginDef.description,
322
+ authorJson,
323
+ });
324
+ for (const w of warnings)
325
+ logger.info(`warning: ${w}`);
326
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved paths
327
+ await writeFile(safePath.join(pluginJsonDir, 'plugin.json'), JSON.stringify(merged, null, 2));
328
+ logger.info(` .claude-plugin/plugin.json`);
329
+ }
330
+ /**
331
+ * Copy pool skills (from dist/skills/) selected by the plugin's skills: selector
332
+ * into the plugin bundle's skills/ directory.
333
+ */
334
+ async function copyPoolSkills(pluginDef, marketplaceAvailable, configDir, pluginDir, logger) {
335
+ const selected = resolvePluginSkills(pluginDef, marketplaceAvailable);
336
+ const copied = [];
337
+ for (const skillName of selected) {
257
338
  const skillDistPath = safePath.join(configDir, 'dist', 'skills', skillName);
258
- // Verify skill is built
259
339
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved from config
260
340
  if (!existsSync(skillDistPath)) {
261
341
  throw new Error(`Skill "${skillName}" not built at ${skillDistPath}. ` +
262
342
  `Run: vat skills build (or vat build to build everything)`);
263
343
  }
264
- // Copy skill into plugin directory structure.
265
- // Use skillNameToFsPath to strip colons — colon-namespaced skill names (e.g.
266
- // "pkg:sub-skill") are valid VAT identifiers but invalid directory names on Windows.
267
344
  const fsPath = skillNameToFsPath(skillName);
268
345
  const destPath = safePath.join(pluginDir, 'skills', fsPath);
269
346
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved paths
270
347
  await mkdir(destPath, { recursive: true });
271
348
  cpSync(skillDistPath, destPath, { recursive: true });
272
- skillsCopied.push(fsPath);
349
+ copied.push(fsPath);
273
350
  logger.info(` ${skillName} -> skills/${fsPath}`);
274
351
  }
275
- // Generate plugin.json — STRICT: only name, description, author
276
- const pluginJsonDir = safePath.join(pluginDir, '.claude-plugin');
277
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved paths
278
- await mkdir(pluginJsonDir, { recursive: true });
279
- const pluginJson = {
280
- name: pluginDef.name,
281
- description: pluginDef.description ?? `${pluginDef.name} plugin`,
282
- ...(packageVersion ? { version: packageVersion } : {}),
283
- author: {
284
- name: owner.name,
285
- ...(owner.email ? { email: owner.email } : {}),
286
- },
287
- };
288
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved paths
289
- await writeFile(safePath.join(pluginJsonDir, 'plugin.json'), JSON.stringify(pluginJson, null, 2));
290
- logger.info(` .claude-plugin/plugin.json`);
291
- return { pluginName: pluginDef.name, pluginDir, skillsCopied };
352
+ return copied;
292
353
  }
293
- /**
294
- * Check if a skill name matches a selector.
295
- * Supports exact match and simple glob patterns (prefix*, suffix*, *contains*).
296
- */
297
- function matchesSelector(skillName, selector) {
298
- if (selector === '*') {
299
- return true;
354
+ async function buildPlugin(marketplaceName, pluginDef, marketplaceAvailable, configDir, owner, packageVersion, logger) {
355
+ const pluginDir = safePath.join(configDir, 'dist', '.claude', 'plugins', 'marketplaces', marketplaceName, 'plugins', pluginDef.name);
356
+ const pluginSourceDir = safePath.join(configDir, pluginDef.source ?? safePath.join('plugins', pluginDef.name));
357
+ logger.info(` Building plugin: ${pluginDef.name}`);
358
+ // Phase 1: validators.
359
+ await verifyPluginDirCaseMatch(configDir, pluginDef.name);
360
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- controlled path
361
+ const pluginSourceExists = existsSync(pluginSourceDir);
362
+ const hasExplicitFiles = (pluginDef.files?.length ?? 0) > 0;
363
+ const hasPoolSkills = pluginDef.skills === '*'
364
+ ? marketplaceAvailable.length > 0
365
+ : pluginDef.skills.length > 0;
366
+ if (!pluginSourceExists && !hasExplicitFiles && !hasPoolSkills) {
367
+ throw new Error(`Plugin '${pluginDef.name}' has no content: no plugin dir found at ` +
368
+ `'${toForwardSlash(safePath.relative(configDir, pluginSourceDir))}', no files mapped, and no skills selected. ` +
369
+ `Add one of: (a) create the plugin directory, ` +
370
+ `(b) add files: [{ source, dest }, ...] in config, ` +
371
+ `(c) select pool skills via skills: "*" or skills: [names].`);
300
372
  }
301
- // Convert simple glob to regex: replace * with .*
302
- // eslint-disable-next-line security/detect-non-literal-regexp -- selector is from project config, bounded by name format
303
- const regex = new RegExp(`^${selector.replaceAll('*', '.*')}$`);
304
- return regex.test(skillName);
373
+ if (pluginSourceExists) {
374
+ await parsePluginJsonFiles(pluginSourceDir);
375
+ }
376
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved paths
377
+ await mkdir(pluginDir, { recursive: true });
378
+ // Phase 2: tree copy (skips .claude-plugin/, respects .gitignore).
379
+ const treeResult = pluginSourceExists
380
+ ? await treeCopyPlugin({
381
+ sourceDir: pluginSourceDir,
382
+ destDir: pluginDir,
383
+ warn: (m) => logger.info(`warning: ${m}`),
384
+ })
385
+ : { commandsCopied: 0, hooksCopied: 0, agentsCopied: 0, mcpCopied: 0, filesCopied: 0 };
386
+ // Phase 3: pool-skill copy-in (from dist/skills/ via the plugin's skills: selector).
387
+ const skillsCopied = await copyPoolSkills(pluginDef, marketplaceAvailable, configDir, pluginDir, logger);
388
+ // Phase 4: files[] mapping (may overwrite tree-copied files).
389
+ let explicitFilesCopied = 0;
390
+ if (pluginDef.files && pluginDef.files.length > 0) {
391
+ await applyPluginFiles({
392
+ projectRoot: configDir,
393
+ pluginOutputDir: pluginDir,
394
+ entries: pluginDef.files,
395
+ info: (m) => logger.info(m),
396
+ });
397
+ explicitFilesCopied = pluginDef.files.length;
398
+ }
399
+ // Phase 5: plugin.json merge-write (always last, always wins).
400
+ await writeMergedPluginJson(pluginDef, pluginSourceDir, pluginDir, owner, packageVersion, logger);
401
+ return {
402
+ pluginName: pluginDef.name,
403
+ pluginDir,
404
+ skillsCopied,
405
+ commandsCopied: treeResult.commandsCopied,
406
+ hooksCopied: treeResult.hooksCopied,
407
+ agentsCopied: treeResult.agentsCopied,
408
+ mcpCopied: treeResult.mcpCopied,
409
+ treeFilesCopied: treeResult.filesCopied,
410
+ explicitFilesCopied,
411
+ };
305
412
  }
306
413
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Apply plugin-level files[] mapping (compiled artifacts injection).
3
+ *
4
+ * Constraints (spec section Design + Ordering contract phase 4):
5
+ * - dest must not resolve outside pluginOutputDir (no ".." escape)
6
+ * - dest must not resolve inside skills/ (owned by skill-stream)
7
+ * - dest must not target .claude-plugin/plugin.json (owned by merge-write)
8
+ * - parent dirs are created automatically
9
+ * - overwrites are allowed and logged at info level
10
+ */
11
+ import type { SkillFileEntry } from '@vibe-agent-toolkit/resources';
12
+ export interface ApplyPluginFilesArgs {
13
+ projectRoot: string;
14
+ pluginOutputDir: string;
15
+ entries: readonly SkillFileEntry[];
16
+ info?: (message: string) => void;
17
+ }
18
+ export declare function applyPluginFiles(args: ApplyPluginFilesArgs): Promise<void>;
19
+ //# sourceMappingURL=plugin-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-files.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AA6BD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhF"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Apply plugin-level files[] mapping (compiled artifacts injection).
3
+ *
4
+ * Constraints (spec section Design + Ordering contract phase 4):
5
+ * - dest must not resolve outside pluginOutputDir (no ".." escape)
6
+ * - dest must not resolve inside skills/ (owned by skill-stream)
7
+ * - dest must not target .claude-plugin/plugin.json (owned by merge-write)
8
+ * - parent dirs are created automatically
9
+ * - overwrites are allowed and logged at info level
10
+ */
11
+ import { existsSync } from 'node:fs';
12
+ import { copyFile, mkdir } from 'node:fs/promises';
13
+ import { dirname } from 'node:path';
14
+ import { safePath, toForwardSlash } from '@vibe-agent-toolkit/utils';
15
+ function validateDest(rawDest, pluginOutputDir) {
16
+ const normalized = toForwardSlash(rawDest);
17
+ if (normalized.startsWith('/')) {
18
+ throw new Error(`plugin files[].dest must be relative; got absolute path: ${rawDest}`);
19
+ }
20
+ if (normalized.startsWith('skills/') || normalized === 'skills') {
21
+ throw new Error(`plugin files[].dest "${rawDest}" resolves inside skills/ — that surface is owned ` +
22
+ `by the skill-stream. Place the file under a skill's own files[] instead.`);
23
+ }
24
+ if (normalized === '.claude-plugin/plugin.json') {
25
+ throw new Error(`plugin files[].dest "${rawDest}" targets plugin.json — that file is generated by ` +
26
+ `VAT from the merged manifest. Put your custom fields in .claude-plugin/plugin.json inside the plugin source dir.`);
27
+ }
28
+ const resolved = safePath.resolve(pluginOutputDir, rawDest);
29
+ const resolvedBase = safePath.resolve(pluginOutputDir);
30
+ if (!toForwardSlash(resolved).startsWith(toForwardSlash(resolvedBase) + '/')) {
31
+ throw new Error(`plugin files[].dest "${rawDest}" resolves outside plugin output dir (path traversal rejected)`);
32
+ }
33
+ return resolved;
34
+ }
35
+ export async function applyPluginFiles(args) {
36
+ const { projectRoot, pluginOutputDir, entries, info } = args;
37
+ for (const entry of entries) {
38
+ const sourceAbs = safePath.resolve(projectRoot, entry.source);
39
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- resolved from project root
40
+ if (!existsSync(sourceAbs)) {
41
+ throw new Error(`plugin files[].source not found: ${entry.source} (resolved to ${sourceAbs})`);
42
+ }
43
+ const destAbs = validateDest(entry.dest, pluginOutputDir);
44
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- validated above
45
+ if (existsSync(destAbs) && info) {
46
+ info(`plugin files[]: overwriting existing ${toForwardSlash(entry.dest)}`);
47
+ }
48
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- validated dest
49
+ await mkdir(dirname(destAbs), { recursive: true });
50
+ await copyFile(sourceAbs, destAbs);
51
+ }
52
+ }
53
+ //# sourceMappingURL=plugin-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-files.js","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AASrE,SAAS,YAAY,CAAC,OAAe,EAAE,eAAuB;IAC5D,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4DAA4D,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,oDAAoD;YACjF,0EAA0E,CAC7E,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,KAAK,4BAA4B,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,oDAAoD;YACjF,kHAAkH,CACrH,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,gEAAgE,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9D,iGAAiG;QACjG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,oCAAoC,KAAK,CAAC,MAAM,iBAAiB,SAAS,GAAG,CAC9E,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAE1D,sFAAsF;QACtF,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,wCAAwC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,qFAAqF;QACrF,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * plugin.json merge.
3
+ *
4
+ * Precedence (spec section Design -> plugin.json merge):
5
+ * - VAT wins on: name, version, author (shallow wholesale replace)
6
+ * - Author wins on: all other keys (keywords, repository, homepage, license, ...)
7
+ * - description: config.description ?? author.description ?? `${name} plugin`
8
+ *
9
+ * Mismatches on VAT-winning fields produce warnings — never errors.
10
+ */
11
+ export interface VatGeneratedFields {
12
+ name: string;
13
+ version: string | undefined;
14
+ author: {
15
+ name: string;
16
+ email?: string;
17
+ };
18
+ }
19
+ export interface MergePluginJsonArgs {
20
+ vat: VatGeneratedFields;
21
+ configDescription: string | undefined;
22
+ authorJson: Record<string, unknown> | undefined;
23
+ }
24
+ export interface MergePluginJsonResult {
25
+ merged: Record<string, unknown>;
26
+ warnings: string[];
27
+ }
28
+ export declare function mergePluginJson(args: MergePluginJsonArgs): MergePluginJsonResult;
29
+ //# sourceMappingURL=plugin-json-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-json-merge.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-json-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,kBAAkB,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA6ED,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,CAgBhF"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * plugin.json merge.
3
+ *
4
+ * Precedence (spec section Design -> plugin.json merge):
5
+ * - VAT wins on: name, version, author (shallow wholesale replace)
6
+ * - Author wins on: all other keys (keywords, repository, homepage, license, ...)
7
+ * - description: config.description ?? author.description ?? `${name} plugin`
8
+ *
9
+ * Mismatches on VAT-winning fields produce warnings — never errors.
10
+ */
11
+ const VAT_OWNED_KEYS = new Set(['name', 'version', 'author']);
12
+ function deepEqual(a, b) {
13
+ return JSON.stringify(a) === JSON.stringify(b);
14
+ }
15
+ function buildAuthorObject(vat) {
16
+ return vat.author.email
17
+ ? { name: vat.author.name, email: vat.author.email }
18
+ : { name: vat.author.name };
19
+ }
20
+ function collectAuthorPassthrough(authorJson) {
21
+ const out = {};
22
+ if (!authorJson)
23
+ return out;
24
+ for (const [k, v] of Object.entries(authorJson)) {
25
+ if (VAT_OWNED_KEYS.has(k))
26
+ continue;
27
+ if (k === 'description')
28
+ continue;
29
+ out[k] = v;
30
+ }
31
+ return out;
32
+ }
33
+ function collectWarnings(vat, authorJson, mergedAuthor) {
34
+ if (!authorJson)
35
+ return [];
36
+ const warnings = [];
37
+ if ('name' in authorJson && authorJson['name'] !== vat.name) {
38
+ warnings.push(`plugin.json "name" mismatch: author value ${JSON.stringify(authorJson['name'])} ignored; using VAT-generated "${vat.name}".`);
39
+ }
40
+ if (vat.version !== undefined &&
41
+ 'version' in authorJson &&
42
+ authorJson['version'] !== vat.version) {
43
+ warnings.push(`plugin.json "version" mismatch: author value ${JSON.stringify(authorJson['version'])} ignored; using VAT-generated "${vat.version}".`);
44
+ }
45
+ if ('author' in authorJson && !deepEqual(authorJson['author'], mergedAuthor)) {
46
+ warnings.push(`plugin.json "author" mismatch: author-supplied value discarded; using VAT-generated author object.`);
47
+ }
48
+ return warnings;
49
+ }
50
+ function resolveVersion(vat, authorJson) {
51
+ if (vat.version !== undefined)
52
+ return vat.version;
53
+ if (authorJson && typeof authorJson['version'] === 'string')
54
+ return authorJson['version'];
55
+ return undefined;
56
+ }
57
+ function resolveDescription(vat, configDescription, authorJson) {
58
+ const authorDescription = authorJson && typeof authorJson['description'] === 'string'
59
+ ? authorJson['description']
60
+ : undefined;
61
+ return configDescription ?? authorDescription ?? `${vat.name} plugin`;
62
+ }
63
+ export function mergePluginJson(args) {
64
+ const { vat, configDescription, authorJson } = args;
65
+ const merged = collectAuthorPassthrough(authorJson);
66
+ merged['name'] = vat.name;
67
+ const version = resolveVersion(vat, authorJson);
68
+ if (version !== undefined) {
69
+ merged['version'] = version;
70
+ }
71
+ merged['author'] = buildAuthorObject(vat);
72
+ merged['description'] = resolveDescription(vat, configDescription, authorJson);
73
+ const warnings = collectWarnings(vat, authorJson, merged['author']);
74
+ return { merged, warnings };
75
+ }
76
+ //# sourceMappingURL=plugin-json-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-json-merge.js","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-json-merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Build-time validators for plugin declarations.
3
+ *
4
+ * - verifyPluginDirCaseMatch: guards against macOS/Windows case-insensitive FS drift
5
+ * (plugin: "foo-bar" -> plugins/Foo-Bar/ locally would break on Linux CI).
6
+ * - verifyNoCaseCollidingPluginNames: rejects pairs whose toLowerCase() collides.
7
+ * - parsePluginJsonFiles: parse-only JSON validation of hooks.json + .mcp.json
8
+ * (deep schema validation is Claude runtime's job).
9
+ */
10
+ export declare function verifyPluginDirCaseMatch(projectRoot: string, pluginName: string): Promise<void>;
11
+ export declare function verifyNoCaseCollidingPluginNames(names: readonly string[]): void;
12
+ export declare function parsePluginJsonFiles(pluginSourceDir: string): Promise<void>;
13
+ //# sourceMappingURL=plugin-validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-validators.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/plugin/plugin-validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAmB/E;AAaD,wBAAsB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjF"}