+
    lHàjÆK  ã                   óZ  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt	 ^ RI
HtHt ^ RIHt ]P                  ! R4      tR/RRRR	R
R/R R lllt ! R R]4      tRRRRRRRRRRRR/tRRRRRRRR/tR R ltR R ltR0R R lltR  tR! R" ltR# R$ ltR% R& ltR' R( ltR)RR*R+R
R,/R- R. lltR# )1aS  Human prompt surfaces for :mod:`tools.approval`.

The interactive CLI prompt (callback panel or ``input()`` fallback) and the
operator-selected plugin approval transport. Detection, allowed scopes,
persistence, timeout policy and the final authorization stay host-owned in
``tools.approval``; this module only asks and reports the answer.
N)Úapproval_contextÚapproval_gateway_wait)Úactivity_heartbeatÚhuman_wait_window)Úis_interruptedztools.approvalTÚallow_sessionÚsmart_deniedFÚtitlec                ó”   € V ^8„  d   QhR\         R\         R\        R,          R\        R\        R\        R\         R,          R	\         /# )
é   ÚcommandÚdescriptionÚtimeout_secondsNÚallow_permanentr   r   r	   Úreturn©ÚstrÚintÚbool)Úformats   "Ú:/home/ubuntu/.hermes/hermes-agent/tools/approval_prompt.pyÚ__annotate__r      sV   € ÷ "ñ "¤sð "¼ð "ÌsÐUYÍzð "Ü/3ð"ä04ð"äKOð"ô &)¨4¥Zð"ô <?ñ"ó    c               óF  € Vf   \         P                  ! 4       p^ RIHp V! RV R7      ;_uu_ 4       p	\	        4       ;_uu_ 4        \        WW#WEWgR7      ;V	n        p
V
uuRRR4       uuRRR4       #   + '       g   i     M; iRRR4       R#   + '       g   i     R# ; i)uÉ  Prompt the user to approve a dangerous command (CLI only).

allow_permanent=False hides [a]lways. allow_session=False hides
[s]ession too â€” the caller grants one operation and re-asks next time (the
protected agent-instruction gate in ``tools/file_tools.py``); offering a scope
the caller discards makes every later write re-prompt and reads as broken.
smart_denied: owner override of a Smart DENY, offer only once/deny.
title: header for the plain-input prompt when the question is not a dangerous command
("Save to memory?", "<server> is asking"); the default header stays the dangerous-command one.
approval_callback: CLI prompt_toolkit callback ``(command, description, *,
allow_permanent=True, allow_session=True, smart_denied=False) -> str``; legacy
signatures keep working while both keywords hold their defaults.

