+
    „WÝjO?  ã                  ó   a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
 RtRtRRR	R
/RRR	R/.tR]R&   RRR	R/tR]R&   RtR]R&   R R ltR=RR/R R llltR R ltR R ltR R ltR  R! ltR>R" R# lltR$ R% ltR&R/R' R( lltR) R* ltR+ R, ltR- R. ltR?tR/ R0 ltR=R1 R2 lltR3 R4 lt R5 R6 lt!R7 R8 lt"R9 R: lt#R; R< lt$R# )@z:Mixture-of-Agents configuration and slash-command helpers.)ÚannotationsN)Údeepcopy)ÚAnyÚ__HERMES_MOA_TURN_V1__ÚdefaultÚproviderzopenai-codexÚmodelzgpt-5.5Ú
openrouterzdeepseek/deepseek-v4-prozlist[dict[str, str]]ÚDEFAULT_MOA_REFERENCE_MODELSzanthropic/claude-opus-4.8zdict[str, str]ÚDEFAULT_MOA_AGGREGATORúfloat | NoneÚDEFAULT_MOA_REFERENCE_TIMEOUTc               ó   € V ^8„  d   QhRR/# )é   Úreturnzlist[dict[str, Any]]© )Úformats   "ÚIC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\moa_config.pyÚ__annotate__r      s   € ÷ Zñ ZÐ#7ñ Zó    c                 óV   € \        \        4       U u. uF  p / V CR R/CNK  	  up # u up i )ÚenabledT)r   r
   )Úslots    r   Ú_default_reference_modelsr      s/   € Ü2:Ô;WÔ2XÓYÑ2X¨$Ð%ˆtÐ%�Y Ô%Ñ2XÑYÐYùÒYs   ’&ÚpositiveFc               ó    € V ^8„  d   QhRRRR/# )r   Úvaluer   r   Úboolr   )r   s   "r   r   r      s   € ÷ ñ ˜#ð Àñ r   c               ó^  € V e   V R8X  d   V#  V! V 4      pT\        J d   \
        P                  ! T4      '       d   T'       d
   T^ 8:  d   T# T#   \         \        \        3 dG    T\        Jd   Tu #  \        \	        T 4      4      p Lt  \         \        \        3 d    Tu u # i ; ii ; i)zþCoerce ``value`` with ``cast`` (float/int); ``default`` when unset/blank/invalid.

``int`` also accepts float-looking strings ("3.0"). With ``positive`` the result must be > 0
or ``default`` is returned. Non-finite floats always fall back to ``default``.Ú )Ú	TypeErrorÚ
ValueErrorÚOverflowErrorÚintÚfloatÚmathÚisfinite)r   Úcastr   r   Únumbers   &&&$ r   Ú_coerce_numberr)      sž   € ð
 ‚}˜ œØˆðÙ�e“ˆð 	”‹œdŸmšm¨F×3Ò3¿ÀfÐPQÄkØˆØ€Møô ”z¤=Ð1ô Ø”s‹?ØŠNð	Üœ˜u›Ó&ŠFøÜœ:¤}Ð5ô 	ØŒNð	úðús)   �A Á"B,Á5BÂB(Â#B,Â'B(Â(B,c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   r   r   )r   s   "r   r   r   1   s   € ÷ Vñ V Sð V¨\ñ Vr   c                óh   € \        V \        4      '       d   \        # \        V \        \        RR7      # )z³Finite positive advisor timeout, or None to inherit ``auxiliary.moa_reference.timeout``.

No artificial cap: long-thinking advisor models legitimately run far beyond five minutes.T)r   )Ú
isinstancer   r   r)   r$   )r   s   &r   Ú_coerce_reference_timeoutr-   1   s*   € ô �%œ×ÒÜ,Ð,Ü˜%¤Ô(EÐPTÔUÐUr   c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   Ústrr   )r   s   "r   r   r   :   s   € ÷ ñ ˜#ð  #ñ r   c                óL  € R R lp\        V \        4      '       dp   \        V P                  R4      ;'       g    R4      P	                  4       P                  4       pVR8X  d'   V! \        V P                  R4      \        ^ 4      4      # Tp \        T ;'       g    R4      P	                  4       P                  4       pVR	9   d   V# VP                  R4      '       dH   VP                  R4      w  r4pT! V'       d$   \        VP	                  4       \        ^ 4      4      # ^ 4      # R# )
a  Normalize the fan-out cadence to ``per_iteration`` | ``user_turn`` | ``every_n:<N>`` (N >= 2);
the mapping form ``{mode: every_n, n: N}`` becomes the string, ``every_n:1`` collapses to
``per_iteration``, anything unparseable falls back to ``user_turn`` (the cheapest cadence).

