skillme 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 114461d15862bc97dd38791b09feb6920983fe95c0a5cdd87a3338f48fb5fbb8
4
- data.tar.gz: 6d1fb4e10336c2f7ed9522041411901014fd96a0557627a47f7ae2164b26c932
3
+ metadata.gz: eab2c922bf8852df480d2fb0c94dee27c478e59f0895ad53f0089a3096defe97
4
+ data.tar.gz: 78712f83a14929cd012152713921470b7e2e4a1b8a332d4a998e09b6e8718aa0
5
5
  SHA512:
6
- metadata.gz: 053ec30034ed3b461a927ceac34c997d002d6443c7cc702e95e967d8d4c015b9b90c9aeea9b4439e784a067166fc7b90295c297836e1a4db83acdc545b8fe43d
7
- data.tar.gz: a9a8ee3f27643c6628fd621c4fa7af789597dbb6b06d87cc0d741eaff02fa1089d9c131e07194d7d5e6443e4b4136165a8fe7f8f8dd871da1bf562049916a755
6
+ metadata.gz: d447db86a4c0e262a02bf4dd396c09f580945a74533d714f3bbee4f59bc655bbe9398f9bc8caab8472c6d766c1d8c06050185811f493cd26904359364f3013a3
7
+ data.tar.gz: 85e21ca7458ab7509624b2836d440a2db56dad95dae11201651837d7c0c19a3ec8e69028cdb02d91c494c19cd1b31bafcd8977efa26d14cf66649f5c435fc598
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 extract_description(skill_md_content)
143
- if skill_md_content =~ /^description:\s*(.+)$/
144
- $1.strip
154
+ def parse_frontmatter(content)
155
+ if content =~ /\A---\s*\n(.+?)\n---/m
156
+ YAML.safe_load($1) || {}
145
157
  else
146
- "(no description)"
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)
@@ -0,0 +1,108 @@
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
+ end
75
+
76
+ private
77
+
78
+ def install_node_macos
79
+ unless command_exists?('brew')
80
+ puts "Homebrew not found. Installing Homebrew..."
81
+ system('/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"')
82
+ unless command_exists?('brew')
83
+ abort "Failed to install Homebrew. Please install Node.js manually."
84
+ end
85
+ end
86
+
87
+ system("brew install node")
88
+ end
89
+
90
+ def install_node_debian
91
+ system(<<~SH)
92
+ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - > /dev/null 2>&1 && \
93
+ sudo apt-get install -y nodejs > /dev/null 2>&1
94
+ SH
95
+ end
96
+
97
+ def install_node_fedora
98
+ system(<<~SH)
99
+ curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - > /dev/null 2>&1 && \
100
+ sudo yum install -y nodejs > /dev/null 2>&1
101
+ SH
102
+ end
103
+
104
+ def install_node_arch
105
+ system("sudo pacman -S --noconfirm nodejs npm > /dev/null 2>&1")
106
+ end
107
+ end
108
+ end
@@ -1,3 +1,3 @@
1
1
  module Skillme
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.0
4
+ version: 0.2.0
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: