§
    Þ¦j,L  ã                   óø   — d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%  ej&        d¦  «        Z' G d„ d	¦  «        Z(dS )
u  
Module GiÃ¡m SÃ¡t Thá»�i Gian Thá»±c & KhÃ©p KÃ­n VÃ²ng Láº·p Tá»± Sá»­a Lá»—i (AgentWatcherSentinel)
Káº¿ thá»«a vÃ  tÃ¡i sá»­ dá»¥ng Single Source of Truth tá»« src.agentic_engine:
- InvariantSentinel & 14 Architectural Invariant Error Codes
- MultimodalFlightRecorder (MultimodalIncidentRecorder)

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 8: Triá»‡t tiÃªu sá»­a lá»—i triá»‡u chá»©ng (Root-Cause-First).
- Rule 11: PhÃ²ng ngá»«a há»“i quy (Automated Regression Prevention).
- Rule 12: RÃ  soÃ¡t toÃ n cá»¥c & Tá»± Ä‘á»‘i khÃ¡ng (Global Invariant Sweep).
- Rule 13: Giao thá»©c Watcher thá»�i gian thá»±c & Tá»± sá»­a lá»—i khÃ©p kÃ­n (6-Stage Closed-Loop).
- Rule 14: Tuyá»‡t Ä‘á»‘i cáº¥m dÃ¹ng mock data / bá»‹a data â€” 100% dá»¯ liá»‡u tháº­t (Real Authentic Data Protocol).
é    N)Údeque)ÚAnyÚDequeÚDictÚListÚOptionalÚTuple)ÚMultimodalFlightRecorderÚMultimodalIncidentRecorder)ÚALL_INVARIANT_CODESÚERR_BOGUS_VITAL_STRUCT_778ÚERR_CORE_DISCONNECTEDÚERR_CORE_LOG_FATAL_EXCEPTIONÚERR_CURRENT_ES_EXCEEDS_MAXÚERR_ES_OVERFLOW_0x7FFBÚERR_HP_EXCEEDS_MAXÚERR_MANA_BOGUS_STRUCT_779ÚERR_MANA_EXCEEDS_MAXÚERR_OPTICAL_RAM_DESYNCÚERR_PLAYER_DEAD_OR_ZEROÚERR_WATCHDOG_HEARTBEAT_LOSTÚERR_WATCHDOG_HEARTBEAT_TIMEOUTÚERR_XYZ_FROZENÚERR_XYZ_FROZEN_AT_ORIGINÚERR_XYZ_OUT_OF_BOUNDSÚERR_XYZ_TELEPORT_ANOMALYÚINVARIANT_NAMESÚInvariantSentinelÚInvariantViolationÚAgentWatcherc                   ó~  — e Zd ZdZ	 	 	 	 	 d;dee         deded	ed
ee         f
d„Z	d<dee         de
fd„Zdeddfd„Zdee         fd„Zdedee         fd„Z	 	 	 	 	 d=dededededede
dedeeeeef                  dee         fd „Z	 d>d"ed#ee         d$edee         fd%„Z	 	 d?d(ed)e
d*edee         fd+„Zd,ee         dee         fd-„Zd.eddfd/„Zd@d0„Z	 d<d1eeef         d#ee         dee         fd2„Zdee         fd3„Z	 	 dAd4ed5ee         d1eeef         d6ed7edefd8„Zed9edeeef         fd:„¦   «         ZdS )BÚAgentWatcherSentinelu‘  
    Module GiÃ¡m SÃ¡t Thá»�i Gian Thá»±c & Ä�iá»�u Phá»‘i Tá»± Ä�á»™ng (Master Sentinel).
    Cháº¡y song song á»Ÿ Cold Path Ä‘á»ƒ báº£o vá»‡ tÃ­nh báº¥t biáº¿n cá»§a há»‡ thá»‘ng.
    Káº¿t ná»‘i:
      - CoreShmBridge (Ä‘á»�c Telemetry 30-120Hz)
      - core_log.txt (quÃ©t fatal logs)
      - ScreenCapturer (chá»¥p hÃ¬nh & RAM snapshot)
      - OpticalHPSensor (Ä‘á»‘i soÃ¡t quang há»�c 2ms)
    Nç      à?ç      @é   Úcore_log_pathÚpoll_intervalÚflight_recorder_intervalÚmax_dev_snapshotsÚ
shm_bridgec           	      óh  — || _         || _        || _        d| _        t          j                             t          j                             t          j                             t          ¦  «        d¦  «        ¦  «        }|r|| _
        nŠt          j                             |ddd¦  «        t          j                             |dd¦  «        t          j                             |dddd¦  «        g}t          d„ |D ¦   «         |d         ¦  «        | _
        t          ¦   «         | _        t          ¦   «         | _        t!          d	¬
