§
    š#¿jû#  ã                  óz  — d Z ddlm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 	 ddlZdZn# e$ r dZY nw xY w ed¬	¦  «         G d
„ d¦  «        ¦   «         Z ed¬	¦  «         G d„ d¦  «        ¦   «         Z ed¬	¦  «         G d„ d¦  «        ¦   «         Zd0d„Zd1d„Zd2d"„Zd3d%„Zd4d'„Zd5d,„Zd6d/„ZdS )7z«
Combat Room Knowledge Synchronization Helpers & DTOs.
Provides data structures, frontmatter/table parsing, permission auditing,
and Mem0 memory synchronization routines.
é    )ÚannotationsN)Ú	dataclassÚfield)ÚPath)ÚAnyÚDictÚListÚOptionalÚTupleTF)Úslotsc                  ót   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   dS )ÚDecisionÚstrÚdecision_idÚsummaryÚcontextÚapproved_byÚimpactÚ
meeting_idÚmeeting_titleÚmeeting_dateÚmeeting_pathÚ
departmentN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú<C:\Projects\FreeExile\tools\knowledge\combat_room_helpers.pyr   r      sy   € € € € € € àÐÐÑØ€L€L�LØ€L€L�LØÐÐÑØ€K€K�KØ€O€O�OØÐÐÑØÐÐÑØÐÐÑØ€O€O�O€O€Or    r   c                  ó~   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   dS )Ú
ActionItemr   Ú	action_idÚtaskÚownerÚcollaboratorsÚdeadlineÚstatusÚdeliverabler   r   r   r   Nr   r   r    r!   r#   r#   $   s   € € € € € € à€N€N�NØ€I€I�IØ€J€J�JØÐÐÑØ€M€M�MØ€K€K�KØÐÐÑØ€O€O�OØÐÐÑØÐÐÑØ€O€O�O€O€Or    r#   c                  óž   — e Zd ZU ded<   ded<   ded<   ded<    ee¬¦  «        Zd	ed
<    ee¬¦  «        Zded<    ee¬¦  «        Zded<   dS )Ú
MeetingDocr   Úpathr   Úrel_pathzDict[str, Any]ÚfrontmatterÚbody)Údefault_factoryúList[Decision]Ú	decisionsúList[ActionItem]Úaction_itemsú	List[str]ÚtagsN)	r   r   r   r   r   Úlistr3   r5   r7   r   r    r!   r,   r,   3   s“   € € € € € € à€J€J�JØ€M€M�MØÐÐÑØ€I€I�IØ % °dÐ ;Ñ ;Ô ;€IÐ;Ð;Ð;Ñ;Ø%* U¸4Ð%@Ñ%@Ô%@€LÐ@Ð@Ð@Ñ@Ø�e¨DÐ1Ñ1Ô1€DÐ1Ð1Ð1Ñ1Ð1Ð1r    r,   Úcontentr   ÚreturnúTuple[Dict[str, Any], str]c                ó¢  — |                       d¦  «        si | fS |                      dd¦  «        }t          |¦  «        dk     ri | fS |d                              ¦   «         }|d                              ¦   «         }t          r?	 t          j        |¦  «        }t          |t          ¦  «        r||fS n# t          $ r Y nw xY wi }| 
                    ¦   «         D ]õ}|                     ¦   «         }|r|                      d¦  «        rŒ.d|v rÃ|                     dd¦  «        \  }}|                     ¦   «         }|                     ¦   «                              d¦  «                             d¦  «        }|                      d	¦  «        rB|                     d
