§
    -c¬jŸ;  ã                  óB  — d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
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 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# dd	l$m%Z%  ej&        d
¦  «        Z'dZ(dZ)dZ*e	 G d„ d¦  «        ¦   «         Z+ G d„ d
¦  «        Z,dS )u˜  AutoPOE2 - Bá»™ GÃ¡c Cá»•ng & GiÃ¡m SÃ¡t Thá»�i Gian Thá»±c (Live Run Sentinel)
PhÃ¢n há»‡: Lead QA & Governance Sentinel (SÆ° Ä‘oÃ n 4)

Nhiá»‡m vá»¥:
- Cháº¡y ná»�n thá»¥ Ä‘á»™ng tuyá»‡t Ä‘á»‘i (Zero-Input Guarantee: Cáº¤M phÃ¡t lá»‡nh phÃ­m/chuá»™t).
- GiÃ¡m sÃ¡t Ä‘a kÃªnh Ä‘á»“ng thá»�i:
  1. Client.txt: Zone transitions, player deaths, fatal exceptions, portal errors.
  2. Windows Focus: Tráº¡ng thÃ¡i focus tiá»�n cáº£nh cá»§a tiáº¿n trÃ¬nh game (PID 22632).
  3. Live Invariants: HP/ES vitals, XYZ planar boundaries, Watchdog lag (>1500ms warning, >3000ms error).
- Tá»± Ä‘á»™ng Ä‘Ã³ng gÃ³i Incident Dossier chuáº©n 6 thÃ nh pháº§n vÃ o debug_harness/incidents/ khi phÃ¡t hiá»‡n báº¥t thÆ°á»�ng.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 4: Tá»± Ä‘á»™ng khÃ³a cháº·n há»“i quy.
- Rule 5: Cáº¥m mock áº£o, 100% dá»¯ liá»‡u thá»±c nghiá»‡m.
- Rule 8: Kiá»ƒm toÃ¡n toÃ n diá»‡n Master Invariant Matrix (18 Invariants).
é    )ÚannotationsN)Ú	dataclassÚfield)Údatetime)ÚAnyÚCallableÚDictÚListÚOptionalÚTuple)ÚMultimodalFlightRecorder)Ú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_OPTICAL_RAM_DESYNCÚERR_PLAYER_DEAD_OR_ZEROÚERR_WATCHDOG_HEARTBEAT_TIMEOUTÚERR_XYZ_FROZEN_AT_ORIGINÚERR_XYZ_OUT_OF_BOUNDSÚERR_XYZ_TELEPORT_ANOMALYÚInvariantSentinel)ÚConfigÚLiveRunSentinelz)INV-F8-01_ERR_FOCUS_LOST_WHILE_AUTONOMOUSz,INV-WDG-03_ERR_WATCHDOG_HEARTBEAT_LAG_1500MSz*INV-KEY-02_ERR_PORTALS_DISABLED_IN_HIDEOUTc                  óÈ   — e Zd ZU dZdZded<   dZded<   dZded<   d	Zd
ed<   dZ	ded<   dZ
ded<   dZded<   dZded<    ee¬¦  «        Zded<    ee¬¦  «        Zded<   dS )ÚLiveSentinelStatusu9   áº¢nh chá»¥p tráº¡ng thÃ¡i giÃ¡m sÃ¡t thá»�i gian thá»±c.TÚboolÚ
is_healthyr   ÚintÚ
target_pidÚis_game_focusedÚ ÚstrÚcurrent_areaÚlast_heartbeat_msÚheartbeat_age_msFÚautonomous_activeÚincidents_recorded)Údefault_factoryú	List[str]Úactive_anomaliesÚrecent_log_eventsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   Ú__annotations__r#   r$   r'   r(   r)   r*   r+   r   Úlistr.   r/   © ó    ú8C:\Projects\AutoPOE2\src\assistant_tool\live_sentinel.pyr   r   8   sâ   € € € € € € àCÐCØ€JÐÐÐÑØ€JÐÐÐÑØ €OÐ Ð Ð Ñ Ø€LÐÐÐÑØÐÐÐÐÑØÐÐÐÐÑØ#ÐÐ#Ð#Ð#Ñ#ØÐÐÐÐÑØ"' %¸Ð"=Ñ"=Ô"=ÐÐ=Ð=Ð=Ñ=Ø#( 5¸Ð#>Ñ#>Ô#>ÐÐ>Ð>Ð>Ñ>Ð>Ð>r7   r   c                  ó”   — e Zd ZdZ	 	 	 	 	 	 d+d,d„Zd-d„Zd.d„Zd/d„Zd0d„Zd1d2d!„Z	d3d"„Z
d1d2d#„Zd4d%„Zd5d'„Zd6d(„Zd6d)„ZeZeZd6d*„ZdS )7r   uÆ   
    Bá»™ gÃ¡c cá»•ng thá»¥ Ä‘á»™ng giÃ¡m sÃ¡t phiÃªn cháº¡y thá»±c Ä‘á»‹a trÃªn Client game POE2.
    Ä�áº£m báº£o an toÃ n tÃ i khoáº£n vÃ  Ä‘Ã³ng gÃ³i chá»©ng cá»© sá»± cá»‘ ngay tá»©c thÃ¬.
    Núdebug_harness/incidentséÜ  é¸  çš™™™™™©?r#   úOptional[int]Úlog_pathúOptional[str]Úincidents_dirr&   Úheartbeat_warning_msr"   Úheartbeat_timeout_msÚpoll_interval_sÚfloatc                ód  — |pd| _         |pt          j        ¦   «         | _        || _        || _        || _        t          |¬¦  «        | _        d| _	        d | _
        t          j        ¦   «         | _        d| _        t          t!          j        ¦   «         dz  ¦  «        | _        d| _        i | _        d| _        i | _        g | _        g | _        d| _        d| _        | j        rft4          j                             | j        ¦  «        rB	 t4          j                             | j        ¦  «        | _        n# t<          $ r
 d| _        Y nw xY wg | _        tA          j!        d¦  «        | _"        tA          j!        dt@          j#        ¦  «        | _$        tA          j!        dt@          j#        ¦  «        | _%        d S )	Nr   )Ú
