Module: Legion::Extensions::Agentic::Social::Symbiosis::Runners::CognitiveSymbiosis

Extended by:
CognitiveSymbiosis
Includes:
Helpers::Lex
Included in:
Client, CognitiveSymbiosis
Defined in:
lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb

Instance Method Summary collapse

Instance Method Details

#activate(subsystem_a:, subsystem_b:, amount: 0.05, engine: nil) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb', line 34

def activate(subsystem_a:, subsystem_b:, amount: 0.05, engine: nil, **)
  eng = engine || default_engine
  result = eng.activate_interaction(
    subsystem_a: subsystem_a,
    subsystem_b: subsystem_b,
    amount:      amount.clamp(0.0, 1.0)
  )
  found = result.fetch(:found, false)
  log.debug "[symbiosis] activate #{subsystem_a}<->#{subsystem_b} found=#{found}"
  { success: found, **result }
rescue ArgumentError => e
  { success: false, error: e.message }
end

#create_bond(subsystem_a:, subsystem_b:, relationship_type:, strength: nil, benefit_ratio: nil, engine: nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb', line 14

def create_bond(subsystem_a:, subsystem_b:, relationship_type:, strength: nil, benefit_ratio: nil, engine: nil, **)
  eng = engine || default_engine
  result = eng.create_bond(
    subsystem_a:       subsystem_a,
    subsystem_b:       subsystem_b,
    relationship_type: relationship_type.to_sym,
    strength:          strength,
    benefit_ratio:     benefit_ratio
  )
  msg = if result[:created]
          "[symbiosis] bond created: #{subsystem_a}<->#{subsystem_b} type=#{relationship_type}"
        else
          "[symbiosis] bond skipped: #{result[:reason]}"
        end
  log.debug msg
  { success: result[:created], **result }
rescue ArgumentError => e
  { success: false, error: e.message }
end

#detect_parasites(strength_threshold: 0.0, engine: nil) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb', line 72

def detect_parasites(strength_threshold: 0.0, engine: nil, **)
  eng = engine || default_engine
  parasites = eng.detect_parasites(strength_threshold: strength_threshold.clamp(0.0, 1.0))
  log.debug "[symbiosis] detect_parasites count=#{parasites.size}"
  { success: true, parasites: parasites, count: parasites.size }
rescue ArgumentError => e
  { success: false, error: e.message }
end

#ecosystem_report(engine: nil) ⇒ Object



81
82
83
84
85
86
87
88
# File 'lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb', line 81

def ecosystem_report(engine: nil, **)
  eng = engine || default_engine
  report = eng.ecosystem_report
  log.debug "[symbiosis] ecosystem_report health=#{report.dig(:health, :label)}"
  { success: true, **report }
rescue ArgumentError => e
  { success: false, error: e.message }
end

#health_status(engine: nil) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb', line 48

def health_status(engine: nil, **)
  eng = engine || default_engine
  health = eng.measure_ecosystem_health
  log.debug "[symbiosis] health score=#{health[:score]} label=#{health[:label]}"
  { success: true, **health }
rescue ArgumentError => e
  { success: false, error: e.message }
end

#list_bonds(subsystem_id: nil, relationship_type: nil, engine: nil) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb', line 57

def list_bonds(subsystem_id: nil, relationship_type: nil, engine: nil, **)
  eng = engine || default_engine
  bonds = if subsystem_id
            eng.ecosystem.symbiotic_web(subsystem_id).map(&:to_h)
          else
            eng.ecosystem.all_bonds.map(&:to_h)
          end

  bonds = bonds.select { |b| b[:relationship_type] == relationship_type.to_sym } if relationship_type
  log.debug "[symbiosis] list_bonds count=#{bonds.size}"
  { success: true, bonds: bonds, count: bonds.size }
rescue ArgumentError => e
  { success: false, error: e.message }
end