¦  «        r-d„ |dd…                              d¦  «        D ¦   «         }|||<   Œð|||<   Œö||fS )z2Parse YAML frontmatter from Markdown file content.z---é   é   é   ú#ú:ú"ú'ú[ú]c                óª   — g | ]P}|                      ¦   «         ¯|                      ¦   «                               d ¦  «                              d¦  «        ‘ŒQS )rB   rC   ©Ústrip)Ú.0Úxs     r!   ú
<listcomp>z%parse_frontmatter.<locals>.<listcomp>[   sL   € ÐdÐdÐd¸QÐZ[×ZaÒZaÑZcÔZcÐd˜Ÿš™œŸš¨Ñ-Ô-×3Ò3°CÑ8Ô8ÐdÐdÐdr    éÿÿÿÿú,)Ú
startswithÚsplitÚlenrH   ÚHAS_YAMLÚyamlÚ	safe_loadÚ
isinstanceÚdictÚ	ExceptionÚ
splitlinesÚendswith)	r9   ÚpartsÚ	yaml_textÚ	body_textÚdataÚlineÚkeyÚvalÚitemss	            r!   Úparse_frontmatterra   >   sâ  € à×Ò˜eÑ$Ô$ð Ø�7ˆ{ÐØ�MŠM˜% Ñ#Ô#€EÝ
ˆ5�z„z�A‚~€~Ø�7ˆ{ÐØ�a”—’Ñ Ô €IØ�a”—’Ñ Ô €Iåð ð	Ý”> )Ñ,Ô,ˆDÝ˜$¥Ñ%Ô%ð 'Ø˜Y�Ð&ð'øåð 	ð 	ð 	ØˆDð	øøøð €DØ×$Ò$Ñ&Ô&ð  ð  ˆØ�zŠz‰|Œ|ˆØð 	�t—’ sÑ+Ô+ð 	ØØ�$ˆ;ˆ;Ø—z’z # qÑ)Ô)‰HˆC�Ø—)’)‘+”+ˆCØ—)’)‘+”+×#Ò# CÑ(Ô(×.Ò.¨sÑ3Ô3ˆCØ�~Š~˜cÑ"Ô"ð   s§|¢|°CÑ'8Ô'8ð  ØdÐdÀ#ÀaÈÀdÄ)Ç/Â/ÐRUÑBVÔBVÐdÑdÔd�Ø!��S‘	�	à��S‘	øØ�ˆ?Ðs   Â,B1 Â1
B>Â=B>r0   Údoc_infoúTuple[str, str, str, str, str]r2   c           	     óæ  ‡— |\  }}}}}g }|                       ¦   «         D ]Ð}|                     ¦   «         Šd‰v r¶‰                     d¦  «        s¡d„ ‰                     d¦  «        dd…         D ¦   «         }	t	          d„ |	D ¦   «         ¦  «        rŒpt          ˆfd„dD ¦   «         ¦  «        rŒŒt          d	„ |	D ¦   «         ¦  «        r+t          |	|||||¦  «        }
|
r|                     |
¦  «         ŒÑ|S )
z6Extract Decision entries (DEC-*) from markdown tables.ú|ú>c                ó6   — g | ]}|                      ¦   «         ‘ŒS r   rG   ©rI   Úps     r!   rK   z0extract_decisions_from_table.<locals>.<listcomp>j   ó    € ÐBÐBÐB 1�Q—W’W‘Y”YÐBÐBÐBr    r?   rL   c              3  óD   K  — | ]}|¯t          |¦  «        h d £k    V — ŒdS ©>   ú ú-rA   N©Úsetrh   s     r!   ú	<genexpr>z/extract_decisions_from_table.<locals>.<genexpr>k   ó6   è è € ÐAÐA°¸qÐA•3�q‘6”6˜_˜_˜_Ò,ÐAÐAÐAÐAÐAÐAr    c              3  óD   •K  — | ]}|‰                      ¦   «         v V — Œd S ©N©Úlower©rI   ÚhÚstrippeds     €r!   rq   z/extract_decisions_from_table.<locals>.<genexpr>m   s2   øè è € ÐmÐm¨Q�1˜ŸšÑ(Ô(Ð(ÐmÐmÐmÐmÐmÐmr    )u   mÃ£ quyáº¿t Ä‘á»‹nhu   mÃ£ quyáº¿t dinhzdecision idc              3  ó   K  — | ]}d |v V — Œ	dS )úDEC-Nr   rh   s     r!   rq   z/extract_decisions_from_table.<locals>.<genexpr>p   ó&   è è € Ð.Ð. 1�6˜Q�;Ð.Ð.Ð.Ð.Ð.Ð.r    )rW   rH   rN   rO   ÚallÚanyÚ_parse_decision_rowÚappend)r0   rb   r   ÚtitleÚdater.   Údeptr3   r]   rY   Údecry   s              @r!   Úextract_decisions_from_tabler…   b   s&  ø€ à.6Ñ+€J��t˜X tØ "€Ià—’Ñ!Ô!ð *ð *ˆØ—:’:‘<”<ˆØ�(ˆ?ˆ? 8×#6Ò#6°sÑ#;Ô#;ˆ?ØBÐB¨¯ª°sÑ(;Ô(;¸A¸b¸DÔ(AÐBÑBÔBˆEÝÐAÐA°eÐAÑAÔAÑAÔAð ØÝÐmÐmÐmÐmÐ2lÐmÑmÔmÑmÔmð ØåÐ.Ð.¨Ð.Ñ.Ô.Ñ.Ô.ð *Ý)¨%°¸UÀDÈ(ÐTXÑYÔY�Øð *Ø×$Ò$ SÑ)Ô)Ð)øàÐr    rY   r6   r   r�   r‚   r.   rƒ   úOptional[Decision]c                ó(  — d\  }}}}	}
d„ | D ¦   «         }|D ]W}|                      dd¦  «                             ¦   «         }|                     d¦  «        r|s|}ŒD|s|}ŒI|s|}ŒN|	s|}	ŒS|
s|}
ŒX|r!t          ||pd|pd|	pd|
pd|||||¬	¦
  «
        S d
