Module: Legion::Extensions::Extinction::Runners::Extinction
- Extended by:
- Extinction
- Included in:
- Client, Extinction
- Defined in:
- lib/legion/extensions/extinction/runners/extinction.rb
Instance Method Summary collapse
- #archive_agent(agent_id:, reason:, metadata: {}) ⇒ Object
- #deescalate(target_level:, authority:, reason:) ⇒ Object
- #escalate(level:, authority:, reason:) ⇒ Object
- #extinction_status ⇒ Object
- #full_termination(agent_id:, authority:, reason:) ⇒ Object
- #monitor_protocol ⇒ Object
Instance Method Details
#archive_agent(agent_id:, reason:, metadata: {}) ⇒ Object
66 67 68 69 70 |
# File 'lib/legion/extensions/extinction/runners/extinction.rb', line 66 def archive_agent(agent_id:, reason:, metadata: {}, **) record = archiver.archive(agent_id: agent_id, reason: reason, metadata: ) record_audit(action: :archive, details: { agent_id: agent_id, reason: reason }) { success: true, archive: record } end |
#deescalate(target_level:, authority:, reason:) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/legion/extensions/extinction/runners/extinction.rb', line 30 def deescalate(target_level:, authority:, reason:, **) result = protocol_state.deescalate(target_level: target_level, authority: , reason: reason) return result unless result[:success] emit_deescalation_event(target_level, , reason) record_audit(action: :deescalate, details: { target_level: target_level, authority: , reason: reason }) result end |
#escalate(level:, authority:, reason:) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/legion/extensions/extinction/runners/extinction.rb', line 15 def escalate(level:, authority:, reason:, **) result = protocol_state.escalate(level: level, authority: , reason: reason) return result unless result[:success] enforce_escalation_effects(level) emit_escalation_event(level, , reason) record_audit(action: :escalate, details: { level: level, authority: , reason: reason }) if Legion::Extensions::Extinction::Settings.setting(:archive_on_escalate) && level >= 3 archive_agent(agent_id: 'self', reason: "auto-archive at level #{level}", metadata: { triggered_by: :escalate }) end result end |
#extinction_status ⇒ Object
41 42 43 44 45 |
# File 'lib/legion/extensions/extinction/runners/extinction.rb', line 41 def extinction_status(**) state = protocol_state.to_h level_info = Helpers::Levels.level_info(state[:current_level]) { success: true, state: state, level_info: level_info } end |
#full_termination(agent_id:, authority:, reason:) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/legion/extensions/extinction/runners/extinction.rb', line 72 def full_termination(agent_id:, authority:, reason:, **) gate = governance_check(authority: ) return gate unless gate[:success] archive_result = archive_agent(agent_id: agent_id, reason: reason, metadata: { termination: true, authority: }) return archive_result unless archive_result[:success] escalate_result = escalate(level: 4, authority: , reason: reason) return escalate_result unless escalate_result[:success] record_audit(action: :full_termination, details: { agent_id: agent_id, authority: , reason: reason }) { success: true, agent_id: agent_id, archive: archive_result[:archive], terminated_at: Time.now.utc.iso8601 } end |
#monitor_protocol ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/legion/extensions/extinction/runners/extinction.rb', line 47 def monitor_protocol(**) state = protocol_state.to_h last_change = state[:last_change] stale = false if last_change threshold_hours = Legion::Extensions::Extinction::Settings.setting(:stale_threshold_hours) changed_at = Time.parse(last_change[:at]) rescue nil # rubocop:disable Style/RescueModifier stale = changed_at && (Time.now.utc - changed_at) > (threshold_hours * 3600) end { success: true, state: state, stale: stale, checked_at: Time.now.utc.iso8601 } end |