Class: SolidAgent::AgentManifest::Parsers::CrewAIParser
- Inherits:
-
BaseParser
- Object
- BaseParser
- SolidAgent::AgentManifest::Parsers::CrewAIParser
- Defined in:
- lib/solid_agent/agent_manifest/parsers/crewai_parser.rb
Overview
CrewAIParser handles CrewAI's agents.yaml format.
CrewAI defines agents with role, goal, and backstory. This parser converts them to the unified Manifest format.
Constant Summary
Constants inherited from BaseParser
Class Method Summary collapse
- .format_name ⇒ Object
- .parse_string(content) ⇒ Object
-
.parse_with_tasks(agents_path, tasks_path = nil) ⇒ Array<Manifest>
Parse a file containing multiple agents.
Methods inherited from BaseParser
Class Method Details
.format_name ⇒ Object
27 28 29 |
# File 'lib/solid_agent/agent_manifest/parsers/crewai_parser.rb', line 27 def format_name :crewai end |
.parse_string(content) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/solid_agent/agent_manifest/parsers/crewai_parser.rb', line 31 def parse_string(content) data = YAML.safe_load(content, permitted_classes: [Symbol]) raise ParseError, "Invalid CrewAI YAML: expected hash" unless data.is_a?(Hash) # CrewAI files can contain multiple agents agents = data.map do |agent_name, agent_data| parse_agent(agent_name.to_s, agent_data) end # If single agent, return it directly; otherwise return array agents.size == 1 ? agents.first : agents end |
.parse_with_tasks(agents_path, tasks_path = nil) ⇒ Array<Manifest>
Parse a file containing multiple agents
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/solid_agent/agent_manifest/parsers/crewai_parser.rb', line 50 def parse_with_tasks(agents_path, tasks_path = nil) agents_content = File.read(agents_path, encoding: "UTF-8") result = parse_string(agents_content) # Ensure we have an array manifests = result.is_a?(Array) ? result : [result] # Optionally merge task information if tasks_path && File.exist?(tasks_path) tasks = YAML.safe_load(File.read(tasks_path, encoding: "UTF-8")) merge_tasks(manifests, tasks) end manifests end |