§
    ¼�žj7  ã                   óô   — d Z ddlZddlZddlmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ ddlmZ  ej         d¦  «        Z! G d„ d¦  «        Z"dS )u\  
Bá»™ Ä�iá»�u Phá»‘i TrÃ­ Tuá»‡ Trung TÃ¢m (Agentic Coordinator - FaÃ§ade Pattern)
Ä�Ã³ng vai trÃ² cáº§u ná»‘i duy nháº¥t káº¿t ná»‘i toÃ n bá»™ 8 phÃ¢n há»‡ Agentic vá»›i Tool hiá»‡n táº¡i
(control_center.py, overlay_gui.py, core_shm_bridge.py, log_watcher.py).
Ä�áº£m báº£o 100% thread-safe, non-blocking vÃ  tÆ°Æ¡ng thÃ­ch ngÆ°á»£c hoÃ n háº£o.
é    N)ÚAnyÚCallableÚDictÚListÚOptional)ÚLinUCBTacticalAdvisor)ÚBlackboxRecorder)ÚDPSAccumulator)ÚItemLifecycleManagerÚPreIdTriageResult)ÚReflectionCritic)ÚReflexParameterTuner)Ú
RunTracker)ÚItemComparisonResultÚ	ItemStatsÚWhatIsBetterEvaluator)ÚCoreTelemetrySnapshot)ÚLogEventÚAgenticCoordinatorc                   óH  — e Zd ZU dZdZed          ed<   edd„¦   «         Zd de	fd„Z
d	eeeef         gdf         ddfd
„Zde	ddfd„Zdeddfd„Zdeddfd„Z	 d!dededeeeef                  defd„Z	 	 d"dededededede	defd„Zdefd„Zdeeef         fd„Zd#d„ZdS )$r   uq   
    Ä�áº§u nÃ£o Ä‘iá»�u phá»‘i thá»‘ng nháº¥t toÃ n bá»™ há»‡ thá»‘ng Agentic Self-Learning cá»§a AutoPOE2.
    NÚ	_instanceÚreturnc                 óD   — | j         €t          ¦   «         | _         | j         S ©N)r   r   )Úclss    ú6C:\Projects\AutoPOE2\src\agentic_engine\coordinator.pyÚget_instancezAgenticCoordinator.get_instance(   s   € àŒ=Ð Ý.Ñ0Ô0ˆCŒMØŒ}Ðó    TÚenabledc                 óê  — || _         t          j        ¦   «         | _        t	          ¦   «         | _        t          d¬¦  «        | _        t          d¬¦  «        | _	        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t!          ¦   «         | _        t%          | j        ¦  «        | _        d| _        d| _        i | _        d| _        d| _        d | _        g | _        d S )	Ng      @)Úwindow_secondséx   )Úcapacityç        ÚHOLD_POSITIONu)   Há»‡ thá»‘ng tá»± há»�c Ä‘ang sáºµn sÃ ngr   )r   Ú	threadingÚLockÚ_lockr   Úrun_trackerr
   Údps_accumulatorr	   Úblackbox_recorderr   Úbandit_advisorr   Úreflex_tunerr   Úreflection_criticr   Ú	evaluatorr   Úitem_lifecycleÚcurrent_dpsÚlatest_tactical_actionÚlatest_ucb_scoresÚlatest_advice_headlineÚunidentified_items_countÚhooded_one_noticeÚ_ui_listeners©Úselfr   s     r   Ú__init__zAgenticCoordinator.__init__.   sÙ   € ØˆŒÝ”^Ñ%Ô%ˆŒ