The ``every_n`` cadence also accepts the mapping form ``{mode: every_n, n: N}`` from hand-edited YAML
and normalizes it to the canonical string, so the rest of the pipeline (presets, flattened view,
runtime) only ever sees one shape. See #67199.
c               ó    € V ^8„  d   QhRRRR/# )r   Únr#   r   r0   r   )r   s   "r   r   Ú$_coerce_fanout.<locals>.__annotate__C   s   € ÷ Zñ Z�Cð Z˜Cñ Zr   c                ó0   € V ^8¼  d   RV  2# V ^8X  d   R# R# )r   zevery_n:Úper_iterationÚ	user_turnr   )r3   s   &r   Ú_every_nÚ _coerce_fanout.<locals>._every_nC   s$   € Ø!" a¤�˜!˜ˆ~ÐYÀÀaÄ¨oÐYÈ[ÐYr   Úmoder   Úevery_nr3   r7   Ú:>   r7   r6   )
r,   Údictr0   ÚgetÚstripÚlowerr)   r#   Ú
startswithÚ	partition)r   r8   r:   Ú_ÚsepÚrests   &     r   Ú_coerce_fanoutrF   :   så   € õZô �%œ×Òä�5—9‘9˜VÓ$×*Ð*¨Ó+×1Ñ1Ó3×9Ñ9Ó;ˆØ�9ÔÙœN¨5¯9©9°S«>¼3ÀÓBÓCÐCØˆÜˆu�{ˆ{˜Ó×!Ñ!Ó#×)Ñ)Ó+€DØÐ-Ô-ØˆØ‡��y×!Ò!Ø—~‘~ cÓ*‰ˆ�ÙÇœ t§z¡z£|´S¸!Ó<ÓKÐKÈÓKÐKÙr   c               ó    € V ^8„  d   QhRRRR/# r/   r   )r   s   "r   r   r   U   s   € ÷ kñ k ð k¨ñ kr   c                ó    € V RJ d   R# V e   V RJ d   R# \        V 4      P                  4       P                  4       pVR9   d   V# VR9   d   R# R# )u�  Normalize ``moa.privacy_filter`` to '' (off, the default), 'display', or 'full'.

``false``/``None``/unknown values land on '' so a hand-edited config degrades to prior
behavior. 'display' redacts user-visible surfaces only (reference blocks in the UI and saved
MoA trace records).

- ``''`` (empty string): filter off â€” the default. The aggregator still sees raw advisor text, so answer
quality is unaffected. - ``'full'``: additionally redact the advisor text injected into the aggregator
prompt (issue #59959's literal ask). A hand-edited boolean ``true`` maps here because the issue framed
the toggle as "redact before passing to the aggregator".
TÚfullFr   >   rI   Údisplay>   Ú1ÚonÚyesÚtrue)r0   r?   r@   )r   r:   s   & r   Úcoerce_privacy_filterrO   U   sX   € ð �ƒ}ÙØ‚}˜ ›ÙÜˆu‹:×ÑÓ×#Ñ#Ó%€DØÐ.Ô.ˆ4Ðj¸tÐGaÔ?a°VÐjÐgiÐjr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   ú
str | Noner   )r   s   "r   r   r   i   s   € ÷ Nñ N 3ð N¨:ñ Nr   c                ó’   € ^ RI Hp V e   V RJ d   RMV! V 4      pVf   R# VP                  R4      RJ d   R# VP                  R4      # )z@Canonical per-slot reasoning effort, or None when unset/invalid.)Úparse_reasoning_effortNTr   FÚnoneÚeffort)Úhermes_constantsrS   r>   )r   rS   Úparseds   &  r   Ú_clean_reasoning_effortrX   i   sI   € å7Ø’] e¨t£m‰TÑ9OÐPUÓ9V€FØ‚~ÙØ—Z‘Z 	Ó*¨eÓ3ˆ6ÐM¸¿¹ÀHÓ9MÐMr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   r   r   r   r   )r   s   "r   r   r   r   s!   € ÷ ñ ˜ð  dð °dñ r   c                óä   € V f   V# \        V \        4      '       d   V # \        V \        4      '       d3   V P                  4       P	                  4       pVR9   d   R# VR9   d   R# T# \        V 4      # )NTF>   rK   rL   rM   rN   >   Ú0ÚnoÚoffÚfalse)r,   r   r0   r?   r@   )r   r   Útexts   && r   Ú_coerce_boolr`   r   sj   € Ø‚}ØˆÜ�%œ×ÒØˆÜ�%œ×ÒØ�{‰{‹}×"Ñ"Ó$ˆØÐ9Ô9ˆtÐxÈÐPkÔHk¸uÐxÐqxÐxÜ�‹;Ðr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   rQ   r   )r   s   "r   r   r   }   s   € ÷ ñ ˜ð  
ñ r   c                ó€  € \        V \        4      '       g   R# \        V P                  R4      ;'       g    R4      P	                  4       p\        V P                  R4      ;'       g    R4      P	                  4       pV'       g   V'       g   R# V'       g   R# V'       g   RV R2# VP                  4       R	8X  d   R
# R# )a  Human-readable problem for a slot ``_clean_slot`` would drop; None when complete and valid.

