Module: Legion::Extensions::Agentic::Homeostasis::Neuromodulation::Runners::Neuromodulation

Includes:
Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb

Instance Method Summary collapse

Instance Method Details

#all_modulator_levelsObject



54
55
56
57
58
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 54

def all_modulator_levels(**)
  levels = neuromod_system.all_levels
  log.debug("[neuromodulation] all levels: #{levels.map { |k, v| "#{k}=#{v.round(3)}" }.join(' ')}")
  { success: true, levels: levels.transform_values { |v| v.round(4) } }
end

#boost_modulator(name:, amount:, reason: nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 13

def boost_modulator(name:, amount:, reason: nil, **)
  mod_name = name.to_sym
  return { success: false, error: "Unknown modulator: #{name}" } unless Helpers::Constants::MODULATORS.include?(mod_name)

  new_level = neuromod_system.boost(mod_name, amount.to_f, reason: reason)
  log.debug("[neuromodulation] boost #{mod_name} by #{amount} -> #{new_level.round(4)}")
  {
    success:   true,
    modulator: mod_name,
    level:     new_level.round(4),
    state:     neuromod_system.modulators[mod_name].state_label
  }
end

#cognitive_influenceObject



60
61
62
63
64
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 60

def cognitive_influence(**)
  influences = neuromod_system.composite_influences
  log.debug('[neuromodulation] cognitive influence snapshot')
  { success: true, influences: influences }
end

#is_optimal(name:) ⇒ Object

rubocop:disable Naming/PredicatePrefix



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 66

def is_optimal(name:, **) # rubocop:disable Naming/PredicatePrefix
  mod_name = name.to_sym
  return { success: false, error: "Unknown modulator: #{name}" } unless Helpers::Constants::MODULATORS.include?(mod_name)

  optimal = neuromod_system.modulators[mod_name].optimal?
  {
    success:   true,
    modulator: mod_name,
    optimal:   optimal,
    level:     neuromod_system.level(mod_name).round(4),
    range:     Helpers::Constants::OPTIMAL_RANGES[mod_name].to_s
  }
end

#modulator_history(name:, limit: 20) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 101

def modulator_history(name:, limit: 20, **)
  mod_name = name.to_sym
  return { success: false, error: "Unknown modulator: #{name}" } unless Helpers::Constants::MODULATORS.include?(mod_name)

  events = neuromod_system.modulators[mod_name].events.last(limit.to_i)
  {
    success:   true,
    modulator: mod_name,
    events:    events,
    count:     events.size
  }
end

#modulator_level(name:) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 41

def modulator_level(name:, **)
  mod_name = name.to_sym
  return { success: false, error: "Unknown modulator: #{name}" } unless Helpers::Constants::MODULATORS.include?(mod_name)

  level = neuromod_system.level(mod_name)
  {
    success:   true,
    modulator: mod_name,
    level:     level.round(4),
    state:     neuromod_system.modulators[mod_name].state_label
  }
end

#neuromodulation_statsObject



125
126
127
128
129
130
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 125

def neuromodulation_stats(**)
  {
    success: true,
    system:  neuromod_system.to_h
  }
end

#suppress_modulator(name:, amount:, reason: nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 27

def suppress_modulator(name:, amount:, reason: nil, **)
  mod_name = name.to_sym
  return { success: false, error: "Unknown modulator: #{name}" } unless Helpers::Constants::MODULATORS.include?(mod_name)

  new_level = neuromod_system.suppress(mod_name, amount.to_f, reason: reason)
  log.debug("[neuromodulation] suppress #{mod_name} by #{amount} -> #{new_level.round(4)}")
  {
    success:   true,
    modulator: mod_name,
    level:     new_level.round(4),
    state:     neuromod_system.modulators[mod_name].state_label
  }
end

#system_balanceObject



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 80

def system_balance(**)
  score = neuromod_system.balance_score
  states = neuromod_system.modulators.transform_values(&:state_label)
  status = if score >= 1.0
             :fully_balanced
           elsif score >= 0.75
             :mostly_balanced
           elsif score >= 0.5
             :partially_balanced
           else
             :imbalanced
           end
  log.debug("[neuromodulation] system balance: #{score.round(2)} status=#{status}")
  {
    success: true,
    score:   score.round(4),
    status:  status,
    states:  states
  }
end

#update_neuromodulationObject



114
115
116
117
118
119
120
121
122
123
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/runners/neuromodulation.rb', line 114

def update_neuromodulation(**)
  neuromod_system.tick
  levels = neuromod_system.all_levels
  log.debug('[neuromodulation] drift tick completed')
  {
    success: true,
    action:  :drift_tick,
    levels:  levels.transform_values { |v| v.round(4) }
  }
end