Ë
    ªÞj¹,  ã                  óÞ  — U d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
mZmZ ddlmZmZ d	 ej                   d
«      fd ej                   d«      fd ej                   d«      fd ej                   d«      fd ej                   d«      fd ej                   d«      fd ej                   d«      fd ej                   d«      fd ej                   d«      fd ej                   d«      fd ej                   d«      ffZded <   d!Zd"Zd# ej                   d$«      fd% ej                   d&«      fd' ej                   d(«      fd) ej                   ed*z   ej*                  «      ffZded+<   d,ed-z   fd.ed/z   fd0ed1z   fd2ed3z   fd4ed5z   ez   fd6ed7z   fd8ed9z   ez   d:z   ffZd;ed<<   d=d>ed?z   ez   ffZd;ed@<    ej                   dAej*                  «      Z edB¬C«       G dD„ dE«      «       ZdVdF„Z G dG„ dH«      ZdI ej                   dJ«      fdK ej                   dL«      fdM ej                   dN«      fdO ej                   dP«      ffZdedQ<    edRh«      Z edB¬C«       G dS„ dT«      «       Z dWdXdU„Z!y)Yu˜  Deterministische Klassifikatoren: Datenschutzklasse und Aufgabenklasse.

Grundsatz: Default ist UNKNOWN. Regeln kÃ¶nnen nur verschÃ¤rfen.
- Secrets/Token, Kunden-/Partnernamen, personenbezogene Daten -> CONFIDENTIAL
- Interne Merkmale (Pfade, "intern") -> INTERNAL
- PUBLIC nur konservativ: ausdrÃ¼ckliche Markierung am Anfang des Prompts
  (#public / #Ã¶ffentlich / [public]), und nur, wenn KEINE andere Regel greift,
  keine AnhÃ¤nge vorliegen und alle Memory-Ausschnitte selbst PUBLIC sind.

Die Markierung ist eine Dateneinstufung durch den Absender, keine
Autorisierung: Wer Codex nutzen darf, entscheiden Authentifizierung,
Policy-Matrix und HMAC-Clearance.
é    )ÚannotationsN)Ú	dataclass)ÚIterableÚPatterné   )Ú
AttachmentÚContextEnvelopeÚMemorySnippet)ÚPrivacyTierÚmost_sensitivezsecret.private_key_blockzP-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)zsecret.telegram_bot_tokenz5(?<![0-9])\d{8,10}:[A-Za-z0-9_-]{35}(?![A-Za-z0-9_-])zsecret.anthropic_keyz\bsk-ant-[A-Za-z0-9_-]{20,}zsecret.openai_keyz!\bsk-(?:proj-)?[A-Za-z0-9_-]{20,}zsecret.github_tokenzI\b(?:ghp|gho|ghs|ghu|ghr)_[A-Za-z0-9]{30,}|\bgithub_pat_[A-Za-z0-9_]{20,}zsecret.slack_tokenz\bxox[abposr]-[A-Za-z0-9-]{10,}zsecret.aws_access_keyz\b(?:AKIA|ASIA)[0-9A-Z]{16}\bz
secret.jwtz<\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}zsecret.supabase_keyz.\bsb_(?:secret|publishable)_[A-Za-z0-9_-]{10,}zsecret.bearerz&(?i)\bbearer\s+[A-Za-z0-9._~+/=-]{20,}zsecret.assignmentuƒ   (?i)\b(?:api[_-]?key|secret|token|password|passwort|kennwort|pwd|client[_-]?secret)\b\s*[:=]\s*['\"]?(?!\[GESCHWÃ„RZT:)[^\s'\"]{8,}ú$tuple[tuple[str, Pattern[str]], ...]ÚSECRET_RULESu   (?<![A-Za-zÃ„Ã–ÃœÃ¤Ã¶Ã¼ÃŸ])u   (?![A-Za-zÃ„Ã–ÃœÃ¤Ã¶Ã¼ÃŸ])z	pii.emailzE\b[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}\bz	pii.phonezR(?<![\w+])(?:\+|00)[1-9]\d(?:[ ./-]?\d){6,13}\b|(?<![\w+])0\d{2,5}[ /-]?\d{4,10}\bzpii.ibanz;\b[A-Z]{2}\d{2}(?: ?[A-Z0-9]{4}){3,7}(?: ?[A-Z0-9]{1,3})?\bzpii.keywordu  (?:personenbezogen|dsgvo|gdpr|geburtsdatum|geburtstag|steuer-?id|steuernummer|sozialversicherung|krankheit|diagnose|gehalt|gehÃ¤lter|lohnabrechnung|kontonummer|personalausweis|reisepass|patient|mitarbeiterdaten|personaldaten|privatadresse|wohnadresse|social security)Ú	PII_RULESzcustomer.bmwÚbmwzcustomer.adessoÚadessozcustomer.supplierpulsezsupplier[\s_-]*pulsezcustomer.kundendatenzkund(?:e|in)zcustomer.customerz
customers?zcustomer.mandantÚmandantzconfidential.markerz7(?:vertraulich|confidential|geheim|verschwiegenheit|ndaú)ztuple[tuple[str, str], ...]ÚDEFAULT_CONFIDENTIAL_KEYWORDS)zinternal.pathz1(?:/home/aria\b|/root\b|/etc/|~/\.claude|\.env\b)zinternal.markeru4   (?:intern|interne[nmrs]?|internal|nicht Ã¶ffentlich)ÚDEFAULT_INTERNAL_KEYWORDSu<   ^\s*(?:#public|#Ã¶ffentlich|#oeffentlich|\[public\])(?=\s|$)T)Úfrozenc                  ó,   — e Zd ZU ded<   ded<   ded<   y)ÚPrivacyAssessmentr   Útierztuple[str, ...]Úrule_idsz#tuple[tuple[str, PrivacyTier], ...]ÚpartsN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú1/home/aria/aria-v3/python/aria_router/classify.pyr   r   M   s   … à
ÓØÓØ.Ô.r"   r   c                óÆ   — g }| D ]P  \  }}|j                  |«      s||z   }|j                  |t        j                  |t        j                  «      f«       ŒR t        |«      S ©N)Ú
startswithÚappendÚreÚcompileÚ
IGNORECASEÚtuple)ÚentriesÚprefixÚcompiledÚrule_idÚpatterns        r#   Ú_compiler1   T   sa   € Ø€HØ#ò GÑˆ�Ø×!Ñ! &Ô)Ø˜wÑ&ˆGØ�‰˜¤"§*¡*¨W´b·m±mÓ"DÐEÕFðGô �‹?Ðr"   c                  óT   — e Zd Zddddœ	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd	„Zdd
„Z	y)ÚPrivacyClassifierTr!   )Úpublic_marker_enabledÚextra_confidential_keywordsÚextra_internal_keywordsc               ó  — t        |«      | _        t        d„ t        |«      D «       «      }t        d„ t        |«      D «       «      }t        t
        z   t        t        |z   d«      z   | _        t        t        |z   d«      | _
        y )Nc              3  ór   K  — | ]/  \  }}d |› �t         t        j                  |«      z   t        z   f–— Œ1 y­w©zcustom.N©Ú_Lr(   ÚescapeÚ_R©Ú.0ÚiÚks      r#   ú	<genexpr>z-PrivacyClassifier.__init__.<locals>.<genexpr>b   s;   è ø€ ò OÙ#˜q !ð & a S˜M¬2´·	±	¸!³Ñ+<¼rÑ+AÔBñ Oùó   ‚57c              3  ór   K  — | ]/  \  }}d |› �t         t        j                  |«      z   t        z   f–— Œ1 y­wr9   r:   r>   s      r#   rB   z-PrivacyClassifier.__init__.<locals>.<genexpr>d   s;   è ø€ ò JÙ"˜a ð % Q C˜=¬"¬r¯y©y¸«|Ñ*;¼bÑ*@ÔAñ JùrC   Ú )Úboolr4   r+   Ú	enumerater   r   r1   r   Ú_confidentialr   Ú	_internal)Úselfr4   r5   r6   Ú
extra_confÚ	extra_ints         r#   Ú__init__zPrivacyClassifier.__init__^   s‰   € ô &*Ð*?Ó%@ˆÔ"Üñ OÜ'0Ð1LÓ'MôOó Oˆ
äñ JÜ&/Ð0GÓ&HôJó Jˆ	ä)¬IÑ5¼Ü)¨JÑ6¸ó9<ñ <ˆÔä!Ô";¸iÑ"GÈÓLˆ�r"   c                óâ   — | j                   D ��cg c]  \  }}|j                  |«      sŒ|‘Œ }}}| j                  D ��cg c]  \  }}|j                  |«      sŒ|‘Œ }}}||fS c c}}w c c}}w r%   )rH   ÚsearchrI   )rJ   ÚtextÚruler0   ÚconfidentialÚinternals         r#   Ú_scanzPrivacyClassifier._scanj   se   € Ø26×2DÑ2D×]¡  wÈÏÉÐW[ÕH\šÐ]ˆÑ]Ø.2¯n©n×U™]˜T 7ÀÇÁÈtÕ@T’DÐUˆÑUØ˜XÐ%Ð%ùó ^ùÛUs   �A%ªA%Á A+ÁA+c               óÎ   — | j                  |«      \  }}|rt        j                  ||z   fS |rt        j                  |fS |rt        j                  dgfS t        j
                  g fS )Nzpublic.marker)rT   r   ÚCONFIDENTIALÚINTERNALÚPUBLICÚUNKNOWN)rJ   rP   Úallow_publicrR   rS   s        r#   Ú_classify_textz PrivacyClassifier._classify_texto   sj   € Ø!%§¡¨DÓ!1Ñˆ�hÙÜ×+Ñ+¨\¸HÑ-DÐDÐDÙÜ×'Ñ'¨Ð1Ð1ÙÜ×%Ñ%¨Ð'8Ð8Ð8Ü×"Ñ" BÐ&Ð&r"   c                óZ   — | j                   xr t        t        j                  |«      «      S r%   )r4   rF   ÚPUBLIC_MARKERÚmatch)rJ   Úprompts     r#   Úhas_public_markerz#PrivacyClassifier.has_public_markery   s#   € Ø×)Ñ)ÒO¬d´=×3FÑ3FÀvÓ3NÓ.OÐOr"   c                ó  — | j                  |j                  d¬«      \  }}| j                  |j                  d¬«      \  }}t        ||f«      }||D �cg c]  }d|› �‘Œ	 c}z   }|t        j
                  u rE|j                  t        j
                  ur)|j                  |d|j                  j                  › �gz   fS |t        j                  ur2|j                  t        j                  u rt        j                  |dgz   fS ||fS c c}w )NF©rZ   zsource.zmemory.declared_zmemory.declared_confidential)	r[   rP   Úsourcer   r   rY   Údeclared_tierÚvaluerV   )	rJ   ÚsnippetÚ	text_tierÚ