Mirrors ``_clean_slot`` exactly so the write-boundary validator (``validate_moa_payload``) and
the tolerant runtime normalizer can never disagree about what is acceptable.z-must be an object with 'provider' and 'model'r   r   r   zprovider and model are requiredzprovider is requiredzmodel is required (provider 'z' has no model selected)ÚmoazMthe Mixture of Agents provider cannot be used inside a preset (recursive MoA)N)r,   r=   r0   r>   r?   r@   )r   r   r   s   &  r   Ú_slot_problemrd   }   s”   € ô
 �dœD×!Ò!Ù>Ü�4—8‘8˜JÓ'×-Ð-¨2Ó.×4Ñ4Ó6€HÜ�—‘˜Ó!×'Ð' RÓ(×.Ñ.Ó0€EßŸEÙ0ßÙ%ßØ.¨x¨jÐ8PÐQÐQð ‡~�~Ó˜5Ô Ù^Ùr   Úinclude_enabledc               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   re   r   r   zdict[str, Any] | Noner   )r   s   "r   r   r   “   s"   € ÷ ñ �cð ¨tð Ð@Uñ r   c               ó@  € \        V 4      e   R # R\        V R,          4      P                  4       R\        V R,          4      P                  4       /p\        V P	                  R4      4      pV'       d   W2R&   V'       d   \        V P	                  R4      R4      VR&   V# )Nr   r   Úreasoning_effortr   T)rd   r0   r?   rX   r>   r`   )r   re   ÚcleanrU   s   &$  r   Ú_clean_slotrj   “   s‰   € ä�TÓÒ&ÙØ'¬¨T°*Õ-=Ó)>×)DÑ)DÓ)FÈÔQTÐUYÐZaÕUbÓQc×QiÑQiÓQkÐl€EÜ$ T§X¡XÐ.@Ó%AÓB€FßØ$*Ð Ñ!çÜ'¨¯©°Ó(;¸TÓBˆˆiÑØ€Lr   c               ó    € V ^8„  d   QhRRRR/# )r   Úraw_refsr   r   Úlistr   )r   s   "r   r   r   ¡   s   € ÷ 
ñ 
˜sð 
 tñ 
r   c                ó  € \        V \        4      '       d    \        P                  ! V 4      p \        V \        4      '       g   \        V \        4      '       d   V .M. p V #   \        P                  \
        3 d    . p  LRi ; i)z¸``reference_models`` as a list: a JSON string (hand-edited config.yaml) is decoded, a single
