Module: Legion::Extensions::MindGrowth::Runners::SwarmBuilder

Extended by:
SwarmBuilder
Included in:
SwarmBuilder
Defined in:
lib/legion/extensions/mind_growth/runners/swarm_builder.rb

Constant Summary collapse

ACTIVITY_ROLES =
{
  concept_exploration: %i[finder reviewer coordinator],
  parallel_build:      %i[fixer validator coordinator],
  adversarial_review:  %i[reviewer fixer coordinator],
  integration_sweep:   %i[validator fixer coordinator]
}.freeze
CHARTER_TYPES =
ACTIVITY_ROLES.keys.freeze

Instance Method Summary collapse

Instance Method Details

#active_build_swarmsObject



93
94
95
96
97
98
99
100
# File 'lib/legion/extensions/mind_growth/runners/swarm_builder.rb', line 93

def active_build_swarms(**)
  return { success: false, reason: :swarm_unavailable } unless swarm_available?

  all_swarms = Legion::Extensions::Swarm::Runners::Swarm.active_swarms
  swarms = Array(all_swarms[:swarms]).select { |s| mind_growth_swarm?(s) }

  { success: true, swarms: swarms, count: swarms.size }
end

#complete_build_swarm(charter_id:, outcome: :success) ⇒ Object



73
74
75
76
77
78
79
80
# File 'lib/legion/extensions/mind_growth/runners/swarm_builder.rb', line 73

def complete_build_swarm(charter_id:, outcome: :success, **)
  return { success: false, reason: :swarm_unavailable } unless swarm_available?

  Legion::Extensions::Swarm::Runners::Swarm.complete_swarm(
    charter_id: charter_id,
    outcome:    outcome
  )
end

#create_build_swarm(charter_type:, objective:, proposal_ids: []) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/legion/extensions/mind_growth/runners/swarm_builder.rb', line 19

def create_build_swarm(charter_type:, objective:, proposal_ids: [], **)
  return { success: false, reason: :invalid_charter_type } unless CHARTER_TYPES.include?(charter_type.to_sym)

  return { success: false, reason: :swarm_unavailable } unless swarm_available?

  charter_type_sym = charter_type.to_sym
  roles = ACTIVITY_ROLES[charter_type_sym]

  result = Legion::Extensions::Swarm::Runners::Swarm.create_swarm(
    name:      "mind-growth-#{charter_type_sym}",
    objective: objective,
    roles:     roles
  )

  return { success: false, reason: :swarm_creation_failed } unless result[:success]

  charter_id = result[:charter][:id]

  Legion::Extensions::Swarm::Runners::Workspace.workspace_put(
    charter_id: charter_id,
    key:        'proposals',
    value:      proposal_ids,
    author:     'mind-growth'
  )

  { success: true, charter_id: charter_id, charter_type: charter_type_sym, roles: roles }
end

#execute_swarm_build(charter_id:) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/legion/extensions/mind_growth/runners/swarm_builder.rb', line 57

def execute_swarm_build(charter_id:, **)
  return { success: false, reason: :swarm_unavailable } unless swarm_available?

  charter_type = resolve_charter_type(charter_id)
  return { success: false, reason: :unknown_charter_type } unless charter_type

  results = case charter_type
            when :concept_exploration then execute_concept_exploration(charter_id)
            when :parallel_build      then execute_parallel_build(charter_id)
            when :adversarial_review  then execute_adversarial_review(charter_id)
            when :integration_sweep   then execute_integration_sweep(charter_id)
            end

  { success: true, charter_id: charter_id, charter_type: charter_type, results: Array(results) }
end

#join_build_swarm(charter_id:, agent_id:, role:) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/legion/extensions/mind_growth/runners/swarm_builder.rb', line 47

def join_build_swarm(charter_id:, agent_id:, role:, **)
  return { success: false, reason: :swarm_unavailable } unless swarm_available?

  Legion::Extensions::Swarm::Runners::Swarm.join_swarm(
    charter_id: charter_id,
    agent_id:   agent_id,
    role:       role
  )
end

#swarm_build_status(charter_id:) ⇒ Object



82
83
84
85
86
87
88
89
90
91
# File 'lib/legion/extensions/mind_growth/runners/swarm_builder.rb', line 82

def swarm_build_status(charter_id:, **)
  return { success: false, reason: :swarm_unavailable } unless swarm_available?

  status_result = Legion::Extensions::Swarm::Runners::Swarm.swarm_status(charter_id: charter_id)
  workspace_result = Legion::Extensions::Swarm::Runners::Workspace.workspace_list(charter_id: charter_id)

  workspace_keys = workspace_result[:success] ? workspace_result[:entries].keys : []

  { success: true, status: status_result[:status], workspace_keys: workspace_keys }
end