@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.
- package/dist/bin.js +4 -0
- package/dist/bin.js.map +1 -1
- package/dist/commands/audit/git-url-clone.d.ts +32 -0
- package/dist/commands/audit/git-url-clone.d.ts.map +1 -0
- package/dist/commands/audit/git-url-clone.js +135 -0
- package/dist/commands/audit/git-url-clone.js.map +1 -0
- package/dist/commands/audit/hierarchical-output.js +2 -2
- package/dist/commands/audit/hierarchical-output.js.map +1 -1
- package/dist/commands/audit/provenance.d.ts +33 -0
- package/dist/commands/audit/provenance.d.ts.map +1 -0
- package/dist/commands/audit/provenance.js +57 -0
- package/dist/commands/audit/provenance.js.map +1 -0
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +257 -34
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/validate.js +2 -1
- package/dist/commands/claude/marketplace/validate.js.map +1 -1
- package/dist/commands/claude/plugin/build.d.ts +4 -3
- package/dist/commands/claude/plugin/build.d.ts.map +1 -1
- package/dist/commands/claude/plugin/build.js +178 -71
- package/dist/commands/claude/plugin/build.js.map +1 -1
- package/dist/commands/claude/plugin/plugin-files.d.ts +19 -0
- package/dist/commands/claude/plugin/plugin-files.d.ts.map +1 -0
- package/dist/commands/claude/plugin/plugin-files.js +53 -0
- package/dist/commands/claude/plugin/plugin-files.js.map +1 -0
- package/dist/commands/claude/plugin/plugin-json-merge.d.ts +29 -0
- package/dist/commands/claude/plugin/plugin-json-merge.d.ts.map +1 -0
- package/dist/commands/claude/plugin/plugin-json-merge.js +76 -0
- package/dist/commands/claude/plugin/plugin-json-merge.js.map +1 -0
- package/dist/commands/claude/plugin/plugin-validators.d.ts +13 -0
- package/dist/commands/claude/plugin/plugin-validators.d.ts.map +1 -0
- package/dist/commands/claude/plugin/plugin-validators.js +59 -0
- package/dist/commands/claude/plugin/plugin-validators.js.map +1 -0
- package/dist/commands/claude/plugin/tree-copy.d.ts +23 -0
- package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -0
- package/dist/commands/claude/plugin/tree-copy.js +68 -0
- package/dist/commands/claude/plugin/tree-copy.js.map +1 -0
- package/dist/commands/corpus/index.d.ts +6 -0
- package/dist/commands/corpus/index.d.ts.map +1 -0
- package/dist/commands/corpus/index.js +53 -0
- package/dist/commands/corpus/index.js.map +1 -0
- package/dist/commands/corpus/report.d.ts +75 -0
- package/dist/commands/corpus/report.d.ts.map +1 -0
- package/dist/commands/corpus/report.js +83 -0
- package/dist/commands/corpus/report.js.map +1 -0
- package/dist/commands/corpus/runner.d.ts +24 -0
- package/dist/commands/corpus/runner.d.ts.map +1 -0
- package/dist/commands/corpus/runner.js +246 -0
- package/dist/commands/corpus/runner.js.map +1 -0
- package/dist/commands/corpus/scan.d.ts +15 -0
- package/dist/commands/corpus/scan.d.ts.map +1 -0
- package/dist/commands/corpus/scan.js +90 -0
- package/dist/commands/corpus/scan.js.map +1 -0
- package/dist/commands/corpus/seed.d.ts +178 -0
- package/dist/commands/corpus/seed.d.ts.map +1 -0
- package/dist/commands/corpus/seed.js +63 -0
- package/dist/commands/corpus/seed.js.map +1 -0
- package/dist/commands/inventory.d.ts +17 -0
- package/dist/commands/inventory.d.ts.map +1 -0
- package/dist/commands/inventory.js +90 -0
- package/dist/commands/inventory.js.map +1 -0
- package/dist/utils/git-url.d.ts +43 -0
- package/dist/utils/git-url.d.ts.map +1 -0
- package/dist/utils/git-url.js +135 -0
- package/dist/utils/git-url.js.map +1 -0
- package/docs/audit.md +60 -3
- 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
|
|
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` —
|
|
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
|
-
*
|
|
6
|
-
*
|
|
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
|
|
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
|
|
26
|
-
from
|
|
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
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
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 (
|
|
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}
|
|
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
|
|
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(
|
|
178
|
-
await rm(
|
|
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
|
-
|
|
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 =
|
|
192
|
-
const claudePluginDir = safePath.join(marketplaceDir,
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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
|
-
|
|
349
|
+
copied.push(fsPath);
|
|
273
350
|
logger.info(` ${skillName} -> skills/${fsPath}`);
|
|
274
351
|
}
|
|
275
|
-
|
|
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
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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"}
|