skillme 0.2.2 → 0.3.1
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.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/skillme/cli.rb +11 -11
- data/lib/skillme/deps.rb +15 -38
- data/lib/skillme/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '037391191a09add49f8fd537d077d36b589be4fd0349e7c92e45774efb66a2a4'
|
|
4
|
+
data.tar.gz: 227b08cd66b8d940bc1b72cb287b3e81a528bf711c85fd6bb5a82c7b9799b79f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ee019c5b4c92f7a6f27558d1dbd3bd4bfb2b800cb51eb96bbb69f5c7ac5cc679f5afc3395e79a077246bec62653a41dac5fa07a7e8f9bf6e284b2a86e625d91d
|
|
7
|
+
data.tar.gz: 6c2de832ac9582f536f668a98012a452984475a54563d81427512425c57dcddbd5246c88ac0b10bfedda879155615dde8aed304539826cdf2fe058e41c8dc76d
|
data/README.md
CHANGED
|
@@ -15,13 +15,13 @@ gem install skillme
|
|
|
15
15
|
skillme list
|
|
16
16
|
|
|
17
17
|
# Install a skill (global — works in all projects)
|
|
18
|
-
skillme
|
|
18
|
+
skillme add google-sheets
|
|
19
19
|
|
|
20
20
|
# Install for current project only
|
|
21
|
-
skillme
|
|
21
|
+
skillme add google-sheets --local
|
|
22
22
|
|
|
23
23
|
# Remove a skill
|
|
24
|
-
skillme
|
|
24
|
+
skillme del google-sheets
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
After installing, use `/google-sheets` (or any skill name) directly in Claude Code.
|
|
@@ -30,7 +30,7 @@ After installing, use `/google-sheets` (or any skill name) directly in Claude Co
|
|
|
30
30
|
|
|
31
31
|
| Skill | Description |
|
|
32
32
|
|-------|-------------|
|
|
33
|
-
| google-sheets | Read and write Google Sheets via
|
|
33
|
+
| google-sheets | Read and write Google Sheets via REST API |
|
|
34
34
|
|
|
35
35
|
## Why Ruby
|
|
36
36
|
|
data/lib/skillme/cli.rb
CHANGED
|
@@ -17,8 +17,8 @@ module Skillme
|
|
|
17
17
|
command = args.shift
|
|
18
18
|
|
|
19
19
|
case command
|
|
20
|
-
when "install"
|
|
21
|
-
when "remove"
|
|
20
|
+
when "add", "install" then install(args)
|
|
21
|
+
when "del", "remove" then remove(args)
|
|
22
22
|
when "list" then list
|
|
23
23
|
when "version" then puts "skillme v#{VERSION}"
|
|
24
24
|
when "help", nil then help
|
|
@@ -35,14 +35,14 @@ module Skillme
|
|
|
35
35
|
local = args.delete("--local")
|
|
36
36
|
name = args.first
|
|
37
37
|
|
|
38
|
-
abort "Usage: skillme
|
|
38
|
+
abort "Usage: skillme add SKILL [--local]" unless name
|
|
39
39
|
|
|
40
40
|
target = local ? LOCAL_DIR : GLOBAL_DIR
|
|
41
41
|
skill_dir = File.join(target, name)
|
|
42
42
|
|
|
43
43
|
if Dir.exist?(skill_dir)
|
|
44
44
|
warn "Skill '#{name}' already installed at #{skill_dir}"
|
|
45
|
-
warn "Remove it first: skillme
|
|
45
|
+
warn "Remove it first: skillme del #{name}#{local ? ' --local' : ''}"
|
|
46
46
|
exit 1
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -78,7 +78,7 @@ module Skillme
|
|
|
78
78
|
local = args.delete("--local")
|
|
79
79
|
name = args.first
|
|
80
80
|
|
|
81
|
-
abort "Usage: skillme
|
|
81
|
+
abort "Usage: skillme del SKILL [--local]" unless name
|
|
82
82
|
|
|
83
83
|
target = local ? LOCAL_DIR : GLOBAL_DIR
|
|
84
84
|
skill_dir = File.join(target, name)
|
|
@@ -104,7 +104,7 @@ module Skillme
|
|
|
104
104
|
puts " #{skill[:name].ljust(20)} #{skill[:description]}"
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
puts "\nInstall with: skillme
|
|
107
|
+
puts "\nInstall with: skillme add SKILL_NAME"
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
def help
|
|
@@ -113,11 +113,11 @@ module Skillme
|
|
|
113
113
|
Claude Code skills written in Ruby. Zero gems, zero magic.
|
|
114
114
|
|
|
115
115
|
Commands:
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
list
|
|
119
|
-
version
|
|
120
|
-
help
|
|
116
|
+
add SKILL [--local] Install a skill (~/.claude/skills/ by default)
|
|
117
|
+
del SKILL [--local] Remove an installed skill
|
|
118
|
+
list List available skills
|
|
119
|
+
version Show version
|
|
120
|
+
help Show this help
|
|
121
121
|
HELP
|
|
122
122
|
end
|
|
123
123
|
|
data/lib/skillme/deps.rb
CHANGED
|
@@ -22,6 +22,17 @@ module Skillme
|
|
|
22
22
|
system("command -v #{cmd} > /dev/null 2>&1")
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
def resolve!(dependencies)
|
|
26
|
+
return unless dependencies
|
|
27
|
+
|
|
28
|
+
if dependencies['npm']
|
|
29
|
+
ensure_node!
|
|
30
|
+
dependencies['npm'].each { |pkg| ensure_npm_package!(pkg) }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
25
36
|
def ensure_node!
|
|
26
37
|
return if command_exists?('node') && command_exists?('npm')
|
|
27
38
|
|
|
@@ -49,12 +60,9 @@ module Skillme
|
|
|
49
60
|
end
|
|
50
61
|
|
|
51
62
|
def ensure_npm_package!(package)
|
|
52
|
-
|
|
53
|
-
bin_name = package.split('/').last.sub(/^cli$/, 'gws')
|
|
63
|
+
bin_name = package.split('/').last.sub(/^cli$/, package.split('/').first.tr('@', ''))
|
|
54
64
|
return if command_exists?(bin_name)
|
|
55
65
|
|
|
56
|
-
ensure_node!
|
|
57
|
-
|
|
58
66
|
puts "Installing #{package}..."
|
|
59
67
|
unless system("npm install -g #{package} > /dev/null 2>&1")
|
|
60
68
|
abort "Failed to install #{package}. Try manually: npm install -g #{package}"
|
|
@@ -63,52 +71,21 @@ module Skillme
|
|
|
63
71
|
puts "#{package} installed successfully."
|
|
64
72
|
end
|
|
65
73
|
|
|
66
|
-
def resolve!(dependencies)
|
|
67
|
-
return unless dependencies
|
|
68
|
-
|
|
69
|
-
if dependencies['npm']
|
|
70
|
-
dependencies['npm'].each do |package|
|
|
71
|
-
ensure_npm_package!(package)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
ensure_gws_auth! if dependencies.dig('npm')&.include?('@googleworkspace/cli')
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def ensure_gws_auth!
|
|
79
|
-
# Check if gws is already authenticated
|
|
80
|
-
return if system("gws auth export > /dev/null 2>&1")
|
|
81
|
-
|
|
82
|
-
puts "Setting up Google authentication (opens browser)..."
|
|
83
|
-
system("gws auth setup")
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
private
|
|
87
|
-
|
|
88
74
|
def install_node_macos
|
|
89
75
|
unless command_exists?('brew')
|
|
90
76
|
puts "Homebrew not found. Installing Homebrew..."
|
|
91
77
|
system('/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"')
|
|
92
|
-
unless command_exists?('brew')
|
|
93
|
-
abort "Failed to install Homebrew. Please install Node.js manually."
|
|
94
|
-
end
|
|
78
|
+
abort "Failed to install Homebrew. Please install Node.js manually." unless command_exists?('brew')
|
|
95
79
|
end
|
|
96
|
-
|
|
97
80
|
system("brew install node")
|
|
98
81
|
end
|
|
99
82
|
|
|
100
83
|
def install_node_debian
|
|
101
|
-
system(
|
|
102
|
-
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - > /dev/null 2>&1 && \
|
|
103
|
-
sudo apt-get install -y nodejs > /dev/null 2>&1
|
|
104
|
-
SH
|
|
84
|
+
system('curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - > /dev/null 2>&1 && sudo apt-get install -y nodejs > /dev/null 2>&1')
|
|
105
85
|
end
|
|
106
86
|
|
|
107
87
|
def install_node_fedora
|
|
108
|
-
system(
|
|
109
|
-
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - > /dev/null 2>&1 && \
|
|
110
|
-
sudo yum install -y nodejs > /dev/null 2>&1
|
|
111
|
-
SH
|
|
88
|
+
system('curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - > /dev/null 2>&1 && sudo yum install -y nodejs > /dev/null 2>&1')
|
|
112
89
|
end
|
|
113
90
|
|
|
114
91
|
def install_node_arch
|
data/lib/skillme/version.rb
CHANGED