¦  «        | _        t!          d	¬
¦  «        | _        d| _        d| _        d| _        d| _        i | _        d| _        t!          | j        dz  ¬
¦  «        | _        d | _        	 ddlm}  |d¬¦  «        | _        n4# t:          $ r'}	t<                               d|	› �¦  «         Y d }	~	nd }	~	ww xY wd | _         	 ddl!m"}
  |
¦   «         | _         n4# t:          $ r'}	t<           #                    d|	› �¦  «         Y d }	~	nd }	~	ww xY w|| _$        | j$        rW	 | j$         %                    | j&        ¦  «         d S # t:          $ r(}	t<                               d|	› �¦  «         Y d }	~	d S d }	~	ww xY wd S )NFz../..ÚbinÚReleasezcore_log.txtÚbuildc              3   óX   K  — | ]%}t           j                             |¦  «        ¯!|V — Œ&d S ©N)ÚosÚpathÚexists)Ú.0Úps     ú8C:\Projects\AutoPOE2\src\assistant_tool\agent_watcher.pyú	<genexpr>z0AgentWatcherSentinel.__init__.<locals>.<genexpr>Y   s5   è è € Ð&MÐ&M¨Q½2¼7¿>º>È!Ñ;LÔ;LÐ&M qÐ&MÐ&MÐ&MÐ&MÐ&MÐ&Mó    r   éd   )Úmaxlen)ç        r;   r;   r;   é   )ÚScreenCapturerÚcaptures)Ú
output_diru   ChÆ°a náº¡p ScreenCapturer: )ÚOpticalHPSensoru   ChÆ°a náº¡p OpticalHPSensor: u   Lá»—i Ä‘Äƒng kÃ½ SHM listener: )'r'   r(   r)   Úrunningr1   r2   ÚabspathÚjoinÚdirnameÚ__file__r&   Únextr   Úincident_recorderr   Úsentinelr   Úcore_log_bufferÚcompanion_log_bufferÚlog_file_posÚlast_posÚstationary_start_timeÚlast_flight_record_timeÚlast_telemetryÚlast_heartbeat_msÚdev_snapshotsÚscreen_capturerÚ"src.assistant_tool.screen_capturerr=   Ú	ExceptionÚloggerÚwarningÚoptical_sensorÚ$src.assistant_tool.optical_hp_sensorr@   Údebugr*   Úregister_listenerÚon_shm_snapshot)Úselfr&   r'   r(   r)   r*   Úroot_dirÚcandsr=   Úer@   s              r6   Ú__init__zAgentWatcherSentinel.__init__B   s  € ð +ˆÔØ(@ˆÔ%Ø!2ˆÔØˆŒõ ”7—?’?¥2¤7§<¢<µ´·²ÅÑ0IÔ0IÈ7Ñ#SÔ#SÑTÔTˆØð 	YØ!.ˆDÔÐõ ”—’˜X u¨i¸ÑHÔHÝ”—’˜X u¨nÑ=Ô=Ý”—’˜X w°°yÀ.ÑQÔQðˆEõ
 "&Ð&MÐ&M°%Ð&MÑ&MÔ&MÈuÐUVÌxÑ!XÔ!XˆDÔå!;Ñ!=Ô!=ˆÔÝ)Ñ+Ô+ˆŒõ ,1¸Ð+<Ñ+<Ô+<ˆÔÝ05¸SÐ0AÑ0AÔ0AˆÔ!ØˆÔð (ˆŒØ%(ˆÔ"Ø'*ˆÔ$Ø.0ˆÔØ!"ˆÔõ 05¸DÔ<RÐUVÑ<VÐ/WÑ/WÔ/WˆÔð  $ˆÔð	?ØIÐIÐIÐIÐIÐIØ#1 >¸ZÐ#HÑ#HÔ#HˆDÔ Ð øÝð 	?ð 	?ð 	?Ý�NŠNÐ=¸!Ð=Ð=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>øøøøð	?øøøð #ˆÔð	>ØLÐLÐLÐLÐLÐLØ"1 /Ñ"3Ô"3ˆDÔÐøÝð 	>ð 	>ð 	>Ý�LŠLÐ<¸Ð<Ð<Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=øøøøð	>øøøð %ˆŒØŒ?ð 	FðFØ”×1Ò1°$Ô2FÑGÔGÐGÐGÐGøÝð Fð Fð FÝ—’ÐDÀÐDÐDÑEÔEÐEÐEÐEÐEÐEÐEÐEøøøøðFøøøð	Fð 	FsH   Æ/G Ç
