claude-skills-cli 0.0.20 → 0.0.22

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 (81) hide show
  1. package/dist/add-hook.cmd-JWw5UqA3.js +193 -0
  2. package/dist/add-hook.cmd-JWw5UqA3.js.map +1 -0
  3. package/dist/dependency-validator-CQJ1hCoU.js +382 -0
  4. package/dist/dependency-validator-CQJ1hCoU.js.map +1 -0
  5. package/dist/doctor.cmd-DJpHLDCV.js +142 -0
  6. package/dist/doctor.cmd-DJpHLDCV.js.map +1 -0
  7. package/dist/fs-CuGv3Ob2.js +23 -0
  8. package/dist/fs-CuGv3Ob2.js.map +1 -0
  9. package/dist/index.js +24 -22
  10. package/dist/index.js.map +1 -1
  11. package/dist/init.cmd-BdqImX8b.js +108 -0
  12. package/dist/init.cmd-BdqImX8b.js.map +1 -0
  13. package/dist/install.cmd-BaP8k9d2.js +79 -0
  14. package/dist/install.cmd-BaP8k9d2.js.map +1 -0
  15. package/dist/output-DiffPD2u.js +104 -0
  16. package/dist/output-DiffPD2u.js.map +1 -0
  17. package/dist/package.cmd-BYhkheya.js +107 -0
  18. package/dist/package.cmd-BYhkheya.js.map +1 -0
  19. package/dist/stats.cmd-Dd46qjoV.js +154 -0
  20. package/dist/stats.cmd-Dd46qjoV.js.map +1 -0
  21. package/dist/{core/templates.js → templates-fyteNbD0.js} +20 -13
  22. package/dist/templates-fyteNbD0.js.map +1 -0
  23. package/dist/validate.cmd-BxF4HNsu.js +96 -0
  24. package/dist/validate.cmd-BxF4HNsu.js.map +1 -0
  25. package/dist/validator-Dp5x-OjP.js +729 -0
  26. package/dist/validator-Dp5x-OjP.js.map +1 -0
  27. package/package.json +34 -35
  28. package/dist/commands/add-hook.cmd.js +0 -35
  29. package/dist/commands/add-hook.cmd.js.map +0 -1
  30. package/dist/commands/add-hook.js +0 -216
  31. package/dist/commands/add-hook.js.map +0 -1
  32. package/dist/commands/doctor.cmd.js +0 -19
  33. package/dist/commands/doctor.cmd.js.map +0 -1
  34. package/dist/commands/doctor.js +0 -128
  35. package/dist/commands/doctor.js.map +0 -1
  36. package/dist/commands/init.cmd.js +0 -37
  37. package/dist/commands/init.cmd.js.map +0 -1
  38. package/dist/commands/init.js +0 -86
  39. package/dist/commands/init.js.map +0 -1
  40. package/dist/commands/install.cmd.js +0 -23
  41. package/dist/commands/install.cmd.js.map +0 -1
  42. package/dist/commands/install.js +0 -64
  43. package/dist/commands/install.js.map +0 -1
  44. package/dist/commands/package.cmd.js +0 -28
  45. package/dist/commands/package.cmd.js.map +0 -1
  46. package/dist/commands/package.js +0 -134
  47. package/dist/commands/package.js.map +0 -1
  48. package/dist/commands/stats.cmd.js +0 -19
  49. package/dist/commands/stats.cmd.js.map +0 -1
  50. package/dist/commands/stats.js +0 -154
  51. package/dist/commands/stats.js.map +0 -1
  52. package/dist/commands/validate.cmd.js +0 -39
  53. package/dist/commands/validate.cmd.js.map +0 -1
  54. package/dist/commands/validate.js +0 -77
  55. package/dist/commands/validate.js.map +0 -1
  56. package/dist/core/templates.js.map +0 -1
  57. package/dist/core/validator.js +0 -252
  58. package/dist/core/validator.js.map +0 -1
  59. package/dist/help.js +0 -305
  60. package/dist/help.js.map +0 -1
  61. package/dist/skills/.gitkeep +0 -0
  62. package/dist/types.js +0 -2
  63. package/dist/types.js.map +0 -1
  64. package/dist/utils/fs.js +0 -25
  65. package/dist/utils/fs.js.map +0 -1
  66. package/dist/utils/output.js +0 -102
  67. package/dist/utils/output.js.map +0 -1
  68. package/dist/validators/alignment-validator.js +0 -54
  69. package/dist/validators/alignment-validator.js.map +0 -1
  70. package/dist/validators/content-validator.js +0 -156
  71. package/dist/validators/content-validator.js.map +0 -1
  72. package/dist/validators/description-validator.js +0 -150
  73. package/dist/validators/description-validator.js.map +0 -1
  74. package/dist/validators/file-structure-validator.js +0 -125
  75. package/dist/validators/file-structure-validator.js.map +0 -1
  76. package/dist/validators/frontmatter-validator.js +0 -190
  77. package/dist/validators/frontmatter-validator.js.map +0 -1
  78. package/dist/validators/references-validator.js +0 -155
  79. package/dist/validators/references-validator.js.map +0 -1
  80. package/dist/validators/text-analysis.js +0 -71
  81. package/dist/validators/text-analysis.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import { defineCommand } from 'citty';