mapping is wrapped, and any other scalar / bad type degrades to ``[]`` instead of crashing.)r,   r0   ÚjsonÚloadsÚJSONDecodeErrorr!   rm   r=   )rl   s   &r   Ú_reference_slotsrr   ¡   sn   € ô �(œC× Ò ð	Ü—z’z (Ó+ˆHô �h¤×%Ò%Ü!+¨H´d×!;Ò!;�H‘:ÀˆØ€Oøô	 ×$Ñ$¤jÐ1ô 	ØŠHð	ús   ˜A! Á!BÂ Bc               ó    € V ^8„  d   QhRRRR/# )r   Úrawr   r   z	list[str]r   )r   s   "r   r   r   ®   s   € ÷ #ñ #˜cð # iñ #r   c           	     óÈ  a€ \        V \        4      '       g   R.# V P                  R4      p\        V\        4      '       d   V'       d   TM\        V /p. pVP	                  4        EFq  w  rE\        T;'       g    R4      P                  4       ;'       g    Ro\        V\        4      '       g   VP                  RS R24       K`  VP                  R4      p\        V\        4      '       g   \        V\        4      '       d   V.M. p\        V4       UUu. uF  w  rxV\        V4      3NK  	  p	ppVP                  V3R lV	 4       4       \        ;QJ d    R	 V	 4       F  '       d   K   R
M	  RM! R	 V	 4       4      '       d   VP                  RS R24       \        VP                  R4      4      p
V
'       g   EKZ  VP                  RS RV
 24       EKt  	  V# u uppi )a%  Return the problems ``normalize_moa_config`` would silently paper over (empty = safe to save).

Read-time tolerance (a hand-edited config degrades to defaults instead of crashing) is a
corruption engine at write time: a half-filled slot would silently replace the whole preset.

``normalize_moa_config`` is deliberately tolerant: at *read* time a hand-edited config must degrade to
defaults rather than crash the agent. API write paths call this first and reject invalid payloads loudly
instead of saving something the user never chose. See #64156.
zMoA config must be an objectÚpresetsr   z	(unnamed)úpreset 'z': must be an objectÚreference_modelsc              3  ó`   <"  € T F#  w  rV'       g   K  R S RV^,            RV 2x € K%  	  R# 5i)rw   z' reference z: Nr   )Ú.0ÚindexÚissueÚlabels   &  €r   Ú	<genexpr>Ú'validate_moa_payload.<locals>.<genexpr>Ê   s2   øé € ÐoÑ_eÉ|ÈuÔinÔJ˜( 5 '¨°e¸aµi°[ÀÀ5À'ÕJÓ_eùs   ƒ.”.c              3  ó*   "  € T F	  w  rVx € K  	  R # 5i©Nr   )rz   rC   r|   s   &  r   r~   r   Ë   s   é € Ð,¡V™˜�u£Vùs   ‚FTz.': needs at least one complete reference modelÚ
aggregatorz' aggregator: )r,   r=   r>   ÚDEFAULT_MOA_PRESET_NAMEÚitemsr0   r?   Úappendrm   Ú	enumeraterd   ÚextendÚall)rt   Úpresets_rawrv   ÚproblemsÚnameÚpresetÚrefsr{   r   ÚissuesÚ	agg_issuer}   s   &          @r   Úvalidate_moa_payloadr�   ®   s  ø€ ô �cœ4× Ò Ø.Ð/Ð/à—'‘'˜)Ó$€Kä-7¸ÄT×-JÒ-JÏ{™kÔaxÐz}Ð`~€Gà€HØŸ™Ÿ‰ˆÜ�D—J�J˜B“×%Ñ%Ó'×6Ð6¨;ˆÜ˜&¤$×'Ò'Ø�O‰O˜h u gÐ-AÐBÔCÙà�z‰zÐ,Ó-ˆÜ˜$¤×%Ò%Ü'¨¬d×3Ò3�D‘6¸ˆDÜBKÈDÄ/ÔRÁ/±;°5�5œ-¨Ó-Ó.Á/ˆÑRØ�‰ÔoÑ_eÓoÔoß‹3Ñ,¡VÓ,�3�3Š3Ñ,¡VÓ,×,Ò,Ø�O‰O˜h u gÐ-[Ð\Ô]ä! &§*¡*¨\Ó":Ó;ˆ	ßŠ9Ø�O‰O˜h u g¨^¸I¸;ÐG×Hñ! (ð" €Oùó Ss   ÄGc               ó    € V ^8„  d   QhRRRR/# ©r   rt   r   r   údict[str, Any]r   )r   s   "r   r   r   Ô   s   € ÷ 5ñ 5˜3ð 5 >ñ 5r   c                óè  € \        V \        4      '       g   / p R  \        V P                  R4      4       4       pV Uu. uF
  q"f   K  VNK  	  pp\	        V P                  R4      ;'       g    R4      P                  4       P                  4       pR\        V P                  R4      R4      RT;'       g    \        4       R\        V P                  R4      4      ;'       g    \        \        4      R\        V P                  R4      \        4      R\        V P                  R4      \        4      R	\        V P                  R	4      4      RVR9   d   TMRR
\        V P                  R
4      4      /# u upi )c              3  ó<   "  € T F  p\        VR R7      x € K  	  R# 5i)T)re   N)rj   )rz   Úitems   & r   r~   Ú$_normalize_preset.<locals>.<genexpr>Ø   s   é € ÐqÑCp¸4Œ{˜4°×6Ñ6ÓCpùs   ‚rx   Údegraded_reference_policyÚloudr   Tr‚   Úreference_temperatureÚaggregator_temperatureÚreference_timeoutÚfanout>   r™   Úsilent)r,   r=   rr   r>   r0   r?   r@   r`   r   rj   r   r   r)   r$   r-   rF   )rt   Úcleanedr–   r�   Úpolicys   &    r   Ú_normalize_presetr¡   Ô   s3  € Ü�cœ4× Ò ØˆáqÔCSÐTW×T[ÑT[Ð\nÓToÔCpÓq€GÙ$Ó9™W�T�DˆD™W€DÐ9Ü�—‘Ð4Ó5×?Ð?¸Ó@×FÑFÓH×NÑNÓP€Fà”< §¡¨	Ó 2°DÓ9Ø˜D×?Ð?Ô$=Ó$?Ø”k #§'¡'¨,Ó"7Ó8×\Ð\¼HÔE[Ó<\à¤°·±Ð8OÓ0PÔRWÓ!XØ ¤.°·±Ð9QÓ1RÔTYÓ"ZØÔ6°s·w±wÐ?RÓ7SÓTà#¨vÐ9KÔ/K¡VÐQWð 	”. §¡¨Ó!2Ó3ð5ð 5ùò :s   ¾E/ÁE/c               ó    € V ^8„  d   QhRRRR/# r’   r   )r   s   "r   r   r   ù   s   € ÷ Lñ L˜cð L nñ Lr   c           	     ó$  € \        V \        4      '       g   / p V P                  R4      p/ p\        V\        4      '       dT   VP                  4        F?  w  r4\	        T;'       g    R4      P                  4       pV'       g   K2  \        V4      W%&   KA  	  V'       g   \        V 4      V\        &   \	        V P                  R4      ;'       g    R4      P                  4       pV'       d   Wb9  d   \        \        V4      4      p\	        V P                  R4      ;'       g    R4      P                  4       pWr9  d   RpRVRVRV/\         Uu/ uF  qˆ\        W&,          V,          4      bK  	  upCR\        V P                  R4      4      /C# u upi )z/Return validated MoA config with named presets.rv   r   Údefault_presetÚactive_presetÚprivacy_filter)r,   r=   r>   r„   r0   r?   r¡   rƒ   ÚnextÚiterÚ_FLAT_PRESET_KEYSr   rO   )	rt   r‰   rv   r‹   rŒ   Ú
clean_nameÚdefault_nameÚactive_nameÚkeys	   &        r   Únormalize_moa_configr®   ù   s^  € ä�cœ4× Ò Øˆà—'‘'˜)Ó$€KØ)+€GÜ�+œt×$Ò$Ø'×-Ñ-Ö/‰LˆDÜ˜TŸZ˜Z R›×.Ñ.Ó0ˆJß‰zÜ&7¸Ó&?�Ó#ñ 0÷ Ü+<¸SÓ+AˆÔ'Ñ(ä�s—w‘wÐ/Ó0×6Ð6°BÓ7×=Ñ=Ó?€Lß˜<Ô6ÜœD ›MÓ*ˆä�c—g‘g˜oÓ.×4Ð4°"Ó5×;Ñ;Ó=€KØÔ!Øˆà˜,Ø˜Ø�7ðLõ
 ARÓ
RÑ@Q¸”˜Õ.¨sÕ3Ó4Ò4Ñ@QÑ
RðLð 	Ô/°·±Ð8HÓ0IÓJñLð Lùò
 Ss   Å!Fc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úconfigr   r‹   rQ   r   r“   r   )r   s   "r   r   r     s!   € ÷ 