G8ÇG3Ç3G8ÈH È
I
È#IÉI
ÉI= É=
J/ÊJ*Ê*J/ÚbridgeÚreturnc                 ó¬  — |�|| _         nl| j         €e	 ddlm}  |¦   «         | _         | j                              ¦   «          n5# t          $ r(}t
                               d|› �¦  «         Y d}~dS d}~ww xY w| j         rV	 | j                              | j        ¦  «         dS # t          $ r'}t
                               d|› �¦  «         Y d}~nd}~ww xY wdS )uI   Káº¿t ná»‘i vÃ o CoreShmBridge Ä‘á»ƒ nháº­n Telemetry thá»�i gian thá»±c.Nr   )ÚCoreShmBridgeu)   KhÃ´ng thá»ƒ khá»Ÿi táº¡o CoreShmBridge: FTu-   Lá»—i gáº¯n callback listener CoreShmBridge: )	r*   Ú"src.assistant_tool.core_shm_bridgerd   ÚstartrT   rU   rV   rZ   r[   )r\   ra   rd   r_   s       r6   Úconnect_shm_bridgez'AgentWatcherSentinel.connect_shm_bridge…   s  € àÐØ$ˆDŒOˆOØŒ_Ð$ðØLÐLÐLÐLÐLÐLØ"/ -¡/¤/�”Ø”×%Ò%Ñ'Ô'Ð'Ð'øÝð ð ð Ý—’ÐNÈ1ÐNÐNÑOÔOÐOØ�u�u�u�u�uøøøøðøøøð Œ?ð 	TðTØ”×1Ò1°$Ô2FÑGÔGÐGØ�tøÝð Tð Tð TÝ—’ÐRÈqÐRÐRÑSÔSÐSÐSÐSÐSÐSÐSøøøøðTøøøàˆus/   “.A Á
A4ÁA/Á/A4Á?B  Â 
CÂ*CÃCÚsnapshotc                 ór  — t          |dd¦  «        }|sdS t          |dt          t          j        ¦   «         dz  ¦  «        ¦  «        }|| _        t          |dd¦  «        t          |dd¦  «        |t          |d	d
¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «        dœdœ	}|| _        |                      ¦   «         }|                      ||¬¦  «         dS ) uC   Callback nháº­n Telemetry snapshot má»›i nháº¥t tá»« Shared Memory.ÚplayerNÚtimestamp_msiè  Ú	is_onlineTÚsnapshot_idr   Ú	area_nameÚ Ú
area_levelÚentity_countÚmonsters_countÚitems_countÚ
current_hpÚmax_hpÚcurrent_manaÚmax_manaÚ
current_esÚmax_esÚcurrent_spiritÚ
max_spiritÚhp_percentageç      Y@Úpos_xr;   Úpos_yÚpos_z)rt   ru   rv   rw   rx   ry   rz   r{   Ú
hp_percentr~   r   r€   )	rl   rm   rk   rn   rp   rq   rr   rs   rj   )Úoptical_hp_pct)ÚgetattrÚintÚtimerP   rO   Úsample_optical_hpÚevaluate_live_telemetry)r\   rh   r5   Únow_msÚ	telemetryÚopt_pcts         r6   r[   z$AgentWatcherSentinel.on_shm_snapshotš   sÀ  € å�H˜h¨Ñ-Ô-ˆØð 	ØˆFå˜ >µ3µt´y±{´{ÀTÑ7IÑ3JÔ3JÑKÔKˆØ!'ˆÔõ ! ¨;¸Ñ=Ô=Ý" 8¨]¸AÑ>Ô>Ø"Ý  ¨;¸Ñ;Ô;Ý! (¨L¸!Ñ<Ô<Ý# H¨n¸aÑ@Ô@Ý% hÐ0@À!ÑDÔDÝ" 8¨]¸AÑ>Ô>å% a¨°qÑ9Ô9Ý! ! X¨qÑ1Ô1Ý '¨¨>¸1Ñ =Ô =Ý# A z°1Ñ5Ô5Ý% a¨°qÑ9Ô9Ý! ! X¨qÑ1Ô1Ý")¨!Ð-=¸qÑ"AÔ"AÝ% a¨°qÑ9Ô9Ý% a¨¸%Ñ@Ô@Ý   G¨SÑ1Ô1Ý   G¨SÑ1Ô1Ý   G¨SÑ1Ô1ðð ð%
ð %
ˆ	ð0 (ˆÔà×(Ò(Ñ*Ô*ˆØ×$Ò$ Y¸wÐ$ÑGÔGÐGÐGÐGr8   c                 ó¨   — | j         sdS 	 | j                              ¦   «         \  }}}|dk    rt          |dz  d¦  «        S n# t          $ r Y nw xY wdS )uQ   Ä�o lÆ°á»�ng lÆ°á»£ng HP quang há»�c tá»« mÃ n hÃ¬nh game báº±ng OpticalHPSensor.Nr;   r}   é   )rW   Úread_hpÚroundrT   )r\   Ú_Úratios      r6   r†   z&AgentWatcherSentinel.sample_optical_hpÀ   sx   € àÔ"ð 	Ø�4ð	ØÔ-×5Ò5Ñ7Ô7‰KˆAˆq�%Ø�sŠ{ˆ{Ý˜U U™]¨AÑ.Ô.Ð.ð øåð 	ð 	ð 	ØˆDð	øøøàˆts   ‹5A Á
AÁAÚplayer_datac                 ó6   — | j                              |¦  «        S r0   )rH   Úcheck_vitals_invariants)r\   r‘   s     r6   r“   z,AgentWatcherSentinel.check_vitals_invariantsÍ   s   € ØŒ}×4Ò4°[ÑAÔAÐAr8   ro   r   Fr;   r~   r   r€   rn   rr   Ú	is_movingÚstationary_duration_secrL   c	           
      óF   — | j                              ||||||||¬¦  «        S )N©r~   r   r€   rn   rr   r”   r•   rL   )rH   Úcheck_xyz_invariants)	r\   r~   r   r€   rn   rr   r”   r•   rL   s	            r6   r˜   z)AgentWatcherSentinel.check_xyz_invariantsÐ   s;   € ð Œ}×1Ò1ØØØØØ)ØØ$;Øð 2ñ 	