text_rulesÚsource_tierÚsource_rulesr   ÚrÚruless	            r#   Ú_classify_memoryz"PrivacyClassifier._classify_memory|   s  € ð !%× 3Ñ 3°G·L±LÈuÐ 3Ó UÑˆ	�:Ø$(×$7Ñ$7¸¿¹ÐUZÐ$7Ó$[Ñ!ˆ�\Ü˜y¨+Ð6Ó7ˆØ°\ÖB° ¨ sšmÒBÑBˆØ”;×&Ñ&Ñ&¨7×+@Ñ+@Ì×H[ÑH[Ñ+[à×(Ñ(¨%Ð5EÀg×F[ÑF[×FaÑFaÐEbÐ3cÐ2dÑ*dÐdÐdØ”{×/Ñ/Ñ/°G×4IÑ4IÌ[×MeÑMeÑ4eÜ×+Ñ+¨UÐ6TÐ5UÑ-UÐUÐUØ�Uˆ{Ðùò Cs   ÁDc                ó¤  — dj                  d„ |j                  |j                  fD «       «      }| j                  |d¬«      \  }}|j                  �F	 |j                  j                  d«      }|�(| j                  |d¬«      \  }}t        ||f«      }||z   }|t        j                  u rt        j                  }||dgz   fS # t        $ r d }Y Œaw xY w)Nú c              3  ó&   K  — | ]	  }|sŒ|–— Œ y ­wr%   r!   )r?   Úvs     r#   rB   z9PrivacyClassifier._classify_attachment.<locals>.<genexpr>Œ   s   è ø€ ÒO !ÊQœAÑOùs   ‚ŠFrb   zutf-8zattachment.never_public)ÚjoinÚnameÚmimer[   ÚdataÚdecodeÚUnicodeDecodeErrorr   r   rX   rY   )rJ   Ú
attachmentÚmetadatar   rl   ÚdecodedÚcontent_tierÚcontent_ruless           r#   Ú_classify_attachmentz&PrivacyClassifier._classify_attachment‹   sÞ   € Ø—8‘8ÑO¨
¯©¸¿¹Ð'IÔOÓOˆØ×)Ñ)¨(ÀÐ)ÓG‰ˆˆeØ�?‰?Ð&ðØ$Ÿ/™/×0Ñ0°Ó9�ð Ð"Ø.2×.AÑ.AÀ'ÐX]Ð.AÓ.^Ñ+�˜mÜ% t¨\Ð&:Ó;�Ø Ñ-�à”;×%Ñ%Ñ%Ü×&Ñ&ˆDØ�UÐ7Ð8Ñ8Ð8Ð8øô &ò Ø’ðús   ÁC ÃCÃCc           
     óä  — t        |t        «      st        d«      ‚g }g }| j                  |j                  | j                  |j                  «      ¬«      \  }}|j                  d|f«       |j                  |«       t        |j                  «      D ]A  \  }}| j                  |«      \  }}	|j                  d|› d�|f«       |j                  |	«       ŒC t        |j                  «      D ]A  \  }}
