§
    Û‰¬j)"  ã                  óØ  — d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ  ej        d
¦  «        Z e¦   «         Z e¦   «         Z e¦   «         Ze                     dee         ¬¦  «         e eg d¢¦  «        ¦  «        fd2d„¦   «         Ze                     de¬¦  «         e eg d¢¦  «        ¦  «        fd3d„¦   «         Z e                     d¦  «        d e eg d¢¦  «        ¦  «        fd4d„¦   «         Z!e                     d¦  «         e eg d¢¦  «        ¦  «        fd5d„¦   «         Z"e                     d ¦  «         e eg d¢¦  «        ¦  «        fd5d!„¦   «         Z#e                     d"e¬¦  «        d e eg d#¢¦  «        ¦  «        fd6d'„¦   «         Z$d d(l%m&Z& e                     d)¦  «         e eg d¢¦  «        ¦  «        fd7d*„¦   «         Z'd dl(Z(d d+l%m)Z) e                     d,¦  «         e eg d¢¦  «        ¦  «        fd5d-„¦   «         Z*e                     d.¦  «         e eg d¢¦  «        ¦  «        fd8d1„¦   «         Z+dS )9é    )ÚannotationsN)ÚAny)Ú	APIRouterÚDependsÚHTTPException)Úget_current_userÚrequire_role)ÚErpDatabaseClient)ÚAIBudgetSummaryResponseÚDHSMissionRequestÚDHSMissionResponseÚDHSSampleMissionItem)ÚAgentSchedulerService)ÚDeepSeekHarnessServicezdscons.api.knowledge_agents.dhsz"/v1/agents/harness/sample-missions)Úresponse_model)Ú
superadminÚdirectorÚadminÚpmÚqsÚengineerÚcurrent_userúdict[str, Any]Úreturnúlist[DHSSampleMissionItem]c                óœ   — 	 t                                ¦   «         }d„ |D ¦   «         S # t          $ r}t          dd|›�¬¦  «        |‚d}~ww xY w)uQ   Láº¥y danh má»¥c cÃ¡c ká»‹ch báº£n nhiá»‡m vá»¥ máº«u 4 Trá»¥ cá»™t cá»§a DSCons.c                ó&   — g | ]}t          d i |¤Ž‘ŒS )© )r   )Ú.0Úss     úYC:\Projects\DSCons\app\modules\agents\presentation\knowledge_agent_routes\dhs_missions.pyú
<listcomp>z+get_dhs_sample_missions.<locals>.<listcomp>&   s'   € Ð;Ð;Ð;¨aÕ$Ð)Ð) qÐ)Ð)Ð;Ð;Ð;ó    éô  u+   Lá»—i láº¥y danh má»¥c nhiá»‡m vá»¥ máº«u: ©Ústatus_codeÚdetailN)Údhs_serviceÚget_sample_missionsÚ	Exceptionr   )r   ÚsamplesÚexcs      r!   Úget_dhs_sample_missionsr-      st   € ðÝ×1Ò1Ñ3Ô3ˆØ;Ð;°7Ð;Ñ;Ô;Ð;øÝð ð ð ÝØÐ$YÐRUÐ$YÐ$Yð
ñ 
ô 
àð	øøøøðøøøs   ‚$' §
A±AÁAz/v1/agents/harness/execute)r   r   r   r   r   Úpayloadr   r   c              ƒ  óê   K  — 	 t                                | j        | j        | j        | j        | j        ¬¦  «        ƒ d{V —†}t          di |¤ŽS # t          $ r}t          dd|›�¬¦  «        |‚d}~ww xY w)u^   KÃ­ch hoáº¡t Ä‘iá»�u phá»‘i nhiá»‡m vá»¥ Multi-Agent tá»± trá»‹ báº±ng DeepSeek Harness (DHS).©Úmission_titleÚmission_promptÚtarget_project_idÚpillarÚdeep_reasoning_enabledNr$   u0   Lá»—i thá»±c thi nhiá»‡m vá»¥ DeepSeek Harness: r%   r   )
r(   Úexecute_missionr1   r2   r3   r4   r5   r   r*   r   )r.   r   Úresultr,   s       r!   Úexecute_dhs_missionr8   -   s¾   è è € ðÝ"×2Ò2Ø!Ô/Ø"Ô1Ø%Ô7Ø”>Ø#*Ô#Að 3ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ "Ð+Ð+ FÐ+Ð+Ð+øÝð ð ð ÝØÐ$^ÐWZÐ$^Ð$^ð
ñ 
ô 
àð	øøøøðøøøs   „A	A Á
A2ÁA-Á-A2z/v1/agents/harness/historyé
   ÚlimitÚintc                ó¬   — 	 t                                | ¬¦  «        }t          |¦  «        |dœS # t          $ r}t	          dd|›�¬¦  «        |‚d}~ww xY w)uQ   Truy xuáº¥t lá»‹ch sá»­ cÃ¡c nhiá»‡m vá»¥ Ä‘Ã£ thá»±c thi bá»Ÿi DeepSeek Harness.)r:   )ÚtotalÚhistoryr$   u#   Lá»—i truy xuáº¥t lá»‹ch sá»­ DHS: r%   N)r(   Úget_mission_historyÚlenr*   r   )r:   r   Úlogsr,   s       r!   Úget_dhs_mission_historyrB   D   s�   € ð	Ý×.Ò.°UÐ.Ñ;Ô;ˆå˜‘Y”YØð