ñ 
˜sð 
¨*ð 
Àñ 
r   c                óT  € \        V 4      p\        T;'       g     VP                  R 4      ;'       g    \        4      P	                  4       pVR,          P                  V4      pVf8   ^ RIHp RP                  VR,          4      ;'       g    RpV! RV RV R24      h\        V4      # )r¤   rv   )ÚMoAPresetNotFoundErrorz, z(none)zMoA preset 'z$' was not found. Available presets: z. Run `hermes moa list`.)	r®   r0   r>   rƒ   r?   Úagent.errorsr²   Újoinr   )r°   r‹   ÚcfgÚpreset_namerŒ   r²   Ú	availables   &&     r   Úresolve_moa_presetr¸     s¡   € Ü
˜vÓ
&€CÜ�d×RÐR˜cŸg™gÐ&6Ó7×RÐRÔ;RÓS×YÑYÓ[€KØ��^×Ñ Ó,€FØ‚~Ý7Ø—I‘I˜c )�nÓ-×9Ð9°ˆ	Ù$Ø˜;˜-Ð'KØˆkÐ1ð3ó4ð 	4ô �FÓÐr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úprefixr0   r­   r   r   r   )r   s   "r   r   r   &  s!   € ÷ 0ñ 0˜Cð 0 cð 0¨dñ 0r   c                ó&   € V R8H  ;'       d    VR8H  # )a  True when the generic missing-config recursion must NOT descend into this section key.

