Class: SwarmSDK::SwarmLoader

Inherits:
Object
  • Object
show all
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

Class Method Details

.load_from_block(block, swarm_id:, parent_swarm_id:) ⇒ Swarm

Load a swarm from DSL block

Parameters:

  • block (Proc)

    Block containing SwarmSDK DSL

  • swarm_id (String)

    Hierarchical swarm ID to assign

  • parent_swarm_id (String)

    Parent swarm ID

Returns:

  • (Swarm)

    Loaded swarm instance with overridden IDs



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)

Parameters:

  • file_path (String)

    Path to swarm file

  • swarm_id (String)

    Hierarchical swarm ID to assign

  • parent_swarm_id (String)

    Parent swarm ID

Returns:

  • (Swarm)

    Loaded swarm instance with overridden IDs

Raises:



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).expand_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

Parameters:

  • yaml_content (String)

    YAML configuration content

  • swarm_id (String)

    Hierarchical swarm ID to assign

  • parent_swarm_id (String)

    Parent swarm ID

Returns:

  • (Swarm)

    Loaded swarm instance with overridden IDs

Raises:



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