Class: SwarmSDK::SwarmLoader
- Inherits:
-
Object
- Object
- SwarmSDK::SwarmLoader
- Defined in:
- lib/swarm_sdk/swarm_loader.rb
Overview
Loader for creating swarm instances from multiple sources
SwarmLoader loads swarm configurations from:
- Files: .rb (DSL) or .yml (YAML)
- YAML strings: Direct YAML content
- DSL blocks: Inline Ruby blocks
All loaded swarms get hierarchical swarm_id and parent_swarm_id.
Features
- Supports Ruby DSL (.rb files or blocks)
- Supports YAML (.yml/.yaml files or strings)
- Sets hierarchical swarm_id based on parent + registration name
- Isolates loading in separate context
- Proper error handling for missing/invalid sources
Examples
# From file
swarm = SwarmLoader.load_from_file(
"./swarms/code_review.rb",
swarm_id: "main/code_review",
parent_swarm_id: "main"
)
# From YAML string
swarm = SwarmLoader.load_from_yaml_string(
"version: 2\nswarm:\n name: Test\n...",
swarm_id: "main/testing",
parent_swarm_id: "main"
)
# From block
swarm = SwarmLoader.load_from_block(
proc { id "team"; name "Team"; agent :dev { ... } },
swarm_id: "main/team",
parent_swarm_id: "main"
)
Class Method Summary collapse
-
.load_from_block(block, swarm_id:, parent_swarm_id:) ⇒ Swarm
Load a swarm from DSL block.
-
.load_from_file(file_path, swarm_id:, parent_swarm_id:) ⇒ Swarm
Load a swarm from a file (.rb or .yml).
-
.load_from_yaml_string(yaml_content, swarm_id:, parent_swarm_id:) ⇒ Swarm
Load a swarm from YAML string.
Class Method Details
.load_from_block(block, swarm_id:, parent_swarm_id:) ⇒ Swarm
Load a swarm from DSL block
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/swarm_sdk/swarm_loader.rb', line 93 def load_from_block(block, swarm_id:, parent_swarm_id:) # Execute block in Builder context builder = Swarm::Builder.new builder.instance_eval(&block) swarm = builder.build_swarm # Override swarm_id and parent_swarm_id swarm.override_swarm_ids(swarm_id: swarm_id, parent_swarm_id: parent_swarm_id) swarm end |
.load_from_file(file_path, swarm_id:, parent_swarm_id:) ⇒ Swarm
Load a swarm from a file (.rb or .yml)
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/swarm_sdk/swarm_loader.rb', line 52 def load_from_file(file_path, swarm_id:, parent_swarm_id:) path = Pathname.new(file_path). raise ConfigurationError, "Swarm file not found: #{path}" unless path.exist? # Determine file type and load case path.extname when ".rb" load_from_ruby_file(path, swarm_id, parent_swarm_id) when ".yml", ".yaml" load_from_yaml_file(path, swarm_id, parent_swarm_id) else raise ConfigurationError, "Unsupported swarm file type: #{path.extname}. Use .rb, .yml, or .yaml" end end |
.load_from_yaml_string(yaml_content, swarm_id:, parent_swarm_id:) ⇒ Swarm
Load a swarm from YAML string
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/swarm_sdk/swarm_loader.rb', line 75 def load_from_yaml_string(yaml_content, swarm_id:, parent_swarm_id:) # Use Configuration to parse YAML string config = Configuration.new(yaml_content, base_dir: Dir.pwd) config.load_and_validate swarm = config.to_swarm # Override swarm_id and parent_swarm_id swarm.override_swarm_ids(swarm_id: swarm_id, parent_swarm_id: parent_swarm_id) swarm end |