S )z=Helper to parse a single decision row into a Decision object.©Ú r‰   r‰   r‰   r‰   c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r   rG   rh   s     r!   rK   z'_parse_decision_row.<locals>.<listcomp>}   ó-   € Ð9Ð9Ð9 ¨q¯wªw©y¬yÐ9�1—7’7‘9”9Ð9Ð9Ð9r    ú`r‰   r{   úN/Au
   Chá»§ trÃ¬ÚChung)
r   r   r   r   r   r   r   r   r   r   N)ÚreplacerH   rN   r   )rY   r   r�   r‚   r.   rƒ   Údec_idr   r   Úapprovedr   Úvalid_partsri   Úclean_ps                 r!   r   r   x   s  € ð 2DÑ.€FˆG�W˜h¨Ø9Ð9 eÐ9Ñ9Ô9€KØð ð ˆØ—)’)˜C Ñ$Ô$×*Ò*Ñ,Ô,ˆØ×Ò˜fÑ%Ô%ð 		¨fð 		ØˆFˆFØð 	ØˆGˆGØð 	ØˆGˆGØð 	ØˆHˆHØð 	ØˆFøàð 
ÝØØÐ$˜uØÐ$˜uØ Ð0 LØÐ$˜WØ!ØØØ!Øð
ñ 
ô 
ð 	
ð ˆ4r    úTuple[str, str, str, str]r4   c                óâ  ‡
— |\  }}}}g }|                       ¦   «         D ]Ï}|                     ¦   «         Š
d‰
v rµ‰
                     d¦  «        s d„ ‰
                     d¦  «        dd…         D ¦   «         }t	          d„ |D ¦   «         ¦  «        rŒpt          ˆ