õ &™<œ<ˆÔÝ-¸SÐAÑAÔAˆÔÝ!1¸3Ð!?Ñ!?Ô!?ˆÔÝ3Ñ5Ô5ˆÔÝ0Ñ2Ô2ˆÔÝ!1Ñ!3Ô!3ˆÔÝ.Ñ0Ô0ˆŒÝ2°4´>ÑBÔBˆÔð #&ˆÔØ+:ˆÔ#Ø35ˆÔØ+VˆÔ#Ø-.ˆÔ%Ø04ˆÔð FHˆÔÐÐr   Úcbc                 ó:   — | j                              |¦  «         d S r   )r7   Úappend)r9   r;   s     r   Úregister_ui_listenerz'AgenticCoordinator.register_ui_listenerG   s   € ØÔ×!Ò! "Ñ%Ô%Ð%Ð%Ð%r   c                 óV   — || _         t                               d|rdnd› �¦  «         d S )Nu2   [AgenticCoordinator] Tráº¡ng thÃ¡i Agentic Brain: u   Báº¬Tu   Táº®T)r   ÚloggerÚinfor8   s     r   Úset_enabledzAgenticCoordinator.set_enabledJ   s5   € ØˆŒÝ�ŠÐjÐT[ÐIhÈÈÐahÐjÐjÑkÔkÐkÐkÐkr   Úsnapshotc                 óê  — | j         r|j        sdS | j        5  | j                             |¦  «         |j        j        dk     r)|j        j        dk    r| j         	                    ¦   «          g }t          |d¦  «        r7|j        dk    r,d„ t          t          |j        d¦  «        ¦  «        D ¦   «         }| j                             |¦  «        | _        | j                             | j        ¬¦  «         | j                             |j        j        d|j        d	d
|j        | j        d	¬¦  «        }| j                             |¦  «        \  }}}|| _        || _        ddd¦  «         dS # 1 swxY w Y   dS )u5   Xá»­ lÃ½ snapshot telemetry gá»­i tá»« CoreShmBridge.Ng      9@r   Úmonsters_countc                 ó   — g | ]}|d dœ‘ŒS )iè  )ÚidÚhp© )Ú.0Úis     r   ú
<listcomp>z<AgenticCoordinator.on_telemetry_snapshot.<locals>.<listcomp>c   s    € ÐcÐcÐc°a 1¨DÐ1Ð1ÐcÐcÐcr   é
   )Úpeak_dpsç      Y@r$   g      T@©Úhp_pctÚes_pctÚmonster_countÚboss_poise_pctÚflask_charges_pctÚmap_tierÚ
recent_dpsÚdamage_taken_rate)r   Ú	is_onliner(   r+   Úrecord_snapshotÚplayerÚhp_percentageÚ
current_hpr-   Úrecord_near_deathÚhasattrrE   ÚrangeÚminr*   Úupdate_monsters_snapshotr1   r)   Úupdate_run_statsr,   Úextract_contextÚ
area_levelÚrecommend_actionr2   r3   )r9   rC   ÚmonstersÚctxÚactionÚscoreÚ
all_scoress          r   Úon_telemetry_snapshotz(AgenticCoordinator.on_telemetry_snapshotQ   sÔ  € àŒ|ð 	 8Ô#5ð 	ØˆFàŒZð  	0ð  	0àÔ"×2Ò2°8Ñ<Ô<Ð<ð ŒÔ,¨tÒ3Ð3¸¼Ô8RÐUVÒ8VÐ8VØÔ!×3Ò3Ñ5Ô5Ð5ð ˆHÝ�xÐ!1Ñ2Ô2ð d°xÔ7NÐQRÒ7RÐ7RàcÐc½5ÅÀXÔE\Ð^`ÑAaÔAaÑ;bÔ;bÐcÑcÔc�Ø#Ô3×LÒLÈXÑVÔVˆDÔð Ô×-Ò-°tÔ7GÐ-ÑHÔHÐHð Ô%×5Ò5Ø”Ô4ØØ&Ô5Ø"Ø"&Ø!Ô,ØÔ+Ø"%ð 6ñ 	ô 	ˆCð )-Ô(;×(LÒ(LÈSÑ(QÔ(QÑ%ˆF�E˜:Ø*0ˆDÔ'Ø%/ˆDÔ"ðA 	0ð  	0ð  	0ñ  	0ô  	0ð  	0ð  	0ð  	0ð  	0ð  	0ð  	0ð  	0øøøð  	0ð  	0ð  	0ð  	0ð  	0ð  	0s   ˜EE(Å(E,Å/E,Úeventc                 ó*  — | j         sdS | j        5  |j        dk    �r|j                             dd¦  «                             ¦   «         }| j                             |¦  «        }|r[|j        dk    rP| j	         
                    |j        |j        |j        ¬¦  «         |j        dk    r| j                             ¦   «          | j                             || j        ¬¦  «        }|                     d	¦  «        r|                     d