ô 	
ð 		
r8   ç      $@Ú
ram_hp_pctr‚   Úthreshold_pctc                 ó<   — | j                              |||¬¦  «        S )N)rš   r‚   r›   )rH   Úcheck_optical_crosscheck)r\   rš   r‚   r›   s       r6   r�   z-AgentWatcherSentinel.check_optical_crosscheckæ   s,   € ð Œ}×5Ò5Ø!Ø)Ø'ð 6ñ 
ô 
ð 	
r8   Té¸  rP   Úcore_is_onlineÚ
timeout_msc                 ó<   — | j                              |||¬¦  «        S )N)rP   rŸ   r    )rH   Úcheck_watchdog_invariants)r\   rP   rŸ   r    s       r6   r¢   z.AgentWatcherSentinel.check_watchdog_invariantsò   s,   € ð Œ}×6Ò6Ø/Ø)Ø!ð 7ñ 
ô 
ð 	
r8   Ú	log_linesc                 ó6   — | j                              |¦  «        S r0   )rH   Úcheck_log_errors)r\   r£   s     r6   r¥   z%AgentWatcherSentinel.check_log_errorsþ   s   € ØŒ}×-Ò-¨iÑ8Ô8Ð8r8   Úlinec                 óâ   — |                      ¦   «         }|sdS | j                             |¦  «         |                      |g¦  «        }|r$|                      |d         |d|idd¬¦  «         dS dS )u8   Ghi nháº­n 1 dÃ²ng log thá»�i gian thá»±c tá»« C++ Core.Nr   Úlog_triggeruV   PhÃ¡t hiá»‡n thÃ´ng bÃ¡o lá»—i nghiÃªm trá»�ng hoáº·c ngoáº¡i lá»‡ trong log C++ Core.uF   Kiá»ƒm tra call stack cá»§a exception vÃ  vÃ¹ng nhá»› heap xung quanh.©Úincident_typeÚviolated_invariantsr‰   Úroot_cause_hintÚsuggested_fix)ÚstriprI   Úappendr¥   Ú_handle_anomaly)r\   r¦   ÚcleanÚ	anomaliess       r6   Úingest_core_log_linez)AgentWatcherSentinel.ingest_core_log_line  s™   € à—
’
‘”ˆØð 	ØˆFØÔ×#Ò# EÑ*Ô*Ð*Ø×)Ò)¨5¨'Ñ2Ô2ˆ	Øð 	Ø× Ò Ø'¨œlØ$-Ø(¨%Ð0Ø xØfð !ñ ô ð ð ð ð	ð 	r8   c                 óä  — t           j                             | j        ¦  «        sdS 	 t	          | j        ddd¬¦  «        5 }|                     | j        ¦  «         |                     ¦   «         }|                     ¦   «         | _        |D ]}|  	                    |¦  «         Œ	 ddd¦  «         dS # 1 swxY w Y   dS # t          $ r(}t                               d|› �¦  «         Y d}~dS d}~ww xY w)u?   Ä�á»�c pháº§n má»›i thÃªm vÃ o cá»§a tá»‡p core_log.txt tháº­t.NÚrúutf-8Úignore)ÚencodingÚerrorsztail_core_log_file: )r1   r2   r3   r&   ÚopenÚseekrK   Ú	readlinesÚtellr³   rT   rU   rY   )r\   ÚfÚ	new_linesr¦   r_   s        r6   Útail_core_log_filez'AgentWatcherSentinel.tail_core_log_file  sL  € åŒw�~Š~˜dÔ0Ñ1Ô1ð 	ØˆFð	5Ý�dÔ(¨#¸ÈÐQÑQÔQð 4ÐUVØ—’�tÔ(Ñ)Ô)Ð)ØŸKšK™MœM�	Ø$%§F¢F¡H¤H�Ô!Ø%ð 4ð 4�DØ×-Ò-¨dÑ3Ô3Ð3Ð3ð4ð	4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 4ð 4øõ ð 	5ð 	5ð 	5Ý�LŠLÐ3°Ð3Ð3Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4øøøøð	5øøøs<   ¨B= Á A"B0Â#B= Â0B4Â4B= Â7B4Â8B= Â=
C/ÃC*Ã*C/r‰   c                 óT  — g }|                      d|¦  «        }|                      |¦  «        }|                     |¦  «         t          |                      dd¦  «        pd¦  «        }t          |                      dd¦  «        pd¦  «        }t          |                      dd¦  «        pd¦  «        }t	          |                      d|                      dd¦  «        ¦  «        ¦  «        }	t          |                      d	d
¦  «        pd
¦  «        }
t          |                      dd¦  «        ¦  «        }t          j        ¦   «         }t          || j	        d
         z
  ¦  «        dk     r>t          || j	        d         z
  ¦  «        dk     r| j
        dk    r|| _
        || j
        z
  }n|| _
        d}|||f| _	        |                      ||||	|
