Class: Legion::Extensions::Agentic::Defense::Phantom::Helpers::PhantomEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Defense::Phantom::Helpers::PhantomEngine
- Includes:
- Helpers::Lex
- Defined in:
- lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb
Instance Method Summary collapse
- #acknowledge(phantom_id:) ⇒ Object
- #active_phantoms ⇒ Object
- #all_phantoms ⇒ Object
- #decay_all! ⇒ Object
-
#initialize ⇒ PhantomEngine
constructor
A new instance of PhantomEngine.
- #most_persistent(limit: 5) ⇒ Object
- #phantom_activity_report ⇒ Object
- #process_stimulus(stimulus:, domain: :general) ⇒ Object
- #recently_triggered(limit: 5) ⇒ Object
- #register_removal(capability_name:, capability_domain: :general) ⇒ Object
- #resolve_check! ⇒ Object
Constructor Details
#initialize ⇒ PhantomEngine
Returns a new instance of PhantomEngine.
12 13 14 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 12 def initialize @phantoms = {} end |
Instance Method Details
#acknowledge(phantom_id:) ⇒ Object
49 50 51 52 53 54 55 56 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 49 def acknowledge(phantom_id:) limb = @phantoms[phantom_id] return { acknowledged: false, reason: :not_found } unless limb limb.adapt! log.info("[cognitive_phantom] acknowledged phantom id=#{phantom_id[0..7]} intensity=#{limb.intensity.round(3)} state=#{limb.state}") { acknowledged: true, phantom_id: phantom_id, state: limb.state, intensity: limb.intensity } end |
#active_phantoms ⇒ Object
62 63 64 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 62 def active_phantoms @phantoms.values.reject(&:resolved?) end |
#all_phantoms ⇒ Object
58 59 60 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 58 def all_phantoms @phantoms.values end |
#decay_all! ⇒ Object
44 45 46 47 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 44 def decay_all! @phantoms.each_value(&:decay!) resolve_check! end |
#most_persistent(limit: 5) ⇒ Object
77 78 79 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 77 def most_persistent(limit: 5) active_phantoms.sort_by(&:activation_count).last(limit).reverse end |
#phantom_activity_report ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 66 def phantom_activity_report all = @phantoms.values by_state = Constants::PHANTOM_STATES.to_h { |s| [s, all.count { |p| p.state == s }] } { total: all.size, active: active_phantoms.size, by_state: by_state, total_activations: all.sum(&:activation_count) } end |
#process_stimulus(stimulus:, domain: :general) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 28 def process_stimulus(stimulus:, domain: :general) fired = [] @phantoms.each_value do |limb| next if limb.resolved? next unless domain_match?(limb, domain) signal = limb.trigger!(stimulus) next unless signal fired << signal intensity_str = limb.intensity.round(3).to_s log.debug("[cognitive_phantom] phantom fired: cap=#{limb.capability_name} trigger=#{signal.trigger_type} i=#{intensity_str}") end fired end |
#recently_triggered(limit: 5) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 81 def recently_triggered(limit: 5) active_phantoms .select(&:last_triggered) .sort_by(&:last_triggered) .last(limit) .reverse end |
#register_removal(capability_name:, capability_domain: :general) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 16 def register_removal(capability_name:, capability_domain: :general) if @phantoms.size >= Constants::MAX_PHANTOMS log.warn("[cognitive_phantom] MAX_PHANTOMS (#{Constants::MAX_PHANTOMS}) reached, skipping #{capability_name}") return nil end limb = PhantomLimb.new(capability_name: capability_name, capability_domain: capability_domain) @phantoms[limb.id] = limb log.info("[cognitive_phantom] registered phantom: capability=#{capability_name} domain=#{capability_domain} id=#{limb.id[0..7]}") limb end |
#resolve_check! ⇒ Object
89 90 91 92 93 94 95 |
# File 'lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb', line 89 def resolve_check! newly_resolved = @phantoms.values.select(&:resolved?) newly_resolved.each do |limb| log.info("[cognitive_phantom] resolved: capability=#{limb.capability_name} activations=#{limb.activation_count}") end newly_resolved.size end |