@skillsmith/cli 0.3.1 → 0.3.3

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 (103) hide show
  1. package/README.md +57 -0
  2. package/assets/skillsmith-skill/SKILL.md +235 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/commands/index.d.ts +2 -0
  5. package/dist/src/commands/index.d.ts.map +1 -1
  6. package/dist/src/commands/index.js +4 -0
  7. package/dist/src/commands/index.js.map +1 -1
  8. package/dist/src/commands/install-skill.d.ts +13 -0
  9. package/dist/src/commands/install-skill.d.ts.map +1 -0
  10. package/dist/src/commands/install-skill.js +137 -0
  11. package/dist/src/commands/install-skill.js.map +1 -0
  12. package/dist/src/commands/manage.d.ts +4 -1
  13. package/dist/src/commands/manage.d.ts.map +1 -1
  14. package/dist/src/commands/manage.js +60 -10
  15. package/dist/src/commands/manage.js.map +1 -1
  16. package/dist/src/commands/merge.d.ts +17 -0
  17. package/dist/src/commands/merge.d.ts.map +1 -0
  18. package/dist/src/commands/merge.js +160 -0
  19. package/dist/src/commands/merge.js.map +1 -0
  20. package/dist/src/commands/recommend-scoring.d.ts +29 -0
  21. package/dist/src/commands/recommend-scoring.d.ts.map +1 -0
  22. package/dist/src/commands/recommend-scoring.js +141 -0
  23. package/dist/src/commands/recommend-scoring.js.map +1 -0
  24. package/dist/src/commands/recommend.d.ts +1 -4
  25. package/dist/src/commands/recommend.d.ts.map +1 -1
  26. package/dist/src/commands/recommend.helpers.d.ts +40 -0
  27. package/dist/src/commands/recommend.helpers.d.ts.map +1 -0
  28. package/dist/src/commands/recommend.helpers.js +297 -0
  29. package/dist/src/commands/recommend.helpers.js.map +1 -0
  30. package/dist/src/commands/recommend.js +50 -372
  31. package/dist/src/commands/recommend.js.map +1 -1
  32. package/dist/src/commands/recommend.types.d.ts +66 -0
  33. package/dist/src/commands/recommend.types.d.ts.map +1 -0
  34. package/dist/src/commands/recommend.types.js +14 -0
  35. package/dist/src/commands/recommend.types.js.map +1 -0
  36. package/dist/src/commands/search-formatters.d.ts +35 -0
  37. package/dist/src/commands/search-formatters.d.ts.map +1 -0
  38. package/dist/src/commands/search-formatters.js +128 -0
  39. package/dist/src/commands/search-formatters.js.map +1 -0
  40. package/dist/src/commands/search-types.d.ts +46 -0
  41. package/dist/src/commands/search-types.d.ts.map +1 -0
  42. package/dist/src/commands/search-types.js +12 -0
  43. package/dist/src/commands/search-types.js.map +1 -0
  44. package/dist/src/commands/search.d.ts +3 -0
  45. package/dist/src/commands/search.d.ts.map +1 -1
  46. package/dist/src/commands/search.js +99 -89
  47. package/dist/src/commands/search.js.map +1 -1
  48. package/dist/src/config.d.ts +5 -0
  49. package/dist/src/config.d.ts.map +1 -1
  50. package/dist/src/config.js +7 -0
  51. package/dist/src/config.js.map +1 -1
  52. package/dist/src/index.d.ts +1 -0
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +11 -1
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/templates/mcp-server.template.d.ts +2 -17
  57. package/dist/src/templates/mcp-server.template.d.ts.map +1 -1
  58. package/dist/src/templates/mcp-server.template.js +9 -108
  59. package/dist/src/templates/mcp-server.template.js.map +1 -1
  60. package/dist/src/templates/mcp-template-handlers.d.ts +33 -0
  61. package/dist/src/templates/mcp-template-handlers.d.ts.map +1 -0
  62. package/dist/src/templates/mcp-template-handlers.js +106 -0
  63. package/dist/src/templates/mcp-template-handlers.js.map +1 -0
  64. package/dist/src/templates/mcp-template-types.d.ts +48 -0
  65. package/dist/src/templates/mcp-template-types.d.ts.map +1 -0
  66. package/dist/src/templates/mcp-template-types.js +18 -0
  67. package/dist/src/templates/mcp-template-types.js.map +1 -0
  68. package/dist/src/utils/license-types.d.ts +88 -0
  69. package/dist/src/utils/license-types.d.ts.map +1 -0
  70. package/dist/src/utils/license-types.js +60 -0
  71. package/dist/src/utils/license-types.js.map +1 -0
  72. package/dist/src/utils/license-validation.d.ts +61 -0
  73. package/dist/src/utils/license-validation.d.ts.map +1 -0
  74. package/dist/src/utils/license-validation.js +198 -0
  75. package/dist/src/utils/license-validation.js.map +1 -0
  76. package/dist/src/utils/license.d.ts +4 -71
  77. package/dist/src/utils/license.d.ts.map +1 -1
  78. package/dist/src/utils/license.js +7 -241
  79. package/dist/src/utils/license.js.map +1 -1
  80. package/dist/src/utils/license.test.js +6 -1
  81. package/dist/src/utils/license.test.js.map +1 -1
  82. package/dist/src/utils/node-version.d.ts +41 -0
  83. package/dist/src/utils/node-version.d.ts.map +1 -0
  84. package/dist/src/utils/node-version.js +123 -0
  85. package/dist/src/utils/node-version.js.map +1 -0
  86. package/dist/tests/e2e/search.e2e.test.js +62 -6
  87. package/dist/tests/e2e/search.e2e.test.js.map +1 -1
  88. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -1
  89. package/dist/tests/e2e/utils/hardcoded-detector.js +44 -3
  90. package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -1
  91. package/dist/tests/install-skill.test.d.ts +8 -0
  92. package/dist/tests/install-skill.test.d.ts.map +1 -0
  93. package/dist/tests/install-skill.test.js +409 -0
  94. package/dist/tests/install-skill.test.js.map +1 -0
  95. package/dist/tests/manage.test.js +284 -8
  96. package/dist/tests/manage.test.js.map +1 -1
  97. package/dist/tests/node-version.test.d.ts +8 -0
  98. package/dist/tests/node-version.test.d.ts.map +1 -0
  99. package/dist/tests/node-version.test.js +200 -0
  100. package/dist/tests/node-version.test.js.map +1 -0
  101. package/dist/tests/recommend.test.js +94 -0
  102. package/dist/tests/recommend.test.js.map +1 -1
  103. package/package.json +9 -8
