skillfish 1.0.11 → 1.0.13

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/README.md CHANGED
@@ -20,7 +20,11 @@
20
20
  ## Quick Start
21
21
 
22
22
  ```bash
23
+ # One-off skill installation
23
24
  npx skillfish add owner/repo
25
+
26
+ # For skill management (list, update, remove), install globally
27
+ npm i -g skillfish
24
28
  ```
25
29
 
26
30
  One command installs to **all detected agents** on your system.
@@ -52,11 +56,11 @@ All commands support `--json` for automation.
52
56
  ## Examples
53
57
 
54
58
  ```bash
55
- npx skillfish add user/my-skill # Install a skill
56
- npx skillfish add owner/repo --all # Install all skills from repo
57
- npx skillfish list # See what's installed
58
- npx skillfish update # Update all skills
59
- npx skillfish remove old-skill # Remove a skill
59
+ skillfish add user/my-skill # Install a skill
60
+ skillfish add owner/repo --all # Install all skills from repo
61
+ skillfish list # See what's installed
62
+ skillfish update # Update all skills
63
+ skillfish remove old-skill # Remove a skill
60
64
  ```
61
65
 
62
66
  ## Supported Agents
@@ -99,15 +103,15 @@ Works with 17+ agents including:
99
103
  Install skills from a repository.
100
104
 
101
105
  ```bash
102
- npx skillfish add owner/repo # Auto-discover SKILL.md
103
- npx skillfish add owner/repo my-skill # Install by skill name
104
- npx skillfish add owner/repo/path/to/skill # Full path syntax
105
- npx skillfish add owner/repo --path skills/foo # Explicit path
106
- npx skillfish add owner/repo --all # Install all skills
107
- npx skillfish add owner/repo --force # Overwrite existing
108
- npx skillfish add owner/repo --yes # Skip confirmation
109
- npx skillfish add owner/repo --project # Project only (./)
110
- npx skillfish add owner/repo --global # Global only (~/)
106
+ skillfish add owner/repo # Auto-discover SKILL.md
107
+ skillfish add owner/repo my-skill # Install by skill name
108
+ skillfish add owner/repo/path/to/skill # Full path syntax
109
+ skillfish add owner/repo --path skills/foo # Explicit path
110
+ skillfish add owner/repo --all # Install all skills
111
+ skillfish add owner/repo --force # Overwrite existing
112
+ skillfish add owner/repo --yes # Skip confirmation
113
+ skillfish add owner/repo --project # Project only (./)
114
+ skillfish add owner/repo --global # Global only (~/)
111
115
  ```
112
116
 
113
117
  ### list
@@ -115,10 +119,10 @@ npx skillfish add owner/repo --global # Global only (~/)
115
119
  View installed skills.
116
120
 
117
121
  ```bash
118
- npx skillfish list # List all installed skills
119
- npx skillfish list --global # Global skills only (~/)
120
- npx skillfish list --project # Project skills only (./)
121
- npx skillfish list --agent "Claude Code" # Specific agent
122
+ skillfish list # List all installed skills
123
+ skillfish list --global # Global skills only (~/)
124
+ skillfish list --project # Project skills only (./)
125
+ skillfish list --agent "Claude Code" # Specific agent
122
126
  ```
123
127
 
124
128
  ### remove
@@ -126,13 +130,13 @@ npx skillfish list --agent "Claude Code" # Specific agent
126
130
  Remove installed skills.
127
131
 
128
132
  ```bash
129
- npx skillfish remove # Interactive picker
130
- npx skillfish remove my-skill # By name
131
- npx skillfish remove --all # Remove all
132
- npx skillfish remove my-skill --project # Project only
133
- npx skillfish remove my-skill --global # Global only
134
- npx skillfish remove my-skill --agent "Cursor" # Specific agent
135
- npx skillfish remove my-skill --yes # Skip confirmation
133
+ skillfish remove # Interactive picker
134
+ skillfish remove my-skill # By name
135
+ skillfish remove --all # Remove all
136
+ skillfish remove my-skill --project # Project only
137
+ skillfish remove my-skill --global # Global only
138
+ skillfish remove my-skill --agent "Cursor" # Specific agent
139
+ skillfish remove my-skill --yes # Skip confirmation
136
140
  ```