output_dirFéè  r%   zG^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).+?\[SCENE\] Set Source \[(.+?)\]zPortals are disabled herezX(\[FATAL\]|\[EXCEPTION\]|0xC0000005|Access Violation|Unhandled Exception|Crash detected))&r#   r   Úfind_poe2_client_logr?   rB   rC   rD   r   Úflight_recorderÚ_runningÚ_threadÚ	threadingÚLockÚ_lockr*   r"   Útimer(   Úhas_received_heartbeatÚ_last_dossier_timer'   Úlast_telemetryÚrecent_log_linesr.   r+   Ú_log_file_posÚosÚpathÚisfileÚgetsizeÚ	ExceptionÚon_incident_callbacksÚreÚcompileÚ	_re_sceneÚ
IGNORECASEÚ_re_portals_disabledÚ	_re_fatal)Úselfr#   r?   rA   rB   rC   rD   s          r8   Ú__init__zLiveRunSentinel.__init__M   s¢  € ð %˜/¨ˆŒØ ÐA¥FÔ$?Ñ$AÔ$AˆŒØ$8ˆÔ!Ø$8ˆÔ!Ø.ˆÔõ  8À=ÐQÑQÔQˆÔð ˆŒØ37ˆŒÝ”^Ñ%Ô%ˆŒ
ð "'ˆÔÝ!$¥T¤Y¡[¤[°4Ñ%7Ñ!8Ô!8ˆÔØ&+ˆÔ#Ø46ˆÔØˆÔØ.0ˆÔØ+-ˆÔØ+-ˆÔØ"#ˆÔð ˆÔØŒ=ð 	'�RœWŸ^š^¨D¬MÑ:Ô:ð 	'ð'Ý%'¤W§_¢_°T´]Ñ%CÔ%C�Ô"Ð"øÝð 'ð 'ð 'Ø%&�Ô"Ð"Ð"ð'øøøð ^`ˆÔ"õ œÐ$nÑoÔoˆŒÝ$&¤JÐ/KÍRÌ]Ñ$[Ô$[ˆÔ!ÝœÐ$õ  BDô  BOñ  Pô  PˆŒˆˆs   Ä)D1 Ä1EÅEÚcallbackú0Callable[[str, List[str], Dict[str, Any]], None]ÚreturnÚNonec                ó:   — | j                              |¦  «         dS )uB   Ä�Äƒng kÃ½ callback nháº­n thÃ´ng bÃ¡o khi phÃ¡t hiá»‡n sá»± cá»‘.N)r[   Úappend)rb   rd   s     r8   Úregister_incident_callbackz*LiveRunSentinel.register_incident_callback   s   € àÔ"×)Ò)¨(Ñ3Ô3Ð3Ð3Ð3r7   Úactiver    c                óT   — | j         5  || _        ddd¦  «         dS # 1 swxY w Y   dS )u6   Cáº­p nháº­t cá»� tá»± hÃ nh F8 Ä‘ang Báº¬T hay Táº®T.N)rO   r*   )rb   rk   s     r8   Úset_autonomous_modez#LiveRunSentinel.set_autonomous_modeƒ   sv   € àŒZð 	,ð 	,Ø%+ˆDÔ"ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,s   ˆ�!¤!Ú	telemetryúDict[str, Any]c                óD  — | j         5  || _        d| _        t          t	          j        ¦   «         dz  ¦  «        }|                     d|¦  «        | _        d|v r|d         r|d         | _        | j         	                    |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )u;   Cáº­p nháº­t telemetry má»›i nháº¥t tá»« Shared Memory IPC.TrH   Útimestamp_msÚ	area_nameN)
rO   rS   rQ   r"   rP   Úgetr(   r'   rJ   Úrecord_tick)rb   rn   Únow_mss      r8   Úupdate_telemetryz LiveRunSentinel.update_telemetryˆ   sç   € àŒZð 		8ð 		8Ø"+ˆDÔØ*.ˆDÔ'Ý�œ™œ tÑ+Ñ,Ô,ˆFØ%.§]¢]°>À6Ñ%JÔ%JˆDÔ"Ø˜iÐ'Ð'¨I°kÔ,BÐ'Ø$-¨kÔ$:�Ô!ð Ô ×,Ò,¨YÑ7Ô7Ð7ð		8ð 		8ð 		8ñ 		8ô 		8ð 		8ð 		8ð 		8ð 		8ð 		8ð 		8ð 		8øøøð 		8ð 		8ð 		8ð 		8ð 		8ð 		8s   ˆB BÂBÂBc                óp  — 	 ddl }|j        j        }|                     ¦   «         }|sdS |                     ¦   «         }|                     ||                     |¦  «        ¦  «         t          |j        ¦  «        }| j	        dk    r|| j	        k    S ddl
m}  |¦   «         }||k    S # t          $ r Y dS w xY w)uW   Kiá»ƒm tra cá»­a sá»• tiá»�n cáº£nh cá»§a Windows cÃ³ khá»›p tiáº¿n trÃ¬nh game khÃ´ng.r   NF)Úfind_poe2_windowT)ÚctypesÚwindllÚuser32ÚGetForegroundWindowÚc_ulongÚGetWindowThreadProcessIdÚbyrefr"   Úvaluer#   Úsrc.common.win32_windowrx   rZ   )rb   ry   r{   Úfg_hwndÚpidÚcurrent_fg_pidrx   Úpoe_hwnds           r8   Úis_game_window_focusedz&LiveRunSentinel.is_game_window_focused•   sà   € ð	ØˆMˆMˆMØ”]Ô)ˆFØ×0Ò0Ñ2Ô2ˆGØð Ø�uà—.’.Ñ"Ô"ˆCØ×+Ò+¨G°V·\²\À#Ñ5FÔ5FÑGÔGÐGÝ  ¤™^œ^ˆNàŒ Ò"Ð"Ø%¨¬Ò8Ð8ð AÐ@Ð@Ð@Ð@Ð@Ø'Ð'Ñ)Ô)ˆHØ˜hÒ&Ð&øÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚&B' ªA&B' ÂB' Â'
B5Â4B5ru   r-   c                ó”  — |€#t          t          j        ¦   «         dz  ¦  «        }g }| j        r.|                      ¦   «         s|                     t
          ¦  «         | j        rU|| j        z
  }|| j        k    r|                     t          ¦  «         n%|| j
        k    r|                     t          ¦  «         | j        �rt          j        | j        ¦  «        }|                     |¦  «         t!          | j                             dd¦  «        pd¦  «        }t!          | j                             dd¦  «        pd¦  «        }t!          | j                             dd¦  «        pd¦  «        }t          j        |||| j        t          | j                             dd¦  «        pd¦  «        ¬	¦  «        }|                     |¦  «         |S )