Returns 'once', 'session', 'always', 'deny', 'timeout', or 'cancelled'. 'timeout'
means no user response â€” still blocked (fail-closed), but callers report "no
response" rather than an explicit denial. 'cancelled' is an :class:`Unanswered`
sentinel: the prompt never reached a human (callback raised, no callback under
prompt_toolkit, interrupted read) and ``.cause`` says why (#22992).

See #81887.
N©Úhuman_input_requestÚapproval)Úprompt)r	   )Ú_ctxÚ_get_approval_timeoutÚtools.human_input_hooksr   r   Ú
_ask_humanÚoutcome)r   r   r   r   Úapproval_callbackr   r   r	   r   ÚhumanÚchoices   &&&&&$$$   r   Úprompt_dangerous_approvalr&      sz   € ð2 ÒÜ×4Ò4Ó6ˆÝ;ñ 
˜Z°×	8Õ	8¸EÔCT×CVÕCVÜ!+¨GÀ/Ø,=Èlô"ið 	iˆŒ˜à÷ DWÑCV×	8Ò	8×CV×CVú×	8×	8×	8Ò	8ús#   ²BÁA2	Á
BÁ2BÁ=BÂB 	c                   óF   a a€ ] tR t^9t oRtRtV3R lV 3R lltRtVtV ;t	# )Ú
UnansweredzÛChoice ``"cancelled"`` carrying the reason nobody answered. Compares equal to the gateway's
withdrawn-prompt choice so every consumer already handling ``cancelled`` fails closed without
attributing a denial to the user.c                ó    <€ V ^8„  d   QhRS[ /# )r   Úcause©r   )r   Ú__classdict__s   "€r   r   ÚUnanswered.__annotate__?   s   ø€ ÷ ñ ™Cñ r   c                ó4   <€ \         SV `  V R 4      pWn        V# )Ú	cancelled)ÚsuperÚ__new__r*   )Úclsr*   ÚselfÚ	__class__s   && €r   r1   ÚUnanswered.__new__?   s   ø€ Ü‰w‰˜s KÓ0ˆØŒ
Øˆr   )r*   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r1   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r4   r,   s   @@r   r(   r(   9   s    ù‡ € ñ)ð €I÷÷ ó r   r(   ÚoÚonceÚsÚsessionÚaÚalwayszapproval.allowed_oncezapproval.allowed_sessionzapproval.allowed_alwaysÚdenyzapproval.deniedc                óJ   € V ^8„  d   QhR\         R\        R\         R,          /# )r   r   r   r   N©r   r   )r   s   "r   r   r   S   s%   € ÷ ;ñ ;œð ;¬sð ;´s¸Tµzñ ;r   c                óÒ   a a€ RR/oV V3R lp\         P                  ! VRR7      pVP                  4        VP                  VR7       VP	                  4       '       d   R# SR,          # )zFRead one answer on a daemon thread; None when the user never answered.r%   Ú c                  ó˜   <€  \        S 4      P                  4       P                  4       SR &   R#   \        \        3 d
    RSR &    R# i ; i)r%   rI   N)ÚinputÚstripÚlowerÚEOFErrorÚOSError)r   Úresults   €€r   Ú	get_inputÚ_read_choice.<locals>.get_inputW   sF   ø€ ð	"Ü$ V›}×2Ñ2Ó4×:Ñ:Ó<ˆF�8ÓøÜœ'Ð"ô 	"Ø!ˆF�8Ôð	"ús   ƒ*/ ¯A	ÁA	T)ÚtargetÚdaemon)ÚtimeoutN)Ú	threadingÚThreadÚstartÚjoinÚis_alive)r   r   rQ   ÚthreadrP   s   f&  @r   Ú_read_choicer\   S   sX   ù€ à˜ˆ^€Fö"ô ×Ò Y°tÔ<€FØ
‡L�L„NØ
‡K�K˜€KÔ(Ø—?‘?×$Ò$ˆ4Ð:¨&°Õ*:Ð:r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úkeywordr   )r   r   )r   s   "r   r   r   c   s   € ÷ fñ f¬ð f´ñ fr   c                ó8  a€ ^ RI o SP                  V 4      P                  pY9   ;'       gW    \
        ;QJ d-    T3R lTP                  4        4       F  '       g   K   R# 	  R# ! T3R lTP                  4        4       4      #   \        \        3 d     R# i ; i)z˜True when *callback* takes ``keyword`` (or ``**kwargs``); approval callbacks predate ``title``
and a TypeError inside the callback would read as a deny.NFc              3   óf   <"  € T F&  qP                   SP                  P                  J x € K(  	  R # 5i©N)ÚkindÚ	ParameterÚVAR_KEYWORD)Ú.0ÚpÚinspects   & €r   Ú	<genexpr>Ú#callback_accepts.<locals>.<genexpr>k   s'   øé € Ð#eÑUdÐPQ§F¡F¨g×.?Ñ.?×.KÑ.KÕ$KÓUdùs   ƒ.1T)rg   Ú	signatureÚ
parametersÚ	TypeErrorÚ
ValueErrorÚanyÚvalues)Úcallbackr^   Úparamsrg   s   && @r   Úcallback_acceptsrr   c   s†   ø€ ó ðØ×"Ñ" 8Ó,×7Ñ7ˆð Ñ×eÐe§£Ô#eÐU[×UbÑUbÔUdÓ#e§¤Ðe¢Ðe Ô#eÐU[×UbÑUbÔUdÓ#eÓ eÐeøô ”zÐ"ô Úðús   ‡B ÂBÂBc                ó†   € V ^8„  d   QhR\         R\         R\        R\        R\        R\        R\         R,          R	\         /# )
r   r   r   r   r   r   r   r	   Nr   r   )r   s   "r   r   r   n   sY   € ÷ Hñ Hœð H¬#ð HÄð HÔVZð HÜ15ðHÜEIðHÜRUÐX\ÕR\ðHÜhkñHr   c           
      óÖ  € ^ RI Hp V! V 4      p	V! V4      p