||| j	        |||fk    r| j	        nd¬¦  «        }|                     |¦  «         t          |                      d|                      dd
¦  «        ¦  «        pd
¦  «        }t          |                      dd
¦  «        pd
¦  «        }|d
k    r||z  dz  nd}|                      ||d¬¦  «        }|                     |¦  «         t          |                      dd¦  «        ¦  «        }|                      | j        |¬¦  «        }|                     |¦  «         |r:|d
         }dd                     |¦  «        › �}|                      ||||d¬¦  «         |S )uð   
        Ä�Ã¡nh giÃ¡ toÃ n bá»™ ma tráº­n báº¥t biáº¿n trÃªn snapshot telemetry tháº­t.
        Tráº£ vá»� danh sÃ¡ch cÃ¡c vi pháº¡m phÃ¡t hiá»‡n Ä‘Æ°á»£c.
        KÃ­ch hoáº¡t Incident Dossier tá»©c thá»�i 0ms náº¿u cÃ³ vi pháº¡m.
        rj   r~   r;   r   r€   rn   Úarearo   rr   r   r”   Fgš™™™™™¹?rŒ   Nr—   rt   Úhpru   r}   r™   )r›   rl   T)rŸ   u   Vi pháº¡m báº¥t biáº¿n: z, uQ   Kháº¯c phá»¥c triá»‡t Ä‘á»ƒ táº¡i Single Source of Logic theo Rule 8 vÃ  Rule 14.r©   )Úgetr“   ÚextendÚfloatÚstrr„   Úboolr…   ÚabsrL   rM   r˜   r�   r¢   rP   rC   r°   )r\   r‰   r‚   Úall_violationsr5   Úvitals_errsÚpxÚpyÚpzrÂ   Úmonsters_cntr”   ÚnowÚstat_secÚxyz_errsÚram_hpÚ