uU   Kiá»ƒm toÃ¡n toÃ n diá»‡n cÃ¡c báº¥t biáº¿n sá»‘ng táº¡i thá»�i Ä‘iá»ƒm hiá»‡n táº¡i.NrH   Úpos_xç        Úpos_yÚpos_zÚmonsters_countr   )rˆ   rŠ   r‹   rr   rŒ   )r"   rP   r*   r†   ri   ÚERR_FOCUS_LOST_WHILE_AUTONOMOUSrQ   r(   rC   r   rB   ÚERR_WATCHDOG_HEARTBEAT_LAGrS   r   Úcheck_vitals_invariantsÚextendrE   rs   Úcheck_xyz_invariantsr'   )	rb   ru   Ú	anomaliesÚheartbeat_ageÚ
vital_errsrˆ   rŠ   r‹   Úxyz_errss	            r8   Úcheck_live_invariantsz%LiveRunSentinel.check_live_invariants¬   sÈ  € àˆ>Ý�œ™œ tÑ+Ñ,Ô,ˆFà!ˆ	ð Ô!ð 	>¨$×*EÒ*EÑ*GÔ*Gð 	>Ø×ÒÕ<Ñ=Ô=Ð=ð Ô&ð 	=Ø" TÔ%;Ñ;ˆMØ˜tÔ8Ò8Ð8Ø× Ò Õ!?Ñ@Ô@Ð@Ð@Ø Ô!:Ò:Ð:Ø× Ò Õ!;Ñ<Ô<Ð<ð Ôñ 	'å*ÔBÀ4ÔCVÑWÔWˆJØ×Ò˜ZÑ(Ô(Ð(õ ˜$Ô-×1Ò1°'¸3Ñ?Ô?ÐFÀ3ÑGÔGˆEÝ˜$Ô-×1Ò1°'¸3Ñ?Ô?ÐFÀ3ÑGÔGˆEÝ˜$Ô-×1Ò1°'¸3Ñ?Ô?ÐFÀ3ÑGÔGˆEå(Ô=ØØØØÔ+Ý" 4Ô#6×#:Ò#:Ð;KÈQÑ#OÔ#OÐ#TÐSTÑUÔUðñ ô ˆHð ×Ò˜XÑ&Ô&Ð&àÐr7   c                óp  — | j         r$t          j                             | j         ¦  «        sg S g }	 t          j                             | j         ¦  «        }|| j        k     rd| _        || j        k    �rt          | j         ddd¬¦  «        5 }|                     | j        ¦  «         |                     || j        z
  ¦  «        }| 	                    ¦   «         | _        ddd¦  «         n# 1 swxY w Y   | 
                    ¦   «         D ]y}|                     ¦   «         }|ra|                     |¦  «         | j                             |¦  «         t          | j        ¦  «        dk    r| j                             d¦  «         Œzn4# t           $ r'}t"                               d|› �¦  «         Y d}~nd}~ww xY w|S )	u:   Ä�á»�c vÃ  trÃ­ch xuáº¥t cÃ¡c dÃ²ng má»›i tá»« Client.txt.r   Úrzutf-8Úreplace)ÚencodingÚerrorsNé2   u   Lá»—i Ä‘á»�c Client.txt: )r?   rV   rW   rX   rY   rU   ÚopenÚseekÚreadÚtellÚ