¦  «        | _        nd| _        |                      ¦   «          �nË|j        dk    �r t.                               d|j        › �¦  «         | j                             ¦   «          | j                             ¦   «          | j                             ¦   «         }|r|d                              dd¦  «        nd}|r|d                              dd¦  «        nd}| j	                             |||j        |¬¦  «        }|r†| j                             dd|d                              dd¦  «        dd|| j         d¬¦  «        }	| j         !                    | j"        dddd¬¦  «        }
| j         #                    | j"        |	|
¦  «         d|                     di ¦  «                             dd¦  «        › �| _$        |                      ¦   «          �nd|j        v s	d|j        v rà	 |j                             ¦   «          %                    ¦   «         }tM          |¦  «        dk    r/|d          '                    ¦   «         rtQ          |d         ¦  «        nd}n# tR          $ r d}Y nw xY w| j        |k    r| xj        |z  c_        nd| _        t.           *                    d|› d| j        › �¦  «         |                      ¦   «          n-|j        d v r$| xj        dz  c_        |                      ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )!u0   Xá»­ lÃ½ sá»± kiá»‡n nháº­t kÃ½ tá»« LogWatcher.NÚZONE_CHANGEu    Ä�Ã£ chuyá»ƒn Ä‘áº¿n khu vá»±c: Ú Ú	COMPLETED)Ú	area_nameÚ
duration_srN   r   )Úcurrent_area_nameÚunidentified_items_in_inventoryÚcan_interactÚaction_guidanceÚPLAYER_DEATHu>   [AgenticCoordinator] PhÃ¡t hiá»‡n ngÆ°á»�i chÆ¡i tá»­ tráº­n: éÿÿÿÿrr   ÚUnknownre   )rr   re   Úkiller_infoÚblackbox_ticksr$   rE   rO   rP   T)Úis_player_slainu   Háº­u kiá»ƒm tá»­ vong: Úlocal_diagnosisÚsummaryzItems identifiedzItem identifiedé   u7   [AgenticCoordinator] NgÆ°á»�i chÆ¡i Ä‘Ã£ giÃ¡m Ä‘á»‹nh u$    mÃ³n Ä‘á»“. CÃ²n láº¡i trong tÃºi: )Ú	ITEM_DROPÚITEM_PICKUP)+r   r(   Ú
event_typeÚmessageÚreplaceÚstripr)   Úon_zone_changeÚstatusr.   Úanalyze_map_completionrr   Úduration_secondsrN   Údeaths_countr-   Úrecord_clean_runr0   Ú check_the_hooded_one_interactionr5   Úgetr6   Ú_notify_ui_updater@   ÚwarningÚrecord_deathr+   Úget_recent_ticksÚanalyze_death_eventÚsenderr,   rd   r1   Úcompute_combat_rewardr2   Úupdate_feedbackr4   ÚsplitÚlenÚisdigitÚintÚ	ExceptionrA   )r9   rm   Ú	zone_nameÚcompleted_runÚhooded_checkÚticksrr   Úarea_lvlÚlessonrh   ÚrewardÚpartsÚcounts                r   Úon_log_eventzAgenticCoordinator.on_log_event{   sé  € àŒ|ð 	ØˆFàŒZð Q	)ð Q	)àÔ =Ò0Ñ0à!œM×1Ò1Ð2TÐVXÑYÔY×_Ò_ÑaÔa�	Ø $Ô 0× ?Ò ?À	Ñ JÔ J�ð !ð = ]Ô%9¸[Ò%HÐ%HØÔ*×AÒAØ"/Ô"9Ø#0Ô#AØ!.Ô!7ð Bñ ô ð ð %Ô1°QÒ6Ð6ØÔ)×:Ò:Ñ<Ô<Ð<ð  $Ô2×SÒSØ&/Ø48Ô4Qð  Tñ  ô  �ð  ×#Ò# NÑ3Ô3ð 2Ø-9×-=Ò-=Ð>OÑ-PÔ-P�DÔ*Ð*à-1�DÔ*à×&Ò&Ñ(Ô(Ð(Ñ(ð Ô! ^Ò3Ñ3Ý—’ÐoÐ`eÔ`mÐoÐoÑpÔpÐpØÔ ×-Ò-Ñ/Ô/Ð/ØÔ!×.Ò.Ñ0Ô0Ð0ð Ô.×?Ò?ÑAÔA�ØEJÐY˜E "œIŸMšM¨+°yÑAÔAÐAÐPY�	Ø=BÐI˜5 œ9Ÿ=š=¨°qÑ9Ô9Ð9È�ð Ô/×CÒCØ'Ø'Ø %¤Ø#(ð	 Dñ ô �ð ð 	bØÔ-×=Ò=Ø"¨3¸eÀB¼i¿mºmÐL\Ð^_Ñ>`Ô>`Ø'*¸cÈHØ#'Ô#3Àuð >ñ ô �Cð
 "Ô0×FÒFØÔ3°S¸#¸qÐRVð Gñ ô �Fð Ô'×7Ò7¸Ô8SÐUXÐZ`ÑaÔaÐaà.ÈÏÊÐTeÐgiÑIjÔIj×InÒInÐoxÐz|ÑI}ÔI}Ð.Ð.�Ô+Ø×&Ò&Ñ(Ô(Ð(Ñ(ð $ u¤}Ð4Ð4Ð8IÈUÌ]Ð8ZÐ8ZðØ!œM×/Ò/Ñ1Ô1×7Ò7Ñ9Ô9�EÝ-0°©Z¬Z¸!ª^¨^ÀÀaÄ×@PÒ@PÑ@RÔ@R¨^�C  a¤™MœM˜MÐXY�E�EøÝ ð ð ð Ø�E�E�EðøøøàÔ0°EÒ9Ð9ØÐ1Ô1°UÑ:Ð1Ô1Ð1à45�DÔ1Ý—’ð  aÐV[ð  að  að  BFô  B_ð  að  añ  bô  bð  bØ×&Ò&Ñ(Ô(Ð(Ð(ð Ô!Ð%AÐAÐAØÐ-Ô-°Ñ2Ð-Ô-Ø×&Ò&Ñ(Ô(Ð(ðcQ	)ð Q	)ð Q	)ñ Q	)ô Q	)ð Q	)ð Q	)ð Q	)ð Q	)ð Q	)ð Q	)ð Q	)øøøð Q	)ð Q	)ð Q	)ð Q	)ð Q	)ð Q	)s8   ‘KPË/A/MÍPÍM.Í+PÍ-M.Í.BPÐPÐPÚcurrent_equippedÚcandidate_itemÚplayer_resistsc                 ó>   — | j                              d|||¬¦  «        S )uS   Tráº£ lá»�i cÃ¢u há»�i: Ä�á»“ má»›i nháº·t cÃ³ tá»‘t hÆ¡n Ä‘á»“ Ä‘ang máº·c khÃ´ng?Ú
item_query)Úitem_idÚrevealed_statsr¦   r¨   )r0   Úprocess_identified_item)r9   r¦   r§   r¨   s       r   Úappraise_item_comparisonz+AgenticCoordinator.appraise_item_comparisonÖ   s0   € ð Ô"×:Ò:Ø Ø)Ø-Ø)ð	 ;ñ 
ô 
ð 	
r   é(   Ú	base_nameÚ
item_levelÚrarityÚslotÚscrolls_availableÚin_combat_zonec                 óB   — | j                              ||||||¬¦  «        S )uW   Ä�Ã¡nh giÃ¡ tiá»�n giÃ¡m Ä‘á»‹nh: Ä�á»“ nÃ y cÃ³ Ä‘Ã¡ng nháº·t hay tá»‘n Scroll khÃ´ng?)r°   r±   r²   r³   r´   rµ   )r0   Útriage_unidentified_item)r9   r°   r±   r²   r³   r´   rµ   s          r   r·   z+AgenticCoordinator.triage_unidentified_itemä   s6   € ð Ô"×;Ò;ØØ!ØØØ/Ø)ð <ñ 
ô 
ð 	
r   c                 óú   — t          ddddddddd	¬
¦	  «	        }t          dddddddddddd¬¦  «        }|                      ||ddddœ¦  «        }d|j        › d|j        › d�| _        |                      ¦   «          |S )uÇ   
        Thá»±c hiá»‡n má»™t ca tháº©m Ä‘á»‹nh trang bá»‹ máº«u cho Monk / Martial Artist:
        So sÃ¡nh gÄƒng tay Ä‘ang Ä‘eo (Iron Gauntlets) vá»›i gÄƒng tay má»›i nháº·t (Spiked Fists).
        zIron Gauntlets of the BearÚglovesé   g      (@r$   g      @é*   é   é   )	Únamer³   r±   Ú	flat_physÚ	flat_coldÚattack_speed_pctÚmax_lifeÚfire_resÚcold_resz Spiked Fists of the Polar VortexéK   g      @@g      M@g      2@g      <@éX   é    é$   é   é   )r¾   r³   r±   r¿   rÀ   rÁ   Úcrit_multiplier_pctrÂ   rÃ   rÄ   Ú	chaos_resÚspell_suppression_pct)ÚfireÚcoldÚ	lightningu   Tháº©m Ä‘á»‹nh Ä‘á»“: z (ú))r   r®   Úheadline_verdictÚdecisionr4   r�   )r9   ÚcurrÚcandÚress       r   Úsimulate_sample_item_appraisalz1AgenticCoordinator.simulate_sample_item_appraisal÷   sÊ   € õ
 Ø-ØØØØØ ØØØð

