myskillshub 1.0.10 → 1.0.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myskillshub",
3
- "version": "1.0.10",
3
+ "version": "1.0.11",
4
4
  "description": "CLI tool for SkillHub skill management",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -5,6 +5,7 @@ const oraModule = require('ora');
5
5
  const ora = oraModule.default || oraModule;
6
6
  const fs = require('fs').promises;
7
7
  const path = require('path');
8
+ const resolveApiUrl = require('../utils/resolve-api-url');
8
9
 
9
10
  const program = new Command();
10
11
  const TARGET_DIRS = {
@@ -18,13 +19,14 @@ program
18
19
  .description('Show remote and local version information for a skill')
19
20
  .argument('<skill-slug>', 'Skill slug')
20
21
  .option('--verbose', 'Verbose output')
21
- .option('-a, --api-url <url>', 'SkillHub API URL', 'http://localhost:3000')
22
+ .option('-a, --api-url <url>', 'SkillHub API URL')
22
23
  .option('-t, --target <target>', 'Check local target: claude|codex|cursor|all', 'all')
23
24
  .action(async (skillSlug, options) => {
24
25
  const spinner = ora('Fetching skill info...').start();
25
26
 
26
27
  try {
27
- const skill = await getSkillInfo(skillSlug, options.apiUrl);
28
+ const apiUrl = resolveApiUrl(options.apiUrl);
29
+ const skill = await getSkillInfo(skillSlug, apiUrl);
28
30
  const localInfo = await getLocalInfo(skillSlug, options.target);
29
31
  spinner.succeed(chalk.green('Skill info loaded'));
30
32
 
@@ -5,6 +5,7 @@ const oraModule = require('ora');
5
5
  const ora = oraModule.default || oraModule;
6
6
  const fs = require('fs').promises;
7
7
  const path = require('path');
8
+ const resolveApiUrl = require('../utils/resolve-api-url');
8
9
 
9
10
  const program = new Command();
10
11
  const TARGET_DIRS = {
@@ -25,19 +26,20 @@ program
25
26
  .description('Install or view a skill in local tool directories')
26
27
  .argument('<skill-ref>', 'Skill ref: <slug> or <slug>@<version>')
27
28
  .option('--verbose', 'Verbose output')
28
- .option('-a, --api-url <url>', 'SkillHub API URL', 'http://localhost:3000')
29
+ .option('-a, --api-url <url>', 'SkillHub API URL')
29
30
  .option('-t, --target <target>', 'Install target: claude|codex|cursor|all', 'all')
30
31
  .option('--view', 'View skill details without installing')
31
32
  .action(async (skillRef, options) => {
32
33
  const spinner = ora('Fetching skill information...').start();
33
34
 
34
35
  try {
36
+ const apiUrl = resolveApiUrl(options.apiUrl);
35
37
  const parsed = parseSkillRef(skillRef);
36
38
  const skillSlug = parsed.slug;
37
39
  const installVersion = parsed.version || null;
38
40
 
39
41
  // Get skill information
40
- const skillInfo = await getSkillInfo(skillSlug, options.apiUrl);
42
+ const skillInfo = await getSkillInfo(skillSlug, apiUrl);
41
43
  spinner.succeed(chalk.green('Skill information fetched successfully'));
42
44
 
43
45
  // Display skill details
@@ -45,7 +47,7 @@ program
45
47
 
46
48
  if (!options.view) {
47
49
  spinner.start('Fetching skill package...');
48
- const skillPackage = await getSkillPackage(skillSlug, options.apiUrl, installVersion);
50
+ const skillPackage = await getSkillPackage(skillSlug, apiUrl, installVersion);
49
51
  const resolvedVersion = skillPackage.version || installVersion || skillInfo.version || '-';
50
52
 
51
53
  spinner.text = `Installing skill to target: ${options.target}`;
@@ -97,7 +99,9 @@ async function getSkillInfo(skillSlug, apiUrl) {
97
99
  }
98
100
 
99
101
  async function getSkillPackage(skillSlug, apiUrl, skillVersion) {
100
- const params = skillVersion ? { version: skillVersion } : {};
102
+ const params = skillVersion
103
+ ? { version: skillVersion, install: '1' }
104
+ : { install: '1' };
101
105
 
102
106
  try {
103
107
  const response = await axios.get(`${apiUrl}/api/skills/${skillSlug}/package`, { params });
@@ -10,6 +10,7 @@ const ora = oraModule.default || oraModule;
10
10
  const archiver = require('archiver');
11
11
  const FormData = require('form-data');
12
12
  const { createWriteStream } = require('fs');
13
+ const resolveApiUrl = require('../utils/resolve-api-url');
13
14
 
14
15
  const program = new Command();
15
16
  const DEFAULT_CATEGORY_SLUG = 'dev-tools';
@@ -19,7 +20,7 @@ program
19
20
  .description('Publish a skill from local directory')
20
21
  .argument('[directory]', 'Directory containing skill to publish (default: current directory)')
21
22
  .option('--verbose', 'Verbose output')
22
- .option('-a, --api-url <url>', 'SkillHub API URL', 'http://localhost:3000')
23
+ .option('-a, --api-url <url>', 'SkillHub API URL')
23
24
  .option('--username <username>', 'Login username (or use SKILLSHUB_USERNAME)')
24
25
  .option('--password <password>', 'Login password (or use SKILLSHUB_PASSWORD)')
25
26
  .option('--category-id <id>', 'Category ID for publish')
@@ -29,6 +30,8 @@ program
29
30
  const spinner = ora('Starting publish process...').start();
30
31
 
31
32
  try {
33
+ options.apiUrl = resolveApiUrl(options.apiUrl);
34
+
32
35
  // Validate directory exists
33
36
  if (!fs.existsSync(targetDirectory)) {
34
37
  spinner.fail(chalk.red(`Directory not found: ${targetDirectory}`));
@@ -3,6 +3,7 @@ const chalk = require('chalk');
3
3
  const axios = require('axios');
4
4
  const oraModule = require('ora');
5
5
  const ora = oraModule.default || oraModule;
6
+ const resolveApiUrl = require('../utils/resolve-api-url');
6
7
 
7
8
  const program = new Command();
8
9
 
@@ -11,7 +12,7 @@ program
11
12
  .description('Search for skills')
12
13
  .argument('[query]', 'Search query')
13
14
  .option('--verbose', 'Verbose output')
14
- .option('-a, --api-url <url>', 'SkillHub API URL', 'http://localhost:3000')
15
+ .option('-a, --api-url <url>', 'SkillHub API URL')
15
16
  .option('-c, --category <category>', 'Filter by category')
16
17
  .option('-k, --keywords <keywords>', 'Filter by keywords (comma-separated)')
17
18
  .option('-r, --rating <rating>', 'Minimum rating')
@@ -20,6 +21,7 @@ program
20
21
  const spinner = ora('Searching skills...').start();
21
22
 
22
23
  try {
24
+ const apiUrl = resolveApiUrl(options.apiUrl);
23
25
  const searchParams = {
24
26
  query: query || '',
25
27
  limit: parseInt(options.limit),
@@ -28,7 +30,7 @@ program
28
30
  rating: options.rating ? parseFloat(options.rating) : null
29
31
  };
30
32
 
31
- const results = await searchSkills(searchParams, options.apiUrl);
33
+ const results = await searchSkills(searchParams, apiUrl);
32
34
  spinner.succeed(chalk.green(`Found ${results.length} skills`));
33
35
 
34
36
  if (results.length === 0) {
@@ -0,0 +1,18 @@
1
+ const DEFAULT_API_URL = 'http://localhost:3000';
2
+
3
+ function pickConfiguredUrl(value) {
4
+ if (typeof value !== 'string') {
5
+ return null;
6
+ }
7
+
8
+ const normalized = value.trim();
9
+ return normalized || null;
10
+ }
11
+
12
+ function resolveApiUrl(cliApiUrl) {
13
+ return pickConfiguredUrl(process.env.SKILLHUB_URL)
14
+ || pickConfiguredUrl(cliApiUrl)
15
+ || DEFAULT_API_URL;
16
+ }
17
+
18
+ module.exports = resolveApiUrl;