Ë
    áß²j¾  ã                  óP   — d Z ddlmZ ddlZddlmZ dd„Z	 d	ddœ	 	 	 	 	 	 	 d
d„Zy)z7Compatibility helper for explicit agent stop producers.é    )ÚannotationsN)ÚAnyc                ó²   ‡— 	 t        j                  | «      j                  j                  «       }t        ˆfd„|D «       «      S # t        t
        f$ r Y yw xY w)zAReturn whether a callable explicitly supports a keyword argument.Fc              3  óÜ   •K  — | ]c  }|j                   t        j                  j                  u xs7 |j                  ‰k(  xr& |j                   t        j                  j
                  u–— Œe y ­w©N)ÚkindÚinspectÚ	ParameterÚVAR_KEYWORDÚnameÚPOSITIONAL_ONLY)Ú.0Úpr   s     €ú;/home/ubuntu/.hermes/hermes-agent/agent/interrupt_compat.pyú	<genexpr>z#_accepts_keyword.<locals>.<genexpr>   sa   øè ø€ ò ð ð 	
�‰”'×#Ñ#×/Ñ/Ð/ò 	PØ�F‰F�d‰NÒN˜qŸv™v¬W×->Ñ->×-NÑ-NÐNó	Pñùs   ƒA)A,)r	   Ú	signatureÚ
parametersÚvaluesÚ	TypeErrorÚ
ValueErrorÚany)Úcallable_objr   r   s    ` r   Ú_accepts_keywordr   	   s^   ø€ ðÜ×&Ñ& |Ó4×?Ñ?×FÑFÓHˆ
ô ó ð ôó ð øô ”zÐ"ò Ùðús   ƒ-A ÁAÁA)Útool_reasonc               ó  — 	 t        j                  | d«       t        | dd«      }t	        |«      st        | dd«      }t	        |«      syi }|�t        |d«      r||d<   |€	 |di |¤Ž y ||fi |¤Ž y# t        $ r d}Y Œ[w xY w)aþ  Request an explicit stop, falling back to the legacy interrupt ABI.

    New agents expose ``hard_interrupt(message=None)``; third-party agents and old test
    doubles may only expose ``interrupt(message=None)`` and must not receive keyword
    arguments they do not know. ``tool_reason`` is a trusted, fixed category that may be
    exposed in model-visible tool cancellation output, forwarded only when the callable
    explicitly supports it. Returns ``False`` only when neither callable is available.
    Úhard_interruptNÚ	interruptFr   T© )r	   Úgetattr_staticÚgetattrÚAttributeErrorÚcallabler   )ÚagentÚmessager   r   Úkwargss        r   Úrequest_hard_interruptr&      s¦   € ð ;Ü×Ñ˜uÐ&6Ô7ô ˜EÐ#3°TÓ:ˆ	Ü�IÔÜ˜E ;°Ó5ˆ	Ü�IÔØØ€FØÐÔ#3°I¸}Ô#MØ +ˆˆ}ÑØ€ÙÑ�FÒð ñ 	�'Ñ$˜VÒ$Øøô ò ØŠ	ðús   ‚A3 Á3BÂ B)r   r   r   ÚstrÚreturnÚboolr   )r#   r   r$   ú
str | Noner   r*   r(   r)   )Ú__doc__Ú
__future__r   r	   Útypingr   r   r&   r   ó    r   ú<module>r/      sN   ðÙ =å "ã Ý ó
ð ð!ð #ñ	!Øð!àð!ð ð	!ð
 
ô!r.   