ð 
ð 	
øõ ð ð ð ÝØÐ$QÈ#Ð$QÐ$Qð
ñ 
ô 
àð	øøøøðøøøs   ‚,/ ¯
A¹AÁAz/v1/agents/schedule/dailyc                ó¨   — 	 t                                ¦   «         }t          |¦  «        |dœS # t          $ r}t	          dd|›�¬¦  «        |‚d}~ww xY w)uV   Láº¥y báº£ng phÃ¢n ca lÃ m viá»‡c so le thÃ´ng minh trong ngÃ y cá»§a 9 NhÃ¢n sá»± AI.)Útotal_shiftsÚshiftsr$   u#   Lá»—i láº¥y lá»‹ch lÃ m viá»‡c AI: r%   N)Úscheduler_serviceÚget_daily_scheduler@   r*   r   )r   Úscheduler,   s      r!   Úget_daily_agent_schedulerI   X   s|   € ð	Ý$×7Ò7Ñ9Ô9ˆå ™MœMØð
ð 
ð 	
øõ ð ð ð ÝØÐ$QÈ#Ð$QÐ$Qð
ñ 
ô 
àð	øøøøðøøøs   ‚*- ­
A·AÁAz$/v1/agents/schedule/anti-spam-statusc                ó„   — 	 t                                ¦   «         S # t          $ r}t          dd|›�¬¦  «        |‚d}~ww xY w)um   Láº¥y tráº¡ng thÃ¡i bá»™ Ä‘á»‡m báº£o vá»‡ chá»‘ng Rate Limit & Spam Detection (OpenRouter & Local failover).r$   u+   Lá»—i kiá»ƒm tra bá»™ Ä‘á»‡m chá»‘ng spam: r%   N)rF   Úget_anti_spam_shield_statusr*   r   )r   r,   s     r!   Úget_anti_spam_statusrL   m   sa   € ðÝ ×<Ò<Ñ>Ô>Ð>øÝð ð ð ÝØÐ$YÐRUÐ$YÐ$Yð
ñ 
ô 
àð	øøøøðøøøs   ‚ ›
?¥:º?z/v1/agents/budget-summary)r   r   r   r   Ú
accountantÚ
agent_codeú
str | Noner   c                ó²   — t          ¦   «         }	 |                     | ¬¦  «        }t          di |¤ŽS # t          $ r}t	          dd|›�¬¦  «        |‚d}~ww xY w)ug   Truy xuáº¥t tá»•ng há»£p ngÃ¢n sÃ¡ch tiÃªu thá»¥ theo ngÃ y, tuáº§n, thÃ¡ng, nÄƒm cá»§a nhÃ¢n viÃªn AI.)rN   r$   u"   Lá»—i truy xuáº¥t ngÃ¢n sÃ¡ch AI: r%   Nr   )r
   Úget_ai_agent_budget_summaryr   r*   r   )rN   r   ÚclientÚdatar,   s        r!   Úget_ai_agents_budget_summaryrT   ~   s…   € õ Ñ Ô €FðØ×1Ò1¸ZÐ1ÑHÔHˆÝ&Ð.Ð.¨Ð.Ð.Ð.øÝð ð ð ÝØÐ$PÈÐ$PÐ$Pð
