Class: Legion::CLI::Skill
- Inherits:
-
Thor
- Object
- Thor
- Legion::CLI::Skill
- Defined in:
- lib/legion/cli/skill_command.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.exit_on_failure? ⇒ Boolean
11 12 13 |
# File 'lib/legion/cli/skill_command.rb', line 11 def self.exit_on_failure? true end |
Instance Method Details
#create(name) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/legion/cli/skill_command.rb', line 52 def create(name) require 'fileutils' dir = '.legion/skills' FileUtils.mkdir_p(dir) path = ::File.join(dir, "#{name}.md") if ::File.exist?(path) say "Skill already exists: #{path}", :red return end content = <<~SKILL --- name: #{name} namespace: local description: Describe what this skill does trigger: on_demand --- You are a helpful assistant. Describe the skill's behavior here. SKILL ::File.write(path, content) say "Created: #{path}", :green end |
#list ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/legion/cli/skill_command.rb', line 16 def list response = daemon_get('/api/skills') unless response.is_a?(::Net::HTTPSuccess) say "Error fetching skills: #{response.code}", :red exit 1 end skills = ::JSON.parse(response.body, symbolize_names: true)[:data] || [] if skills.empty? say 'No skills registered. Start the daemon with legion-llm loaded.' return end skills.each do |s| say " #{s[:namespace]}:#{s[:name]} [#{s[:trigger]}] #{s[:description]}", :green end end |
#run_skill(name) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/legion/cli/skill_command.rb', line 80 def run_skill(name) url = "#{daemon_base_url}/api/skills/invoke" payload = { skill_name: name }.to_json response = ::Net::HTTP.post( ::URI.parse(url), payload, 'Content-Type' => 'application/json' ) if response.is_a?(::Net::HTTPSuccess) result = ::JSON.parse(response.body, symbolize_names: true) say result.dig(:data, :content).to_s else say "Error: #{response.code} #{response.body}", :red exit 1 end end |
#show(name) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/legion/cli/skill_command.rb', line 35 def show(name) ns, nm = name.include?(':') ? name.split(':', 2) : ['default', name] response = daemon_get("/api/skills/#{ns}/#{nm}") unless response.is_a?(::Net::HTTPSuccess) say "Skill '#{name}' not found", :red exit 1 end result = ::JSON.parse(response.body, symbolize_names: true) data = result[:data] || {} say "Name: #{data[:namespace]}:#{data[:name]}", :green say "Description: #{data[:description]}" say "Trigger: #{data[:trigger]}" say "Steps: #{Array(data[:steps]).join(', ')}" end |