@vibe-agent-toolkit/cli 0.1.9 → 0.1.11

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 (60) hide show
  1. package/dist/bin/vat +174 -0
  2. package/dist/bin.js +2 -0
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
  5. package/dist/commands/audit/hierarchical-output.js +74 -13
  6. package/dist/commands/audit/hierarchical-output.js.map +1 -1
  7. package/dist/commands/audit.d.ts.map +1 -1
  8. package/dist/commands/audit.js +36 -32
  9. package/dist/commands/audit.js.map +1 -1
  10. package/dist/commands/skills/build.d.ts +13 -0
  11. package/dist/commands/skills/build.d.ts.map +1 -0
  12. package/dist/commands/skills/build.js +205 -0
  13. package/dist/commands/skills/build.js.map +1 -0
  14. package/dist/commands/skills/command-helpers.d.ts +30 -0
  15. package/dist/commands/skills/command-helpers.d.ts.map +1 -0
  16. package/dist/commands/skills/command-helpers.js +54 -0
  17. package/dist/commands/skills/command-helpers.js.map +1 -0
  18. package/dist/commands/skills/index.d.ts +8 -0
  19. package/dist/commands/skills/index.d.ts.map +1 -0
  20. package/dist/commands/skills/index.js +96 -0
  21. package/dist/commands/skills/index.js.map +1 -0
  22. package/dist/commands/skills/install-helpers.d.ts +45 -0
  23. package/dist/commands/skills/install-helpers.d.ts.map +1 -0
  24. package/dist/commands/skills/install-helpers.js +120 -0
  25. package/dist/commands/skills/install-helpers.js.map +1 -0
  26. package/dist/commands/skills/install.d.ts +20 -0
  27. package/dist/commands/skills/install.d.ts.map +1 -0
  28. package/dist/commands/skills/install.js +287 -0
  29. package/dist/commands/skills/install.js.map +1 -0
  30. package/dist/commands/skills/list.d.ts +12 -0
  31. package/dist/commands/skills/list.d.ts.map +1 -0
  32. package/dist/commands/skills/list.js +124 -0
  33. package/dist/commands/skills/list.js.map +1 -0
  34. package/dist/commands/skills/package.d.ts +16 -0
  35. package/dist/commands/skills/package.d.ts.map +1 -0
  36. package/dist/commands/skills/package.js +293 -0
  37. package/dist/commands/skills/package.js.map +1 -0
  38. package/dist/commands/skills/validate-command.d.ts +6 -0
  39. package/dist/commands/skills/validate-command.d.ts.map +1 -0
  40. package/dist/commands/skills/validate-command.js +76 -0
  41. package/dist/commands/skills/validate-command.js.map +1 -0
  42. package/dist/commands/skills/validate.d.ts +24 -0
  43. package/dist/commands/skills/validate.d.ts.map +1 -0
  44. package/dist/commands/skills/validate.js +264 -0
  45. package/dist/commands/skills/validate.js.map +1 -0
  46. package/dist/utils/claude-paths.d.ts +32 -0
  47. package/dist/utils/claude-paths.d.ts.map +1 -0
  48. package/dist/utils/claude-paths.js +34 -0
  49. package/dist/utils/claude-paths.js.map +1 -0
  50. package/dist/utils/skill-discovery.d.ts +49 -0
  51. package/dist/utils/skill-discovery.d.ts.map +1 -0
  52. package/dist/utils/skill-discovery.js +73 -0
  53. package/dist/utils/skill-discovery.js.map +1 -0
  54. package/dist/utils/user-context-scanner.d.ts +31 -0
  55. package/dist/utils/user-context-scanner.d.ts.map +1 -0
  56. package/dist/utils/user-context-scanner.js +60 -0
  57. package/dist/utils/user-context-scanner.js.map +1 -0
  58. package/docs/audit.md +1 -0
  59. package/docs/skills.md +561 -0
  60. package/package.json +18 -12
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Install a skill to Claude's plugins directory
3
+ *
4
+ * Supports installing from:
5
+ * - npm packages (npm:@scope/package)
6
+ * - Local ZIP file
7
+ * - Local directory
8
+ * - npm postinstall hook (--npm-postinstall)
9
+ */
10
+ import { existsSync } from 'node:fs';
11
+ import { cp, mkdir, mkdtemp, rm } from 'node:fs/promises';
12
+ import { basename, join, resolve } from 'node:path';
13
+ import { normalizedTmpdir } from '@vibe-agent-toolkit/utils';
14
+ import AdmZip from 'adm-zip';
15
+ import { Command } from 'commander';
16
+ import { getClaudeUserPaths } from '../../utils/claude-paths.js';
17
+ import { handleCommandError } from '../../utils/command-error.js';
18
+ import { createLogger } from '../../utils/logger.js';
19
+ import { detectSource, downloadNpmPackage, isGlobalNpmInstall, readPackageJsonVatMetadata, } from './install-helpers.js';
20
+ export function createInstallCommand() {
21
+ const command = new Command('install');
22
+ command
23
+ .description('Install a skill to Claude Code skills directory')
24
+ .argument('[source]', 'Source to install from (npm:package, ZIP file, or directory path)')
25
+ .option('-s, --skills-dir <path>', 'Claude skills directory', getClaudeUserPaths().skillsDir)
26
+ .option('-n, --name <name>', 'Custom name for installed skill (default: auto-detect from source)')
27
+ .option('-f, --force', 'Overwrite existing skill if present', false)
28
+ .option('--dry-run', 'Preview installation without creating files', false)
29
+ .option('--npm-postinstall', 'Run as npm postinstall hook (internal use)', false)
30
+ .option('--debug', 'Enable debug logging')
31
+ .action(installCommand)
32
+ .addHelpText('after', `
33
+ Description:
34
+ Installs a skill to Claude Code's skills directory from various sources.
35
+
36
+ Supported sources:
37
+ - npm package: npm:@scope/package-name
38
+ - Local ZIP file: ./path/to/skill.zip
39
+ - Local directory: ./path/to/skill-dir
40
+ - npm postinstall: --npm-postinstall (automatic during global install)
41
+
42
+ Default skills directory: ~/.claude/skills/
43
+
44
+ Output:
45
+ - status: success/error
46
+ - skillName: Name of installed skill
47
+ - installPath: Where the skill was installed
48
+ - source: Original source
49
+ - sourceType: npm/local/zip/npm-postinstall
50
+
51
+ Exit Codes:
52
+ 0 - Installation successful
53
+ 1 - Installation error (invalid source, skill exists, etc.)
54
+ 2 - System error
55
+
56
+ Example:
57
+ $ vat skills install npm:@vibe-agent-toolkit/vat-development-agents
58
+ $ vat skills install ./cat-agents-skill.zip
59
+ $ vat skills install ./my-skill-dir --name custom-skill-name
60
+ $ vat skills install skill.zip --force
61
+ `);
62
+ return command;
63
+ }
64
+ async function installCommand(source, options) {
65
+ const logger = createLogger(options.debug ? { debug: true } : {});
66
+ const startTime = Date.now();
67
+ try {
68
+ // Handle --npm-postinstall flag
69
+ if (options.npmPostinstall) {
70
+ await handleNpmPostinstall(options, logger, startTime);
71
+ return;
72
+ }
73
+ // Regular install - source is required
74
+ if (!source) {
75
+ throw new Error('Source argument required. Use npm:package, ./dir, or ./file.zip');
76
+ }
77
+ // Detect source type
78
+ const sourceType = detectSource(source);
79
+ logger.debug(`Detected source type: ${sourceType}`);
80
+ // Route to appropriate handler
81
+ switch (sourceType) {
82
+ case 'npm': {
83
+ await handleNpmInstall(source, options, logger, startTime);
84
+ break;
85
+ }
86
+ case 'local': {
87
+ await handleLocalInstall(source, options, logger, startTime);
88
+ break;
89
+ }
90
+ case 'zip': {
91
+ await handleZipInstall(source, options, logger, startTime);
92
+ break;
93
+ }
94
+ case 'npm-postinstall': {
95
+ // This case is handled by --npm-postinstall flag, not by source detection
96
+ throw new Error('npm-postinstall source type should be handled by --npm-postinstall flag');
97
+ }
98
+ }
99
+ }
100
+ catch (error) {
101
+ handleCommandError(error, logger, startTime, 'SkillsInstall');
102
+ }
103
+ }
104
+ /**
105
+ * Handle npm package installation
106
+ */
107
+ async function handleNpmInstall(source, options, logger, startTime) {
108
+ const packageName = source.startsWith('npm:') ? source.slice(4) : source;
109
+ logger.info(`📥 Installing skill from npm: ${packageName}`);
110
+ // Create temp directory
111
+ const tempDir = await mkdtemp(join(normalizedTmpdir(), 'vat-install-npm-'));
112
+ try {
113
+ // Download and extract npm package
114
+ logger.info(' Downloading package...');
115
+ const extractedPath = downloadNpmPackage(packageName, tempDir);
116
+ // Read vat metadata from package.json
117
+ const { skills } = await readPackageJsonVatMetadata(extractedPath);
118
+ if (skills.length === 0) {
119
+ throw new Error(`No skills found in package ${packageName}`);
120
+ }
121
+ // Install first skill (or specific skill if --name provided)
122
+ const skillToInstall = options.name
123
+ ? skills.find(s => s.name === options.name)
124
+ : skills[0];
125
+ if (!skillToInstall) {
126
+ throw new Error(`Skill "${options.name ?? ''}" not found in package ${packageName}. ` +
127
+ `Available: ${skills.map(s => s.name).join(', ')}`);
128
+ }
129
+ // Determine skill path (from vat.skills metadata)
130
+ const skillPath = resolve(extractedPath, skillToInstall.path);
131
+ // Install skill
132
+ await installSkillFromPath(skillPath, skillToInstall.name, options, logger);
133
+ const duration = Date.now() - startTime;
134
+ outputSuccess(skillToInstall.name, join(options.skillsDir ?? getClaudeUserPaths().skillsDir, skillToInstall.name), `npm:${packageName}`, 'npm', duration, logger, options.dryRun);
135
+ process.exit(0);
136
+ }
137
+ finally {
138
+ // Cleanup temp directory
139
+ await rm(tempDir, { recursive: true, force: true });
140
+ }
141
+ }
142
+ /**
143
+ * Handle local directory installation
144
+ */
145
+ async function handleLocalInstall(source, options, logger, startTime) {
146
+ const sourcePath = resolve(source);
147
+ logger.info(`📥 Installing skill from directory: ${sourcePath}`);
148
+ // Check if directory contains package.json with vat.skills
149
+ const packageJsonPath = join(sourcePath, 'package.json');
150
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- User-provided CLI argument
151
+ const hasPackageJson = existsSync(packageJsonPath);
152
+ let skillName;
153
+ let skillPath;
154
+ if (hasPackageJson) {
155
+ // Read vat metadata
156
+ const { skills } = await readPackageJsonVatMetadata(sourcePath);
157
+ const skillToInstall = options.name
158
+ ? skills.find(s => s.name === options.name)
159
+ : skills[0];
160
+ if (!skillToInstall) {
161
+ throw new Error(`Skill "${options.name ?? ''}" not found in package. ` +
162
+ `Available: ${skills.map(s => s.name).join(', ')}`);
163
+ }
164
+ skillName = skillToInstall.name;
165
+ skillPath = resolve(sourcePath, skillToInstall.path);
166
+ }
167
+ else {
168
+ // Plain directory - use directory name
169
+ skillName = options.name ?? basename(sourcePath);
170
+ skillPath = sourcePath;
171
+ }
172
+ await installSkillFromPath(skillPath, skillName, options, logger);
173
+ const duration = Date.now() - startTime;
174
+ outputSuccess(skillName, join(options.skillsDir ?? getClaudeUserPaths().skillsDir, skillName), `local:${sourcePath}`, 'local', duration, logger, options.dryRun);
175
+ process.exit(0);
176
+ }
177
+ /**
178
+ * Handle ZIP file installation
179
+ */
180
+ async function handleZipInstall(source, options, logger, startTime) {
181
+ const sourcePath = resolve(source);
182
+ logger.info(`📥 Installing skill from ZIP: ${sourcePath}`);
183
+ // Validate ZIP exists
184
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- User-provided CLI argument
185
+ if (!existsSync(sourcePath)) {
186
+ throw new Error(`ZIP file not found: ${sourcePath}`);
187
+ }
188
+ const skillName = options.name ?? basename(sourcePath, '.zip');
189
+ const { installPath } = await prepareInstallation(skillName, options);
190
+ if (!options.dryRun) {
191
+ // Extract ZIP
192
+ logger.info(' Extracting ZIP...');
193
+ const zip = new AdmZip(sourcePath);
194
+ // eslint-disable-next-line sonarjs/no-unsafe-unzip -- User-provided local files, isolated plugin directory
195
+ zip.extractAllTo(installPath, /* overwrite */ true);
196
+ }
197
+ const duration = Date.now() - startTime;
198
+ outputSuccess(skillName, installPath, sourcePath, 'zip', duration, logger, options.dryRun);
199
+ process.exit(0);
200
+ }
201
+ /**
202
+ * Handle npm postinstall hook
203
+ */
204
+ async function handleNpmPostinstall(options, logger, startTime) {
205
+ logger.info(`📥 Running npm postinstall hook`);
206
+ // Check if this is a global install
207
+ if (!isGlobalNpmInstall()) {
208
+ logger.info(' Skipping: Not a global npm install');
209
+ process.exit(0);
210
+ }
211
+ // Read package.json from current directory
212
+ const cwd = process.cwd();
213
+ const { packageJson, skills } = await readPackageJsonVatMetadata(cwd);
214
+ logger.info(` Package: ${packageJson.name}@${packageJson.version}`);
215
+ logger.info(` Skills found: ${skills.length}`);
216
+ // Install all skills from package
217
+ for (const skill of skills) {
218
+ const skillPath = resolve(cwd, skill.path);
219
+ await installSkillFromPath(skillPath, skill.name, options, logger);
220
+ }
221
+ const duration = Date.now() - startTime;
222
+ logger.info(`✅ Installed ${skills.length} skill(s) from ${packageJson.name}`);
223
+ logger.info(` Duration: ${duration}ms`);
224
+ process.exit(0);
225
+ }
226
+ /**
227
+ * Prepare plugins directory and check for conflicts
228
+ * Returns the install path for the skill
229
+ */
230
+ async function prepareInstallation(skillName, options) {
231
+ const skillsDir = options.skillsDir ?? getClaudeUserPaths().skillsDir;
232
+ const installPath = join(skillsDir, skillName);
233
+ // Check if skill already exists
234
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- Constructed from validated paths
235
+ if (existsSync(installPath) && !options.force) {
236
+ throw new Error(`Skill already exists at ${installPath}. Use --force to overwrite.`);
237
+ }
238
+ if (!options.dryRun) {
239
+ // Create plugins directory
240
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- Plugins directory path, safe
241
+ await mkdir(skillsDir, { recursive: true });
242
+ }
243
+ return { skillsDir, installPath };
244
+ }
245
+ /**
246
+ * Install skill from a path to plugins directory
247
+ */
248
+ async function installSkillFromPath(skillPath, skillName, options, logger) {
249
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- Validated path
250
+ if (!existsSync(skillPath)) {
251
+ throw new Error(`Skill path not found: ${skillPath}`);
252
+ }
253
+ const { installPath } = await prepareInstallation(skillName, options);
254
+ if (!options.dryRun) {
255
+ // Copy skill to plugins directory
256
+ logger.info(` Installing ${skillName}...`);
257
+ await cp(skillPath, installPath, { recursive: true, force: true });
258
+ }
259
+ }
260
+ /**
261
+ * Output success YAML and human-readable messages
262
+ */
263
+ function outputSuccess(skillName, installPath, source, sourceType, duration, logger, dryRun) {
264
+ // Output YAML to stdout
265
+ process.stdout.write('---\n');
266
+ process.stdout.write(`status: success\n`);
267
+ if (dryRun) {
268
+ process.stdout.write(`dryRun: true\n`);
269
+ }
270
+ process.stdout.write(`skillName: ${skillName}\n`);
271
+ process.stdout.write(`installPath: ${installPath}\n`);
272
+ process.stdout.write(`source: ${source}\n`);
273
+ process.stdout.write(`sourceType: ${sourceType}\n`);
274
+ process.stdout.write(`duration: ${duration}ms\n`);
275
+ if (dryRun) {
276
+ logger.info(`✅ Dry-run complete (no files created)`);
277
+ logger.info(` Skill: ${skillName}`);
278
+ logger.info(` Would install to: ${installPath}`);
279
+ }
280
+ else {
281
+ logger.info(`✅ Installed skill: ${skillName}`);
282
+ logger.info(` Location: ${installPath}`);
283
+ logger.info(`\n💡 Run 'vat skills list' to verify installation`);
284
+ logger.info(` Restart Claude Code or run /reload-skills to use the new skill`);
285
+ }
286
+ }
287
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/skills/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * List skills in project or user installation
3
+ *
4
+ * By default, lists project skills. Use --user flag to list user-installed skills.
5
+ */
6
+ export interface SkillsListCommandOptions {
7
+ user?: boolean;
8
+ verbose?: boolean;
9
+ debug?: boolean;
10
+ }
11
+ export declare function listCommand(pathArg: string | undefined, options: SkillsListCommandOptions): Promise<void>;
12
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/skills/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA6FD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * List skills in project or user installation
3
+ *
4
+ * By default, lists project skills. Use --user flag to list user-installed skills.
5
+ */
6
+ import * as path from 'node:path';
7
+ import { scan } from '@vibe-agent-toolkit/discovery';
8
+ import { loadConfig } from '../../utils/config-loader.js';
9
+ import { createLogger } from '../../utils/logger.js';
10
+ import { discoverSkills, validateSkillFilename } from '../../utils/skill-discovery.js';
11
+ import { scanUserContext } from '../../utils/user-context-scanner.js';
12
+ /**
13
+ * Extract skill name from SKILL.md path
14
+ */
15
+ function extractSkillName(skillPath) {
16
+ // Extract skill name from path (directory name containing SKILL.md)
17
+ const dir = path.dirname(skillPath);
18
+ return path.basename(dir);
19
+ }
20
+ /**
21
+ * Convert discovered skills to DiscoveredSkill format with validation
22
+ */
23
+ function processDiscoveredSkills(discoveredSkills) {
24
+ return discoveredSkills.map(s => {
25
+ const filenameCheck = validateSkillFilename(s.path);
26
+ const skill = {
27
+ path: s.path,
28
+ name: extractSkillName(s.path),
29
+ valid: filenameCheck.valid,
30
+ };
31
+ // Only add warning if it exists (exactOptionalPropertyTypes)
32
+ if (filenameCheck.message !== undefined) {
33
+ skill.warning = filenameCheck.message;
34
+ }
35
+ return skill;
36
+ });
37
+ }
38
+ /**
39
+ * Output skills as YAML
40
+ */
41
+ function outputSkillsYaml(skills, context) {
42
+ process.stdout.write('---\n');
43
+ process.stdout.write(`status: success\n`);
44
+ process.stdout.write(`context: ${context}\n`);
45
+ process.stdout.write(`skillsFound: ${skills.length}\n`);
46
+ process.stdout.write(`skills:\n`);
47
+ for (const skill of skills) {
48
+ process.stdout.write(` - name: ${skill.name}\n`);
49
+ process.stdout.write(` path: ${skill.path}\n`);
50
+ process.stdout.write(` valid: ${skill.valid}\n`);
51
+ if (skill.warning) {
52
+ process.stdout.write(` warning: "${skill.warning}"\n`);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Output human-readable skill list
58
+ */
59
+ function outputSkillsHuman(skills, logger, options) {
60
+ if (skills.length === 0) {
61
+ logger.info(`\n No skills found`);
62
+ return;
63
+ }
64
+ logger.info(`\n Found ${skills.length} skill${skills.length === 1 ? '' : 's'}:\n`);
65
+ for (const skill of skills) {
66
+ const statusIcon = skill.valid ? '✅' : '⚠️';
67
+ const displayName = skill.name;
68
+ if (options.verbose) {
69
+ logger.info(` ${statusIcon} ${displayName}`);
70
+ if (skill.warning) {
71
+ logger.info(` Warning: ${skill.warning}`);
72
+ }
73
+ logger.info(` Path: ${skill.path}\n`);
74
+ }
75
+ else if (skill.warning) {
76
+ logger.info(` ${statusIcon} ${displayName} (${skill.warning})`);
77
+ }
78
+ else {
79
+ logger.info(` ${statusIcon} ${displayName}`);
80
+ }
81
+ }
82
+ }
83
+ export async function listCommand(pathArg, options) {
84
+ const logger = createLogger(options.debug ? { debug: true } : {});
85
+ try {
86
+ let skills;
87
+ let context;
88
+ if (options.user) {
89
+ // User context: scan ~/.claude
90
+ logger.info('📋 Listing user-installed skills');
91
+ const { plugins, skills: standaloneSkills } = await scanUserContext();
92
+ const allResources = [...plugins, ...standaloneSkills];
93
+ const discoveredSkills = discoverSkills(allResources);
94
+ skills = processDiscoveredSkills(discoveredSkills);
95
+ context = 'user';
96
+ }
97
+ else {
98
+ // Project context: use resources config
99
+ const rootDir = pathArg ?? process.cwd();
100
+ logger.info(`📋 Listing skills in: ${rootDir}`);
101
+ const config = loadConfig(rootDir);
102
+ const scanResult = await scan({
103
+ path: rootDir,
104
+ recursive: true,
105
+ include: config.resources?.include ?? [],
106
+ exclude: config.resources?.exclude ?? [],
107
+ });
108
+ const discoveredSkills = discoverSkills(scanResult.results);
109
+ skills = processDiscoveredSkills(discoveredSkills);
110
+ context = 'project';
111
+ }
112
+ // Output YAML to stdout
113
+ outputSkillsYaml(skills, context);
114
+ // Human-friendly output to stderr
115
+ outputSkillsHuman(skills, logger, options);
116
+ process.exit(0);
117
+ }
118
+ catch (error) {
119
+ const errorMessage = error instanceof Error ? error.message : String(error);
120
+ logger.error(`Failed to list skills: ${errorMessage}`);
121
+ process.exit(2);
122
+ }
123
+ }
124
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/skills/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Package a skill for distribution
3
+ *
4
+ * Creates distributable artifacts (directory, ZIP, npm) from a SKILL.md file
5
+ */
6
+ import { Command } from 'commander';
7
+ export interface SkillsPackageCommandOptions {
8
+ output: string;
9
+ formats?: string;
10
+ 'no-rewrite-links'?: boolean;
11
+ 'base-path'?: string;
12
+ dryRun?: boolean;
13
+ debug?: boolean;
14
+ }
15
+ export declare function createPackageCommand(): Command;
16
+ //# sourceMappingURL=package.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/commands/skills/package.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAkD9C"}