fd„dD ¦   «         ¦  «        rŒŒt          d	„ |D ¦   «         ¦  «        r*t          |||||¦  «        }	|	r|                     |	¦  «         ŒÐ|S )
z2Extract Action Items (ACT-*) from markdown tables.re   rf   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r   rG   rh   s     r!   rK   z3extract_action_items_from_table.<locals>.<listcomp>£   rj   r    r?   rL   c              3  óD   K  — | ]}|¯t          |¦  «        h d £k    V — ŒdS rl   ro   rh   s     r!   rq   z2extract_action_items_from_table.<locals>.<genexpr>¤   rr   r    c              3  óD   •K  — | ]}|‰                      ¦   «         v V — Œd S rt   ru   rw   s     €r!   rq   z2extract_action_items_from_table.<locals>.<genexpr>¦   s2   øè è € ÐcÐc¨Q�1˜ŸšÑ(Ô(Ð(ÐcÐcÐcÐcÐcÐcr    )u   mÃ£ Ä‘áº§u viá»‡cu
   mÃ£ viá»‡cz	action idc              3  ó   K  — | ]}d |v V — Œ	dS )úACT-Nr   rh   s     r!   rq   z2extract_action_items_from_table.<locals>.<genexpr>©   r|   r    )rW   rH   rN   rO   r}   r~   Ú_parse_action_rowr€   )r0   rb   r   r�   r.   rƒ   r5   r]   rY   Úitemry   s             @r!   Úextract_action_items_from_tabler�   ›   s!  ø€ à(0Ñ%€J��x Ø%'€Là—’Ñ!Ô!ð .ð .ˆØ—:’:‘<”<ˆØ�(ˆ?ˆ? 8×#6Ò#6°sÑ#;Ô#;ˆ?ØBÐB¨¯ª°sÑ(;Ô(;¸A¸b¸DÔ(AÐBÑBÔBˆEÝÐAÐA°eÐAÑAÔAÑAÔAð ØÝÐcÐcÐcÐcÐ2bÐcÑcÔcÑcÔcð ØåÐ.Ð.¨Ð.Ñ.Ô.Ñ.Ô.ð .Ý(¨°
¸EÀ8ÈTÑRÔR�Øð .Ø ×'Ò'¨Ñ-Ô-Ð-øàÐr    úOptional[ActionItem]c                óR  — d\  }}}}}	d}
d}d„ | D ¦   «         }|D ]¨}|                      dd¦  «                             ¦   «         }|                     d¦  «        r|s|}ŒD|                     d¦  «        r|s|}Œ^|                     d¦  «        r|r|s|}Œzt          j        d|¦  «        r|}	Œ’|d	v r|}
Œ™d
|v sd|v r|}Œ¤|s|}Œ©|sAt          |¦  «        dk    r.|d                               dd¦  «                             ¦   «         }|sAt          |¦  «        dk    r.|d                               dd¦  «                             ¦   «         }|	s3|D ]0}t          j        d|¦  «        }|r|                     d¦  «        }	 nŒ1|	sd}	|r"t          ||pd|pd|pd|	|
|pd||||¬¦  «        S dS )z=Helper to parse a single action table row into an ActionItem.rˆ   ÚOPENr‰   c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r   rG   rh   s     r!   rK   z%_parse_action_row.<locals>.<listcomp>¹   r‹   r    rŒ   rš   ú@z^\d{4}-\d{2}-\d{2}$>   ÚDONEr    ÚBLOCKEDÚRESOLVEDÚIN_PROGRESSrD   ú/r=   r?   r>   z\d{4}-\d{2}-\d{2}r   ÚTBDr�   z@unassignedrn   )r$   r%   r&   r'   r(   r)   r*   r   r   r   r   N)	r�   rH   rN   ÚreÚmatchrP   ÚsearchÚgroupr#   )rY   r   r�   r.   rƒ   Úact_idr%   r&   Úcollabr(   r)   r*   r’   ri   r“   Úms                   r!   r›   r›   ±   sW  € ð -?Ñ)€FˆD�%˜ Ø€FØ€Kà9Ð9 eÐ9Ñ9Ô9€KØð ð ˆØ—)’)˜C Ñ$Ô$×*Ò*Ñ,Ô,ˆØ×Ò˜fÑ%Ô%ð 	¨fð 	ØˆFˆFØ×Ò Ñ$Ô$ð 	¨Uð 	ØˆEˆEØ×Ò Ñ$Ô$ð 		¨ð 		°vð 		ØˆFˆFÝŒXÐ,¨gÑ6Ô6ð 	ØˆHˆHØÐNÐNÐNØˆFˆFØ�Gˆ^ˆ^˜s g˜~˜~Ø!ˆKˆKØð 	ØˆDøàð 7•C˜Ñ$Ô$¨Ò)Ð)Ø˜1Œ~×%Ò% c¨2Ñ.Ô.×4Ò4Ñ6Ô6ˆØð 8•S˜Ñ%Ô%¨Ò*Ð*Ø˜A”×&Ò& s¨BÑ/Ô/×5Ò5Ñ7Ô7ˆØð Øð 	ð 	ˆAÝ”	Ð.°Ñ2Ô2ˆAØð ØŸ7š7 1™:œ:�Ø�ðð ð Øˆàð 
ÝØØ�˜ØÐ(˜=Ø ˜- CØØØ#Ð* sØ!ØØ!Øð
ñ 
ô 
ð 	
ð ˆ4r    ÚdocsúList[MeetingDoc]Úpermissions_filer   c                óH  — g }|                      ¦   «         sdgS 	 t          j        |                     d¬¦  «        ¦  «        }|                     di ¦  «        }n# t
          $ r}d|› �gcY d}~S d}~ww xY w| D ]¨}|j        j        j        }|j        j        j        j        }d}	|› d|› �|v r|› d|› �}	n||v r|}	|	rd||	         }
|
                     dg ¦  «        }|j	                             d	d
¦  «        }||vr'| 
                    d|j        › d|› d|› d|	› d�	¦  «         Œ©|S )z<Audit meeting doc confidentiality against .permissions.json.z>[WARN] .permissions.json not found, skipping permission audit.zutf-8)ÚencodingÚdirectory_rulesz+[ERROR] Failed to parse .permissions.json: Nr§   Úallowed_confidentialityÚconfidentialityÚUNSPECIFIEDz[PERMISSION VIOLATION] File 'u   ' cÃ³ cáº¥p báº£o máº­t 'u&   ' khÃ´ng thuá»™c danh má»¥c cho phÃ©p u    cá»§a thÆ° má»¥c 'z'.)ÚexistsÚjsonÚloadsÚ	read_textÚgetrV   r-   ÚparentÚnamer/   r€   r.   )r°   r²   Ú