T;'       g    V'       * pVeK    RV/V'       g   RR/M/ CV'       d   RR/M/ CV'       d   \        VR4      '       d   RV/M/ CpV! Wš3/ VB #  ^ RI	H
p V! 4       e"   \        P                  RW4       \        R4      #  R\        P                  R&    ^ RIHp V'       d   RMV'       d   RMRpRV 2RV 2ppT;'       g    V! RV
R7      p\!        RV RV	 RV! V4       R24       \"        P$                  P'                  4        \)        V! V4      V4      pVfw   \!        RV! R'/ \*        P,                  ! 4       B ,           4        \        P                  P/                  RR4       \!        4        \"        P$                  P'                  4        R# V'       dj   / \0        P3                  V! R4      P5                  R4      R 4      C\0        P3                  V! R!4      P5                  R4      R"4      CP7                  VR"4      pM'\8        P7                  VR"4      pVR#8X  d   V'       g   R$p\!        V! \:        V,          4      4       V\        P                  P/                  RR4       \!        4        \"        P$                  P'                  4        #   \         dD   p\        P                  R	TRR
7       \        R\        T4      P                   24      u Rp?# Rp?ii ; i  \         d     ELpi ; i  \<        \>        3 do    \!        RX! R%4      ,           4       \        R&4      u \        P                  P/                  RR4       \!        4        \"        P$                  P'                  4        # i ; i  \        P                  P/                  RR4       \!        4        \"        P$                  P'                  4        i ; i)(é    ©Úredact_sensitive_textNr   r   Fr   Tr	   zApproval callback failed: %s©Úexc_infozthe approval callback failed: )Úget_app_or_nonez¬Dangerous-command approval requested on a thread with no approval callback while prompt_toolkit is active; failing closed to avoid stdin deadlock. command=%r description=%rzzno approval callback is registered on this thread while prompt_toolkit owns the terminal, so the prompt could not be shownÚ1ÚHERMES_SPINNER_PAUSE)ÚtÚ
smart_denyÚlongÚshortzapproval.prompt_zapproval.choose_zapproval.dangerous_header)r   z
  z
      z