ñ 
ô 
àð	øøøøðøøøs   �!2 ²
A¼AÁA©ÚStreamingResponsez!/v1/agents/harness/execute_streamc              ƒ  óD   ‡ K  — ˆ fd„}t           |¦   «         d¬¦  «        S )uf   KÃ­ch hoáº¡t Ä‘iá»�u phá»‘i nhiá»‡m vá»¥ Multi-Agent tá»± trá»‹ báº±ng DeepSeek Harness (DHS) qua SSE.c                ó2  •K  — 	 t                                ‰j        ‰j        ‰j        ‰j        ‰j        ¬¦  «        2 3 d {V —†} d| › d�W V — Œ6 d S # t          $ r;}dd l}d| 	                    dt          |¦  «        dœ¦  «        › d�W V — Y d }~d S d }~ww xY w)Nr0   zdata: z

r   ÚERROR)ÚtypeÚmessage)r(   Úexecute_mission_streamr1   r2   r3   r4   r5   r*   ÚjsonÚdumpsÚstr)Úeventr,   r]   r.   s      €r!   Úevent_generatorz3execute_dhs_mission_stream.<locals>.event_generator™   s
  øè è € ð	TÝ*×AÒAØ%Ô3Ø&Ô5Ø")Ô";Ø”~Ø'.Ô'Eð  Bñ  ô  ð +ð +ð +ð +ð +ð +ð +�eð +˜uÐ*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð ð  ð  øõ ð 	Tð 	Tð 	TØˆKˆKˆKØS˜4Ÿ:š:¨wÅ3ÀsÁ8Ä8Ð&LÐ&LÑMÔMÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSøøøøð	Tøøøs"   …8A ½AÁA Á