splitlinesÚstripri   rT   ÚlenÚpoprZ   ÚloggerÚdebug)rb   Ú	new_linesÚcurrent_sizeÚfÚchunkÚlineÚcleanÚes           r8   Úpoll_client_logzLiveRunSentinel.poll_client_logÕ   sò  € àŒ}ð 	¥B¤G§N¢N°4´=Ñ$AÔ$Að 	ØˆIà!ˆ	ð	:Ýœ7Ÿ?š?¨4¬=Ñ9Ô9ˆLØ˜dÔ0Ò0Ð0à%&�Ô"à˜dÔ0Ò0Ñ0Ý˜$œ-¨°wÀyÐQÑQÔQð 2ÐUVØ—F’F˜4Ô-Ñ.Ô.Ð.ØŸFšF <°$Ô2DÑ#DÑEÔE�EØ)*¯ª©¬�DÔ&ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð
 "×,Ò,Ñ.Ô.ð 9ð 9�DØ ŸJšJ™LœL�EØð 9Ø!×(Ò(¨Ñ/Ô/Ð/ØÔ-×4Ò4°UÑ;Ô;Ð;Ý˜tÔ4Ñ5Ô5¸Ò:Ð:Ø Ô1×5Ò5°aÑ8Ô8Ð8øøøÝð 	:ð 	:ð 	:Ý�LŠLÐ8°QÐ8Ð8Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð	:øøøð Ðs>   ±AF ÂAC(ÃF Ã(C,Ã,F Ã/C,Ã0BF Æ