ñ 

ô 

ˆõ Ø3ØØØØØ!Ø $ØØØØØ"$ð
ñ 
ô 
ˆð ×+Ò+¨D°$ÀÈRÐ^`Ð8aÐ8aÑbÔbˆØ&f¸sÔ?SÐ&fÐ&fÐWZÔWcÐ&fÐ&fÐ&fˆÔ#Ø×ÒÑ Ô Ð Øˆ
r   c                 ó  — | j                              ¦   «         }| j                             ¦   «         }| j                             d¬¦  «        }| j        | j        | j        | j	        | j
        | j        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     d	d
¦  «        |                     dd¦  «        |                     dd¦  «        |dœS )u[   Tá»•ng há»£p toÃ n bá»™ tráº¡ng thÃ¡i cá»§a phÃ¢n há»‡ Agentic Ä‘á»ƒ hiá»ƒn thá»‹ lÃªn GUI.é   )ÚlimitÚ
total_runsr   Úavg_clear_timer$   Útotal_deathsÚfastest_clearÚflask_hp_thresholdgš™™™™™á?Úburst_dodge_thresholdg)\�Âõ(Ì?Úkiting_distanceg     €A@)r   r1   Úrecommended_actionÚadvice_headliner6   r5   Úsession_runsrÜ   rÝ   rÞ   Útuned_flask_hpÚtuned_dodge_burstÚtuned_kiting_distÚrecent_lessons)r)   Úget_session_summaryr-   Úget_current_parametersr.   Úget_recent_lessonsr   r1   r2   r4   r6   r5   rŽ   )r9   Úsession_statsÚreflex_paramsrè   s       r   Úget_dashboard_statez&AgenticCoordinator.get_dashboard_state  s  € àÔ(×<Ò<Ñ>Ô>ˆØÔ)×@Ò@ÑBÔBˆØÔ/×BÒBÈÐBÑKÔKˆð ”|ØÔ+Ø"&Ô"=Ø#Ô:Ø!%Ô!7Ø(,Ô(EØ)×-Ò-¨l¸AÑ>Ô>Ø+×/Ò/Ð0@À#ÑFÔFØ)×-Ò-¨n¸aÑ@Ô@Ø*×.Ò.¨ÀÑDÔDØ+×/Ò/Ð0DÀdÑKÔKØ!.×!2Ò!2Ð3JÈDÑ!QÔ!QØ!.×!2Ò!2Ð3DÀdÑ!KÔ!KØ,ð
ð 
ð 	
r   c                 óÂ   — |                       ¦   «         }| j        D ]B}	  ||¦  «         Œ# t          $ r'}t                               d|› �¦  «         Y d }~Œ;d }~ww xY wd S )Nu(   [AgenticCoordinator] Lá»—i UI listener: )rî   r7   r›   r@   Úerror)r9   Ústater;   Úes       r   r�   z$AgenticCoordinator._notify_ui_update1  s•   € Ø×(Ò(Ñ*Ô*ˆØÔ$ð 	Mð 	MˆBðMØ��5‘	”	�	�	øÝð Mð Mð MÝ—’ÐKÈÐKÐKÑLÔLÐLÐLÐLÐLÐLÐLøøøøðMøøøð	Mð 	Ms   Ÿ+«
AµAÁA)r   r   )Tr   )r¯   T)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__Úclassmethodr   Úboolr:   r   r   Ústrr   r>   rB   r   rl   r   r¥   r   rš   r   r®   r   r·   r×   rî   r�   rI   r   r   r   r   !   s8  € € € € € € ðð ð 15€IˆxÐ,Ô-Ð4Ð4Ñ4àðð ð ñ „[ðð
Hð H ð Hð Hð Hð Hð2& x°°c¸3°h´Ð0@À$Ð0FÔ'Gð &ÈDð &ð &ð &ð &ðl 4ð l¨Dð lð lð lð lð%0Ð.Cð %0Èð %0ð %0ð %0ð %0ðTV) (ð V)¨tð V)ð V)ð V)ð V)ð~ 48ð	
ð 
à#ð
ð "ð
ð !  c¨3 h¤Ô0ð	
ð
 
ð
ð 
ð 
ð 
ð( "$Ø#ð
ð 
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð 
ð
ð 
ð 
ð 
ð&!Ð0Dð !ð !ð !ð !ðF
 T¨#¨s¨(¤^ð 
ð 
ð 
ð 
ð.Mð Mð Mð Mð Mð Mr   )#rö   Úloggingr&   Útypingr   r   r   r   r   Ú!src.agentic_engine.bandit_advisorr   Úsrc.agentic_engine.blackboxr	   Úsrc.agentic_engine.dps_meterr
   Ú!src.agentic_engine.item_lifecycler   r   Ú$src.agentic_engine.reflection_criticr   Úsrc.agentic_engine.reflex_tunerr   Úsrc.agentic_engine.run_trackerr   Ú!src.agentic_engine.what_is_betterr   r   r   Ú"src.assistant_tool.core_shm_bridger   Úsrc.assistant_tool.log_watcherr   Ú	getLoggerr@   r   rI   r   r   ú<module>r     s™  ððð ð €€€Ø Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à CÐ CÐ CÐ CÐ CÐ CØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð BÐ AÐ AÐ AÐ AÐ AØ @Ð @Ð @Ð @Ð @Ð @Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð
 EÐ DÐ DÐ DÐ DÐ DØ 3Ð 3Ð 3Ð 3Ð 3Ð 3à	ˆÔ	Ð/Ñ	0Ô	0€ðVMð VMð VMð VMð VMñ VMô VMð VMð VMð VMr   