137
141
 
138
142
  ### update
@@ -140,9 +144,9 @@ npx skillfish remove my-skill --yes # Skip confirmation
140
144
  Update installed skills to latest version.
141
145
 
142
146
  ```bash
143
- npx skillfish update # Check for updates interactively
144
- npx skillfish update --yes # Update all without prompting
145
- npx skillfish update --json # Check for updates (JSON output)
147
+ skillfish update # Check for updates interactively
148
+ skillfish update --yes # Update all without prompting
149
+ skillfish update --json # Check for updates (JSON output)
146
150
  ```
147
151
 
148
152
  <details>
@@ -471,11 +471,11 @@ async function discoverSkillPaths(owner, repo, installAll, jsonMode, jsonOutput,
471
471
  return { paths: [skill.dir], branch, sha };
472
472
  }
473
473
  // Build options for selection with frontmatter metadata
474
- // Title in label, description in hint (shows on focus)
474
+ // Title in label, truncated description in hint (keeps UI clean)
475
475
  const optionsList = skills.map((skill) => ({
476
476
  value: skill.dir,
477
477
  label: pc.bold(toTitleCase(skill.name)),
478
- hint: skill.description || undefined,
478
+ hint: skill.description ? truncate(skill.description, 70) : undefined,
479
479
  }));
480
480
  // Non-TTY or JSON mode: require --all or --path for multiple skills
481
481
  if (!isInputTTY() || jsonMode) {
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ import { Command } from 'commander';
8
8
  import { readFileSync } from 'fs';
9
9
  import { fileURLToPath } from 'url';
10
10
  import { dirname, join } from 'path';
11
+ import updateNotifier from 'update-notifier';
11
12
  import { addCommand } from './commands/add.js';
12
13
  import { listCommand } from './commands/list.js';
13
14
  import { removeCommand } from './commands/remove.js';
@@ -15,6 +16,8 @@ import { updateCommand } from './commands/update.js';
15
16
  // Read version from package.json (single source of truth)
16
17
  const __dirname = dirname(fileURLToPath(import.meta.url));
17
18
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
19
+ // Check for updates (runs in background, non-blocking)
20
+ const notifier = updateNotifier({ pkg });
18
21
  const program = new Command()
19
22
  .name('skillfish')
20
23
  .description('Install and manage AI agent skills from GitHub repositories')
@@ -52,7 +55,17 @@ program.on('option:json', () => {
52
55
  // JSON mode is handled by commands
53
56
  });
54
57
  // Parse and run
55
- program.parseAsync(process.argv).catch((err) => {
58
+ program
59
+ .parseAsync(process.argv)
60
+ .then(() => {
61
+ // Show update notification after command completes (if update available)
62
+ notifier.notify({
63
+ message: `Update available: {currentVersion} → {latestVersion}
64
+ Run: npx skillfish@latest
65
+ Or: npm i -g skillfish`,
66
+ });
67
+ })
68
+ .catch((err) => {
56
69
  console.error('Error:', err instanceof Error ? err.message : String(err));
57
70
  process.exit(1);
58
71
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillfish",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "Install AI agent skills from GitHub with a single command",
5
5
  "type": "module",
6
6
  "bin": {
@@ -71,11 +71,13 @@
71
71
  "@clack/prompts": "^0.11.0",
72
72
  "commander": "^14.0.2",
73
73
  "giget": "^3.1.1",
74
- "picocolors": "^1.1.1"
74
+ "picocolors": "^1.1.1",
75
+ "update-notifier": "^7.3.1"
75
76
  },
76
77
  "devDependencies": {
77
78
  "@eslint/js": "^9.39.2",
78
79
  "@types/node": "^20.0.0",
80
+ "@types/update-notifier": "^6.0.8",
79
81
  "eslint": "^9.39.2",
80
82
  "eslint-config-prettier": "^10.1.8",
81
83
  "husky": "^9.1.7",