``moa.presets`` is a named map; a present-but-partial user map is authoritative
(see :func:`apply_user_moa_presets`), so the new-key probe must not imply a
union into it.
rc   rv   r   )rº   r­   s   &&r   Úskip_deep_merger¼   &  s   € ð �U‰?×/Ð/˜s iÑ/Ð/r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úmergedr“   rt   r   r   ÚNoner   )r   s   "r   r   r   0  s!   € ÷ 2ñ 2 >ð 2¸ð 2Àñ 2r   c                óV  € \        V\        4      '       d   VP                  R4      MRp\        V\        4      '       d   RV9  d   R# VP                  R4      p\        V\        4      '       g   R# V P                  R4      p\        V\        4      '       g   R# \        V4      VR&   R# )a  Treat an explicit user MoA preset map as authoritative.

``moa.presets`` is a named map. Generic default merging must not union the
schema's built-in names into a user map, because that resurrects presets
the user deleted. An omitted ``moa.presets`` key still receives defaults;
an explicit empty map remains empty. Called by the config load/merge paths
right after ``_deep_merge``.
rc   Nrv   )r,   r=   r>   r   )r¾   rt   Úraw_moaÚraw_presetsÚ
merged_moas   &&   r   Úapply_user_moa_presetsrÄ   0  s�   € ô !+¨3´× 5Ò 5ˆc�g‰g�eŒn¸4€GÜ�gœt×$Ò$¨	¸Ô(@ÙØ—+‘+˜iÓ(€KÜ�k¤4×(Ò(ÙØ—‘˜EÓ"€JÜ�j¤$×'Ò'ÙÜ$ [Ó1€JˆyÓr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r°   r   r_   r0   r   rQ   r   )r   s   "r   r   r   E  s&   € ÷ Qñ Q #ð Q¨Sð Q°Zñ Qr   c                óÞ   € \        T;'       g    R4      P                  4       pV'       g   R# \        V 4      R,          P                  V4      pVe   VP                  RR4      '       g   R# T# )aÂ  Return the preset name iff ``text`` exactly matches an *enabled* preset.

Used by the no-explicit-provider switch path for a bare ``/model <preset>``. Because the match
is implicit it honors the per-preset ``enabled`` opt-out: a plain model switch that collides
with a disabled preset's name must not silently pivot onto the MoA provider. Explicit
``--provider moa`` / picker selection bypasses this, so disabled presets stay reachable.

See #55187.
r   Nrv   r   T)r0   r?   r®   r>   )r°   r_   ÚwantedrŒ   s   &&  r   Úexact_moa_preset_namerÈ   E  s[   € ô �—�˜‹_×"Ñ"Ó$€FßÙÜ! &Ó)¨)Õ4×8Ñ8¸Ó@€FØ’>¨¯©°I¸t×)DÒ)Dˆ4ÐPÈ&ÐPr   c               ó    € V ^8„  d   QhRRRR/# )r   Úmessager   r   z!tuple[str, dict[str, Any] | None]r   )r   s   "r   r   r   V  s   € ÷ 	\ñ 	\˜Sð 	\Ð%Fñ 	\r   c                óø  € \        V \        4      '       d   V P                  \        4      '       g   V R3# V \	        \        4      R P                  4       p \        P                  ! \        P                  ! VP                  R4      4      P                  R4      4      p\        TP                  R4      ;'       g    R4      \        TP                  R4      ;'       g    / 4      3#   \         d    T R3u # i ; i)z%Decode a hidden /moa one-shot marker.NÚasciizutf-8Úpromptr   r°   )r,   r0   rA   ÚMOA_MARKER_PREFIXÚlenr?   ro   rp   Úbase64Úurlsafe_b64decodeÚencodeÚdecodeÚ	Exceptionr>   r¡   )rÊ   ÚencodedÚpayloads   &  r   Údecode_moa_turnr×   V  sÏ   € ä�gœs×#Ò#¨7×+=Ñ+=Ô>O×+PÒ+PØ˜ˆ}ÐØ”cÔ+Ó,Ð-Ð.×4Ñ4Ó6€GðÜ—*’*œV×5Ò5°g·n±nÀWÓ6MÓN×UÑUÐV]Ó^Ó_ˆô ˆw�{‰{˜8Ó$×*Ð*¨Ó+Ô->¸w¿{¹{È8Ó?T×?ZÐ?ZÐXZÓ-[Ð[Ð[øô ô Ø˜ˆ}Òðús   ÁAC' Ã'C9Ã8C9c               ó   € V ^8„  d   QhRR/# )r   r   r0   r   )r   s   "r   r   r   b  s   € ÷ mñ m�3ñ mr   c                 ó   € R # )zŸUsage: /moa <prompt>  (runs one prompt through the default MoA preset, then restores your model; pick a preset from the model picker to switch for the session)r   r   r   r   Ú	moa_usagerÚ   b  s   € ñ mr   r�   )T)rx   r‚   rš   r›   rœ   r˜   r�   r   )%Ú__conditional_annotations__Ú__doc__Ú
__future__r   rÐ   ro   r%   Úcopyr   Útypingr   rÎ   rƒ   r
   Ú__annotations__r   r   r   r)   r-   rF   rO   rX   r`   rd   rj   rr   r�   r¡   r©   r®   r¸   r¼   rÄ   rÈ   r×   rÚ   )rÛ   s   @r   Ú<module>rá      s  øðÜ @å "ã Û Û Ý Ý à,Ð Ø#Ð ð � ¨)Ð4Ø�˜wÐ(BÐCð6EÐ Ð2ó Eð
 �˜gÐ'Bð*DÐ ˜ó Dð /3Ð ˜|Ó 2õZñÀu÷ ð õ*Võõ6kõ(N÷õð,°e÷ õ
õ#õL5ð.Ð õL÷@
õ0õ2õ*Qõ"	\÷mr   