@@ -9,4 +9,6 @@ export { createInitCommand, createValidateCommand, createPublishCommand, createS
9
9
  export { createAnalyzeCommand } from './analyze.js';
10
10
  export { createRecommendCommand } from './recommend.js';
11
11
  export { createSyncCommand } from './sync.js';
12
+ export { createMergeCommand } from './merge.js';
13
+ export { createInstallSkillCommand } from './install-skill.js';
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMzF,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMzF,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAG/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -18,4 +18,8 @@ export { createAnalyzeCommand } from './analyze.js';
18
18
  export { createRecommendCommand } from './recommend.js';
19
19
  // Registry Sync
20
20
  export { createSyncCommand } from './sync.js';
21
+ // SMI-1455: Database Merge Command
22
+ export { createMergeCommand } from './merge.js';
23
+ // SMI-824: Install Skillsmith Skill Command
24
+ export { createInstallSkillCommand } from './install-skill.js';
21
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEzF,2BAA2B;AAC3B,0CAA0C;AAC1C,mCAAmC;AACnC,8CAA8C;AAC9C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAE1B,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,4BAA4B;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEzF,2BAA2B;AAC3B,0CAA0C;AAC1C,mCAAmC;AACnC,8CAA8C;AAC9C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAE1B,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,4BAA4B;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,4CAA4C;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * SMI-824: Install Skillsmith Skill Command
3
+ *
4
+ * Installs the bundled skillsmith skill to ~/.claude/skills/skillsmith/
5
+ * for enabling /skillsmith slash command in Claude Code sessions.
6
+ */
7
+ import { Command } from 'commander';
8
+ /**
9
+ * Create the install-skill command
10
+ */
11
+ export declare function createInstallSkillCommand(): Command;
12
+ export default createInstallSkillCommand;
13
+ //# sourceMappingURL=install-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../../src/commands/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqInC;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAYnD;AAED,eAAe,yBAAyB,CAAA"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * SMI-824: Install Skillsmith Skill Command
3
+ *
4
+ * Installs the bundled skillsmith skill to ~/.claude/skills/skillsmith/
5
+ * for enabling /skillsmith slash command in Claude Code sessions.
6
+ */
7
+ import { Command } from 'commander';
8
+ import chalk from 'chalk';
9
+ import ora from 'ora';
10
+ import { mkdir, copyFile, stat, readdir } from 'fs/promises';
11
+ import { join, dirname } from 'path';
12
+ import { homedir } from 'os';
13
+ import { fileURLToPath } from 'url';
14
+ import { sanitizeError } from '../utils/sanitize.js';
15
+ const __dirname = dirname(fileURLToPath(import.meta.url));
16
+ /**
17
+ * Get the path to bundled skill assets
18
+ */
19
+ function getAssetsPath() {
20
+ // Assets are in packages/cli/assets/skillsmith-skill/ relative to dist/src/commands/
21
+ return join(__dirname, '..', '..', '..', 'assets', 'skillsmith-skill');
22
+ }
23
+ /**
24
+ * Get the target installation path
25
+ */
26
+ function getTargetPath() {
27
+ return join(homedir(), '.claude', 'skills', 'skillsmith');
28
+ }
29
+ /**
30
+ * Check if a directory exists
31
+ */
32
+ async function directoryExists(path) {
33
+ try {
34
+ const stats = await stat(path);
35
+ return stats.isDirectory();
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ /**
42
+ * Copy all files from source to destination directory
43
+ * Skips symlinks for security (prevents path traversal attacks)
44
+ */
45
+ async function copyDirectory(src, dest) {
46
+ const entries = await readdir(src, { withFileTypes: true });
47
+ let filesCopied = 0;
48
+ for (const entry of entries) {
49
+ // Security: Skip symlinks to prevent path traversal attacks
50
+ if (entry.isSymbolicLink()) {
51
+ continue;
52
+ }
53
+ const srcPath = join(src, entry.name);
54
+ const destPath = join(dest, entry.name);
55
+ if (entry.isDirectory()) {
56
+ await mkdir(destPath, { recursive: true });
57
+ filesCopied += await copyDirectory(srcPath, destPath);
58
+ }
59
+ else if (entry.isFile()) {
60
+ await copyFile(srcPath, destPath);
61
+ filesCopied++;
62
+ }
63
+ }
64
+ return filesCopied;
65
+ }
66
+ /**
67
+ * Install the skillsmith skill to ~/.claude/skills/skillsmith/
68
+ */
69
+ async function installSkillsmithSkill(force) {
70
+ const assetsPath = getAssetsPath();
71
+ const targetPath = getTargetPath();
72
+ // Check if assets exist
73
+ if (!(await directoryExists(assetsPath))) {
74
+ throw new Error(`Skill assets not found at ${assetsPath}. This may indicate a corrupted installation.`);
75
+ }
76
+ // Check for existing installation
77
+ const exists = await directoryExists(targetPath);
78
+ if (exists && !force) {
79
+ console.log(chalk.yellow('\nSkillsmith skill is already installed.'));
80
+ console.log(chalk.dim(`Location: ${targetPath}`));
81
+ console.log(chalk.dim('\nUse --force to reinstall.'));
82
+ return;
83
+ }
84
+ const spinner = ora('Installing skillsmith skill...').start();
85
+ try {
86
+ // Create parent directories if needed
87
+ await mkdir(dirname(targetPath), { recursive: true });
88
+ // Create target directory
89
+ await mkdir(targetPath, { recursive: true });
90
+ // Copy all assets
91
+ const filesCopied = await copyDirectory(assetsPath, targetPath);
92
+ // Validate that files were actually copied
93
+ if (filesCopied === 0) {
94
+ spinner.warn(chalk.yellow('Warning: No files found in assets directory'));
95
+ console.log(chalk.dim('This may indicate a corrupted installation. Try reinstalling the CLI.'));
96
+ return;
97
+ }
98
+ spinner.succeed(chalk.green('Skillsmith skill installed successfully!'));
99
+ console.log();
100
+ console.log(chalk.bold('Installation Details:'));
101
+ console.log(chalk.dim(` Location: ${targetPath}`));
102
+ console.log(chalk.dim(` Files copied: ${filesCopied}`));
103
+ console.log();
104
+ console.log(chalk.bold('Available Commands:'));
105
+ console.log(chalk.cyan(' /skillsmith search <query>') + ' - Search for skills');
106
+ console.log(chalk.cyan(' /skillsmith install <id>') + ' - Install a skill');
107
+ console.log(chalk.cyan(' /skillsmith recommend') + ' - Get recommendations');
108
+ console.log(chalk.cyan(' /skillsmith compare <ids>') + ' - Compare skills');
109
+ console.log(chalk.cyan(' /skillsmith list') + ' - List installed skills');
110
+ console.log(chalk.cyan(' /skillsmith uninstall <id>') + ' - Remove a skill');
111
+ console.log();
112
+ console.log(chalk.dim('Tip: Start a new Claude Code session to use the /skillsmith command.'));
113
+ }
114
+ catch (error) {
115
+ spinner.fail('Failed to install skillsmith skill');
116
+ throw error;
117
+ }
118
+ }
119
+ /**
120
+ * Create the install-skill command
121
+ */
122
+ export function createInstallSkillCommand() {
123
+ return new Command('install-skill')
124
+ .description('Install the skillsmith skill for /skillsmith slash command support')
125
+ .option('-f, --force', 'Reinstall even if already installed')
126
+ .action(async (opts) => {
127
+ try {
128
+ await installSkillsmithSkill(opts.force ?? false);
129
+ }
130
+ catch (error) {
131
+ console.error(chalk.red('Error:'), sanitizeError(error));
132
+ process.exit(1);
133
+ }
134
+ });
135
+ }
136
+ export default createInstallSkillCommand;
137
+ //# sourceMappingURL=install-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../../src/commands/install-skill.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,10 @@ interface InstalledSkill {
14
14
  hasUpdates: boolean;
15
15
  }
16
16
  /**
17
- * Get list of installed skills from ~/.claude/skills
17
+ * Get list of installed skills from both global (~/.claude/skills) and
18
+ * local (./claude/skills) directories.
19
+ *
20
+ * SMI-1630: Local skills take precedence over global skills with the same name.
18
21
  */
19
22
  declare function getInstalledSkills(): Promise<InstalledSkill[]>;
20
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../../src/commands/manage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAazB,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,iBAAe,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CA8C7D;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAgC1D;AAgLD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAuB7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAkB7C;AAED,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../../src/commands/manage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAiCzB,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;CACpB;AAoED;;;;;GAKG;AACH,iBAAe,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAqB7D;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAoC1D;AAkLD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAuB7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAkB7C;AAED,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA"}
@@ -14,23 +14,42 @@ import { homedir } from 'os';
14
14
  import { createDatabase, SkillRepository, SkillParser, } from '@skillsmith/core';
15
15
  import { DEFAULT_DB_PATH } from '../config.js';
16
16
  import { sanitizeError } from '../utils/sanitize.js';
17
+ /**
18
+ * SMI-1809: Added 'local' tier color for local skills
19
+ */
17
20
  const TRUST_TIER_COLORS = {
18
21
  verified: chalk.green,
19
22
  community: chalk.yellow,
23
+ local: chalk.cyan, // SMI-1809: Cyan for local skills
20
24
  experimental: chalk.red,
21
25
  unknown: chalk.gray,
22
26
  };
23
- const SKILLS_DIR = join(homedir(), '.claude', 'skills');
24
27
  /**
25
- * Get list of installed skills from ~/.claude/skills
28
+ * SMI-1630: Search both global and local skill directories
29
+ *
30
+ * Global: ~/.claude/skills/
31
+ * Local: ${process.cwd()}/.claude/skills/
32
+ *
33
+ * Local skills take precedence over global skills with the same name.
26
34
  */
27
- async function getInstalledSkills() {
35
+ const GLOBAL_SKILLS_DIR = join(homedir(), '.claude', 'skills');
36
+ /**
37
+ * Returns the local skills directory path.
38
+ * Computed at call time to handle working directory changes.
39
+ */
40
+ function getLocalSkillsDir() {
41
+ return join(process.cwd(), '.claude', 'skills');
42
+ }
43
+ /**
44
+ * Get skills from a specific directory
45
+ */
46
+ async function getSkillsFromDirectory(skillsDir) {
28
47
  const skills = [];
29
48
  try {
30
- const entries = await readdir(SKILLS_DIR, { withFileTypes: true });
49
+ const entries = await readdir(skillsDir, { withFileTypes: true });
31
50
  for (const entry of entries) {
32
51
  if (entry.isDirectory()) {
33
- const skillPath = join(SKILLS_DIR, entry.name);
52
+ const skillPath = join(skillsDir, entry.name);
34
53
  const skillMdPath = join(skillPath, 'SKILL.md');
35
54
  try {
36
55
  const skillMdStat = await stat(skillMdPath);
@@ -46,7 +65,13 @@ async function getInstalledSkills() {
46
65
  hasUpdates: false, // Would check remote for updates
47
66
  });
48
67
  }
49
- catch {
68
+ catch (error) {
69
+ // Only treat ENOENT (file not found) as "no SKILL.md"
70
+ // Re-throw permission errors and other unexpected errors
71
+ const errno = error.code;
72
+ if (errno !== 'ENOENT') {
73
+ throw error;
74
+ }
50
75
  // No SKILL.md, treat as unknown skill
51
76
  const dirStat = await stat(skillPath);
52
77
  skills.push({
@@ -68,6 +93,30 @@ async function getInstalledSkills() {
68
93
  }
69
94
  return skills;
70
95
  }
96
+ /**
97
+ * Get list of installed skills from both global (~/.claude/skills) and
98
+ * local (./claude/skills) directories.
99
+ *
100
+ * SMI-1630: Local skills take precedence over global skills with the same name.
101
+ */
102
+ async function getInstalledSkills() {
103
+ // Get skills from both directories
104
+ const [globalSkills, localSkills] = await Promise.all([
105
+ getSkillsFromDirectory(GLOBAL_SKILLS_DIR),
106
+ getSkillsFromDirectory(getLocalSkillsDir()),
107
+ ]);
108
+ // Create a map for deduplication, local skills take precedence
109
+ const skillMap = new Map();
110
+ // Add global skills first
111
+ for (const skill of globalSkills) {
112
+ skillMap.set(skill.name, skill);
113
+ }
114
+ // Add local skills (overwrites global skills with same name)
115
+ for (const skill of localSkills) {
116
+ skillMap.set(skill.name, skill);
117
+ }
118
+ return Array.from(skillMap.values());
119
+ }
71
120
  /**
72
121
  * Display skills in a table format
73
122
  */
@@ -99,7 +148,7 @@ function displaySkillsTable(skills) {
99
148
  }
100
149
  console.log('\n' + chalk.bold.blue('Installed Skills') + '\n');
101
150
  console.log(table.toString());
102
- console.log(chalk.dim(`\n${skills.length} skill(s) installed in ${SKILLS_DIR}\n`));
151
+ console.log(chalk.dim(`\n${skills.length} skill(s) found (global: ~/.claude/skills, local: ./.claude/skills)\n`));
103
152
  }
104
153
  /**
105
154
  * Get skill diff from database
@@ -117,15 +166,16 @@ async function getSkillDiff(skillName, dbPath) {
117
166
  // Get installed version
118
167
  const installed = (await getInstalledSkills()).find((s) => s.name.toLowerCase() === skillName.toLowerCase());
119
168
  const changes = [];
120
- if (installed?.version !== skill.version) {
121
- changes.push(`Version: ${installed?.version || 'N/A'} -> ${skill.version || 'N/A'}`);
169
+ const skillWithVersion = skill;
170
+ if (installed?.version !== skillWithVersion.version) {
171
+ changes.push(`Version: ${installed?.version || 'N/A'} -> ${skillWithVersion.version || 'N/A'}`);
122
172
  }
123
173
  if (installed?.trustTier !== skill.trustTier) {
124
174
  changes.push(`Trust Tier: ${installed?.trustTier || 'unknown'} -> ${skill.trustTier}`);
125
175
  }
126
176
  return {
127
177
  oldVersion: installed?.version || null,
128
- newVersion: skill.version || null,
178
+ newVersion: skillWithVersion.version || null,
129
179
  changes,
130
180
  };
131
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../../src/commands/manage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../../src/commands/manage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SMI-1455: CLI command for safe skill database merging
3
+ *
4
+ * Provides a user-friendly interface to merge skill databases using
5
+ * the merge tooling from @skillsmith/core (SMI-1448).
6
+ *
7
+ * Usage:
8
+ * skillsmith merge <source-db> [target-db]
9
+ * sklx merge <source-db> --strategy keep_newer --dry-run
10
+ */
11
+ import { Command } from 'commander';
12
+ /**
13
+ * Create the merge command
14
+ */
15
+ export declare function createMergeCommand(): Command;
16
+ export default createMergeCommand;
17
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/commands/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwCnC;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CA0I5C;AAED,eAAe,kBAAkB,CAAA"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * SMI-1455: CLI command for safe skill database merging
3
+ *
4
+ * Provides a user-friendly interface to merge skill databases using
5
+ * the merge tooling from @skillsmith/core (SMI-1448).
6
+ *
7
+ * Usage:
8
+ * skillsmith merge <source-db> [target-db]
9
+ * sklx merge <source-db> --strategy keep_newer --dry-run
10
+ */
11
+ import { Command } from 'commander';
12
+ import { resolve } from 'path';
13
+ import { existsSync } from 'fs';
14
+ import Database from 'better-sqlite3';
15
+ import { mergeSkillDatabases, checkSchemaCompatibility, } from '@skillsmith/core';
16
+ import { getDefaultDbPath } from '../config.js';
17
+ /**
18
+ * Format merge result for display
19
+ */
20
+ function formatMergeResult(result) {
21
+ const lines = [
22
+ '',
23
+ '╔══════════════════════════════════════════════════════════════╗',
24
+ '║ Merge Results ║',
25
+ '╠══════════════════════════════════════════════════════════════╣',
26
+ `║ Skills added: ${result.skillsAdded.toString().padStart(8)} ║`,
27
+ `║ Skills updated: ${result.skillsUpdated.toString().padStart(8)} ║`,
28
+ `║ Skills skipped: ${result.skillsSkipped.toString().padStart(8)} ║`,
29
+ `║ Conflicts: ${result.conflicts.length.toString().padStart(8)} ║`,
30
+ `║ Duration: ${(result.duration / 1000).toFixed(2).padStart(8)}s ║`,
31
+ '╚══════════════════════════════════════════════════════════════╝',
32
+ '',
33
+ ];
34
+ return lines.join('\n');
35
+ }
36
+ /**
37
+ * Create the merge command
38
+ */
39
+ export function createMergeCommand() {
40
+ const command = new Command('merge')
41
+ .description('Merge skills from one database into another')
42
+ .argument('<source>', 'Source database path to merge from')
43
+ .argument('[target]', 'Target database path (default: local skills.db)')
44
+ .option('-s, --strategy <strategy>', 'Merge strategy: keep_target, keep_source, keep_newer, merge_fields', 'keep_newer')
45
+ .option('-d, --dry-run', 'Preview changes without applying them', false)
46
+ .option('-v, --verbose', 'Show detailed conflict information', false)
47
+ .option('-q, --quiet', 'Only output errors', false)
48
+ .option('--force', 'Skip compatibility checks', false)
49
+ .action(async (sourcePath, targetPath, options) => {
50
+ const { strategy, dryRun, verbose, quiet, force } = options;
51
+ // Validate strategy
52
+ const validStrategies = [
53
+ 'keep_target',
54
+ 'keep_source',
55
+ 'keep_newer',
56
+ 'merge_fields',
57
+ ];
58
+ if (!validStrategies.includes(strategy)) {
59
+ console.error(`Invalid strategy: ${strategy}`);
60
+ console.error(`Valid strategies: ${validStrategies.join(', ')}`);
61
+ process.exit(1);
62
+ }
63
+ // Resolve paths
64
+ const resolvedSource = resolve(sourcePath);
65
+ const resolvedTarget = targetPath ? resolve(targetPath) : getDefaultDbPath();
66
+ // Check source exists
67
+ if (!existsSync(resolvedSource)) {
68
+ console.error(`Source database not found: ${resolvedSource}`);
69
+ process.exit(1);
70
+ }
71
+ // Check target exists (or will be created)
72
+ if (!existsSync(resolvedTarget)) {
73
+ console.error(`Target database not found: ${resolvedTarget}`);
74
+ console.error('Create a new database first with: skillsmith init');
75
+ process.exit(1);
76
+ }
77
+ if (!quiet) {
78
+ console.log('╔══════════════════════════════════════════════════════════════╗');
79
+ console.log('║ Skillsmith Database Merge ║');
80
+ console.log('╠══════════════════════════════════════════════════════════════╣');
81
+ console.log(`║ Source: ${resolvedSource.slice(-48).padEnd(48)} ║`);
82
+ console.log(`║ Target: ${resolvedTarget.slice(-48).padEnd(48)} ║`);
83
+ console.log(`║ Strategy: ${strategy.padEnd(48)} ║`);
84
+ console.log(`║ Dry Run: ${(dryRun ? 'Yes' : 'No').padEnd(48)} ║`);
85
+ console.log('╚══════════════════════════════════════════════════════════════╝');
86
+ console.log('');
87
+ }
88
+ // Open databases
89
+ let sourceDb = null;
90
+ let targetDb = null;
91
+ try {
92
+ sourceDb = new Database(resolvedSource, { readonly: true });
93
+ targetDb = new Database(resolvedTarget);
94
+ // Check schema compatibility
95
+ if (!force) {
96
+ const sourceCompat = checkSchemaCompatibility(sourceDb);
97
+ const targetCompat = checkSchemaCompatibility(targetDb);
98
+ if (!sourceCompat.isCompatible) {
99
+ console.error(`Source database: ${sourceCompat.message}`);
100
+ process.exit(1);
101
+ }
102
+ if (!targetCompat.isCompatible) {
103
+ console.error(`Target database: ${targetCompat.message}`);
104
+ process.exit(1);
105
+ }
106
+ if (!quiet && sourceCompat.action !== 'none') {
107
+ console.log(`Source: ${sourceCompat.message}`);
108
+ }
109
+ if (!quiet && targetCompat.action !== 'none') {
110
+ console.log(`Target: ${targetCompat.message}`);
111
+ }
112
+ }
113
+ // Configure merge options
114
+ const mergeOptions = {
115
+ strategy: strategy,
116
+ dryRun,
117
+ skipInvalid: true,
118
+ ...(verbose && {
119
+ onConflict: (conflict) => {
120
+ console.log(` Conflict: ${conflict.skillId} (${conflict.reason})`);
121
+ return strategy;
122
+ },
123
+ }),
124
+ };
125
+ // Perform merge
126
+ if (!quiet) {
127
+ console.log('Merging databases...');
128
+ }
129
+ const result = mergeSkillDatabases(targetDb, sourceDb, mergeOptions);
130
+ // Display results
131
+ if (!quiet) {
132
+ console.log(formatMergeResult(result));
133
+ if (dryRun) {
134
+ console.log('⚠️ DRY RUN: No changes were made to the target database.');
135
+ console.log(' Remove --dry-run to apply these changes.');
136
+ }
137
+ else {
138
+ console.log('✅ Merge complete!');
139
+ }
140
+ }
141
+ // Exit with error if there were issues
142
+ if (result.skillsAdded === 0 && result.skillsUpdated === 0) {
143
+ if (!quiet) {
144
+ console.log('\nNo new skills to merge.');
145
+ }
146
+ }
147
+ }
148
+ catch (error) {
149
+ console.error('Merge failed:', error instanceof Error ? error.message : error);
150
+ process.exit(1);
151
+ }
152
+ finally {
153
+ sourceDb?.close();
154
+ targetDb?.close();
155
+ }
156
+ });
157
+ return command;
158
+ }
159
+ export default createMergeCommand;
160
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/commands/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * SMI-1299: CLI Recommend Scoring Helpers
3
+ *
4
+ * Role inference and overlap detection for skill recommendations.
5
+ *
6
+ * @module @skillsmith/cli/commands/recommend-scoring
7
+ */
8
+ import type { SkillRole } from '@skillsmith/core';
9
+ import type { SkillRecommendation, InstalledSkill } from './recommend.types.js';
10
+ /**
11
+ * SMI-1631: Infer skill roles from tags when not explicitly set
12
+ */
13
+ export declare function inferRolesFromTags(tags: string[]): SkillRole[];
14
+ /**
15
+ * Normalize a skill name for comparison (SMI-1358)
16
+ */
17
+ export declare function normalizeSkillName(name: string): string;
18
+ /**
19
+ * Check if two skills overlap in functionality (SMI-1358)
20
+ */
21
+ export declare function skillsOverlap(installed: InstalledSkill, recommended: SkillRecommendation): boolean;
22
+ /**
23
+ * Filter recommendations to remove overlaps with installed skills (SMI-1358)
24
+ */
25
+ export declare function filterOverlappingSkills(recommendations: SkillRecommendation[], installedSkills: InstalledSkill[]): {
26
+ filtered: SkillRecommendation[];
27
+ overlapCount: number;
28
+ };
29
+ //# sourceMappingURL=recommend-scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend-scoring.d.ts","sourceRoot":"","sources":["../../../src/commands/recommend-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAM/E;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAqE9D;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,cAAc,EACzB,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAqBT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,mBAAmB,EAAE,EACtC,eAAe,EAAE,cAAc,EAAE,GAChC;IAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAkB3D"}