
    xi                     B    d Z ddlmZmZ ddlmZmZmZmZmZ ddZ	d Z
y)u  
The Lethe — Absence Record
Records what ISN'T. Structured absence categories:
- decayed_memory: Memory fell below retention threshold
- dropped_signal: Signal entered but never propagated
- unresolved_pattern: Pattern detected but never completed
- expected_missing: Signal predicted but never arrived
- convergence_abandoned: Topic dropped out of active processing
- silence_prolonged: Extended period with no signal input

Lethe is not poetic. It is precise. Every absence has a category and a reason.
    )datetime	timedelta)log_absencerecent_absencesABSENCE_CATEGORIES
load_stateLETeth_FILEc                    t               }|j                  d      }|sy	 t        j                  |      }t        j                         |z
  }|t        |       kD  r&t        dddd|j                         dz  d	d
       y	 y#  Y yxY w)z4Check if system has been silent for threshold hours.last_signal_atF)hourssilence_prolongedsystemNzNo signal for i  z.1fz hours)category	signal_idexpected_atreasonT)r   getr   fromisoformatnowr   r   total_seconds)threshold_hoursstatelast_signal	last_timeelapseds        0/home/workspace/ghojualamanchu-v3/brain/lethe.pycheck_prolonged_silencer      s    LE)),-K**;7	,,.9,Y_55," '(=(=(?$(Fs'K6R	  6 s   A B Bc           	         | j                  dd      j                         | j                  dd      }| j                  di       }g dg dg dg d	g d
g dd}|j                         D ]X  \  }}t        fd|D              s||j                  dg       vs0|d   j	                  |       t        ||ddd  d       Z d|d<   || d<   | S )a%  
    Process signal through lethe.
    Checks for absence categories in the signal content itself,
    and flags if the signal resolves a previously missing expected signal.
    Reads: signal['raw_input'], signal['signal_id']
    Writes: signal['lethe'] block
    Returns: modified signal
    	raw_input r   unknownlethe)decayforgotfadedzlost memoryzcan't remember)zdidn't arrivez	never gotzmissing signaldropped)
unfinished
incompletezpattern without end
unresolved)expectedzwaiting forzshould have arrivedzpredicted but missing)zstopped caringz
gave up onu   不再关注zdropped the thread)z	too quietzprolonged silenceznothing happeningzdead air)decayed_memorydropped_signalunresolved_patternexpected_missingconvergence_abandonedr   c              3   &   K   | ]  }|v  
 y w)N ).0kwraws     r   	<genexpr>zprocess.<locals>.<genexpr>?   s     ,RrSy,s   absence_categorieszDetected in signal content: N<   z...)r   r   r   Tdecay_applied)r   loweritemsanyappendr   )signalr   lethe_blockabsence_mapr   keywordsr4   s         @r   processrA   '   s     **["
%
+
+
-C

;	2I**Wb)K XU_g!g`K *//1 (,8,,{/CRHH0188B%'9#cr(3G	 $(K !F7OM    N)   )__doc__r   r   brain.stater   r   r   r   r	   r   rA   r1   rB   r   <module>rF      s    ) a a,$rB   