Ú
rU   zapproval.smart_deny_once_inputsÚ,r@   zapproval.smart_deny_deny_inputsrE   rD   rB   zapproval.cancelledz5the prompt was interrupted before an answer was given)zapproval.timeout) Úagent.redactrw   rr   Ú	ExceptionÚloggerÚerrorr(   Útyper6   Ú"prompt_toolkit.application.currentrz   ÚwarningÚosÚenvironÚ
agent.i18nr}   ÚprintÚsysÚstdoutÚflushr\   r   Úapproval_timeout_notice_kwargsÚpopÚdictÚfromkeysÚsplitÚgetÚ_CLI_CHOICE_ALIASESÚ_CLI_CHOICE_I18NrN   ÚKeyboardInterrupt)r   r   r   r   r#   r   r   r	   rw   Údisplay_commandÚdisplay_descriptionÚ	once_onlyÚcallback_kwargsÚerz   r}   ÚshapeÚ
prompt_keyÚmenu_keyÚheaderr%   Údecisions   &&&&&&&&              r   r!   r!   n   s}  € õ 3Ù+¨GÓ4€OÙ/°Ó<Ðà×1Ð1 MÔ 1€IàÒ$ð		Sà0°/ð wßBO ?°EÑ":ÐUWðwç<H >°4Ñ"8Èbðw÷ 7<Ô@PÐQbÐdk×@lÒ@l 7¨EÑ"2ÐrtðwˆOñ % _Ñ]È_Ñ]Ð]ðõ 	GÙÓÒ(Ü�N‰Nð PàQXôgô ð Oó Pð Pð	 )ð *-„B‡J�JÐ%Ñ&ðÝ ç )‘¿©vÈgˆØ!1°%°Ð9Ð=MÈeÈWÐ;U�Hˆ
Ø×YÐY™!Ð7ÐEXÔYˆÜ��V�HØ˜Ð)¨©a°«k¨]¸"ð>ô 	?ä�
‰
×ÑÔÜ™a 
›m¨_Ó=ˆØŠ>Ü�$™ÑW´×1TÒ1TÓ1VÑWÕWÔXØô 	�
‰
�‰Ð-¨tÔ4ÜŒÜ�
‰
×ÑÖ÷! ðœ$Ÿ-™-©Ð*KÓ(L×(RÑ(RÐSVÓ(WÐY_Ó`ð ÜŸ-™-©Ð*KÓ(L×(RÑ(RÐSVÓ(WÐY_Ó`ðç™#˜f fÓ-ñ ô +×.Ñ.¨v°vÓ>ˆHØ˜8Ô#¯OØ$�Ü‰aÔ  Õ*Ó+Ô,Øô
 	�
‰
�‰Ð-¨tÔ4ÜŒÜ�
‰
×ÑÕøôm ô 	SÜ�L‰LÐ7¸ÀTˆLÔJÜÐ >¼tÀA»w×?OÑ?OÐ>PÐQÓRÕRûð	Sûô* ô Úðûô6 Ô'Ð(ô SÜˆd‘QÐ+Ó,Õ,Ô-ÜÐQÓRÑRä
�
‰
�‰Ð-¨tÔ4ÜŒÜ�
‰
×ÑÕðSûô 	�
‰
�‰Ð-¨tÔ4ÜŒÜ�
‰
×ÑÕús…   ­
J9 ¸J9 ÁJ9 Á!J9 Á7/L
 Â<L ÃL Ã+BL Æ;L ÇBL ÉL Ê9LË8LË<LÌLÌ
LÌLÌ4NÍN ÎNÎN ÎA
O(c                 ó.   € ^ RI Hp Hp V ! 4        V! 4       # )zCLazy plugin-manager seam used by tests and early tool-only imports.)Údiscover_pluginsÚget_plugin_manager)Úhermes_cli.pluginsr¥   r¦   )r¥   Ú_get_managers     r   r¦   r¦   ¹   s   € çWñ ÔÙ‹>Ðr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Únamer   )r   r“   )r   s   "r   r   r   Â   s   € ÷ hñ h”3ð h´dñ hr   c           
     ó   € RRRVRVRVRV /# )zVResult shape of :func:`_present_with_selected_transport` once a transport is selected.ÚselectedTr%   ÚfailureÚfallbackrª   © )rª   r%   r­   r®   s   &&&&r   Ú_attemptr°   Â   s    € à˜˜h¨°	¸7ÀJÐPXÐZ`ÐbfÐgÐgr   c                óš   € V ^8„  d   QhR\         R\         R\         R\        \         ,          R\         R\         R\        R\        R	\        /	# )
r   r   r   Úpattern_keyÚpattern_keysÚsession_keyÚsurfacer   r   r   )r   Úlistr   r“   )r   s   "r   r   r   Ç   sa   € ÷ 6Cñ 6C´ð 6CÄ3ð 6CÔUXð 6CÜ37¼µ9ð6CÜKNð6CÜY\ð6Cä48ð6CäKOð6CäTXñ6Cr   c                óô  € \         P                  ! 4       w  r‰VR8X  d   RR/#  \        4       P                  V4      p
V
f%   \
        P                  RV4       \        VRRV	4      #  ^ R	IH	p ^ R
I
HpHp \         P                  ! 4       pVP                  V! V RR7      V! VRR7      V\        V4      WEVW~R7	      p\!        TP"                  TP$                  T\'        T4      TRT 2TP(                  TP*                  R7      p\         P,                  ! R/ TB  ^ RIHp T! RTP"                  TR7      ;_uu_ 4       p\3        T4      ;_uu_ 4        T! T
P4                  Yþ\7        R4      \8        R7      pTP:                  f   TP<                  MRTP:                   2Tn        RRR4       RRR4       \         P,                  ! R/ TBRXP>                  /B  \        TXP<                  TP:                  T	4      #   \         d    \
        P                  RT4       Rp
 ELßi ; i  \         d'    \
        P                  R4       \        TRRR4      u # i ; i  + '       g   i     L¼; i  + '       g   i     LÇ; i)aE  Present through an explicitly selected plugin transport, if any. A selected
transport replaces every built-in prompt surface; detection, allowed scopes,
persistence, timeout, and final authorization stay host-owned. A failed
transport reaches a built-in surface only under the explicit
``transport_fallback: builtin`` opt-in.Úbuiltinr¬   Fz0Could not resolve selected approval transport %rNz-Selected approval transport %r is unavailablerE   Úunavailablerv   )ÚApprovalRequestÚinvoke_approval_transportT)Úforce)	r   r   r²   r³   r´   rµ   r   r   r   z0Could not build redacted plugin approval requestr†   z
transport:)r   r   r²   r³   r´   rµ   Ú
request_idÚrequest_digestr   r   )r   r´   z%waiting for plugin approval transport)r   Úon_pollr   Ú
transport_r%   ©Úpre_approval_request©Úpost_approval_response) r   Ú_get_approval_transport_configr¦   Úget_approval_transportr„   r…   r‰   r°   rƒ   rw   Úhermes_cli.approval_transportrº   r»   r   ÚcreateÚtupler“   r   r   r¶   r½   ÚdigestÚ_fire_approval_hookr    r   r   Úpresentr   r   r­   r%   r"   )r   r   r²   r³   r´   rµ   r   r   rª   r®   Ú
registeredrw   rº   r»   r   ÚrequestÚhook_kwargsr   r$   rP   s   $$$$$$$$            r   Ú _present_with_selected_transportrÐ   Ç   s%  € ô ×8Ò8Ó:�N€DØˆyÔØ˜EÐ"Ð"ðÜ'Ó)×@Ñ@ÀÓFˆ
ð
 ÒÜ�‰ÐFÈÔMÜ˜˜f m°XÓ>Ð>ð5Ý6ß\ä×4Ò4Ó6ˆØ!×(Ñ(Ù)¨'¸Ô>Ù-¨kÀÔFÐT_Ü˜|Ó,¸+ÐfsØ+ð	 )ó 
ˆô Ø—‘¨W×-@Ñ-@ÈkÜ˜,Ó'°[ÈJÐW[ÐV\ÐJ]Ø×%Ñ%°g·n±nô€Kô
 	×ÒÑC°{ÒCÝ;Ù	˜Z°·±È[×	YÕ	YÐ]bÜ˜k×*Õ*Ù*Ø×Ñ Ü&Ð'NÓOÜ)ô
ˆð
 *0¯©Ò)?˜ŸšÀzÐRX×R`ÑR`ÐQaÐEbˆŒ÷ +÷ 
Zô 	×ÒÑ[¸Ñ[ÈUÏ]É]Ó[Ü�D˜&Ÿ-™-¨¯©¸ÓBÐBøôQ ô ä�‰ÐIÈ4ÔPØ‹
ðûô& ô 5ô 	�‰ÐIÔJÜ˜˜f g¨tÓ4Ò4ð	5ú÷ +×*ú÷ 
Z×	YúsI   ¤G6 Á&AH  Ä:I'ÅAI	Æ I'Ç6#HÈHÈ .IÉIÉI$ÉI'É'I7	c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   Úattemptr²   r   )r“   r   )r   s   "r   r   r      s!   € ÷ ñ œtð ´Sð Äsñ r   c               óš  € V P                  R4      '       g   R# V P                  R4      pV'       g   V P                  R4      R3# V P                  R4      R8X  d)   \        P                  RV P                  R4      V4       R# ^ R	IHp VP                  \        P                  ! 4       4      pRVP                  R
V RV 2WRV 2R7      3# )a  Interpret a ``_present_with_selected_transport`` attempt into
``(choice, denied_result)``: both None when the built-in surfaces should run
(no transport selected, or a failure with the explicit builtin fallback); a
denied result for any other failure; else the user's choice.r¬   Nr­   r%   r®   r¸   zBApproval transport %r failed (%s); using explicit builtin fallbackrª   ©r   z-BLOCKED: Selected approval transport failed (zz); the user has NOT consented to this action. Do NOT retry this command or attempt the same outcome through another route.rÀ   )r²   r   r"   )NN)	r–   r…   r‰   Útoolsr   Ú_denial_breaker_addendumr   Úget_current_session_keyÚ_denied)rÒ   r²   r   r­   Ú_aÚbreaker_addendums   &$$   r   Ú_transport_choicerÛ      sÓ   € ð
 �;‰;�z×"Ò"ØÐØ�k‰k˜)Ó$€GßØ�{‰{˜8Ó$ dÐ*Ð*Ø‡{�{�:Ó )Ô+Ü�‰Ð[Ø—{‘{ 6Ó*¨Gô	5àÐÝ$Ø×2Ñ2´4×3OÒ3OÓ3QÓRÐØ�—‘Ø
7¸°yð A:à:JÐ9Kð	Mð  ÀJÈwÈiÐBXð	 ó ð ð r   c                ó0   € V ^8„  d   QhR\         R\         /# )r   Ú
unresolvedr   r+   )r   s   "r   r   r     s   € ÷ Kñ K¤ð K¬ñ Kr   c                ó*   € V R9   d   R# V R9   d   V# R# )zXMap an approval choice to an elicitation verdict; *unresolved* is the no-answer outcome.ÚacceptÚdecline)r@   rB   rD   )rU   r/   r¯   )r%   rÝ   s   &&r   Ú_consentrá     s!   € àÐ.Ô.ÙØÐ#;Ô;ˆ:ÐJÀÐJr   r   rµ   zmcp-elicitationzConfirm this action?c                ón   € V ^8„  d   QhR\         R\         R\        R,          R\         R\         R\         /# )r   Úmessager   r   Nrµ   r	   r   rG   )r   s   "r   r   r     sF   € ÷ J&ñ J&¬ð J&¼3ð J&Ü14°tµðJ&ä),ðJ&äILðJ&äjmñJ&r   c               ó®  € ^ RI Hp  \        P                  ! 4       p\        P                  ! 4       '       d   R# \        P                  ! 4       R8H  ;'       d=    \        P                  ! 4       '       * ;'       d    \        P                  ! 4       '       * p\        P                  ! 4       '       g	   T'       dµ   TP                  T4      p	T	f   \
        P                  RT4       R#  \        P                  ! YiRT RTR	R
RR
./TR7      p
T
P                  R4      '       d   R# T
P                  R4      '       d   T
P                  R4      '       d   R# \!        T
P                  R4      R4      # \        P"                  ! 4       '       d   \
        P%                  RT4       R# \'        YR
R
.YcR7      p\        P(                  ! R/ TB  Rp ^ RIHp \/        YTRTT! 4       R7      pTp \        P(                  ! R/ TBRT/B  \!        TR4      #   \         d"   p\
        P                  RT4        Rp?R# Rp?ii ; i  \         d$   p\
        P                  RTRR7        Rp?R# Rp?ii ; i  \         d>   p\
        P                  RTRR7        Rp?\        P(                  ! R/ TBRT/B  R# Rp?ii ; i  \        P(                  ! R/ TBRT/B  i ; i)aœ  Route an MCP elicitation request to the surface owning the active session:
gateway sessions through ``_await_gateway_decision``, CLI/TUI through
``prompt_dangerous_approval``. Always fails closed: a missing notify_cb in a
gateway session, timeouts, and exceptions map to ``"decline"`` so a server
treats them as "user did not approve" rather than retrying or hanging.
Returns ``"accept" | "decline" | "cancel"``.rÔ   z.Elicitation consent: session lookup failed: %sNrà   Ú
api_serveru]   Elicitation requested in gateway session %s but no notify_cb is registered â€” failing closedr   r   r²   Úmcp_elicitationr³   )rµ   z'Elicitation gateway dispatch failed: %sTrx   Únotify_failedÚresolvedr/   Úcancelr%   zEElicitation consent (%s) declined: no user can answer in this session)r   r   r²   r³   r´   rµ   )Ú_get_approval_callbackF)r   r   r	   r#   z!Elicitation CLI prompt failed: %srÁ   rÃ   )rÕ   r   r   r×   r„   r…   r‰   Ú!_is_single_query_approval_contextÚ_get_session_platformÚ_is_cron_approval_contextÚ_is_gateway_approval_contextÚ_gateway_notify_cbÚ_gwÚ_await_gateway_decisionr†   r–   rá   Ú_no_user_can_answerÚinfor“   rË   Útools.terminal_toolrê   r&   )rã   r   r   rµ   r	   rÙ   r´   ÚexcÚapi_run_contextÚ	notify_cbr£   rÏ   Úhook_choicerê   r%   s   &&$$$          r   Úrequest_elicitation_consentrù     s‰  € õ %ðÜ×2Ò2Ó4ˆô ×-Ò-×/Ò/Ùô 	×"Ò"Ó$¨Ñ4÷ 	9ð 	9Ü×.Ò.Ó0Ô0÷	9ð 	9ä×6Ò6Ó8Ô8ð ô
 ×(Ò(×*Ò*¯oØ×)Ñ)¨+Ó6ˆ	ØÒÜ�N‰Nð HØITôVáð	Ü×2Ò2Ø¨°G¸]ÈKØ)6Ð8IØ)7Ð:KÐ9Lð)NàW^ô`ˆHð �<‰<˜×(Ò(ÙØ�|‰|˜J×'Ò'¨8¯<©<¸×+DÒ+DÙÜ˜Ÿ™ XÓ.°	Ó:Ð:ô ×Ò×!Ò!Ü�‰Ð[Ð]dÔeÙô ˜wÐM^Ø%6Ð$7À[ôc€Kä×ÒÑC°{ÒCØ€Kð^Ý>ô +¨7ÐQ`Ø;@ÈÙ=SÓ=UôWˆð ‰ô
 	× Ò Ñ]¸[Ñ]ÐQ\Ó]Ü�F˜HÓ%Ð%øô} ô Ü�‰ÐGÈÔMÝûðûô8 ô 	Ü�L‰LÐBÀCÐRVˆLÔWÝûð	ûô: ô Ü�‰Ð8¸#ÈˆÔMÛä× Ò Ñ]¸[Ñ]ÐQ\Õ]ûð	ûô 	× Ò Ñ]¸[Ñ]ÐQ\Ô]úsY   ˆH Ã'"H< Ç	I- ÈH9ÈH4È4H9È<I*ÉI%É%I*É-J5É8J0ÊJ8 Ê0J5Ê5J8 Ê8K)NTNra   )r:   ÚloggingrŠ   rŽ   rV   rÕ   r   r   r   rð   Útools.approval_human_waitr   r   Útools.interruptr   Ú	getLoggerr…   r&   r   r(   r—   r˜   r\   rr   r!   r¦   r°   rÐ   rÛ   rá   rù   r¯   r   r   Ú<module>rþ      s   ðñó Û 	Û 
Û ß Hß KÝ *à	×	Ò	Ð+Ó	,€ñ"à7;ð"àRWð"ð 37÷"ð "ôJ	�ô 	ð ˆ�˜Øˆ�I˜yØˆ�8˜XðÐ ð Ð#ØÐ)ØÐ'Ø
Ðð	Ð õ;õ f÷HòVõhõ
6Cõrõ0KðJ&Ø>BðJ&à/@ðJ&àOe÷J&ñ J&r   