BÁ0BÂBztext/event-stream)Ú
media_typerU   )r.   r   ra   s   `  r!   Úexecute_dhs_mission_streamrc   ‘   sC   øè è € ðTð Tð Tð Tð Tõ ˜_˜_Ñ.Ô.Ð;NÐOÑOÔOÐOr#   )ÚFileResponsez/v1/agents/reportsc                óŽ  — d}t           j                             |¦  «        sdg iS g }t          j        |¦  «        D ]n}|                     d¦  «        rWt           j                             ||¦  «        }t          j        |¦  «        }|                     ||j        |j	        dœ¦  «         Œo| 
                    d„ d¬¦  «         d|iS )uD   Danh sÃ¡ch cÃ¡c file BÃ¡o cÃ¡o Ä‘iá»�u hÃ nh tá»± Ä‘á»™ng Ä‘Ã£ lÆ°u.ústorage/secure_vault/reportsÚreportsú.md)ÚfilenameÚ
size_bytesÚ
created_atc                ó   — | d         S )Nrk   r   )Úxs    r!   ú<lambda>z(list_executive_reports.<locals>.<lambda>Ã   s
   € ˜q œ€ r#   T)ÚkeyÚreverse)ÚosÚpathÚexistsÚlistdirÚendswithÚjoinÚstatÚappendÚst_sizeÚst_mtimeÚsort)r   Ú
report_dirrg   ri   Úfilepathrw   s         r!   Úlist_executive_reportsr~   ¬   sÖ   € ð 0€JÝŒ7�>Š>˜*Ñ%Ô%ð Ø˜2ˆÐà€GÝ”J˜zÑ*Ô*ð ð ˆØ×Ò˜UÑ#Ô#ð 	Ý”w—|’| J°Ñ9Ô9ˆHÝ”7˜8Ñ$Ô$ˆDØ�NŠNØ$Ø"œlØ"œmðð ñ ô ð øð ‡L‚LÐ.Ð.¸€LÑ=Ô=Ð=Ø�wÐÐr#   z/v1/agents/reports/{filename}ri   r_   c                óB  — t           j                             | ¦  «        }|| k    rt          dd¬¦  «        ‚|                     d¦  «        st          dd¬¦  «        ‚t           j                             d¦  «        }t           j                             t           j                             ||¦  «        ¦  «        }|                     |¦  «        st          dd¬¦  «        ‚t           j                             |¦  «        st          dd	¬¦  «        ‚t          |d
|¬¦  «        S )ue   Táº£i xuá»‘ng file BÃ¡o cÃ¡o Ä‘iá»�u hÃ nh (báº£o máº­t nghiÃªm ngáº·t chá»‘ng Local File Inclusion).i“  u?   TÃªn file khÃ´ng há»£p lá»‡ (PhÃ¡t hiá»‡n Directory Traversal).r%   rh   u/   Chá»‰ cho phÃ©p truy xuáº¥t Ä‘á»‹nh dáº¡ng .md.rf   u3   Cá»‘ gáº¯ng truy cáº­p ngoÃ i thÆ° má»¥c cho phÃ©p.i”  u"   KhÃ´ng tÃ¬m tháº¥y file bÃ¡o cÃ¡o.ztext/markdown)rb   ri   )
rq   rr   Úbasenamer   ru   Úabspathrv   Ú
startswithrs   rd   )ri   r   Úsafe_filenamer|   Ú	file_paths        r!   Údownload_executive_reportr…   Æ   s  € õ ”G×$Ò$ XÑ.Ô.€MØ˜Ò Ð Ý¨Ð4uÐvÑvÔvÐvð ×!Ò! %Ñ(Ô(ð gÝ¨Ð4eÐfÑfÔfÐfå”—’Ð!?Ñ@Ô@€JÝ”—’¥¤§¢¨Z¸Ñ GÔ GÑHÔH€Ið ×Ò 
Ñ+Ô+ð kÝ¨Ð4iÐjÑjÔjÐjåŒ7�>Š>˜)Ñ$Ô$ð ZÝ¨Ð4XÐYÑYÔYÐYåØØ"Øðñ ô ð r#   )r   r   r   r   )r.   r   r   r   r   r   )r:   r;   r   r   r   r   )r   r   r   r   )rN   rO   r   r   r   r   )r.   r   r   r   )ri   r_   r   r   ),Ú
__future__r   ÚloggingÚtypingr   Úfastapir   r   r   Ú"app.modules.auth.presentation.authr   r	   Úapp.core.postgres.erp_clientr
   Úapp.models.schemasr   r   r   r   Ú6app.modules.agents.application.agent_scheduler_servicer   Ú7app.modules.agents.application.deepseek_harness_servicer   Ú	getLoggerÚloggerÚrouterr(   rF   ÚgetÚlistr-   Úpostr8   rB   rI   rL   rT   Úfastapi.responsesrV   rc   rq   rd   r~   r…   r   r#   r!   ú<module>r–      s“  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ð YÐ XÐ XÐ XÐ XÐ XØ ZÐ ZÐ ZÐ ZÐ ZÐ Zà	ˆÔ	Ð<Ñ	=Ô	=€Ø	ˆ‰Œ€Ø$Ð$Ñ&Ô&€Ø)Ð)Ñ+Ô+Ð ð ‡‚Ø(¸Ð>RÔ9Sð ñ ô ð $+ 7ØˆØGÐGÐGñ	
ô 	
ñ$ô $ðð ð ð ñô ðð" ‡‚Ð)Ð:L€ÑMÔMð $+ 7ØˆÐDÐDÐDÑEÔEñ$ô $ðð ð ð ñ NÔMðð, ‡‚Ð(Ñ)Ô)àØ#* 7ØˆÐDÐDÐDÑEÔEñ$ô $ðð ð ð ñ *Ô)ðð& ‡‚Ð'Ñ(Ô(à#* 7ØˆØGÐGÐGñ	
ô 	
ñ$ô $ðð ð ð ñ )Ô(ðð( ‡‚Ð2Ñ3Ô3à#* 7ØˆØGÐGÐGñ	
ô 	
ñ$ô $ðð ð ð ñ 4Ô3ðð  ‡‚Ð'Ð8O€ÑPÔPà!Ø#* 7ØˆÐLÐLÐLÑMÔMñ$ô $ðð ð ð ñ QÔPðð  0Ð /Ð /Ð /Ð /Ð /à‡‚Ð0Ñ1Ô1ð $+ 7ØˆÐDÐDÐDÑEÔEñ$ô $ðPð Pð Pð Pñ 2Ô1ðPð. 
€	€	€	Ø *Ð *Ð *Ð *Ð *Ð *à‡‚Ð Ñ!Ô!à#* 7ØˆÐDÐDÐDÑEÔEñ$ô $ð ð  ð  ð  ñ "Ô!ð ð2 ‡‚Ð+Ñ,Ô,ð $+ 7ØˆÐDÐDÐDÑEÔEñ$ô $ðð ð ð ñ -Ô,ðð ð r#   