ram_max_hprš   Úopt_errsrl   Úwdg_errsÚprimary_errÚhints                          r6   r‡   z,AgentWatcherSentinel.evaluate_live_telemetry  s:  € ð %'ˆð �MŠM˜( IÑ.Ô.ˆØ×2Ò2°1Ñ5Ô5ˆØ×Ò˜kÑ*Ô*Ð*õ �1—5’5˜ #Ñ&Ô&Ð-¨#Ñ.Ô.ˆÝ�1—5’5˜ #Ñ&Ô&Ð-¨#Ñ.Ô.ˆÝ�1—5’5˜ #Ñ&Ô&Ð-¨#Ñ.Ô.ˆÝ�9—=’= ¨i¯mªm¸FÀBÑ.GÔ.GÑHÔHÑIÔIˆÝ˜9Ÿ=š=Ð)9¸1Ñ=Ô=ÐBÀÑCÔCˆÝ˜Ÿš {°EÑ:Ô:Ñ;Ô;ˆ	åŒi‰kŒkˆÝˆr�D”M !Ô$Ñ$Ñ%Ô%¨Ò+Ð+µ°B¸¼ÀqÔ9IÑ4IÑ0JÔ0JÈSÒ0PÐ0PØÔ)¨SÒ0Ð0Ø-0�Ô*Ø˜TÔ7Ñ7ˆHˆHà),ˆDÔ&ØˆHØ  R˜LˆDŒMà×,Ò,ØØØØØ'ØØ$,Ø&*¤m¸¸BÀ°|Ò&CÐ&C�T”]�]Èð -ñ 	
ô 	
ˆð 	×Ò˜hÑ'Ô'Ð'õ �q—u’u˜\¨1¯5ª5°°q©>¬>Ñ:Ô:Ð?¸aÑ@Ô@ˆÝ˜1Ÿ5š5 ¨1Ñ-Ô-Ð2°Ñ3Ô3ˆ
Ø6@À1²n°n�f˜zÑ)¨EÑ1Ð1È%ˆ
à×0Ò0°¸^Ð[_Ð0Ñ`Ô`ˆØ×Ò˜hÑ'Ô'Ð'õ ˜Ÿš {°DÑ9Ô9Ñ:Ô:ˆ	Ø×1Ò1°$Ô2HÐYbÐ1ÑcÔcˆØ×Ò˜hÑ'Ô'Ð'ð ð 		Ø(¨Ô+ˆKØI¨d¯iªi¸Ñ.GÔ.GÐIÐIˆDØ× Ò Ø)Ø$2Ø#Ø $Øqð !ñ ô ð ð Ðr8   c                 ó  — t          j         ¦   «         }|| j        z
  | j        k     rdS || _        | j        sdS 	 | j                             d| j        d¬¦  «        }|sdS t          j                             |¦  «        d         }||› d�|› d�|› d�g}| j	         
                    |¦  «         t          | j	        ¦  «        | j        k    r| j	                             ¦   «         }|D ]F}	 t          j                             |¦  «        rt          j        |¦  «         Œ7# t           $ r Y ŒCw xY wt          | j	        ¦  «        | j        k    °|S # t           $ r(}t"                               d	|› �¦  «         Y d}~dS d}~ww xY w)
uï   
        Cháº¿ Ä‘á»™ Dev: Tá»± Ä‘á»™ng chá»¥p screenshot + RAM snapshot Ä‘á»‹nh ká»³ (máº·c Ä‘á»‹nh má»—i 5 giÃ¢y).
        Xoay vÃ²ng giá»¯ tá»‘i Ä‘a max_dev_snapshots (20) snapshot gáº§n nháº¥t Ä‘á»ƒ tiáº¿t kiá»‡m dung lÆ°á»£ng.
        NÚDEV_PERIODICT©Ú
event_nameÚtelemetry_dataÚcapture_ramr   z.jsonú	_RAM.jsonú_CORRELATED.pngu(   Lá»—i chá»¥p dev snapshot Ä‘á»‹nh ká»³: )r…   rN   r(   rR   Úcapture_screenshotrO   r1   r2   ÚsplitextrQ   r¯   Úlenr)   Úpopleftr3   ÚremoverT   rU   rV   )r\   rÐ   Úimg_pathÚbase_no_extÚgroup_filesÚ	old_filesr¾   r_   s           r6   Úrecord_dev_snapshotz(AgentWatcherSentinel.record_dev_snapshoti  sÎ  € õ
 Œi‰kŒkˆØ�Ô-Ñ-°Ô0MÒMÐMØ�4à'*ˆÔ$ØÔ#ð 	Ø�4ð	ØÔ+×>Ò>Ø)Ø#Ô2Ø ð ?ñ ô ˆHð
 ð Ø�tåœ'×*Ò*¨8Ñ4Ô4°QÔ7ˆKàØÐ%Ð%Ð%ØÐ)Ð)Ð)ØÐ/Ð/Ð/ð	ˆKð Ô×%Ò% kÑ2Ô2Ð2å�dÔ(Ñ)Ô)¨DÔ,BÒBÐBØ Ô.×6Ò6Ñ8Ô8�	Ø"ð ð �AðÝœ7Ÿ>š>¨!Ñ,Ô,ð )ÝœI a™LœL˜LøøÝ$ð ð ð Ø˜ðøøøõ �dÔ(Ñ)Ô)¨DÔ,BÒBÐBð ˆOøÝð 	ð 	ð 	Ý�NŠNÐIÀaÐIÐIÑJÔJÐJØ�4�4�4�4�4øøøøð	øøøsB   º$E Á BE Ã)3DÄE Ä
D*Ä'E Ä)D*Ä*!E Å
E>ÅE9Å9E>rª   r«   r¬   r­   c                 óˆ  — d}d}d}| j         rì	 | j                              d|dd…         › �|d¬¦  «        }|rŒt          j                             |¦  «        d         }	|	› d�}|	› d�}
t          j                             |
¦  «        r>t          |
d	d
¬¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   n4# t          $ r'}t                               d|› �¦  «         Y d}~nd}~ww xY w| j                             ||||||t          | j        ¦  «        t          | j        ¦  «        ||¬¦
  «
        }|S )u0   KÃ­ch hoáº¡t Ä‘Ã³ng gÃ³i há»“ sÆ¡ sá»± cá»‘ 0ms.NÚANOMALY_é   TrÛ   r   rà   rß   rµ   r¶   ©r¸   u   Lá»—i chá»¥p áº£nh anomaly: )
