Class: Legion::Extensions::Agentic::Social::Conflict::Helpers::ConflictLog

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb

Constant Summary collapse

MAX_CONFLICTS =
1000
RESOLVED_RETENTION_DAYS =
30

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConflictLog

Returns a new instance of ConflictLog.



17
18
19
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 17

def initialize
  @conflicts = {}
end

Instance Attribute Details

#conflictsObject (readonly)

Returns the value of attribute conflicts.



15
16
17
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 15

def conflicts
  @conflicts
end

Instance Method Details

#active_conflictsObject



56
57
58
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 56

def active_conflicts
  @conflicts.values.select { |c| c[:status] == :active }
end

#add_exchange(conflict_id, speaker:, message:) ⇒ Object



38
39
40
41
42
43
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 38

def add_exchange(conflict_id, speaker:, message:)
  conflict = @conflicts[conflict_id]
  return nil unless conflict

  conflict[:exchanges] << { speaker: speaker, message: message, at: Time.now.utc }
end

#countObject



64
65
66
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 64

def count
  @conflicts.size
end

#evictObject



68
69
70
71
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 68

def evict
  evict_expired_resolved
  evict_overflow
end

#get(conflict_id) ⇒ Object



60
61
62
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 60

def get(conflict_id)
  @conflicts[conflict_id]
end

#record(parties:, severity:, description:, posture: nil) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 21

def record(parties:, severity:, description:, posture: nil)
  id = SecureRandom.uuid
  @conflicts[id] = {
    conflict_id: id,
    parties:     parties,
    severity:    severity,
    posture:     posture || Severity.recommended_posture(severity),
    description: description,
    status:      :active,
    outcome:     nil,
    created_at:  Time.now.utc,
    resolved_at: nil,
    exchanges:   []
  }
  id
end

#resolve(conflict_id, outcome:, resolution_notes: nil) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb', line 45

def resolve(conflict_id, outcome:, resolution_notes: nil)
  conflict = @conflicts[conflict_id]
  return nil unless conflict

  conflict[:status] = :resolved
  conflict[:outcome] = outcome
  conflict[:resolution_notes] = resolution_notes
  conflict[:resolved_at] = Time.now.utc
  conflict
end