F3ÆF.Æ.F3c                óâ  — |€#t          t          j        ¦   «         dz  ¦  «        }|                      ¦   «         }g }|D ]Ï}| j                             |¦  «        }|rD|                     d¦  «                             ¦   «         }|                     ¦   «         dvr|| _        | j	                             |¦  «        r| 
                    t          ¦  «         | j                             |¦  «        r| 
                    t          › d|› �¦  «         ŒÐ|                      |¬¦  «        }t          t!          ||z   ¦  «        ¦  «        }|| _        d„ |D ¦   «         }	|	r|                      |	|¬¦  «         |S )u<   Thá»±c thi 1 chu ká»³ giÃ¡m sÃ¡t thá»¥ Ä‘á»™ng (Zero Input).NrH   é   >   úact 1úact 2úact 3ú(null)ú	world mapÚatlasú:)ru   c                ó(   — g | ]}|t           k    ¯|‘ŒS r6   )rŽ   )Ú.0Úas     r8   ú
<listcomp>z0LiveRunSentinel.process_tick.<locals>.<listcomp>  s.   € ð 
ð 
ð 
ØØÕ.Ò.Ð.ð Ø.Ð.Ð.r7   )r"   rP   r®   r^   ÚsearchÚgroupr¢   Úlowerr'   r`   ri   ÚERR_CLIENT_LOG_PORTAL_DISABLEDra   r   r–   r5   Úsetr.   Ú_trigger_incident_packaging)
rb   ru   Únew_log_linesÚlog_anomaliesr«   Úm_sceneÚzoneÚlive_anomaliesÚtotal_anomaliesÚcritical_anomaliess
             r8   Úprocess_tickzLiveRunSentinel.process_tickó   s”  € àˆ>Ý�œ™œ tÑ+Ñ,Ô,ˆFð ×,Ò,Ñ.Ô.ˆð $&ˆØ!ð 	Oð 	OˆDà”n×+Ò+¨DÑ1Ô1ˆGØð -Ø—}’} QÑ'Ô'×-Ò-Ñ/Ô/�Ø—:’:‘<”<Ð'bÐbÐbØ(,�DÔ%ð Ô(×/Ò/°Ñ5Ô5ð EØ×$Ò$Õ%CÑDÔDÐDð Œ~×$Ò$ TÑ*Ô*ð OØ×$Ò$Õ(DÐ%MÐ%MÀtÐ%MÐ%MÑNÔNÐNøð ×3Ò3¸6Ð3ÑBÔBˆå�s =°>Ñ#AÑBÔBÑCÔCˆØ /ˆÔð
ð 
Ø&ð
ñ 
ô 
Ðð
 ð 	PØ×,Ò,Ð-?ÈÐ,ÑOÔOÐOàÐr7   r’   c           
     óà  — |d         }t          j         ¦   «         }|| j                             |d¦  «        z
  dk     rdS || j        |<   t                               d|› d|› �¦  «         t          | j        ¦  «        }|                     d| j        ¦  «         |                     d|¦  «         |  	                    ¦   «         |d	<   | j
        |d