| j                  |
«      \  }}|j                  d|› d�|f«       |j                  |«       ŒC t        d„ |D «       «      }t        |t        t!        t#        |«      «      «      t        |«      «      S )NÚINVALID_ENVELOPErb   r_   zmemory[ú]zattachment[c              3  ó&   K  — | ]	  \  }}|–— Œ y ­wr%   r!   )r?   Ú_r   s      r#   rB   z-PrivacyClassifier.classify.<locals>.<genexpr>­   s   è ø€ Ò ;©'¨!¨T¤Ñ ;ùs   ‚)Ú
isinstancer	   Ú	TypeErrorr[   r_   r`   r'   ÚextendrG   Úmemoryrm   Úattachmentsr}   r   r   r+   ÚsortedÚset)rJ   Úenveloper   rl   Úprompt_tierÚprompt_rulesÚindexrf   r   Úsnippet_rulesrx   Úattachment_rulesÚoveralls                r#   ÚclassifyzPrivacyClassifier.classifyœ   sZ  € Ü˜(¤OÔ4ÜÐ.Ó/Ð/Ø/1ˆØˆØ$(×$7Ñ$7Ø�O‰O¨$×*@Ñ*@ÀÇÁÓ*Qð %8ó %SÑ!ˆ�\à�‰�h Ð,Ô-Ø�‰�\Ô"Ü'¨¯©Ó8ò 	(‰NˆE�7Ø"&×"7Ñ"7¸Ó"@ÑˆD�-Ø�L‰L˜G E 7¨!Ð,¨dÐ3Ô4Ø�L‰L˜Õ'ð	(ô "+¨8×+?Ñ+?Ó!@ò 	+ÑˆE�:Ø%)×%>Ñ%>¸zÓ%JÑ"ˆDÐ"Ø�L‰L˜K¨ w¨aÐ0°$Ð7Ô8Ø�L‰LÐ)Õ*ð	+ô !Ñ ;°UÔ ;Ó;ˆÜ  ¬%´´s¸5³zÓ0BÓ*CÄUÈ5Ã\ÓRÐRr"   N)r4   rF   r5   úIterable[str]r6   r’   )rP   ÚstrÚreturnztuple[list[str], list[str]])rP   r“   rZ   rF   r”   útuple[PrivacyTier, list[str]])r_   r“   r”   rF   )rf   r
   r”   r•   )rx   r   r”   r•   )rŠ   r	   r”   r   )
r   r   r   rM   rT   r[   r`   rm   r}   r‘   r!   r"   r#   r3   r3   ]   sC   „ Ø8<Ø>@Ø:<ñ
MØ.;ð
Mà*7ó
Mó&ó
'óPóó9ô"Sr"   r3   ÚreviewuM   (?i)\b(?:review\w*|code-?review|gegenles\w*|begutacht\w*|prÃ¼f\w*|pruef\w*)\bÚcodinga  (?i)```|\b(?:code|coden|python|javascript|typescript|bash|shell|skript\w*|script\w*|funktion\w*|function\w*|bug\w*|debug\w*|stack ?trace|exception|traceback|refactor\w*|kompilier\w*|compile\w*|regex|sql|endpoint\w*|unit-?test\w*|pytest|git|commit\w*|programmier\w*|implementier\w*)\bÚplanningzB(?i)\b(?:plan\w*|roadmap|strategie\w*|konzept\w*|architektur\w*)\bÚwritingup   (?i)\b(?:schreib\w*|formulier\w*|text\w*|mail\w*|e-mail\w*|brief\w*|Ã¼bersetz\w*|uebersetz\w*|zusammenfass\w*)\bÚ
TASK_RULESÚphotoc                  ó,   — e Zd ZU ded<   ded<   ded<   y)ÚTaskAssessmentr“   Ú
task_classzfrozenset[str]ÚcapabilitiesrQ   Nr   r!   r"   r#   r�   r�   Å   s   … àƒOØ Ó Ø
„Ir"   r�   c                óÒ  — dh}t        d„ | j                  D «       «      }t        d„ | j                  D «       «      }|r|j                  d«       |r|j                  d«       |rt        dt	        |«      d«      S t
        D ]P  \  }}|j                  | j                  «      sŒ"|dv r|j                  d«       t        |t	        |«      d	|› �«      c S  t        |t	        |«      d