2
- import { init_command } from './init.js';
3
- export default defineCommand({
4
- meta: { name: 'init', description: 'Create a new skill' },
5
- args: {
6
- name: {
7
- type: 'string',
8
- description: 'Skill name (kebab-case, lowercase)',
9
- },
10
- description: {
11
- type: 'string',
12
- description: 'Brief description with trigger keywords',
13
- },
14
- path: {
15
- type: 'string',
16
- description: 'Custom path (alternative to --name)',
17
- },
18
- 'with-examples': {
19
- type: 'boolean',
20
- description: 'Include example files (scripts/, assets/)',
21
- },
22
- global: {
23
- type: 'boolean',
24
- description: 'Install skill in ~/.claude/skills/ (available in all projects)',
25
- },
26
- },
27
- run({ args }) {
28
- init_command({
29
- name: args.name,
30
- description: args.description,
31
- path: args.path,
32
- with_examples: args['with-examples'],
33
- global: args.global,
34
- });
35
- },
36
- });
37
- //# sourceMappingURL=init.cmd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.cmd.js","sourceRoot":"","sources":["../../src/commands/init.cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,eAAe,aAAa,CAAC;IAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACzD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oCAAoC;SACjD;QACD,WAAW,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yCAAyC;SACtD;QACD,IAAI,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qCAAqC;SAClD;QACD,eAAe,EAAE;YAChB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,2CAA2C;SACxD;QACD,MAAM,EAAE;YACP,IAAI,EAAE,SAAS;YACf,WAAW,EACV,gEAAgE;SACjE;KACD;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACX,YAAY,CAAC;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC;YACpC,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
@@ -1,86 +0,0 @@
1
- import { homedir } from 'node:os';
2
- import { join } from 'node:path';
3
- import { REFERENCE_TEMPLATE, SCRIPT_TEMPLATE, SKILL_MD_TEMPLATE, } from '../core/templates.js';
4
- import { ensure_dir, is_lowercase, make_executable, to_title_case, write_file, } from '../utils/fs.js';
5
- import { error, success } from '../utils/output.js';
6
- export function init_command(options) {
7
- let skill_path;
8
- let name;
9
- let description;
10
- // Determine path and name
11
- if (options.path) {
12
- skill_path = options.path;
13
- name = skill_path.split('/').pop() || '';
14
- description =
15
- options.description ||
16
- 'TODO: [Domain] [operations]. Use when [trigger phrase]';
17
- }
18
- else if (options.name) {
19
- name = options.name;
20
- description =
21
- options.description ||
22
- 'TODO: [Domain] [operations]. Use when [trigger phrase]';
23
- // Use ~/.claude/skills/ for global, .claude/skills/ for project
24
- skill_path = options.global
25
- ? join(homedir(), '.claude', 'skills', name)
26
- : join('.claude', 'skills', name);
27
- }
28
- else {
29
- error('Either --name or --path must be provided');
30
- console.log('\nUsage:');
31
- console.log(' claude-skills-cli init --name my-skill --description "Description"');
32
- console.log(' claude-skills-cli init --path /custom/path/my-skill');
33
- process.exit(1);
34
- }
35
- // Validate name format
36
- const alphanumeric_check = name.replace(/-/g, '').replace(/_/g, '');
37
- if (!/^[a-z0-9]+$/.test(alphanumeric_check)) {
38
- error(`Skill name must be kebab-case alphanumeric: ${name}`);
39
- process.exit(1);
40
- }
41
- if (!is_lowercase(name)) {
42
- error(`Skill name must be lowercase: ${name}`);
43
- process.exit(1);
44
- }
45
- // Create skill
46
- create_skill(skill_path, name, description, options.with_examples || false, options.global || false);
47
- }
48
- function create_skill(path, name, description, with_examples = false, global = false) {
49
- // Create base directories
50
- ensure_dir(path);
51
- ensure_dir(join(path, 'references'));
52
- // Create SKILL.md
53
- const title = to_title_case(name);
54
- const skill_md = SKILL_MD_TEMPLATE(name, description, title, with_examples);
55
- write_file(join(path, 'SKILL.md'), skill_md);
56
- // Only create example files if requested
57
- if (with_examples) {
58
- // Create example directories
59
- ensure_dir(join(path, 'scripts'));
60
- ensure_dir(join(path, 'assets'));
61
- // Create example reference
62
- const reference_md = REFERENCE_TEMPLATE(title);
63
- write_file(join(path, 'references', 'detailed-guide.md'), reference_md);
64
- // Create example script
65
- const script_js = SCRIPT_TEMPLATE('example.js');
66
- const script_path = join(path, 'scripts', 'example.js');
67
- write_file(script_path, script_js);
68
- make_executable(script_path);
69
- }
70
- const scope = global ? 'global' : 'project';
71
- success(`Skill created at: ${path} (${scope})`);
72
- console.log('\nNext steps:');
73
- console.log(`1. Edit ${path}/SKILL.md with your skill instructions`);
74
- console.log(`2. Add detailed documentation to references/`);
75
- if (with_examples) {
76
- console.log(`3. Add executable scripts to scripts/`);
77
- console.log(`4. Remove example files you don't need`);
78
- }
79
- else {
80
- console.log(`3. Use --with-examples flag if you need scripts/ and example files`);
81
- }
82
- console.log(`\n⚠️ REQUIRED: Validate the skill before use:`);
83
- console.log(` claude-skills-cli validate ${path}`);
84
- console.log(` Fix all errors immediately.`);
85
- }
86
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { defineCommand } from 'citty';
2
- import { install_command } from './install.js';
3
- export default defineCommand({
4
- meta: { name: 'install', description: 'Install a bundled skill' },
5
- args: {
6
- skill_name: {
7
- type: 'positional',
8
- description: 'Name of bundled skill',
9
- required: true,
10
- },
11
- force: {
12
- type: 'boolean',
13
- description: 'Replace existing skill without prompting',
14
- },
15
- },
16
- run({ args }) {
17
- install_command({
18
- skill_name: args.skill_name,
19
- force: args.force,
20
- });
21
- },
22
- });
23
- //# sourceMappingURL=install.cmd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.cmd.js","sourceRoot":"","sources":["../../src/commands/install.cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAe,aAAa,CAAC;IAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yBAAyB,EAAE;IACjE,IAAI,EAAE;QACL,UAAU,EAAE;YACX,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,IAAI;SACd;QACD,KAAK,EAAE;YACN,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,0CAA0C;SACvD;KACD;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACX,eAAe,CAAC;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;SACjB,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
@@ -1,64 +0,0 @@
1
- import { cpSync, existsSync } from 'node:fs';
2
- import { dirname, join } from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import { ensure_dir } from '../utils/fs.js';
5
- import { error, info, success } from '../utils/output.js';
6
- // Get the directory where this module is located (dist/commands/)
7
- const __filename = fileURLToPath(import.meta.url);
8
- const __dirname = dirname(__filename);
9
- // Bundled skills are in dist/skills/ directory
10
- const BUNDLED_SKILLS_DIR = join(__dirname, '..', 'skills');
11
- const AVAILABLE_SKILLS = [];
12
- export function install_command(options) {
13
- const skill_name = options.skill_name;
14
- // Validate skill name
15
- if (!skill_name || AVAILABLE_SKILLS.length === 0) {
16
- info('No bundled skills available');
17
- console.log('\nOfficial method: /plugin install <skill>@<marketplace>');
18
- console.log('See: https://code.claude.com/docs/en/plugins');
19
- console.log('\nFor pre-built skills & activation hooks, see: https://github.com/spences10/claude-code-toolkit');
20
- console.log('\nUse "claude-skills-cli init" to create new skills.');
21
- process.exit(0);
22
- }
23
- if (!AVAILABLE_SKILLS.includes(skill_name)) {
24
- error(`Unknown skill: ${skill_name}`);
25
- console.log('\nNo bundled skills available.');
26
- console.log('For pre-built skills & activation hooks, see: https://github.com/spences10/claude-code-toolkit');
27
- process.exit(1);
28
- }
29
- // Source and destination paths
30
- const source_path = join(BUNDLED_SKILLS_DIR, skill_name);
31
- const dest_path = join('.claude', 'skills', skill_name);
32
- // Check if source exists in bundle
33
- if (!existsSync(source_path)) {
34
- error(`Bundled skill not found: ${skill_name}`);
35
- console.log(`Expected at: ${source_path}\n\nThis may be a package installation issue.`);
36
- process.exit(1);
37
- }
38
- // Check if already installed
39
- if (existsSync(dest_path)) {
40
- if (options.force) {
41
- info(`Skill already exists at ${dest_path}, overwriting (--force)...`);
42
- }
43
- else {
44
- info(`Skill already installed at: ${dest_path}`);
45
- console.log('\nUse --force to overwrite the existing skill.');
46
- process.exit(0);
47
- }
48
- }
49
- // Create destination directory
50
- ensure_dir(join('.claude', 'skills'));
51
- // Copy skill directory
52
- try {
53
- cpSync(source_path, dest_path, {
54
- recursive: true,
55
- force: options.force || false,
56
- });
57
- success(`Installed ${skill_name} to: ${dest_path}`);
58
- }
59
- catch (err) {
60
- error(`Failed to install skill: ${err.message}`);
61
- process.exit(1);
62
- }
63
- }
64
- //# sourceMappingURL=install.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import { defineCommand } from 'citty';
2
- import { package_command } from './package.js';
3
- export default defineCommand({
4
- meta: { name: 'package', description: 'Package a skill to zip' },
5
- args: {
6
- skill_path: {
7
- type: 'positional',
8
- description: 'Path to skill directory',
9
- required: true,
10
- },
11
- output: {
12
- type: 'string',
13
- description: 'Output path for zip file',
14
- },
15
- 'skip-validation': {
16
- type: 'boolean',
17
- description: 'Skip validation before packaging',
18
- },
19
- },
20
- async run({ args }) {
21
- await package_command({
22
- skill_path: args.skill_path,
23
- output: args.output,
24
- skip_validation: args['skip-validation'],
25
- });
26
- },
27
- });
28
- //# sourceMappingURL=package.cmd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package.cmd.js","sourceRoot":"","sources":["../../src/commands/package.cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAe,aAAa,CAAC;IAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wBAAwB,EAAE;IAChE,IAAI,EAAE;QACL,UAAU,EAAE;YACX,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,IAAI;SACd;QACD,MAAM,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,0BAA0B;SACvC;QACD,iBAAiB,EAAE;YAClB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,kCAAkC;SAC/C;KACD;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACjB,MAAM,eAAe,CAAC;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC;SACxC,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
@@ -1,134 +0,0 @@
1
- import archiver from 'archiver';
2
- import { createWriteStream, existsSync, readdirSync, statSync, } from 'node:fs';
3
- import { basename, join } from 'node:path';
4
- import { SkillValidator } from '../core/validator.js';
5
- import { ensure_dir } from '../utils/fs.js';
6
- import { error, package_, search, step, success, upload, warning, } from '../utils/output.js';
7
- function validate_skill(skill_path) {
8
- search('Validating skill...');
9
- const validator = new SkillValidator(skill_path);
10
- const result = validator.validate_all();
11
- if (result.errors.length > 0) {
12
- console.log('\n❌ Errors:');
13
- for (const err of result.errors) {
14
- console.log(` ${err}`);
15
- }
16
- }
17
- if (result.warnings.length > 0) {
18
- console.log('\n⚠️ Warnings:');
19
- for (const warn of result.warnings) {
20
- console.log(` ${warn}`);
21
- }
22
- }
23
- if (result.is_valid) {
24
- success('Skill is valid!');
25
- console.log('');
26
- return true;
27
- }
28
- else {
29
- error('Validation failed. Fix errors before packaging.');
30
- return false;
31
- }
32
- }
33
- function package_skill(skill_path, output_dir) {
34
- return new Promise((resolve, reject) => {
35
- const skill_name = basename(skill_path);
36
- const output_file = join(output_dir, `${skill_name}.zip`);
37
- package_(`Packaging skill: ${skill_name}`);
38
- // Ensure output directory exists
39
- ensure_dir(output_dir);
40
- // Create output stream
41
- const output = createWriteStream(output_file);
42
- const archive = archiver('zip', {
43
- zlib: { level: 9 },
44
- });
45
- // Listen for all archive data to be written
46
- output.on('close', () => {
47
- resolve(output_file);
48
- });
49
- // Handle errors
50
- archive.on('error', (err) => {
51
- reject(err);
52
- });
53
- // Pipe archive data to the file
54
- archive.pipe(output);
55
- // Add files recursively
56
- function add_files(dir_path, base_path) {
57
- const items = readdirSync(dir_path);
58
- for (const item of items) {
59
- const item_path = join(dir_path, item);
60
- const stats = statSync(item_path);
61
- // Skip hidden files and directories
62
- if (item.startsWith('.')) {
63
- continue;
64
- }
65
- // Skip common temporary files
66
- if (item.endsWith('.swp') || item.endsWith('~')) {
67
- continue;
68
- }
69
- if (item === '.DS_Store') {
70
- continue;
71
- }
72
- if (stats.isDirectory()) {
73
- add_files(item_path, base_path);
74
- }
75
- else {
76
- const relative_path = item_path.replace(base_path + '/', '');
77
- archive.file(item_path, { name: relative_path });
78
- step(`+ ${relative_path}`);
79
- }
80
- }
81
- }
82
- add_files(skill_path, skill_path.substring(0, skill_path.lastIndexOf('/')));
83
- // Finalize the archive
84
- archive.finalize();
85
- });
86
- }
87
- export async function package_command(options) {
88
- const { skill_path, output, skip_validation } = options;
89
- // Validate path
90
- if (!existsSync(skill_path)) {
91
- error(`Skill directory does not exist: ${skill_path}`);
92
- process.exit(1);
93
- }
94
- const stats = statSync(skill_path);
95
- if (!stats.isDirectory()) {
96
- error(`Path is not a directory: ${skill_path}`);
97
- process.exit(1);
98
- }
99
- // Check for SKILL.md
100
- if (!existsSync(join(skill_path, 'SKILL.md'))) {
101
- error(`SKILL.md not found in ${skill_path}`);
102
- process.exit(1);
103
- }
104
- // Validate skill
105
- if (!skip_validation) {
106
- if (!validate_skill(skill_path)) {
107
- process.exit(1);
108
- }
109
- }
110
- // Package skill
111
- try {
112
- const output_dir = output || 'dist';
113
- const output_file = await package_skill(skill_path, output_dir);
114
- // Print success
115
- const file_stats = statSync(output_file);
116
- const size_kb = file_stats.size / 1024;
117
- console.log('');
118
- success('Skill packaged successfully!');
119
- console.log(` File: ${output_file}`);
120
- console.log(` Size: ${size_kb.toFixed(1)} KB`);
121
- console.log('');
122
- warning('Note: ZIP packaging is not an official Claude Code distribution method.');
123
- console.log(' Official distribution uses the plugin system (/plugin install)');
124
- console.log(' or direct file placement in .claude/skills/.');
125
- console.log(' See: https://code.claude.com/docs/en/plugins');
126
- console.log('');
127
- upload('Upload to Claude.ai: Settings > Features > Skills > Upload');
128
- }
129
- catch (err) {
130
- error(`Failed to package skill: ${err}`);
131
- process.exit(1);
132
- }
133
- }
134
- //# sourceMappingURL=package.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/commands/package.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { defineCommand } from 'citty';
2
- import { stats_command } from './stats.js';
3
- export default defineCommand({
4
- meta: {
5
- name: 'stats',
6
- description: 'Show overview of all skills in a directory',
7
- },
8
- args: {
9
- directory: {
10
- type: 'positional',
11
- description: 'Directory containing skills (default: .claude/skills)',
12
- required: false,
13
- },
14
- },
15
- run({ args }) {
16
- stats_command({ directory: args.directory });
17
- },
18
- });
19
- //# sourceMappingURL=stats.cmd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.cmd.js","sourceRoot":"","sources":["../../src/commands/stats.cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAe,aAAa,CAAC;IAC5B,IAAI,EAAE;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,4CAA4C;KACzD;IACD,IAAI,EAAE;QACL,SAAS,EAAE;YACV,IAAI,EAAE,YAAY;YAClB,WAAW,EACV,uDAAuD;YACxD,QAAQ,EAAE,KAAK;SACf;KACD;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACX,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;CACD,CAAC,CAAC"}
@@ -1,154 +0,0 @@
1
- import { existsSync, readdirSync, statSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { SkillValidator } from '../core/validator.js';
4
- import { error } from '../utils/output.js';
5
- export function stats_command(options) {
6
- const directory = options.directory || '.claude/skills';
7
- // Verify directory exists
8
- if (!existsSync(directory)) {
9
- error(`Directory not found: ${directory}`);
10
- process.exit(1);
11
- }
12
- const dir_stats = statSync(directory);
13
- if (!dir_stats.isDirectory()) {
14
- error(`Path is not a directory: ${directory}`);
15
- process.exit(1);
16
- }
17
- // Find all skill directories (containing SKILL.md)
18
- const entries = readdirSync(directory);
19
- const skills = [];
20
- for (const entry of entries) {
21
- const skill_path = join(directory, entry);
22
- const stat = statSync(skill_path);
23
- if (stat.isDirectory()) {
24
- const skill_md_path = join(skill_path, 'SKILL.md');
25
- if (existsSync(skill_md_path)) {
26
- skills.push(skill_path);
27
- }
28
- }
29
- }
30
- if (skills.length === 0) {
31
- console.log(`No skills found in ${directory}`);
32
- console.log('\nCreate a skill with: claude-skills-cli init --name my-skill --description "..."\n');
33
- return;
34
- }
35
- // Display overview header
36
- console.log('📊 Skills Overview');
37
- console.log('============================================================');
38
- console.log(`${skills.length} skill${skills.length === 1 ? '' : 's'} found:\n`);
39
- // Validate and display each skill
40
- for (const skill_path of skills) {
41
- const skill_name = skill_path.split('/').pop() || '';
42
- const validator = new SkillValidator(skill_path);
43
- const result = validator.validate_all();
44
- // Determine status icon
45
- let status_icon = '✅';
46
- let status_text = 'valid';
47
- if (!result.is_valid) {
48
- status_icon = '❌';
49
- status_text = 'errors';
50
- }
51
- else if (result.warnings.length > 0) {
52
- status_icon = '⚠️ ';
53
- status_text = 'warnings';
54
- }
55
- console.log(`${skill_name} (${status_icon} ${status_text})`);
56
- if (result.stats) {
57
- // Description length
58
- const desc_length = result.stats.description_length;
59
- let desc_status = '';
60
- if (desc_length > 0) {
61
- if (desc_length <= 200) {
62
- desc_status = 'optimal';
63
- }
64
- else if (desc_length <= 300) {
65
- desc_status = 'good';
66
- }
67
- else {
68
- desc_status = 'long';
69
- }
70
- console.log(` Description: ${desc_length} chars (${desc_status})`);
71
- }
72
- // Body stats
73
- const lines = result.stats.line_count;
74
- const words = result.stats.word_count;
75
- let line_status = '';
76
- if (lines <= 50) {
77
- line_status = 'excellent';
78
- }
79
- else if (lines <= 80) {
80
- line_status = 'good';
81
- }
82
- else if (lines <= 150) {
83
- line_status = 'consider splitting';
84
- }
85
- else {
86
- line_status = 'too long';
87
- }
88
- let word_status = '';
89
- if (words < 500) {
90
- word_status = 'excellent';
91
- }
92
- else if (words < 1000) {
93
- word_status = 'good';
94
- }
95
- else if (words < 5000) {
96
- word_status = 'acceptable';
97
- }
98
- else {
99
- word_status = 'too long';
100
- }
101
- console.log(` Body: ${lines} lines, ${words} words (${line_status})`);
102
- // Count reference files
103
- const references_dir = join(skill_path, 'references');
104
- if (existsSync(references_dir)) {
105
- const ref_files = readdirSync(references_dir).filter((f) => f.endsWith('.md'));
106
- if (ref_files.length > 0) {
107
- // Calculate total size
108
- let total_size = 0;
109
- for (const ref_file of ref_files) {
110
- const ref_path = join(references_dir, ref_file);
111
- const ref_stat = statSync(ref_path);
112
- total_size += ref_stat.size;
113
- }
114
- const size_kb = (total_size / 1024).toFixed(1);
115
- console.log(` References: ${ref_files.length} file${ref_files.length === 1 ? '' : 's'} (${size_kb} KB)`);
116
- }
117
- }
118
- }
119
- // Show error/warning count
120
- if (!result.is_valid) {
121
- console.log(` ${result.errors.length} error${result.errors.length === 1 ? '' : 's'}`);
122
- }
123
- if (result.warnings.length > 0) {
124
- console.log(` ${result.warnings.length} warning${result.warnings.length === 1 ? '' : 's'}`);
125
- }
126
- console.log(''); // Blank line between skills
127
- }
128
- // Summary
129
- const valid_skills = skills.filter((path) => {
130
- const validator = new SkillValidator(path);
131
- const result = validator.validate_all();
132
- return result.is_valid;
133
- }).length;
134
- const skills_with_warnings = skills.filter((path) => {
135
- const validator = new SkillValidator(path);
136
- const result = validator.validate_all();
137
- return result.is_valid && result.warnings.length > 0;
138
- }).length;
139
- const invalid_skills = skills.length - valid_skills;
140
- console.log('Summary:');
141
- if (invalid_skills === 0 && skills_with_warnings === 0) {
142
- console.log(`✅ All ${skills.length} skills are valid with no warnings`);
143
- }
144
- else {
145
- console.log(` Valid: ${valid_skills}`);
146
- if (skills_with_warnings > 0) {
147
- console.log(` With warnings: ${skills_with_warnings}`);
148
- }
149
- if (invalid_skills > 0) {
150
- console.log(` Invalid: ${invalid_skills}`);
151
- }
152
- }
153
- }
154
- //# sourceMappingURL=stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}