rª   r«   r‰   Úraw_screenshot_pathÚcorrelated_image_pathÚram_snapshotÚcore_log_linesÚcompanion_log_linesr¬   r­   )rR   rá   r1   r2   râ   r3   rº   ÚjsonÚloadrT   rU   rV   rG   Úpackage_incidentÚlistrI   rJ   )r\   rª   r«   r‰   r¬   r­   Úraw_pngÚcorr_pngÚram_jsonrç   Úram_pathr¾   r_   Údossier_paths                 r6   r°   z$AgentWatcherSentinel._handle_anomaly–  sÐ  € ð ˆØˆØˆàÔð 	CðCØÔ.×AÒAØ>¨-¸¸¸Ô*<Ð>Ð>Ø#,Ø $ð Bñ ô �ð
 ð 4Ý"$¤'×"2Ò"2°7Ñ";Ô";¸AÔ">�KØ"-Ð>Ð>Ð>�HØ"-Ð8Ð8Ð8�HÝ”w—~’~ hÑ/Ô/ð 4Ý! (¨C¸'ÐBÑBÔBð 4ÀaÝ'+¤y°¡|¤|˜Hð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4øøåð Cð Cð CÝ—’ÐA¸aÐAÐAÑBÔBÐBÐBÐBÐBÐBÐBøøøøðCøøøð Ô-×>Ò>Ø'Ø 3ØØ 'Ø"*Ø!Ý Ô 4Ñ5Ô5Ý $ TÔ%>Ñ ?Ô ?Ø+Ø'ð ?ñ 
ô 
ˆð Ðs<   �B
C ÂB:Â.C Â:B>Â>C ÃB>ÃC Ã
C7ÃC2Ã2C7Úcapture_json_pathc                 ó¬  — t           j                             | ¦  «        st          d| › �¦  «        ‚t	          | dd¬¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   |                     d|¦  «        }|                     d|¦  «        }t          j	        |¦  «        }t          |                     dd	¦  «        pd	¦  «        }t          |                     d
d	¦  «        pd	¦  «        }t          |                     dd	¦  «        pd	¦  «        }t          |                     d|                     dd¦  «        ¦  «        ¦  «        }	|                     dg ¦  «        }
t          |
t          ¦  «        rt          |
¦  «        nd}t          |                     d|¦  «        pd¦  «        }t          j        ||||	|dt#          |¦  «        dk     rt#          |¦  «        dk     rdnd	¬¦  «        }||z   }| |                     d|                     dd¦  «        ¦  «        |                     dd¦  «        |d|t          |¦  «        dk    dœS )u×   
        Náº¡p má»™t tá»‡p capture JSON thá»±c táº¿ tá»« captures/ vÃ  cháº¡y tháº©m tra toÃ n bá»™ Invariants.
        TuÃ¢n thá»§ Rule 14: 100% sá»­ dá»¥ng dá»¯ liá»‡u thá»±c táº¿ trÃ­ch xuáº¥t tá»« game.
        u.   KhÃ´ng tÃ¬m tháº¥y tá»‡p capture thá»±c táº¿: rµ   r¶   rî   Nr‰   rj   r~   r;   r   r€   rÂ   rn   ro   Úmonstersr   rr   Fgü©ñÒMbP?g      @)r~   r   r€   rn   rr   r”   r•   Ú	timestampÚtimestamp_isoÚUnknownÚpidiŒ…  T)Úfiler   r  r‰   Úis_authentic_dataÚviolations_detectedÚhas_anomaly)r1   r2   r3   ÚFileNotFoundErrorrº   rô   rõ   rÄ   r   r“   rÆ   rÇ   Ú