<   | j                             |||t          | j        dd…         ¦  «        d|› d|› �gdd¬¦  «        }| xj        dz  c_        | j        D ]D}	  ||||¦  «         Œ# t"          $ r'}t                               d|› �¦  «         Y d}~Œ=d}~ww xY w|S )u2   Ä�Ã³ng gÃ³i há»“ sÆ¡ sá»± cá»‘ (Incident Dossier).r   r‰   g      $@r%   u/   ðŸš¨ [LiveRunSentinel] PHÃ�T HIá»†N Sá»° Cá»�: u    | Vi pháº¡m: rr   rq   r$   r*   iìÿÿÿNz[LiveRunSentinel] Detected z at uS   Live Run Sentinel phÃ¡t hiá»‡n báº¥t thÆ°á»�ng trong phiÃªn cháº¡y thá»±c nghiá»‡m.u[   Kiá»ƒm tra tráº¡ng thÃ¡i Client vÃ  tá»�a Ä‘á»™ nhÃ¢n váº­t táº¡i thá»�i Ä‘iá»ƒm sá»± cá»‘.)Úincident_typeÚviolated_invariantsrn   Úcore_log_linesÚcompanion_log_linesÚroot_cause_hintÚsuggested_fixé   u   Lá»—i gá»�i incident callback: )rP   rR   rs   r¥   ÚerrorÚdictrS   Ú
setdefaultr'   r†   r*   rJ   Úpackage_incidentr5   rT   r+   r[   rZ   Úwarning)	rb   r’   ru   Ú	first_errÚnow_secÚtelemetry_payloadÚdossier_pathÚcbr­   s	            r8   rÁ   z+LiveRunSentinel._trigger_incident_packaging  sÌ  € à˜a”Lˆ	Ý”)‘+”+ˆØ�TÔ,×0Ò0°¸CÑ@Ô@Ñ@À4ÒGÐGØ�2Ø-4ˆÔ 	Ñ*å�ŠÐkÀyÐkÐkÐ`iÐkÐkÑlÔlÐlå  Ô!4Ñ5Ô5ÐØ×$Ò$ [°$Ô2CÑDÔDÐDØ×$Ò$ ^°VÑ<Ô<Ð<Ø/3×/JÒ/JÑ/LÔ/LÐÐ+Ñ,Ø15Ô1GÐÐ-Ñ.àÔ+×<Ò<Ø#Ø )Ø'Ý Ô 5°c°d°dÔ ;Ñ<Ô<Ø!V¸yÐ!VÐ!VÈfÐ!VÐ!VÐ WØqØwð =ñ 
ô 
ˆð 	ÐÔ 1Ñ$ÐÔàÔ,ð 	Fð 	FˆBðFØ��9˜iÐ):Ñ;Ô;Ð;Ð;øÝð Fð Fð FÝ—’ÐDÀÐDÐDÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøð Ðs   Ä,D:Ä:
E+ÅE&Å&E+r   c                ód  — t          t          j        ¦   «         dz  ¦  «        }t          t          | j        ¦  «        dk    | j        |                      ¦   «         | j        | j        || j        z
  | j	        | j
        t          | j        ¦  «        t          | j        dd…         ¦  «        ¬¦
  «
        S )u@   Láº¥y toÃ n bá»™ thÃ´ng sá»‘ bÃ¡o cÃ¡o tráº¡ng thÃ¡i giÃ¡m sÃ¡t.rH   r   éûÿÿÿN)