violationsÚpolicyÚ	dir_rulesÚeÚdÚ
parent_dirÚgrandparentÚrule_keyÚruleÚallowedÚdoc_confs                r!   Úaudit_permissionsrË   é   sÇ  € à€JØ×"Ò"Ñ$Ô$ð RØPÐQÐQðCÝ”Ð,×6Ò6ÀÐ6ÑHÔHÑIÔIˆØ—J’JÐ0°"Ñ5Ô5ˆ	ˆ	øÝð Cð Cð CØA¸aÐAÐAÐBÐBÐBÐBÐBÐBÐBøøøøðCøøøð ð ð ˆØ”V”]Ô'ˆ
Ø”f”mÔ*Ô/ˆàˆØÐ(Ð(˜JÐ(Ð(¨IÐ5Ð5Ø%Ð4Ð4¨
Ð4Ð4ˆHˆHØ˜9Ð$Ð$Ø!ˆHàð 	Ø˜XÔ&ˆDØ—h’hÐ8¸"Ñ=Ô=ˆGØ”}×(Ò(Ð):¸MÑJÔJˆHØ˜wÐ&Ð&Ø×!Ò!ðd°A´Jð dð dÐYað dð dØ;Bðdð dØW_ðdð dð dñô ð øð
 Ðs   ›>A Á
A4Á$A/Á)A4Á/A4r3   ÚNonec           	     óR  — 	 ddl }d}|j                             |d¬¦  «        }|j                             |d¬¦  «        5 }|j        dk    r#t          d	|› d
t          | ¦  «        › d�¦  «         ddd¦  «         dS # 1 swxY w Y   dS # t          $ r t          d¦  «         Y dS w xY w)z0Check Mem0 health and optionally push decisions.r   Nzhttp://127.0.0.1:8765/statusÚGET)Úmethodg       @)ÚtimeoutéÈ   z![INFO] Mem0 service is active at z. Registering z decisions...z4[INFO] Mem0 background service local health checked.)Úurllib.requestÚrequestÚRequestÚurlopenr)   ÚprintrP   rV   )r3   ÚurllibÚurlÚreqÚresps        r!   Úsync_to_mem0_localrÛ     s1  € ðFØÐÐÐØ,ˆØŒn×$Ò$ S°Ð$Ñ7Ô7ˆØŒ^×#Ò# C°Ð#Ñ5Ô5ð 	l¸ØŒ{˜cÒ!Ð!ÝÐj¸#ÐjÐjÍSÐQZÉ^Ì^ÐjÐjÐjÑkÔkÐkð	lð 	lð 	lñ 	lô 	lð 	lð 	lð 	lð 	lð 	lð 	lð 	løøøð 	lð 	lð 	lð 	lð 	lð 	løõ ð Fð Fð FÝÐDÑEÔEÐEÐEÐEÐEðFøøøs5   ‚>B	 Á /A<Á/B	 Á<B Â B	 ÂB ÂB	 Â	B&Â%B&)r9   r   r:   r;   )r0   r   rb   rc   r:   r2   )rY   r6   r   r   r�   r   r‚   r   r.   r   rƒ   r   r:   r†   )r0   r   rb   r”   r:   r4   )rY   r6   r   r   r�   r   r.   r   rƒ   r   r:   rž   )r°   r±   r²   r   r:   r6   )r3   r2   r:   rÌ   )Ú__doc__Ú
__future__r   rº   r©   Údataclassesr   r   Úpathlibr   Útypingr   r   r	   r
   r   rR   rQ   ÚImportErrorr   r#   r,   ra   r…   r   r�   r›   rË   rÛ   r   r    r!   ú<module>râ      s(  ððð ð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ðØ€K€K€KØ€H€HøØð ð ð Ø€H€H€Hðøøøð €�ÐÑÔð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ Ôð
ð €�ÐÑÔðð ð ð ð ñ ô ñ Ôðð €�ÐÑÔð2ð 2ð 2ð 2ð 2ñ 2ô 2ñ Ôð2ð!ð !ð !ð !ðHð ð ð ð, ð  ð  ð  ðFð ð ð ð,5ð 5ð 5ð 5ðp ð  ð  ð  ðF
Fð 
Fð 
Fð 
Fð 
Fð 
Fs   ®5 µ?¾?