«      S )NrP   c              3  ó‚   K  — | ]7  }|j                   t        v xs |j                  xs d j                  d«      –— Œ9 y­w©rE   zimage/N©ÚkindÚIMAGE_KINDSrt   r&   ©r?   Úas     r#   rB   z classify_task.<locals>.<genexpr>Î   s5   è ø€ ÒoÐUV�A—F‘FœkÐ)ÒP¨a¯f©fªl¸×-FÑ-FÀxÓ-PÓPÑoùs   ‚=?c              3  ó„   K  — | ]8  }|j                   t        v xs |j                  xs d j                  d«       –— Œ: y­wr¢   r£   r¦   s     r#   rB   z classify_task.<locals>.<genexpr>Ï   s5   è ø€ ÒtÐZ[˜Ÿ™¤+Ð-ÒT°!·&±&²,¸B×1JÑ1JÈ8Ó1TÔUÑtùs   ‚>A ÚvisionÚfilesztask.image_attachment)r—   r–   Úcodeztask.ztask.default)Úanyr‡   Úaddr�   Ú	frozensetrš   rO   r_   )rŠ   Údefault_taskrŸ   Ú	has_imageÚhas_fileÚtaskr0   s          r#   Úclassify_taskr³   Ì   sÝ   € Ø�8€LÜÑoÐZb×ZnÑZnÔoÓo€IÜÑtÐ_g×_sÑ_sÔtÓt€HÙØ×Ñ˜Ô"ÙØ×Ñ˜Ô!ÙÜ˜h¬	°,Ó(?ÐAXÓYÐYÜ#ò Q‰ˆˆgØ�>‰>˜(Ÿ/™/Õ*ØÐ+Ñ+Ø× Ñ  Ô(Ü! $¬	°,Ó(?À5ÈÈÀÓPÒPð	Qô
 ˜,¬	°,Ó(?ÀÓPÐPr"   )r,   zIterable[tuple[str, str]]r-   r“   r”   r   )Úanalysis)rŠ   r	   r¯   r“   r”   r�   )"Ú__doc__Ú
__future__r   r(   Údataclassesr   Útypingr   r   Úcontextr   r	   r
   Úcorer   r   r)   r   r    r;   r=   r*   r   r   r   r]   r   r1   r3   rš   r®   r¥   r�   r³   r!   r"   r#   ú<module>r»      s8  ðòõ #ã 	Ý !ß $ç ?Ñ ?ß -ð    §¡Ð,ó  "Að  Bð ! * "§*¡*Ð-eÓ"fÐgØ˜Z˜RŸZ™ZÐ(FÓGÐHØ˜*˜"Ÿ*™*Ð%IÓJÐKØ˜J˜BŸJ™JÐ'sÓtÐuØ˜:˜2Ÿ:™:Ð&HÓIÐJØ˜j˜bŸj™jÐ)IÓJÐKØ�:�2—:‘:Ð]Ó^Ð_Ø˜J˜BŸJ™JÐ'XÓYÐZØ�j�b—j‘jÐ!JÓKÐLØ˜*˜"Ÿ*™*ð	:ó;ð <ð6€Ð2ó ð( $€Ø"€ð �*�"—*‘*ÐeÓfÐgØ�*�"—*‘*ÐrÓsÐtØ��—‘ÐZÓ[Ð\Ø�J�B—J‘JØ
ð 6ñ 	6ð 8:·}±}ó	Fð Gð		3€	Ð/ó 	ð �R˜&‘[Ð!Ø˜˜Y™Ð'Ø˜rÐ$;Ñ;Ð<Ø˜R /Ñ1Ð2Ø˜"˜}Ñ,¨rÑ1Ð2Ø˜˜j™Ð)Ø˜BÐ![Ñ[Ð^`Ñ`ÐcgÑgÐhð	>Ð Ð:ó 	ð LØ˜ÐTÑTÐWYÑYÐZð:Ð Ð6ó ð
 �—
‘
ÐZÐ\^×\iÑ\iÓj€ñ �$Ô÷/ð /ó ð/ó÷QSñ QSðr ˆzˆr�z‰zÐjÓkÐlØˆzˆr�z‰zð	-ó.ð /ð
 ��—‘ÐaÓbÐcØ�
�—
‘
ð	+ó,ð -ð4€
Ð0ó ñ ˜˜	Ó"€ñ �$Ô÷ð ó ðõQr"   