isinstancer÷   rã   r„   r˜   rÉ   )rý   r¾   Údatar‰   r5   Úvitals_violationsrÌ   rÍ   rÎ   rÂ   Úraw_mobsÚmobs_cnt_defaultrÏ   Úxyz_violationsrÊ   s                  r6   Úevaluate_real_capture_filez/AgentWatcherSentinel.evaluate_real_capture_fileÂ  sz  € õ Œw�~Š~Ð/Ñ0Ô0ð 	jÝ#Ð$hÐUfÐ$hÐ$hÑiÔiÐiåÐ# S°7Ð;Ñ;Ô;ð 	 ¸qÝ”9˜Q‘<”<ˆDð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð —H’H˜[¨$Ñ/Ô/ˆ	Ø�MŠM˜( IÑ.Ô.ˆõ .ÔEÀaÑHÔHÐõ �1—5’5˜ #Ñ&Ô&Ð-¨#Ñ.Ô.ˆÝ�1—5’5˜ #Ñ&Ô&Ð-¨#Ñ.Ô.ˆÝ�1—5’5˜ #Ñ&Ô&Ð-¨#Ñ.Ô.ˆÝ�9—=’= ¨¯ª°{ÀBÑ)GÔ)GÑHÔHÑIÔIˆØ—8’8˜J¨Ñ+Ô+ˆÝ,6°xÅÑ,FÔ,FÐM�3˜x™=œ=˜=ÈAÐÝ˜9Ÿ=š=Ð)9Ð;KÑLÔLÐQÐPQÑRÔRˆå*Ô?ØØØØØ'ØÝ,/°©G¬G°eªO¨OÅÀBÁÄÈ%ÂÀ C CÐVYð
ñ 
ô 
ˆð +¨^Ñ;ˆð &ØŸš +¨t¯xªx¸ÈÑ/SÔ/SÑTÔTØ—8’8˜E 5Ñ)Ô)Ø"Ø!%Ø#1Ý˜~Ñ.Ô.°Ò2ð
ð 
ð 	
s   ÁA%Á%A)Á,A))Nr#   r$   r%   Nr0   )ro   r   Fr;   N)r™   )Trž   )rb   N)ro   ro   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rÇ   rÆ   r„   r   r`   rÈ   rg   r[   r†   r   r“   r	   r˜   r�   r¢   r¥   r³   rÀ   r   r‡   rê   r°   Ústaticmethodr  © r8   r6   r"   r"   7   sÓ  € € € € € ðð ð (,Ø"Ø*-Ø!#Ø$(ðAFð AFà ”}ðAFð ðAFð #(ð	AFð
 ðAFð ˜S”MðAFð AFð AFð AFðFð ¨°#¬ð À$ð ð ð ð ð*$H¨ð $H°ð $Hð $Hð $Hð $HðL
 8¨E¤?ð 
ð 
ð 
ð 
ðB°3ð B¸4À¼9ð Bð Bð Bð Bð ØØØ),Ø9=ð
ð 
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð "'ð
ð ˜5 ¨¨uÐ!4Ô5Ô6ð
ð 
ˆcŒð
ð 
ð 
ð 
ð4  $ð	

ð 

àð

ð ! œð

ð ð	

ð
 
ˆcŒð

ð 

ð 

ð 

ð  $Øð	

ð 

àð

ð ð

ð ð	

ð
 
ˆcŒð

ð 

ð 

ð 

ð9¨$¨s¬)ð 9¸¸S¼	ð 9ð 9ð 9ð 9ð¨ð °ð ð ð ð ð 5ð 5ð 5ð 5ð" +/ðHð Hà˜˜S˜”>ðHð ! œðHð 
ˆcŒð	Hð Hð Hð HðT+ X¨c¤]ð +ð +ð +ð +ðd  "Øð*ð *àð*ð " #œYð*ð ˜˜S˜”>ð	*ð
 ð*ð ð*ð 
ð*ð *ð *ð *ðX ð.
°cð .
¸dÀ3ÈÀ8¼nð .
ð .
ð .
ñ „\ð.
ð .
ð .
r8   r"   ))r  rô   Úloggingr1   r…   Úcollectionsr   Útypingr   r   r   r   r   r	   Ú"src.agentic_engine.flight_recorderr
   r   Ú%src.agentic_engine.invariant_sentinelr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú	getLoggerrU   r"   r  r8   r6   ú<module>r     sË  ððð ð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð. 
ˆÔ	˜>Ñ	*Ô	*€ðz
ð z
ð z
ð z
ð z
ñ z
ô z
ð z
ð z
ð z
r8   