Class: Legion::Extensions::Agentic::Defense::Quicksand::Helpers::QuicksandEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb

Instance Method Summary collapse

Constructor Details

#initializeQuicksandEngine

Returns a new instance of QuicksandEngine.



10
11
12
13
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 10

def initialize
  @traps = {}
  @pits  = {}
end

Instance Method Details

#add_trap_to_pit(trap_id:, pit_id:) ⇒ Object



56
57
58
59
60
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 56

def add_trap_to_pit(trap_id:, pit_id:)
  fetch_trap(trap_id)
  pit = fetch_pit(pit_id)
  pit.add_trap(trap_id)
end

#all_pitsObject



118
119
120
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 118

def all_pits
  @pits.values
end

#all_trapsObject



114
115
116
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 114

def all_traps
  @traps.values
end

#attempt_escape(trap_id:) ⇒ Object



50
51
52
53
54
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 50

def attempt_escape(trap_id:)
  trap   = fetch_trap(trap_id)
  result = trap.escape!
  { trap: trap, result: result }
end

#avg_depthObject



96
97
98
99
100
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 96

def avg_depth
  return 0.0 if @traps.empty?

  (@traps.values.sum(&:depth) / @traps.size).round(10)
end

#calm(trap_id:, rate: Constants::CALM_RATE) ⇒ Object



44
45
46
47
48
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 44

def calm(trap_id:, rate: Constants::CALM_RATE)
  trap = fetch_trap(trap_id)
  trap.calm!(rate: rate)
  trap
end

#calm_all!Object



66
67
68
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 66

def calm_all!
  @traps.each_value(&:calm!)
end

#create_pit(saturation: nil, danger_level: nil) ⇒ Object

Raises:

  • (ArgumentError)


24
25
26
27
28
29
30
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 24

def create_pit(saturation: nil, danger_level: nil)
  raise ArgumentError, 'pit limit reached' if @pits.size >= Constants::MAX_PITS

  p = Pit.new(saturation: saturation, danger_level: danger_level)
  @pits[p.id] = p
  p
end

#create_trap(trap_type:, domain:, content:, depth: nil, viscosity: nil) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
22
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 15

def create_trap(trap_type:, domain:, content:, depth: nil, viscosity: nil)
  raise ArgumentError, 'trap limit reached' if @traps.size >= Constants::MAX_TRAPS

  t = Trap.new(trap_type: trap_type, domain: domain, content: content,
               depth: depth, viscosity: viscosity)
  @traps[t.id] = t
  t
end

#deadliest_pits(limit: 5) ⇒ Object



92
93
94
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 92

def deadliest_pits(limit: 5)
  @pits.values.sort_by { |p| -p.danger_level }.first(limit)
end

#deepest(limit: 5) ⇒ Object



76
77
78
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 76

def deepest(limit: 5)
  @traps.values.sort_by { |t| -t.depth }.first(limit)
end

#quicksand_reportObject



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 102

def quicksand_report
  {
    total_traps: @traps.size,
    total_pits:  @pits.size,
    by_type:     traps_by_type,
    submerged:   submerged_traps.size,
    stuck:       stuck_traps.size,
    avg_depth:   avg_depth,
    deadly_pits: @pits.values.count(&:deadly?)
  }
end

#shallowest(limit: 5) ⇒ Object



80
81
82
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 80

def shallowest(limit: 5)
  @traps.values.sort_by(&:depth).first(limit)
end

#sink_all!Object



62
63
64
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 62

def sink_all!
  @traps.each_value(&:sink!)
end

#sink_trap(trap_id:, rate: Constants::SINK_RATE) ⇒ Object



32
33
34
35
36
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 32

def sink_trap(trap_id:, rate: Constants::SINK_RATE)
  trap = fetch_trap(trap_id)
  trap.sink!(rate: rate)
  trap
end

#struggle(trap_id:) ⇒ Object



38
39
40
41
42
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 38

def struggle(trap_id:)
  trap = fetch_trap(trap_id)
  trap.struggle!
  { trap: trap, depth: trap.depth, struggle_count: trap.struggle_count }
end

#stuck_trapsObject



88
89
90
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 88

def stuck_traps
  @traps.values.select(&:stuck?)
end

#submerged_trapsObject



84
85
86
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 84

def submerged_traps
  @traps.values.select(&:submerged?)
end

#traps_by_typeObject



70
71
72
73
74
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 70

def traps_by_type
  counts = Constants::TRAP_TYPES.to_h { |t| [t, 0] }
  @traps.each_value { |t| counts[t.trap_type] += 1 }
  counts
end