Module: SpaceArchitect::SkillInstaller

Defined in:
lib/space_architect/skill_installer.rb

Constant Summary collapse

PROVIDERS =
%w[claude codex opencode pi].freeze

Class Method Summary collapse

Class Method Details

.dest_root(provider, project:, env:, cwd: Dir.pwd) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/space_architect/skill_installer.rb', line 15

def dest_root(provider, project:, env:, cwd: Dir.pwd)
  case provider.to_s
  when "claude"
    base = project ? Pathname.new(cwd) : Pathname.new(XDG.home(env: env))
    base.join(".claude", "skills")
  when "codex"
    base = project ? Pathname.new(cwd) : Pathname.new(XDG.home(env: env))
    base.join(".agents", "skills")
  when "opencode"
    project ? Pathname.new(cwd).join(".opencode", "skills") : XDG.config_home(env: env).join("skills")
  when "pi"
    base = project ? Pathname.new(cwd) : Pathname.new(pi_agent_dir(env: env))
    base.join("skills")
  else
    raise Error, "Unknown provider '#{provider}'. Expected one of: #{PROVIDERS.join(', ')}"
  end
end

.install(provider, project:, force:, env:, cwd: Dir.pwd, dry_run: false) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/space_architect/skill_installer.rb', line 33

def install(provider, project:, force:, env:, cwd: Dir.pwd, dry_run: false)
  validate_provider!(provider)
  dest = dest_root(provider, project: project, env: env, cwd: cwd)
  results = []

  source_skills.each do |skill_dir|
    name = skill_dir.basename.to_s
    skill_dest = dest.join(name)
    results << install_skill(skill_dir, skill_dest, force: force, dry_run: dry_run)
  end

  { dest_root: dest, skills: results, dry_run: dry_run }
end

.source_rootObject



11
12
13
# File 'lib/space_architect/skill_installer.rb', line 11

def source_root
  Pathname.new(__dir__).parent.parent.join("skill")
end

.source_skillsObject



47
48
49
# File 'lib/space_architect/skill_installer.rb', line 47

def source_skills
  source_root.children.select(&:directory?)
end