Class: Botiasloop::Skills::Loader

Inherits:
Object
  • Object
show all
Defined in:
lib/botiasloop/skills/loader.rb

Overview

Discovers and loads skills from gem and user directories

Class Method Summary collapse

Class Method Details

.find_by_name(name) ⇒ Skill?

Find a specific skill by name

Parameters:

  • name (String)

    Skill name

Returns:



53
54
55
# File 'lib/botiasloop/skills/loader.rb', line 53

def self.find_by_name(name)
  load_all_skills.find { |skill| skill.name == name }
end

.load_all_skillsArray<Skill>

Returns All loaded skills (default + user).

Returns:

  • (Array<Skill>)

    All loaded skills (default + user)



8
9
10
# File 'lib/botiasloop/skills/loader.rb', line 8

def self.load_all_skills
  load_default_skills + load_user_skills
end

.load_default_skillsArray<Skill>

Returns Skills shipped with the gem.

Returns:

  • (Array<Skill>)

    Skills shipped with the gem



13
14
15
16
# File 'lib/botiasloop/skills/loader.rb', line 13

def self.load_default_skills
  skills_dir = File.join(Botiasloop.root, "data", "skills")
  load_from_directory(skills_dir)
end

.load_from_directory(dir) ⇒ Array<Skill>

Load skills from a specific directory

Parameters:

  • dir (String)

    Directory path containing skill subdirectories

Returns:



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/botiasloop/skills/loader.rb', line 27

def self.load_from_directory(dir)
  return [] unless File.directory?(dir)

  skills = []
  Dir.entries(dir).each do |entry|
    next if entry == "." || entry == ".."

    skill_path = File.join(dir, entry)
    next unless File.directory?(skill_path)

    skill_md_path = File.join(skill_path, "SKILL.md")
    next unless File.exist?(skill_md_path)

    begin
      skills << Skill.new(skill_path)
    rescue Error => e
      warn "Failed to load skill from #{skill_path}: #{e.message}"
    end
  end

  skills
end

.load_user_skillsArray<Skill>

Returns Skills from user’s ~/skills/ directory.

Returns:

  • (Array<Skill>)

    Skills from user’s ~/skills/ directory



19
20
21
22
# File 'lib/botiasloop/skills/loader.rb', line 19

def self.load_user_skills
  user_skills_dir = File.expand_path("~/skills")
  load_from_directory(user_skills_dir)
end