r!   r#   r$   r'   r(   r)   r*   r+   r.   r/   )r"   rP   r   r£   r.   r#   r†   r'   r(   r*   r+   r5   rT   )rb   ru   s     r8   Ú
get_statuszLiveRunSentinel.get_statusB  s    € å•T”Y‘[”[ 4Ñ'Ñ(Ô(ˆÝ!Ý˜4Ô0Ñ1Ô1°QÒ6Ø”Ø ×7Ò7Ñ9Ô9ØÔ*Ø"Ô4Ø# dÔ&<Ñ<Ø"Ô4Ø#Ô6Ý! $Ô"7Ñ8Ô8Ý" 4Ô#8¸¸¸Ô#=Ñ>Ô>ð
ñ 
ô 
ð 	
r7   c                ó4  — | j         5  | j        r	 ddd¦  «         dS d| _        t          j        | j        d¬¦  «        | _        | j                             ¦   «          t                               d| j	        › �¦  «         ddd¦  «         dS # 1 swxY w Y   dS )u6   Khá»Ÿi Ä‘á»™ng luá»“ng giÃ¡m sÃ¡t thá»¥ Ä‘á»™ng ná»�n.NT)ÚtargetÚdaemonuN   âœ… [LiveRunSentinel] Ä�Ã£ khá»Ÿi cháº¡y luá»“ng giÃ¡m sÃ¡t thá»¥ Ä‘á»™ng PID=)
rO   rK   rM   ÚThreadÚ	_run_looprL   Ústartr¥   Úinfor#   ©rb   s    r8   Ústart_monitoringz LiveRunSentinel.start_monitoringR  s  € àŒZð 	|ð 	|ØŒ}ð Øð	|ð 	|ð 	|ñ 	|ô 	|ð 	|ð 	|ð 	|ð !ˆDŒMÝ$Ô+°4´>È$ÐOÑOÔOˆDŒLØŒL×ÒÑ Ô Ð Ý�KŠKÐzÐimÔixÐzÐzÑ{Ô{Ð{ð	|ð 	|ð 	|ñ 	|ô 	|ð 	|ð 	|ð 	|ð 	|ð 	|ð 	|ð 	|øøøð 	|ð 	|ð 	|ð 	|ð 	|ð 	|s   ˆ	BžA"BÂBÂBc                óÆ   — d| _         | j        rP| j                             ¦   «         r9| j                             d¬¦  «         t                               d¦  «         dS dS dS )u#   Dá»«ng luá»“ng giÃ¡m sÃ¡t an toÃ n.Fg      ø?)Útimeoutu?   ðŸ›‘ [LiveRunSentinel] Ä�Ã£ dá»«ng luá»“ng giÃ¡m sÃ¡t an toÃ n.N)rK   rL   Úis_aliveÚjoinr¥   rå   ræ   s    r8   Ústop_monitoringzLiveRunSentinel.stop_monitoring\  st   € àˆŒØŒ<ð 	[˜DœL×1Ò1Ñ3Ô3ð 	[ØŒL×Ò cÐÑ*Ô*Ð*Ý�KŠKÐYÑZÔZÐZÐZÐZð	[ð 	[ð 	[ð 	[r7   c                óì   — | j         rl	 |                      ¦   «          n4# t          $ r'}t                               d|› �¦  «         Y d}~nd}~ww xY wt          j        | j        ¦  «         | j         °jdS dS )u#   VÃ²ng láº·p giÃ¡m sÃ¡t liÃªn tá»¥c.u$   Lá»—i trong vÃ²ng láº·p giÃ¡m sÃ¡t: N)rK   rÉ   rZ   r¥   rÒ   rP   ÚsleeprD   )rb   r­   s     r8   rã   zLiveRunSentinel._run_loopg  s§   € àŒmð 	-ðIØ×!Ò!Ñ#Ô#Ð#Ð#øÝð Ið Ið IÝ—’ÐGÀAÐGÐGÑHÔHÐHÐHÐHÐHÐHÐHøøøøðIøøøåŒJ�tÔ+Ñ,Ô,Ð,ð Œmð 	-ð 	-ð 	-ð 	-ð 	-s   ‰ ž
A¨A
Á
A)NNr:   r;   r<   r=   )r#   r>   r?   r@   rA   r&   rB   r"   rC   r"   rD   rE   )rd   re   rf   rg   )rk   r    rf   rg   )rn   ro   rf   rg   )rf   r    )N)ru   r>   rf   r-   )rf   r-   )r’   r-   ru   r"   rf   r&   )rf   r   )rf   rg   )r0   r1   r2   r3   rc   rj   rm   rv   r†   r–   r®   rÉ   rÁ   rÞ   rç   rì   rä   Ústoprã   r6   r7   r8   r   r   G   sb  € € € € € ðð ð %)Ø"&Ø6Ø$(Ø$(Ø!%ð0Pð 0Pð 0Pð 0Pð 0Pðd4ð 4ð 4ð 4ð,ð ,ð ,ð ,ð
8ð 8ð 8ð 8ðð ð ð ð.'ð 'ð 'ð 'ð 'ðRð ð ð ð<)ð )ð )ð )ð )ðV"ð "ð "ð "ðH
ð 
ð 
ð 
ð |ð |ð |ð |ð[ð [ð [ð [ð €EØ€Dð-ð -ð -ð -ð -ð -r7   )-r3   Ú
__future__r   ÚloggingrV   r\   rM   rP   Údataclassesr   r   r   Útypingr   r   r	   r
   r   r   Ú"src.agentic_engine.flight_recorderr   Ú%src.agentic_engine.invariant_sentinelr   r   r   r   r   r   r   r   r   r   r   r   r   r   Úsrc.assistant_tool.configr   Ú	getLoggerr¥   r�   rŽ   r¿   r   r   r6   r7   r8   ú<module>rø      s  ððð ð" #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  -Ð ,Ð ,Ð ,Ð ,Ð ,à	ˆÔ	Ð,Ñ	-Ô	-€ð #NÐ ØKÐ Ø!MÐ ð ð?ð ?ð ?ð ?ð ?ñ ?ô ?ñ „ð?ðg-ð g-ð g-ð g-ð g-ñ g-ô g-ð g-ð g-ð g-r7   