skillme 0.1.0 → 0.2.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 +5 -5
- data/lib/skillme/cli.rb +21 -4
- data/lib/skillme/deps.rb +118 -0
- data/lib/skillme/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 56b29a9df63a256900713335803df0035a290d77bb7c19c2a26c48b4365708ba
|
|
4
|
+
data.tar.gz: abee98c8703a0a633c36ad0e752c5f6d288f6c0588e13ebe582d6ac133648849
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0c0bae8b473c873ccac48f3c41a84acf64c90e9caa4d6390252176787cbb8d3a639ee086d509341e4a5cb7b3a56c7f7cef0a8742e46cfce75f3c1ae6f952ea6e
|
|
7
|
+
data.tar.gz: 763765e7c24758b1f767a332512ecdb28d0af5d9a504f1c601a81dabcd560f2771f587af7fc0e95e2ec6c8ed4be46d9d80c0770acc300c0434c7f179f54cbd71
|
data/README.md
CHANGED
|
@@ -15,22 +15,22 @@ gem install skillme
|
|
|
15
15
|
skillme list
|
|
16
16
|
|
|
17
17
|
# Install a skill (global — works in all projects)
|
|
18
|
-
skillme install
|
|
18
|
+
skillme install google-sheets
|
|
19
19
|
|
|
20
20
|
# Install for current project only
|
|
21
|
-
skillme install
|
|
21
|
+
skillme install google-sheets --local
|
|
22
22
|
|
|
23
23
|
# Remove a skill
|
|
24
|
-
skillme remove
|
|
24
|
+
skillme remove google-sheets
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
After installing, use `/
|
|
27
|
+
After installing, use `/google-sheets` (or any skill name) directly in Claude Code.
|
|
28
28
|
|
|
29
29
|
## Available Skills
|
|
30
30
|
|
|
31
31
|
| Skill | Description |
|
|
32
32
|
|-------|-------------|
|
|
33
|
-
|
|
|
33
|
+
| google-sheets | Read and write Google Sheets via gws CLI |
|
|
34
34
|
|
|
35
35
|
## Why Ruby
|
|
36
36
|
|
data/lib/skillme/cli.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
require 'json'
|
|
2
|
+
require 'yaml'
|
|
2
3
|
require 'net/http'
|
|
3
4
|
require 'uri'
|
|
4
5
|
require 'fileutils'
|
|
5
6
|
require_relative 'version'
|
|
7
|
+
require_relative 'deps'
|
|
6
8
|
|
|
7
9
|
module Skillme
|
|
8
10
|
class CLI
|
|
@@ -58,6 +60,16 @@ module Skillme
|
|
|
58
60
|
File.write(file_path, content)
|
|
59
61
|
end
|
|
60
62
|
|
|
63
|
+
# Resolve dependencies from SKILL.md frontmatter
|
|
64
|
+
skill_md_path = File.join(skill_dir, "SKILL.md")
|
|
65
|
+
if File.exist?(skill_md_path)
|
|
66
|
+
frontmatter = parse_frontmatter(File.read(skill_md_path))
|
|
67
|
+
if frontmatter['dependencies']
|
|
68
|
+
puts "Resolving dependencies..."
|
|
69
|
+
Deps.resolve!(frontmatter['dependencies'])
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
61
73
|
puts "Installed '#{name}' to #{skill_dir}"
|
|
62
74
|
puts "Use /#{name} in Claude Code to get started."
|
|
63
75
|
end
|
|
@@ -139,14 +151,19 @@ module Skillme
|
|
|
139
151
|
end
|
|
140
152
|
end
|
|
141
153
|
|
|
142
|
-
def
|
|
143
|
-
if
|
|
144
|
-
$1
|
|
154
|
+
def parse_frontmatter(content)
|
|
155
|
+
if content =~ /\A---\s*\n(.+?)\n---/m
|
|
156
|
+
YAML.safe_load($1) || {}
|
|
145
157
|
else
|
|
146
|
-
|
|
158
|
+
{}
|
|
147
159
|
end
|
|
148
160
|
end
|
|
149
161
|
|
|
162
|
+
def extract_description(skill_md_content)
|
|
163
|
+
fm = parse_frontmatter(skill_md_content)
|
|
164
|
+
fm['description'] || "(no description)"
|
|
165
|
+
end
|
|
166
|
+
|
|
150
167
|
def fetch_github_tree
|
|
151
168
|
uri = URI("https://api.github.com/repos/#{REPO}/git/trees/#{BRANCH}?recursive=1")
|
|
152
169
|
response = github_get(uri)
|
data/lib/skillme/deps.rb
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module Skillme
|
|
4
|
+
module Deps
|
|
5
|
+
extend self
|
|
6
|
+
|
|
7
|
+
def detect_os
|
|
8
|
+
case RUBY_PLATFORM
|
|
9
|
+
when /darwin/
|
|
10
|
+
:macos
|
|
11
|
+
when /linux/
|
|
12
|
+
return :debian if File.exist?('/etc/debian_version')
|
|
13
|
+
return :fedora if File.exist?('/etc/fedora-release') || File.exist?('/etc/redhat-release')
|
|
14
|
+
return :arch if File.exist?('/etc/arch-release')
|
|
15
|
+
:unknown
|
|
16
|
+
else
|
|
17
|
+
:unknown
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def command_exists?(cmd)
|
|
22
|
+
system("command -v #{cmd} > /dev/null 2>&1")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def ensure_node!
|
|
26
|
+
return if command_exists?('node') && command_exists?('npm')
|
|
27
|
+
|
|
28
|
+
os = detect_os
|
|
29
|
+
puts "Node.js not found. Installing for #{os}..."
|
|
30
|
+
|
|
31
|
+
case os
|
|
32
|
+
when :macos then install_node_macos
|
|
33
|
+
when :debian then install_node_debian
|
|
34
|
+
when :fedora then install_node_fedora
|
|
35
|
+
when :arch then install_node_arch
|
|
36
|
+
else
|
|
37
|
+
abort <<~MSG
|
|
38
|
+
Could not detect your OS. Please install Node.js manually:
|
|
39
|
+
https://nodejs.org/en/download
|
|
40
|
+
Then run `skillme install` again.
|
|
41
|
+
MSG
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
unless command_exists?('node')
|
|
45
|
+
abort "Failed to install Node.js. Please install it manually and try again."
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
puts "Node.js installed successfully."
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def ensure_npm_package!(package)
|
|
52
|
+
# Check if the package binary exists (e.g. gws for @googleworkspace/cli)
|
|
53
|
+
bin_name = package.split('/').last.sub(/^cli$/, 'gws')
|
|
54
|
+
return if command_exists?(bin_name)
|
|
55
|
+
|
|
56
|
+
ensure_node!
|
|
57
|
+
|
|
58
|
+
puts "Installing #{package}..."
|
|
59
|
+
unless system("npm install -g #{package} > /dev/null 2>&1")
|
|
60
|
+
abort "Failed to install #{package}. Try manually: npm install -g #{package}"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
puts "#{package} installed successfully."
|
|
64
|
+
end
|
|
65
|
+
|
|
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
|
+
def install_node_macos
|
|
89
|
+
unless command_exists?('brew')
|
|
90
|
+
puts "Homebrew not found. Installing Homebrew..."
|
|
91
|
+
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
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
system("brew install node")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def install_node_debian
|
|
101
|
+
system(<<~SH)
|
|
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
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def install_node_fedora
|
|
108
|
+
system(<<~SH)
|
|
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
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def install_node_arch
|
|
115
|
+
system("sudo pacman -S --noconfirm nodejs npm > /dev/null 2>&1")
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
data/lib/skillme/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: skillme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alan Alves
|
|
@@ -22,6 +22,7 @@ files:
|
|
|
22
22
|
- README.md
|
|
23
23
|
- bin/skillme
|
|
24
24
|
- lib/skillme/cli.rb
|
|
25
|
+
- lib/skillme/deps.rb
|
|
25
26
|
- lib/skillme/version.rb
|
|
26
27
|
homepage: https://github.com/alanalvestech/skillme
|
|
27
28
|
licenses:
|