+
    kHàjFÅ  ã                  óÆ  a€ 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtHtHt ^ RIH t H!t! ^ R	I"H#t#H$t$H%t% ^ R
I&H't' ^ RI(H)t*H+t, ^RI-H.t.H/t/ ]P`                  ! ]14      t2Rt3RR^<ut4t5t6Rt7^t8Rt9].Pt                  t;].Px                  t=R.t>]> U UUUu/ uF  vr]?! V4       F  w  r#W0V^ 8H  3bK  	  K  	  upppp t@R]AR&   R R ltBR R ltCR R ltDR R ltER R ltFR R ltGR  R! ltH ! R" R#]4      tIR$ R% ltJR& R' ltKR/R( R) lltL ! R* R+]4      tM ! R, R-] 4      tNR# u upppp i )0ao  A2A inbound adapter: stdlib http.server (daemon thread) serving the Agent Card, /metrics and
JSON-RPC (message/send, message/stream SSE, tasks/*, push-config CRUD). Inbound tasks are framed
(security.wrap_inbound) and routed into the LIVE gateway session; ``send()`` fulfils the per-task
Future the HTTP handler blocks on. No token configured => binds 127.0.0.1 only.)ÚannotationsN)ÚOrderedDictÚdeque)ÚFuture)ÚTimeoutError)ÚBaseHTTPRequestHandlerÚThreadingHTTPServer)ÚAnyÚDictÚOptional)ÚBasePlatformAdapterÚ
SendResult)ÚMessageEventÚMessageTypeÚProcessingOutcome)ÚPlatform)Úcoerce_portÚget_scoped_secret)ÚprotocolÚsecurityi¬&  é,  i€Q i   u<   Hermes Agent â€” a general-purpose agent reachable over A2A.zdict[str, tuple[str, bool]]Ú_METHODSc               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚfloat© )Úformats   "ÚB/home/ubuntu/.hermes/hermes-agent/plugins/platforms/a2a/adapter.pyÚ__annotate__r    B   s   € ÷ ñ ˜ñ ó    c            	     óˆ   €  \        R\        \        P                  ! RR4      4      4      #   \        \
        3 d     R# i ; i)z8Seconds to wait for the agent to answer an inbound task.g      ð?ÚA2A_REPLY_TIMEOUTÚ300g     Àr@)Úmaxr   ÚosÚgetenvÚ
ValueErrorÚ	TypeErrorr   r!   r   Ú_reply_timeoutr*   B   s<   € ðÜ�3œœbŸišiÐ(;¸UÓCÓDÓEÐEøÜœ	Ð"ô Úðús   ‚), ¬AÁ Ac               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    r    J   s   € ÷ ^ñ ^˜ñ ^r!   c                 ór   € \        \        \        4      \        \        \        4      \        4       4      4      # )zSOrphan grace must never expire before a configured reply window, but stays bounded.)Úminr   Ú_MAX_ORPHAN_TIMEOUTr%   Ú_MIN_ORPHAN_TIMEOUTr*   r   r!   r   Ú_orphan_timeoutr0   J   s%   € äŒuÔ(Ó)¬3¬uÔ5HÓ/IÌ>ÓK[Ó+\Ó]Ð]r!   c               ó   € V ^8„  d   QhRR/# ©r   r   Ústrr   )r   s   "r   r    r    O   s   € ÷ 	ñ 	˜Sñ 	r!   c                 ó    € \        R R4      P                  4       p V '       d   V #  ^ RIpRVP                  ! 4        2#   \         d     R# i ; i)ÚA2A_AGENT_NAMEÚ Nzhermes-zhermes-agent)Ú_get_scoped_secretÚstripÚsocketÚgethostnameÚ	Exception)Únamer9   s     r   Ú_default_agent_namer=   O   sQ   € äÐ.°Ó3×9Ñ9Ó;€DßØˆðÛØ˜×+Ò+Ó-Ð.Ð/Ð/øÜô Úðús   ¦> ¾AÁAc               ó    € V ^8„  d   QhRRRR/# )r   Úvaluer3   r   r   )r   s   "r   r    r    [   s   € ÷ Iñ I�sð I˜sñ Ir!   c                ó¨   € \        T ;'       g    R4      P                  4       P                  R4      pVR9   d   R# VP                  R4      ^ ,          # )zLURL-safe-ish single-segment slug for a served agent ("" for the root agent).r6   Ú/)r6   ÚdefaultÚroot)r3   r8   Úsplit)r?   Úslugs   & r   Ú_clean_slugrF   [   sF   € äˆu�{ˆ{˜Ó×!Ñ!Ó#×)Ñ)¨#Ó.€DØÐ0Ô0ˆ2ÐH°d·j±jÀ³oÀaÕ6HÐHr!   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úbaser3   Úprefixr   r   )r   s   "r   r    r    a   s&   € ÷ Hñ H�Cð H ð H¨ñ Hr!   c                ó$  € T ;'       g    R P                  4       ;'       g    Rp V P                  R4      '       d   T MV R,           p T;'       g    R P                  R4      pV'       d'   \        P                  P	                  WR,           4      # T # )r6   rA   )r8   ÚendswithÚurllibÚparseÚurljoin)rH   rI   s   &&r   Ú	_join_urlrO   a   sm   € Ø�JˆJ�B×ÑÓ×&Ð& 3€DØ—=‘= ×%Ò%‰4¨4°#­:€DØ�lˆl˜×!Ñ! #Ó&€Fß7=Œ6�<‰<×Ñ ¨s¥lÓ3ÐGÀ4ÐGr!   c               ó   € V ^8„  d   QhRR/# r2   r   )r   s   "r   r    r    h   s   € ÷ Cñ C˜cñ Cr!   c                 ó–   €  ^ RI Hp  V ! 4       ;'       g    R#   \         d%    \        P                  ! RR4      ;'       g    Ru # i ; i)é    ©Úget_active_profile_namerB   ÚHERMES_PROFILE)Úhermes_cli.profilesrT   r;   r&   r'   rS   s    r   Ú_active_profile_namerW   h   sG   € ðCÝ?Ù&Ó(×5Ð5¨IÐ5øÜô CÜ�yŠyÐ)¨9Ó5×BÐB¸ÒBðCús   ‚ – ™(AÁAÁAc               ó    € V ^8„  d   QhRRRR/# )r   Úprofiler3   r   úOptional[str]r   )r   s   "r   r    r    p   s   € ÷ 	ñ 	˜3ð 	 =ñ 	r!   c                óÀ  € \         P                  ! \        4      ;_uu_ 4        ^ RIHp \        V! V 4      4      uuRRR4       #   + '       g   i     M; iT '       d*   T R8w  d#   \        P                  P                  RT  24      # \         P                  ! \        4      ;_uu_ 4        ^ RI	H
p \        T! 4       4      uuRRR4       #   + '       g   i     R# ; i)rR   )Úget_profile_dirNrB   z~/.hermes/profiles/)Úget_hermes_home)Ú
contextlibÚsuppressr;   rV   r\   r3   r&   ÚpathÚ
expanduserÚhermes_cli.configr]   )rY   r\   r]   s   &  r   Ú_profile_homerc   p   sŽ   € Ü	×	Ò	œY×	'Õ	'Ý7Ü‘? 7Ó+Ó,÷ 
(×	'×	'Ò	'ú÷ �7˜iÔ'Ü�w‰w×!Ñ!Ð$7¸°yÐ"AÓBÐBÜ	×	Ò	œY×	'Õ	'Ý5Ü‘?Ó$Ó%÷ 
(×	'×	'Ñ	'ñ ús   £AÁA	Â+CÃC	c                  óD   a € ] tR t^|tRt]P                  tV 3R ltRt	V ;t
# )Ú_ThreadingHTTPServerV6z«IPv6 listener. ``V6ONLY=0`` makes the ``::`` wildcard dual-stack (IPv4 peers arrive as
``::ffff:a.b.c.d``), so one socket serves IPv6-only private networks and IPv4 alike.c                	ó  <€ \         P                  ! \        \        4      ;_uu_ 4        V P                  P                  \        P                  \        P                  ^ 4       RRR4       \        SV `%  4        R#   + '       g   i     L ; i)rR   N)
r^   r_   ÚOSErrorÚAttributeErrorr9   Ú
setsockoptÚIPPROTO_IPV6ÚIPV6_V6ONLYÚsuperÚserver_bind)ÚselfÚ	__class__s   &€r   rm   Ú"_ThreadingHTTPServerV6.server_bind‚   sQ   ø€ Ü× Ò ¤¬.×9Õ9Ø�K‰K×"Ñ"¤6×#6Ñ#6¼×8JÑ8JÈAÔN÷ :ä‰ÑÖ÷ :×9ús   ©:A;Á;B	r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r9   ÚAF_INET6Úaddress_familyrm   Ú__static_attributes__Ú__classcell__©ro   s   @r   re   re   |   s   ø† ñ\ð —_‘_€N÷ó r!   re   c               ó    € V ^8„  d   QhRRRR/# )r   Úhostr3   r   Útyper   )r   s   "r   r    r    ˆ   s   € ÷ Jñ J˜Sð J Tñ Jr!   c                ó(   € RV 9   d   \         # \        # )z_``ThreadingHTTPServer`` is AF_INET only, so an IPv6 bind (``::1``, ``::``) needs the v6 family.Ú:)re   r   )r|   s   &r   Ú_http_server_classr€   ˆ   s   € à%(¨D¤[Ô!ÐIÔ6IÐIr!   c               ó    € V ^8„  d   QhRRRR/# )r   r<   r3   r   zthreading.Threadr   )r   s   "r   r    r    �   s   € ÷ ñ  ð Ð)9ñ r!   c                óV   € \         P                  ! WR R7      pVP                  4        V# )T)Útargetr<   Údaemon)Ú	threadingÚThreadÚstart)rƒ   r<   Úts   && r   Ú_daemon_threadr‰   �   s"   € Ü×Ò ¸$Ô?€AØ‡G�G„IØ€Hr!   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r?   r3   Úmax_lenÚintr   r   )r   s   "r   r    r    “   s!   € ÷ %ñ %˜cð %¨Cð %¸ñ %r!   c                ó”   € \         P                  ! RR\        T ;'       g    R4      4      P                  R4      pT;'       g    RRV # )zFSanitize attacker-provided context ids before using in session titles.z[^A-Za-z0-9_.-]+Ú-r6   z-._ÚctxN)ÚreÚsubr3   r8   )r?   r‹   rE   s   && r   Ú_safe_context_slugr’   “   s>   € ä�6Š6Ð% s¬C°·°¸Ó,<Ó=×CÑCÀEÓJ€DØ�MˆM�E˜8˜GÐ$Ð$r!   c                  ór   € ] tR t^™tRt]R R l4       tR tR R ltR R lt	R	 R
 lt
R R ltR tR tRtR# )ÚA2ARequestHandlerzVHTTP handler for the A2A JSON-RPC surface; all state lives on ``self.server.adapter``.c               ó   € V ^8„  d   QhRR/# )r   r   Ú
A2AAdapterr   )r   s   "r   r    ÚA2ARequestHandler.__annotate__�   s   € ÷ #ñ #˜ñ #r!   c                	ó.   € V P                   P                  # ©N)ÚserverÚadapter©rn   s   &r   r›   ÚA2ARequestHandler.adapterœ   s   € à�{‰{×"Ñ"Ð"r!   c                	óD   € \         P                  ! R V,           .VO5!   R# )z
A2A http: N)ÚloggerÚdebug)rn   r   Úargss   &&*r   Úlog_messageÚA2ARequestHandler.log_message    s   € Ü�Š�\ FÕ*Ð2¨TÖ2r!   c               ó    € V ^8„  d   QhRRRR/# )r   ÚcoderŒ   ÚpayloadÚdictr   )r   s   "r   r    r—   £   s   € ÷ ñ ˜#ð ¨ñ r!   c                	ó,  € \         P                  ! V4      P                  R 4      pV P                  V4       RR\	        \        V4      4      33 F  w  rEV P                  WE4       K  	  V P                  4        V P                  P                  V4       R# )úutf-8úContent-LengthN)úContent-Typeúapplication/json)
ÚjsonÚdumpsÚencodeÚsend_responser3   ÚlenÚsend_headerÚend_headersÚwfileÚwrite)rn   r¥   r¦   ÚbodyÚkÚvs   &&&   r   Ú_jsonÚA2ARequestHandler._json£   sx   € Ü�zŠz˜'Ó"×)Ñ)¨'Ó2ˆØ×Ñ˜4Ô Ø9Ð<LÌcÔRUÐVZÓR[ËnÐ;]Ó^‰DˆAØ×Ñ˜QÖ"ñ _à×ÑÔØ�
‰
×Ñ˜Ör!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú	http_coderŒ   Úreq_idr	   r¥   Úmessager3   r   )r   s   "r   r    r—   «   s(   € ÷ ;ñ ; ð ;¨Sð ;¸ð ;Àcñ ;r!   c                	ó>   € V P                  V\        W#V4      4       R # r™   )r¹   Ú_err)rn   r¼   r½   r¥   r¾   s   &&&&&r   Ú_errorÚA2ARequestHandler._error«   s   € Ø�
‰
�9œd 6°Ó9Ö:r!   c               ó   € V ^8„  d   QhRR/# r2   r   )r   s   "r   r    r—   ®   s   € ÷ \ñ \˜Cñ \r!   c                ó²   € V P                   '       d   V P                   ^ ,          MRpVP                  R4      '       d   RV9   d   VP                  R4      # T# )z[The peer's address; an IPv4 peer of a dual-stack ``::`` bind keeps its plain IPv4 identity.r6   z::ffff:Ú.)Úclient_addressÚ
startswithÚremoveprefix)rn   Úips   & r   Ú
_client_ipÚA2ARequestHandler._client_ip®   sI   € à'+×':×':Ð':ˆT× Ñ  Ö#ÀˆØ-/¯]©]¸9×-EÒ-EÈ#ÐQSÌ)ˆr�‰˜yÓ)Ð[ÐY[Ð[r!   c               ó   € V ^8„  d   QhRR/# r2   r   )r   s   "r   r    r—   ³   s   € ÷ 5ñ 5 Sñ 5r!   c                óÂ  € V P                   P                  pV'       d   V# V P                  P                  RR4      ;'       g    V P                  P                  RR4      P	                  R4      ^ ,          P                  4       pV P                  P                  RR4      ;'       g    RP	                  R4      ^ ,          P                  4       pV'       d	   V RV R2# R# )	a  A2A_PUBLIC_URL > X-Forwarded-Host / Host (scheme from X-Forwarded-Proto) > "" (bind host).

Empty means "caller has no info, fall back to bind host". See #41711.

A2A_PUBLIC_URL is read from ``self.adapter`` (captured at construction time, inside profile
scope) rather than os.getenv here: do_GET/do_POST run on ThreadingHTTPServer's per-connection
OS threads, which never inherit the profile scope contextvar, so a secondary multiplex
profile's own A2A_PUBLIC_URL would otherwise resolve to the default profile's env value.
zX-Forwarded-Hostr6   ÚHostÚ,zX-Forwarded-ProtoÚhttpz://rA   )r›   Ú_public_urlÚheadersÚgetrD   r8   )rn   Úexplicitr|   Úschemes   &   r   Ú_request_public_urlÚ%A2ARequestHandler._request_public_url³   sº   € ð —<‘<×+Ñ+ˆßØˆOØ—‘× Ñ Ð!3°RÓ8×XÐX¸D¿L¹L×<LÑ<LÈVÐUWÓ<X×_Ñ_Ð`cÓdÐefÕg×mÑmÓoˆØ—,‘,×"Ñ"Ð#6¸Ó;×EÐE¸v×LÑLÈSÓQÐRSÕT×ZÑZÓ\ˆß(,�&�˜˜T˜F !Ð$Ð4°"Ð4r!   c                	ó*  € V P                   pVP                  V P                  4      pVR ,          pVR,          P                  R4      ;'       g    RpV P	                  4       ;'       g    RpVR9   d#   V P                  ^ÈVP                  WSR7      4      # VR8X  d/   V P                  ^È\        P                  P                  4       4      # VR9  d   V P                  RRR/4      # R	R
R VP                  R4      ;'       g    VP                  /pVP                  pVP                  4       '       g<   VP                  V P                  P                  R4      V P!                  4       4      e   VP#                  VR7      VR&   V P                  ^ÈV4       R# )ÚagentÚsubpathrA   N©rÙ   z/metricsi”  Úerrorz	not foundÚstatusÚokr<   ÚAuthorization)Ú
public_urlÚserved_agents)z/.well-known/agent.jsonz/.well-known/agent-card.json)rA   z/health)r›   Ú_route_for_pathr`   ÚrstriprÖ   r¹   Ú_build_cardr   ÚmetricsÚsnapshotrÓ   Ú
agent_nameÚ_security_contextÚlocalhost_onlyÚauthenticaterÒ   rÊ   Ú_served_agent_summary)rn   r›   ÚrouterÙ   rÚ   rà   r¦   Úsecs   &       r   Údo_GETÚA2ARequestHandler.do_GETÄ   s[  € Ø—,‘,ˆØ×'Ñ'¨¯	©	Ó2ˆØ�g•ˆØ˜	Õ"×)Ñ)¨#Ó.×5Ð5°#ˆØ×-Ñ-Ó/×7Ð7°4ˆ
ØÐQÔQØ—:‘:˜c 7×#6Ñ#6°zÐ#6Ó#OÓPÐPØ�jÔ Ø—:‘:˜c¤8×#3Ñ#3×#<Ñ#<Ó#>Ó?Ð?ØÐ*Ô*Ø—:‘:˜c G¨[Ð#9Ó:Ð:Ø˜T 7¨E¯I©I°fÓ,=×,SÐ,SÀ×ASÑASÐTˆà×'Ñ'ˆØ×Ñ×Ò 3×#3Ñ#3°D·L±L×4DÑ4DÀ_Ó4UÐW[×WfÑWfÓWhÓ#iÒ#uØ'.×'DÑ'DÐPZÐ'DÓ'[ˆG�OÑ$Ø�
‰
�3˜Ö r!   c                	óè  aaaaaa€ V P                   oSP                  P                  V P                  P	                  R 4      V P                  4       4      oSf#   V P                  RR\        P                  R4      #  \        V P                  P	                  R^ 4      4      pV\        8”  d#   V P                  RR\        P                  R4      # \        P                  ! V'       d   V P                  P                  V4      MRP!                  R4      4      p\%        T\&        4      '       g#   T P                  R	R\        P(                  R4      # TP	                  R4      \+        TP	                  RR4      4      rCTP	                  R4      e
   TR,          M/ oT P                  P	                  R4      ;'       g    RP-                  4       o\%        S\&        4      '       d   SP/                  T P0                  S4      M/ o\2        P	                  TR&4      w  opT3R l^È\        P(                  R3T3R l^È\        P(                  RS 23T3R lR	\        P(                  SP	                  R4      3TT3R lR\        P4                  R3TT3R lR\        P6                  RS R23T3R l^È\        P8                  RT 233pT Fc  w  rxršT! 4       '       g   K  T	\        P4                  8X  d(   \        P:                  ;P<                  ^,          un        T P                  YƒYš4      u # 	  SR ,          pSR!8X  d(   T P?                  ^ÈSPA                  TSSYµR"7      4       R# SR#8X  d   SPC                  YSSTR$7       R# SR%8X  d   SPE                  YSTR$7       R# T P?                  ^È\G        SS4      ! TSTR$7      4       R#   \"         d&    T P                  R	R\        P                  R
4      u # i ; i)'rß   Ni‘  Úunauthorizedrª   i�  zpayload too larges   {}r©   i�  zparse errorz"JSON-RPC request must be an objectÚidÚmethodr6   ÚparamszA2A-Versionc                 ó.   <€ \        S \        4      '       * # r™   )Ú
isinstancer§   )rô   s   €r   Ú<lambda>Ú+A2ARequestHandler.do_POST.<locals>.<lambda>î   s   ø€ œ F¬DÓ1Õ1r!   zparams must be an objectc                 ó"   <€ S ;'       d    S R9  # )ú1.0>   rú   ú1.0.0r   )Úversions   €r   r÷   rø   ï   s   ø€ �W×@Ð@ Ð0@Ñ!@Ð@r!   zunsupported A2A-Version: c                 ó&   <€ S P                  R 4      # )rÜ   )rÓ   )rì   s   €r   r÷   rø   ð   s   ø€ �U—Y‘Y˜wÔ'r!   rÜ   c                 óD   <€ S P                   P                  S4      '       * # r™   )Ú_rate_limiterÚallow©r›   Úidentitys   €€r   r÷   rø   ñ   s   ø€ ˜×.Ñ.×4Ñ4°XÓ>Õ>r!   i­  zrate limit exceededc                 óD   <€ S P                   P                  S4      '       * # r™   )rè   Úis_trusted_peerr  s   €€r   r÷   rø   ò   s   ø€ ˜×2Ñ2×BÑBÀ8ÓLÕLr!   i“  zpeer 'z' not trustedc                 ó   <€ S '       * # r™   r   )Úhandler_names   €r   r÷   rø   ó   s   ø€ ˜Õ%r!   zmethod not found: rÙ   Ú_rpc_message_send)rÙ   Úv1_responseÚ_rpc_message_streamrÛ   Ú_rpc_tasks_subscribe)r6   F)$r›   rè   rê   rÒ   rÓ   rÊ   rÁ   r   ÚERR_UNAUTHORIZEDrŒ   Ú	_MAX_BODYÚ	ERR_PARSEr­   ÚloadsÚrfileÚreadÚdecoder;   rö   r§   ÚERR_INVALID_PARAMSr3   r8   Ú_route_for_requestr`   r   ÚERR_RATE_LIMITEDÚERR_UNTRUSTED_PEERÚERR_METHOD_NOT_FOUNDrå   Úrate_limit_triggersr¹   r  r	  r
  Úgetattr)rn   ÚlengthÚreqr½   ró   Úis_v1ÚchecksÚfailedrÐ   r¥   ÚmsgrÙ   r›   r  r  rô   rì   rü   s   &           @@@@@@r   Údo_POSTÚA2ARequestHandler.do_POST×   sh  ý€ Ø—,‘,ˆà×,Ñ,×9Ñ9¸$¿,¹,×:JÑ:JÈ?Ó:[Ð]a×]lÑ]lÓ]nÓoˆØÒØ—;‘;˜s D¬(×*CÑ*CÀ^ÓTÐTð	MÜ˜Ÿ™×)Ñ)Ð*:¸AÓ>Ó?ˆFØœ	Ô!Ø—{‘{ 3¨¬h×.@Ñ.@ÐBUÓVÐVÜ—*’*¿˜dŸj™jŸo™o¨fÔ5ÀU×RÑRÐSZÓ[Ó\ˆCô ˜#œt×$Ò$Ø—;‘;˜s D¬(×*EÑ*EÐGkÓlÐlØŸ™ ›¬¨C¯G©G°H¸bÓ,AÓ(B�Ø"%§'¡'¨(Ó"3Ò"?��X–ÀRˆØ—<‘<×#Ñ# MÓ2×8Ð8°b×?Ñ?ÓAˆÜAKÈFÔTX×AYÒAY�×*Ñ*¨4¯9©9°fÔ=Ð_aˆÜ&Ÿl™l¨6°;Ó?Ñˆ�eô 2°3¼×8SÑ8SÐUoÐpÜ@À#Äx×GbÑGbÐfð  AHð  @Ið  eJð  KÜ'¨¬h×.IÑ.IÈ5Ï9É9ÐU\ÓK]Ð^Ý>ÀÄX×E^ÑE^Ð`uÐvÝLÈcÔS[×SnÑSnÐrxð  zBð  yCð  CPð  qQð  RÜ% s¬H×,IÑ,IÐM_Ð`fÐ_gÐKhÐið
ˆó (.Ñ#ˆF˜$Ù�xŒxØœ8×4Ñ4Ô4Ü×$Ñ$×8Ò8¸AÕ=Õ8Ø—{‘{ 4°Ó;Ò;ñ	 (.ð
 �g•ˆØÐ.Ô.Ø�J‰J�s˜G×5Ñ5°f¸fÀhÐV[Ð5ÓoÖpØÐ2Ô2Ø×'Ñ'¨°f¸hÈeÐ'ÖTØÐ3Ô3Ø×(Ñ(¨°vÀUÐ(ÖKà�J‰J�sœG G¨\Ô:¸6À6ÐQVÔWÖXøôA ô 	MØ—;‘;˜s D¬(×*<Ñ*<¸mÓLÒLð	Mús   Á=AO ÃO Ã'0O Ï-O1Ï0O1r   N)rq   rr   rs   rt   ru   Úpropertyr›   r¢   r¹   rÁ   rÊ   rÖ   rî   r  rx   r   r!   r   r”   r”   ™   s<   † Ù`àô#ó ð#ò3õõ;õ\õ
5ò"!ö&+Yr!   r”   c                  ó&  a € ] tR tRtRtV 3R lt]R R l4       t]R R l4       tR R	 lt	R
 R lt
R R ltR R ltR R ltR R ltRmR R lltR R ltR R ltRnR R lltRmR R lltR R  ltR! R" ltR#tR$ R% ltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltRoR2 R3 lltRmR4 R5 lltR6R/R7 R8 llt RmR9 R: llt!R; R< lt"]#R= R> l4       t$RmR? R@ llt%RpRA RB llt&]#RC RD l4       t']#RE RF l4       t(])RG 4       t*RmRH RI llt+RmRJ RK llt,RmRL RM llt-RN RO lt.RmRP RQ llt/RmRR RS llt0RmRT RU llt1RmRV RW llt2RmRX RY llt3RZ R[ lt4RmR\ R] llt5RmR^ R_ llt6RmR` Ra llt7Rb Rc lt8RnRd Re llt9RmRf Rg llt:Rh Ri lt;Rj Rk lt<Rlt=V ;t># )qr–   i  zInbound A2A server adapter.c                	óÀ  <€ \         SV `  V\        R 4      R7       \        VR/ 4      ;'       g    / p\        P
                  P                  4       V n        \        R4      p\        T;'       g    VP                  R\        4      4      V n        V P                  P                  4       V n        \        4       V n        \#        VP                  R4      ;'       g    . 4      ;'       g    \        RR4      P%                  R4      pV Uu. uF4  p\'        V4      P)                  4       '       g   K$  VP)                  4       NK6  	  upV n        \-        4       V n        \        R	R4      P)                  4       V n        V P3                  V4      V n        R
V n        R
;V n        V n        R
V n        \>        P@                  ! 4       V n!        \D        PF                  ! 4       \D        PH                  ! 4       \D        PJ                  ! 4       uV n&        V n'        V n(        / V n)        / V n*        \W        4       V n,        \[        4       V n.        \>        P^                  ! 4       V n0        R
# u upi )Úa2a)ÚconfigÚplatformÚextraÚA2A_PORTÚportÚadvertised_toolsetsÚA2A_ADVERTISED_TOOLSETSr6   rÏ   ÚA2A_PUBLIC_URLN)1rl   Ú__init__r   r  r   ÚA2ASecurityContextÚcapturerè   r7   rŒ   rÓ   Ú_DEFAULT_PORTr)  Úresolve_bind_hostr|   r=   rç   ÚlistrD   r3   r8   Ú_advertised_toolsetsrW   Ú_active_profilerÑ   Ú_load_served_agentsÚ_agentsÚ_httpdÚ_server_threadÚ_watchdog_threadÚ_loopr…   ÚEventÚ_watchdog_stopr   Ú	TaskStoreÚTurnTrackerÚRateLimiterÚtasksÚ_turnsrÿ   Ú_pendingÚ_pending_orderÚsetÚ_active_tasksr   Ú_forwarded_inputsÚLockÚ_pending_lock)rn   r%  Úkwargsr'  Ú	_port_envÚconfigured_toolsetsrˆ   ro   s   &&,    €r   r-  ÚA2AAdapter.__init__  sâ  ø€ Ü‰Ñ ´¸%³ÐÔAÜ˜ ¨Ó,×2Ð2°ˆô "*×!<Ñ!<×!DÑ!DÓ!FˆÔÜ& zÓ2ˆ	Ü˜	×EÐE U§Y¡Y¨v´}Ó%EÓFˆŒ	Ø×*Ñ*×<Ñ<Ó>ˆŒ	Ü-Ó/ˆŒÜ" 5§9¡9Ð-BÓ#C×#IÐ#IÀrÓJ÷  Kð  KÔN`ÐazÐ|~ÓN÷  OFñ  OFð  GJó  OKÐÙ8KÓ$^Ñ8K°1ÌsÐSTËvÏ|É|Ï~¤Y Q§W¡W¦YÑ8KÑ$^ˆÔ!Ü3Ó5ˆÔô .Ð.>ÀÓC×IÑIÓKˆÔØ×/Ñ/°Ó6ˆŒØ59ˆŒØ6:Ð:ˆÔ˜dÔ3Ø:>ˆŒ
Ü'ŸošoÓ/ˆÔä6>×6HÒ6HÓ6JÌH×L`ÒL`ÓLbÔdl×dxÒdxÓdzÐ3ˆŒ
�D”K Ô!3ð 8:ˆŒØ57ˆÔä'*£uˆÔä9D»ˆÔÜ&Ÿ^š^Ó-ˆÖùò+ %_s   Ä!IÄ.Ic               ó   € V ^8„  d   QhRR/# r2   r   )r   s   "r   r    ÚA2AAdapter.__annotate__.  s   € ÷ ñ �cñ r!   c                	ó   € R # )ÚA2Ar   rœ   s   &r   r<   ÚA2AAdapter.name-  s   € ár!   c               ó   € V ^8„  d   QhRR/# ©r   r   Úboolr   )r   s   "r   r    rN  2  s   € ÷ ñ ¨4ñ r!   c                ó   € R# )aq  Requests are authenticated in ``do_POST``; the gateway's A2A_ALLOWED_USERS list would
otherwise reject peers (identity is a token-derived name or IP). Wrong credentials still 401.

This is authorization delegated to the A2A bearer-token transport, not a fail-open: every request is
401'd if the credential is wrong. Reported by kuangmi-bit (PR #41711 comment, Jun 27).
Tr   rœ   s   &r   Úauthorization_is_upstreamÚ$A2AAdapter.authorization_is_upstream1  s   € ñ r!   c               ó   € V ^8„  d   QhRR/# rS  r   )r   s   "r   r    rN  ;  s   € ÷ ñ ¨$ñ r!   c           
   ‹  	ó  "  € \         P                  ! 4       V n         \        V P                  4      ! V P                  V P
                  3\        4      V n        RT P                  n        Y P                  n        \        T P                  P                  R4      T n        T P"                  P%                  4        \        T P&                  R4      T n        T P+                  4        \        P-                  R	T P                  T P
                  T P.                  P1                  4       '       d   R
MRT P2                  \5        T P6                  4      4       T P.                  pTP9                  4       '       d!   \        P                  RT P                  4       T P;                  R4       R#   \         dO   p\        P                  R T P                  T P
                  T4       T P                  RRT 2RR7        Rp?R# Rp?ii ; i5i)u    A2A: could not bind %s:%s â€” %sÚbind_failedzA2A bind failed: T)Ú	retryableNFza2a-httpza2a-watchdogzQA2A: serving Agent Card + JSON-RPC on http://%s:%s (%s) as %r; %d routed agent(s)zlocalhost-onlyzREMOTE (bearer auth)z¯A2A: exposed on non-loopback bind %s with no A2A_TRUSTED_PEERS; every dispatch will be refused (403). Set A2A_TRUSTED_PEERS, or A2A_ALLOW_ALL_USERS=true for a trusted network.)ÚasyncioÚget_running_loopr:  r€   r|   r)  r”   r7  rg   rŸ   rÜ   Ú_set_fatal_errorÚdaemon_threadsr›   r‰   Úserve_foreverr8  r<  ÚclearÚ_watchdog_loopr9  Ú_mark_connectedÚinforè   ré   rç   r±   r6  Údispatch_fails_closedÚ_wire_plugin_handlers)rn   Ú_kwargsÚerí   s   &,  r   ÚconnectÚA2AAdapter.connect;  s¡  é € ä×-Ò-Ó/ˆŒ
ð	Ü,¨T¯Y©YÔ7¸¿¹ÀDÇIÁIÐ8NÔPaÓbˆDŒKð
 &*ˆ�‰Ô"Ø"�‰ÔÜ,¨T¯[©[×-FÑ-FÈ
ÓSˆÔØ×Ñ×!Ñ!Ô#Ü .¨t×/BÑ/BÀNÓ SˆÔØ×ÑÔÜ�‰ÐgÐim×irÑirÐtx×t}Ñt}Ø(,×(>Ñ(>×(MÑ(M×(OÒ(OÑ$ÐUkÐmq×m|Ñm|ô  Bð  CG÷  COñ  COó  Pô	Qà×$Ñ$ˆØ×$Ñ$×&Ò&Ü�L‰Lð eØfj×foÑfoôqà×"Ñ" 4Ô(Ùøô# ô 	Ü�L‰LÐ;¸T¿Y¹YÈÏ	É	ÐSTÔUØ×!Ñ! -Ð3DÀQÀCÐ1HÐTXÐ!ÔYÝûð	üs0   ‚Hž;F& ÁEHÆ&G?Æ1AG:Ç4HÇ:G?Ç?Hc               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner   )r   s   "r   r    rN  S  s   € ÷ 'ñ ' $ñ 'r!   c              ƒ  	óè  "  € V P                  4        V P                  P                  4        V P                  eg   \        P
                  ! \        4      ;_uu_ 4        V P                  P                  4        V P                  P                  4        R R R 4       R V n        V P                  ;_uu_ 4        \        V P                  4       F$  pV P                  V\        P                  R4       K&  	  V P                  P                  4        V P                   P                  4        V P"                  P                  4        R R R 4       R #   + '       g   i     LÁ; i  + '       g   i     R # ; i5i)Nz[agent shutting down])Ú_mark_disconnectedr<  rD  r7  r^   r_   r;   ÚshutdownÚserver_closerH  r2  rB  Ú_resolve_lockedr   ÚSTATE_FAILEDra  rC  rE  )rn   Útids   & r   Ú
disconnectÚA2AAdapter.disconnectS  sô   é € Ø×ÑÔ!Ø×Ñ×ÑÔ!Ø�;‰;Ò"Ü×$Ò$¤Y×/Õ/Ø—‘×$Ñ$Ô&Ø—‘×(Ñ(Ô*÷ 0ð ˆDŒKà××ÓÜ˜DŸM™MÖ*�Ø×$Ñ$ S¬(×*?Ñ*?ÐAXÖYñ +à�M‰M×ÑÔ!Ø×Ñ×%Ñ%Ô'Ø×Ñ×$Ñ$Ô&÷  Ñ÷ 0×/ú÷
  ×Ðüs7   ‚AE2Á5EÂ#E2Â5BEÅ
E2ÅE	ÅE2ÅE/	Å)	E2c               ó   € V ^8„  d   QhRR/# rl  r   )r   s   "r   r    rN  c  s   € ÷ Cñ C ñ Cr!   c                óÈ   € V P                   P                  \        4      '       g    V P                  4        K8  R#   \         d    \
        P                  RRR7        K_  i ; i)zCBackground thread that fails orphaned tasks (keeps them queryable).zA2A: watchdog errorT©Úexc_infoN)r<  ÚwaitÚ_WATCHDOG_INTERVALÚ_fail_orphans_oncer;   rŸ   r    rœ   s   &r   rb  ÚA2AAdapter._watchdog_loopc  sU   € à×%Ñ%×*Ñ*Ô+=×>Ò>ðCØ×'Ñ'Ö)ñ ?øô ô CÜ—‘Ð2¸T�×BðCús   §; »"A!Á A!c               ó   € V ^8„  d   QhRR/# )r   r   z	list[str]r   )r   s   "r   r    rN  k  s   € ÷ 	ñ 	 Iñ 	r!   c                ój  € V P                   ;_uu_ 4        \        V P                  4      pRRR4       \        4       pV P                  P                  VXR7      pV F@  p\        P                  RWB4       \        P                  ;P                  ^,          un
        KB  	  V#   + '       g   i     L; i)z,Fail stale tasks that no request still owns.N)Úexcludez1A2A: orphaned task %s marked failed (timeout %gs))rH  rD  rE  r0   r@  Úfail_orphansrŸ   Úwarningr   rå   Útasks_failed)rn   Úactive_tasksÚtimeoutr  rt  s   &    r   r}  ÚA2AAdapter._fail_orphans_oncek  s…   € à××ÓÜ˜t×1Ñ1Ó2ˆL÷  ä!Ó#ˆØ—‘×(Ñ(¨¸,Ð(ÓGˆÛˆCÜ�N‰NÐNÐPSÔ]Ü×Ñ×)Ò)¨QÕ.×)ñ ð ˆ÷  ×ús   •B"Â"B2	c               ó    € V ^8„  d   QhRRRR/# )r   r'  r§   r   zdict[str, dict]r   )r   s   "r   r    rN  v  s   € ÷ 2ñ 2¨ð 2°/ñ 2r!   c                óž  € VP                  R4      ;'       g    VP                  R4      pVfv    ^ RIHp V! 4       ;'       g    / p\	        V\
        4      '       d   TM/ pVP                  R4      ;'       g+    VP                  R4      ;'       g    / P                  R4      p\        R\        4      pRRRR	RR
RRV P                  RRRV P                  RVRV P                  //p0 Rmp/ p\	        V\
        4      '       d   VP                  4       M,\	        V\        4      '       d   \        T;'       g    . 4      M. p	V	 EFî  w  r«\	        V\
        4      '       g   K  \        \        VP                  R4      ;'       g    VP                  R4      ;'       g    T
4      4      pV'       g   Kn  \        \        VP                  R	4      ;'       g    T4      4      pV'       d   W×9   d   \         P#                  RWÍ4       KÁ  \        VP                  R4      ;'       g    T4      P%                  4       pVP                  R4      ;'       g5    VP                  R4      ;'       g    VP                  R4      ;'       g    . p\	        V\        4      '       dG   VP'                  R4       Uu. uF+  pVP%                  4       '       g   K  VP%                  4       NK-  	  pp\        VP                  R
4      ;'       g    T4      P%                  4       pV'       d.   VV9   d#   \         P#                  RVVVV,          4       EKÿ  WÈV&   RTR	RV,           R
TRT;'       g    TR\)        VP                  R4      4      ;'       g    VRRV P                  39   R\        VP                  R4      ;'       g    RV 24      R\        VP                  R4      ;'       g    RT;'       g    T R24      R\        T;'       g    . 4      R\+        VP                  R4      ;'       g    \-        4       4      /	Wl&   EKñ  	  V#   \         d    / p ELÿi ; iu upi )z¬Served-agent routing from ``platforms.a2a.extra.agents`` (top-level ``a2a_served_agents``
fallback for scripts/tests). Root/default always maps to the live gateway session.Úagentsrá   )Úload_configÚa2a_served_agentsr$  ÚA2A_AGENT_DESCRIPTIONr6   rE   r`   ÚtenantrY   ÚlocalTr<   Údescriptionr*  rò   z;A2A: ignoring served agent %r with reserved/invalid path %rÚtoolsetsÚcapabilitiesrÏ   zIA2A: ignoring served agent %r with duplicate tenant %r already used by %rrA   rB   zHermes zHermes profile 'z' exposed over A2A.r†  >   Úhealthrå   ú.well-known)rÓ   rb   r‹  r;   rö   r§   r7   Ú_DEFAULT_DESCRIPTIONr4  rç   r3  Úitemsr2  Ú	enumeraterF   r3   rŸ   rƒ  r8   rD   rT  rŒ   r*   )rn   r'  Úrawr‹  ÚcfgÚdefault_descrŠ  ÚreservedÚtenantsr–  ÚkeyÚvalrE   Úpath_segmentrY   r‘  rˆ   rŽ  s   &&                r   r5  ÚA2AAdapter._load_served_agentsv  s‘  € ð �i‰i˜Ó!×?Ð? U§Y¡Y¨Ó%?ˆØŠ;ðÝ9Ù!“m×)Ð) r�ô $ C¬×.Ò.‘#°BˆCØ—'‘'Ð-Ó.×]Ð]°3·7±7¸5³>×3GÐ3GÀR×2LÑ2LÈ_Ó2]ˆCä)Ð*AÔCWÓXˆØ#%Ø�B˜  H¨b°)¸T×=QÑ=QÐSZÐ\`Ø�D—O‘O ]°LÐBWÐY]×YrÑYrð(
ð #ˆò 8ˆØ"$ˆÜ)¨#¬t×4Ò4�—	‘	”ÔR\Ð]`Ôbf×RgÒRg¼)ÀCÇIÀIÈ2Ô:NÐmoˆÜ‰HˆCÜ˜c¤4×(Ò(ÙÜœs 3§7¡7¨6£?×#JÐ#J°c·g±g¸d³m×#JÐ#JÀsÓKÓLˆDßÙÜ&¤s¨3¯7©7°6«?×+BÐ+B¸dÓ'CÓDˆLß <Ô#;Ü—‘Ð\Ð^bÔqÙÜ˜#Ÿ'™' )Ó,×4Ð4°Ó5×;Ñ;Ó=ˆGØ—w‘wÐ4Ó5×mÐm¸¿¹ÀÓ9L×mÐmÐPS×PWÑPWÐXfÓPg×mÐmÐkmˆHÜ˜(¤C×(Ò(Ø/7¯~©~¸cÔ/BÓPÑ/B¨!ÀaÇgÁgÇiœI˜AŸG™GžIÑ/B�ÐPÜ˜Ÿ™ Ó*×2Ð2¨dÓ3×9Ñ9Ó;ˆFßØ˜WÔ$Ü—N‘NÐ#nØ#'¨°¸µôBâØ"&˜‘à˜˜f c¨LÕ&8¸(ÀFÈIÐW^×WfÐWfÐbfØœ˜cŸg™g gÓ.Ó/×cÐc°7¸rÀ9Èd×NbÑNbÐ>cÑ3cØœ˜CŸG™G F›O×?Ð?°¸¸Ð/?Ó@Øœs 3§7¡7¨=Ó#9×#tÐ#tÐ?OÐPW×P_ÐP_Ð[_ÐO`Ð`sÐ=tÓuØ%¤t¨H¯N¨N¸Ó';Øœ3˜sŸw™w yÓ1×EÐE´^Ó5EÓFðˆFŒLñ+ ð: ˆøôU ô Ø“ðüò4 Qs#   °P6 ÁP6 Ê*Q
ËQ
Ð6QÑQc               ó    € V ^8„  d   QhRRRR/# )r   rà   rZ   r   r3   r   )r   s   "r   r    rN  ª  s   € ÷ Kñ K Mð K°cñ Kr!   c                	óÆ   € R V P                   9   d   RV P                    R2MV P                   pT;'       g    RP                  4       ;'       g    RV R V P                   R2# )r   Ú[Ú]r6   zhttp://rA   )r|   r8   r)  )rn   rà   r|   s   && r   Ú	_base_urlÚA2AAdapter._base_urlª  sW   € Ø#&¨$¯)©)Ô#3��4—9‘9�+˜QÑ¸¿¹ˆØ× Ð ˜b×'Ñ'Ó)×JÐJ¨w°t°f¸A¸d¿i¹i¸[ÈÐ-JÐJr!   Nc               ó    € V ^8„  d   QhRRRR/# )r   rà   rZ   r   ú
list[dict]r   )r   s   "r   r    rN  ®  s   € ÷ 0ñ 0°ð 0Èñ 0r!   c                	óŒ  € V P                  V4      pV P                  P                  4        Uu. uFŠ  pR VR ,          ;'       g    RRVP                  R4      R\	        W#P                  RR4      4      RVP                  R4      ;'       g    RRVP                  R4      R	\        VP                  R	4      4      /NKŒ  	  up# u upi )
rE   rB   r<   Úurlr`   r6   rŽ  NrY   r�  )r¥  r6  ÚvaluesrÓ   rO   rT  )rn   rà   rH   Úas   &&  r   rë   Ú A2AAdapter._served_agent_summary®  s·   € Ø�~‰~˜jÓ)ˆð Ÿ™×,Ñ,Ô.ó0á.�Að ˜˜6�×/Ð/ i°¸¿¹¸v»ÈÌyÐY]×_dÑ_dÐekÐmoÓ_pÓOqØ˜1Ÿ5™5 ›?×2Ð2¨d°I¸q¿u¹uÀYÓ?OÐQXÔZ^Ð_`×_dÑ_dÐelÓ_mÓZnópá.ñ0ð 	0ùò 0s   ®CÁACÂ3Cc               ó    € V ^8„  d   QhRRRR/# )r   Úraw_pathr3   r   r§   r   )r   s   "r   r    rN  ´  s   € ÷ <ñ <¨ð <°ñ <r!   c                	óÖ  € \         P                  P                  T;'       g    R 4      P                  ;'       g    R p\	        V P
                  P                  4       R RR7       Fk  pVP                  RR4      ;'       g    R;p'       g   K)  W$8X  g!   VP                  VR ,           4      '       g   KO  RTRV\        V4      R ;'       g    R /u # 	  RV P
                  R,          RV/# )	rA   c                ó8   € \        V P                  R R4      4      # )r`   r6   )r±   rÓ   )r¬  s   &r   r÷   Ú,A2AAdapter._route_for_path.<locals>.<lambda>·  s   € ÄÀQÇUÁUÈ6ÐSUÓEVÔAWr!   T)r�  Úreverser`   r6   rÙ   rÚ   N)
rL   rM   Úurlsplitr`   Úsortedr6  r«  rÓ   rÇ   r±   )rn   r¯  r`   rÙ   rI   s   &&   r   râ   ÚA2AAdapter._route_for_path´  sÃ   € Ü�|‰|×$Ñ$ X§_ _°Ó5×:Ñ:×AÐA¸cˆä˜DŸL™L×/Ñ/Ó1Ñ7WÐae×fˆEØŸ)™) F¨BÓ/×5Ð5°2Ð5�×5Ð5¸D¼NÈdÏoÉoÐ^dÐgjÕ^j×NkÔNkØ ¨	°4¼¸F»¸Ð3E×3LÐ3LÈÐMÒMñ gð ˜Ÿ™ bÕ)¨9°dÐ;Ð;r!   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¯  r3   rô   r§   r   r   )r   s   "r   r    rN  ¼  s!   € ÷ ñ ¨3ð ¸ð Àñ r!   c                	óV  € V P                  V4      pVR ,          p\        T;'       g    / P                  R4      ;'       g    R4      pVP                  R4      R8X  dh   V'       d`   V P                  P	                  4        Uu. uF  qfP                  R4      V8X  g   K  VNK  	  up;p'       d   V^ ,          pR VRVR,          /p\        VP                  R4      ;'       g    R4      pV'       d3   V'       d+   WX8w  d%   RRV: RVP                  R4      ;'       g    R 2/# V# u upi )	rÙ   rŽ  r6   rE   rÚ   rÜ   ztenant z does not match routed agent rB   )râ   r3   rÓ   r6  r«  )	rn   r¯  rô   rì   rÙ   rŽ  r¬  ÚmatchesÚexpecteds	   &&&      r   r  ÚA2AAdapter._route_for_request¼  s  € Ø×$Ñ$ XÓ.ˆØ�g•ˆÜ�f—l�l ×'Ñ'¨Ó1×7Ð7°RÓ8ˆà�9‰9�VÓ Ô"§vÈ$Ï,É,×J]ÑJ]ÔJ_Ó>}ÑJ_ÀQ×chÑchÐiqÓcrÐv|Ñc|¿q¸qÑJ_Ñ>}Ð3}°7Ö3}Ø˜A•JˆEØ˜e Y°°iÕ0@ÐAˆEÜ�u—y‘y Ó*×0Ð0¨bÓ1ˆß—h 6Ô#5Ø˜w v¡jÐ0MÈeÏiÉiÐX^ÓN_×NlÐNlÐclÐMmÐnÐoÐoØˆùò ?~s   ÂD&ÂD&c               ó$   € V ^8„  d   QhRRRRRR/# )r   rà   rZ   rÙ   úOptional[dict]r   r§   r   )r   s   "r   r    rN  É  s"   € ÷ 
ñ 
 mð 
À>ð 
Ð]añ 
r!   c                	ó  € T;'       g    V P                   R ,          p\        P                  ! VP                  R4      ;'       g    V P                  \        V P                  V4      VP                  RR 4      4      VP                  R4      ;'       g    \        V P                  V4      \        VP                  RR4      4      RV P                  P                  4       '       * \        VP                  R4      ;'       g    R 4      R7      # )r6   r<   r`   r�  r�  TrŽ  )r<   rª  r�  ÚskillsÚ	streamingÚpush_notificationsÚauth_requiredrŽ  )r6  r   Úbuild_agent_cardrÓ   rç   rO   r¥  r•  Ú_advertised_skillsrT  rè   ré   r3   )rn   rà   rÙ   s   &&&r   rä   ÚA2AAdapter._build_cardÉ  sÑ   € à×)Ð)˜Ÿ™ bÕ)ˆÜ×(Ò(Ø—‘˜6Ó"×5Ð5 d§o¡o¼9ÀTÇ^Á^ÐT^ÓE_Ðaf×ajÑajÐkqÐsuÓavÓ;wØŸ	™	 -Ó0×HÐHÔ4HÐQU×QhÑQhÐinÓQoÜ˜5Ÿ9™9 W¨dÓ3Ó4ÈØ"×4Ñ4×CÑCÓEÔEÌcÐRW×R[ÑR[Ð\dÓRe×RkÐRkÐikÓNlô	
ð 	
r!   c               ó    € V ^8„  d   QhRRRR/# )r   rÙ   r½  r   r¨  r   )r   s   "r   r    rN  Ó  s   € ÷ ?ñ ?¨ð ?À*ñ ?r!   c                óö  € V'       d   T;'       g    / P                  R4      MV P                  p ^ RIHp \	        T;'       g    . 4      ;'       g    RpVP                  4        Uu/ uF  qTe	   WT9   g   K  WSP                  V4      bK!  	  ppV'       d   \        P                  ! V4      #  \        P                  ! T;'       g    . 4      # u upi   \         d    \        P                  RRR7        LIi ; i)zyAgent Card skills from the live tool registry, restricted by ``advertised_toolsets``;
static fallback without a registry.r*  )ÚregistryNz-A2A: tool registry unavailable for Agent CardTry  )rÓ   r3  Útools.registryrÈ  rD  Úget_registered_toolset_namesÚget_tool_names_for_toolsetr   Úskills_from_toolsetsr;   rŸ   r    )rn   rÙ   Ú
configuredÚtool_registryÚallowedÚnÚmappings   &&     r   rÄ  ÚA2AAdapter._advertised_skillsÓ  sî   € ÷ BG�e—k�k˜r×&Ñ&Ð'<Ô=ÈD×LeÑLeˆ
ð	YÝ@Ü˜*×*Ð*¨Ó+×3Ð3¨tˆGà -× JÑ JÔ LóqÙ L˜1ÒP_ÐcdÑcoô F�q×BÑBÀ1ÓEÒEÙ Lð ð qçÜ×4Ò4°WÓ=Ð=ð ô ×,Ò,¨Z×-=Ð-=¸2Ó>Ð>ùòqøô ô 	YÜ�L‰LÐHÐSWˆLÖXð	Yús5   ±C ÁC ÁC Á(CÁ8CÂC ÃC Ã"C8Ã7C8c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útask_idr3   Ú
context_idr   r   r   )r   s   "r   r    rN  â  s!   € ÷ ñ  Cð °Sð ¸Vñ r!   c                	ó8  € \        4       pV P                  ;_uu_ 4        V P                  P                  V4       W#3V P                  V&   V P
                  P                  V\        4       4      P                  V4       R R R 4       V#   + '       g   i     T# ; ir™   )	r   rH  rE  ÚaddrB  rC  Ú
setdefaultr   Úappend)rn   rÔ  rÕ  Úfuts   &&& r   Ú_add_pendingÚA2AAdapter._add_pendingâ  sy   € Ü“hˆØ××ÓØ×Ñ×"Ñ" 7Ô+Ø&0Ð%6ˆD�M‰M˜'Ñ"Ø×Ñ×*Ñ*¨:´u³wÓ?×FÑFÀwÔO÷  ð ˆ
÷	  Öð ˆ
ús   ŸABÂB	c               ó    € V ^8„  d   QhRRRR/# ©r   rÔ  r3   r   rm  r   )r   s   "r   r    rN  ê  s   € ÷ ,ñ , cð ,¨dñ ,r!   c                	óž   € V P                   ;_uu_ 4        V P                  P                  V4       R R R 4       R #   + '       g   i     R # ; ir™   )rH  rE  r×  )rn   rÔ  s   &&r   Ú_activate_taskÚA2AAdapter._activate_taskê  s1   € Ø××ÓØ×Ñ×"Ñ" 7Ô+÷  ××Òús	   •;»A	éè  c               ó    € V ^8„  d   QhRRRR/# )r   Úinput_idr3   r   rT  r   )r   s   "r   r    rN  ð  s   € ÷ ñ ¨cð °dñ r!   c                ó^  € V P                   ;_uu_ 4        WP                  9   pRV P                  V&   V P                  P                  V4       \        V P                  4      V P                  8”  d   V P                  P                  RR7       KB   RRR4       V#   + '       g   i     X# ; i)zRRecord a forwarded admission id; True when this process already sent it (a retry).NF)Úlast)rH  rF  Úmove_to_endr±   Ú_MAX_FORWARDED_INPUTSÚpopitem)rn   rä  Úseens   && r   Ú_note_forwarded_inputÚ A2AAdapter._note_forwarded_inputð  s’   € à××ÓØ×5Ñ5Ñ5ˆDØ/3ˆD×"Ñ" 8Ñ,Ø×"Ñ"×.Ñ.¨xÔ8Ü�d×,Ñ,Ó-°×0JÑ0JÔJØ×&Ñ&×.Ñ.°EÐ.Ö:ð K÷	  ð ˆ÷  Öð ˆús   •A;BÂB,	c               ó    € V ^8„  d   QhRRRR/# )r   rä  rZ   r   rm  r   )r   s   "r   r    rN  ú  s   € ÷ 7ñ 7°ð 7À$ñ 7r!   c                ó    € V P                   ;_uu_ 4        V P                  P                  VR4       RRR4       R#   + '       g   i     R# ; i)zNDrop a fresh id a pre-admission guard refused, so its resend is refused again.N)rH  rF  Úpop)rn   rä  s   &&r   Ú_forget_forwarded_inputÚ"A2AAdapter._forget_forwarded_inputú  s3   € à××ÓØ×"Ñ"×&Ñ& x°Ô6÷  ××Òús	   •<¼A	c               ó    € V ^8„  d   QhRRRR/# rÞ  r   )r   s   "r   r    rN  ÿ  s   € ÷ 8ñ 8 Cð 8¨Dñ 8r!   c                	óÊ  € V P                   ;_uu_ 4        V P                  P                  V4       V P                  P	                  VR 4      pV'       d#   V P
                  P                  V^ ,          4      MR pV'       d   W9   d   VP                  V4       Ve,   V'       g$   V P
                  P	                  V^ ,          R 4       R R R 4       R #   + '       g   i     R # ; ir™   )rH  rE  ÚdiscardrB  rï  rC  rÓ   Úremove)rn   rÔ  ÚentryÚorders   &&  r   Ú_pop_pendingÚA2AAdapter._pop_pendingÿ  s›   € Ø××ÓØ×Ñ×&Ñ& wÔ/Ø—M‘M×%Ñ% g¨tÓ4ˆEß9>�D×'Ñ'×+Ñ+¨E°!­HÔ5ÀDˆEß˜Ô)Ø—‘˜WÔ%ØÒ ¯Ø×#Ñ#×'Ñ'¨¨a­°$Ô7÷  ××Òús   •A+CÂ"CÂ$#CÃC"	c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   rÔ  r3   ÚstateÚtextr   rT  r   )r   s   "r   r    rN  	  s(   € ÷ ñ  sð °3ð ¸cð Àdñ r!   c                	ó¼   € V P                   P                  V4      pV'       d   V^,          P                  4       '       d   R# V^,          P                  W#34       R# )é   FT)rB  rÓ   ÚdoneÚ
set_result)rn   rÔ  rü  rý  rö  s   &&&& r   rr  ÚA2AAdapter._resolve_locked	  sA   € Ø—‘×!Ñ! 'Ó*ˆß˜˜a�Ÿ™ŸšÙØˆa�×Ñ˜U˜MÔ*Ùr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# rû  r   )r   s   "r   r    rN    s(   € ÷ >ñ > Sð >°ð >¸Cð >ÀDñ >r!   c                	óŒ   € V P                   ;_uu_ 4        V P                  WV4      uuR R R 4       #   + '       g   i     R # ; ir™   )rH  rr  )rn   rÔ  rü  rý  s   &&&&r   Ú_resolve_taskÚA2AAdapter._resolve_task  s-   € Ø××ÓØ×'Ñ'¨¸Ó=÷  ××Óús	   •2²A	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rÕ  r3   rü  rý  r   rT  r   )r   s   "r   r    rN    s/   € ÷ rñ r°cð rÀ#ð rÈSð rÐUYñ rr!   c           	     	óR  a aa€ S P                   ;_uu_ 4        \        ;QJ d;    V VV3R  lS P                  P                  VR4       4       F  '       g   K   RM0	  RM,! V VV3R  lS P                  P                  VR4       4       4      uuRRR4       #   + '       g   i     R# ; i)c              3  óJ   <"  € T F  pSP                  VSS4      x € K  	  R # 5ir™   )rr  )Ú.0rt  rn   rü  rý  s   & €€€r   Ú	<genexpr>Ú9A2AAdapter._resolve_oldest_for_context.<locals>.<genexpr>  s%   øé € ÐqÑIpÀ#�t×+Ñ+¨C°¸×=Ð=ÓIpùs   ƒ #TFNr   )rH  ÚanyrC  rÓ   )rn   rÕ  rü  rý  s   f&ffr   Ú_resolve_oldest_for_contextÚ&A2AAdapter._resolve_oldest_for_context  sf   ú€ Ø××Óß“3ÖqÈ×I\ÑI\×I`ÑI`ÐakÐmoÔIpÓq—3—3’3ÖqÈ×I\ÑI\×I`ÑI`ÐakÐmoÔIpÓqÓq÷  ××Óús   ˜<BÁ3BÂB&	c               ó    € V ^8„  d   QhRRRR/# )r   rÙ   r½  r   útuple[str, str]r   )r   s   "r   r    rN    s   € ÷ `ñ ` nð `¸ñ `r!   c                	ón   a a€ \         ;QJ d    . VV 3R  lR 4       F  NK  	  5# ! VV 3R  lR 4       4      # )c              3  ó¢   <"  € T FD  p\        S;'       g    SP                  R ,          P                  V4      ;'       g    R 4      x € KF  	  R# 5i)r6   N)r3   r6  rÓ   )r
  r·   rÙ   rn   s   & €€r   r  Ú.A2AAdapter._scope_for_agent.<locals>.<genexpr>  s?   øé € Ð_ÑL^Àq”S˜%×3Ð3 4§<¡<°Õ#3×8Ñ8¸Ó;×AÐA¸r×BÐBÓL^ùs   ƒA–)AÁ A)rE   rŽ  )Útuple)rn   rÙ   s   ffr   Ú_scope_for_agentÚA2AAdapter._scope_for_agent  s'   ù€ ßŒuÕ_ÑL^Ó_�uÐ_ˆuÕ_ÑL^Ó_Ó_Ð_r!   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   Úrecr§   rü  r3   rý  Ústored_replyr   ztuple[dict, None]r   )r   s   "r   r    rN    s7   € ÷ xñ x˜Tð x¨#ð x°Sð xÈð xÐUfñ xr!   c                ó  € V P                   P                  VR,          W$4       \        P                  ;P                  V\        P
                  8H  ,          un        \        P                  ! VR,          VR,          W#VR,          R7      R3# )zOComplete a task immediately (rejected / not ready) and build its terminal Task.rÔ  rÕ  Úcreated_iso©Ú
created_atN)r@  Úcompleter   rå   r„  rs  Ú
build_task)rn   r  rü  rý  r  s   &&&&&r   Ú	_end_taskÚA2AAdapter._end_task  si   € à�
‰
×Ñ˜C 	�N¨EÔ@Ü×Ñ×%Ò%¨´(×2GÑ2GÑ)GÕGÕ%Ü×"Ò" 3 y¥>°3°|Õ3DÀeÐ^aÐboÕ^pÔqÐswÐwÐwr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rô   r§   Úpeerr3   rÙ   r½  r   z%tuple[Optional[dict], Optional[dict]]r   )r   s   "r   r    rN  !  s/   € ÷ >\ñ >\ Dð >\°ð >\¸Nð >\ÐV{ñ >\r!   c                óÄ
  € T;'       g    V P                   R,          p\        P                  ! V4      pVP                  RR4      '       * pV'       d   \        P                  ! V4      MRp\        P
                  ! V4      pV'       gY   RP                  . V P                  V4      OVN54      pV'       d   \        P                  ! W†4      M\        P                  ! 4       pV'       d?   R\        P                  ! V RV 2P                  4       4      P                  4       ,           MRp	V	RJ;'       d0    V P                  V	4      ;'       g    \        P                  ! Wy4      p
\        P                   ! 4       pV
'       d   ^ MV P"                  P%                  V4      p\        P&                  ! 4       pV P(                  P*                  ! W·V.V P                  V4      O5RV'       d   T	;'       g    TMR/ pV
'       g    WÍ8”  g	   V'       g   V P-                  V	4       WÍ8”  dg   \        P.                  ;P0                  ^,          un        \2        P5                  RW|V4       V P7                  V\        P8                  R	V R
V R24      # V'       g"   V P7                  V\        P8                  R4      # \:        P<                  ! W$4      p\:        P>                  ! RW+V4       V
'       gL   \        P@                  ! TRYKT	;'       g    RR7       \        P.                  ;PB                  ^,          un!        V PE                  W±VR7       V'       d|   V PG                  V4        T PI                  Y2YT	;'       g    TR7      w  ppV PK                  W·VVV4       \        PL                  ! W·VVVR,          R7      R3V PO                  V4       # V PP                  e   V PR                  f"   V P7                  V\        PT                  R4      # V PW                  W·4      p\Y        V\Z        P\                  VV P_                  VRV 2RW"R7      R7      p \`        Pb                  ! V Pe                  V4      V PP                  4       T P(                  Pk                  T\        Pl                  4       RRTRTRTRTRTR,          R\n        Pn                  ! 4       /3#   T PO                  T4       i ; i  \f         do   p\:        Ph                  ! RT 24      p T P7                  T\        PT                  TTR7      T PO                  T4       u Rp?#   T PO                  T4       i ; iRp?ii ; i)z²Validate, register, and dispatch an inbound message (HTTP worker thread). Returns
(terminal_task, None) when it ends immediately, else (None, pending) with the future to wait on.r6   r�  TÚ za2a-msg:Nrä  z6A2A: anti-loop triggered for context %s (turn %d > %d)zAnti-loop protection: context z
 exceeded z? turns. Start a new context or increase A2A_MAX_PINGPONG_TURNS.u   Empty task â€” nothing to do.ÚinboundÚuser)rä  rÛ   r  r  z,Agent gateway not ready to accept A2A tasks.úa2a:Údm)Úchat_idÚ	chat_nameÚ	chat_typeÚuser_idÚ	user_name)rý  Úmessage_typeÚ
message_idÚsourcezDispatch failed: )r  rÔ  rÕ  r$  ÚfutureÚstarted)8r6  r   Úextract_textrÓ   Úextract_message_idÚextract_context_idÚjoinr  Úmessage_context_idÚnew_context_idÚhashlibÚsha256r¯   Ú	hexdigestrë  Úlogged_inputÚnew_task_idrA  ÚtrackÚmax_pingpong_turnsr@  Úcreaterð  rå   Úanti_loop_triggersrŸ   rƒ  r!  ÚSTATE_REJECTEDr   Úwrap_inboundÚauditÚpersist_messageÚinbound_totalÚ_register_inline_pushrà  Ú_forward_to_profileÚ_record_outcomer   rø  r:  Ú_message_handlerrs  rÛ  r   r   ÚTEXTÚbuild_sourcer\  Úrun_coroutine_threadsafeÚhandle_messager;   Úredact_outboundÚ	set_stateÚSTATE_WORKINGÚtime)rn   rô   r$  rÙ   rý  Ú	forwardedr1  rÕ  Úscoperä  ÚretryrÔ  ÚturnÚ	max_turnsr  ÚframedÚreplyrü  rÚ  Úeventrh  r  s   &&&&                  r   Ú_prepare_taskÚA2AAdapter._prepare_task!  s¸  € ð ×)Ð)˜Ÿ™ bÕ)ˆÜ×$Ò$ VÓ,ˆØŸ	™	 '¨4Ó0Ô0ˆ	ß<E”X×0Ò0°Ô8È2ˆ
Ü×0Ò0°Ó8ˆ
ßà—I‘IÐC × 5Ñ 5°eÓ <ÐC¸dÑCÓDˆEßKUœ×4Ò4°UÔGÔ[c×[rÒ[rÓ[tˆJ÷ "ð ¤§¢°:°,¸bÀÀÐ0M×0TÑ0TÓ0VÓ!W×!aÑ!aÓ!cÖcØ'+ð 	ð  Ð$÷ Zð Z¨$×*DÑ*DÀXÓ*N÷ +Yð +YÜ-5×-BÒ-BÀ:Ó-Xð 	ä×&Ò&Ó(ˆç‰q˜tŸ{™{×0Ñ0°Ó<ˆÜ×/Ò/Ó1ˆ	Ø�j‰j×Ò °Tð U¸D×<QÑ<QÐRWÓ<Xò UßBK¨(×*=Ð*=°gøÐQSñUˆç˜$Ô*·$Ø×(Ñ(¨Ô2ØÔÜ×Ñ×/Ò/°1Õ4Õ/Ü�N‰NÐSÐU_ÐgpÔqØ—>‘> #¤x×'>Ñ'>ÐB`ÐakÐ`lÐlvØ%. KÐ/nðApó qð qçØ—>‘> #¤x×'>Ñ'>Ð@_Ó`Ð`Ü×&Ò& tÓ2ˆÜ�Š�y $°Ô6ßÜ×$Ò$ Z°¸ÐQY×Q_ÐQ_Ð]_Õ`Ü×Ñ×*Ò*¨aÕ/Õ*Ø×"Ñ" 7¸%Ð"Ô@ßØ×Ñ Ô(ð+Ø#×7Ñ7¸ÀZÐbj×buÐbuÐnuÐ7Óv‘��uØ×$Ñ$ W¸$ÀÀuÔMÜ×*Ò*¨7ÀÀuÐY\Ð]jÕYkÔlÐnrÐrà×!Ñ! 'Õ*Ø�:‰:Ò ×!6Ñ!6Ò!>Ø—>‘> #¤x×'<Ñ'<Ð>lÓmÐmØ×Ñ Ó4ˆÜ &´{×7GÑ7GÐT[Ø$(×$5Ñ$5¸jÐVZÐ[_ÐZ`ÐTaÐmqÐ{Ð$5ó  %QôRˆð	+Ü×,Ò,¨T×-@Ñ-@ÀÓ-GÈÏÉÔTð 	�
‰
×Ñ˜W¤h×&<Ñ&<Ô=Ø�i ¨,¸
ÀFÈDÐRZÐ\_ÐanÐpsð  uBõ  qCð  ENô  PT÷  PYò  PYó  P[ð  \ð  \ð  	\øð ×!Ñ! 'Õ*ûô ô 	+Ü×*Ò*Ð->¸q¸cÐ+BÓCˆCð+Ø—~‘~ c¬8×+@Ñ+@À#ÐTW�~ÓXà×!Ñ! '×*Ò*ø�×!Ñ! 'Õ*þð	+úsI   Í!S Í7AS Ñ0S& ÓS#Ó&UÓ1UÔ"UÔ-UÔ>UÕUÕUÕUrä  c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   rÙ   r§   r$  r3   rÕ  Úframed_texträ  rZ   r   r  r   )r   s   "r   r    rN  a  sA   € ÷ Rñ R¨ð R°Sð RÀcð RÐX[ð RØ)6ðRØBQñRr!   c               ó˜  € ^ RI Hp \        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      P	                  4       p\        V4      pV'       g   R\        P                  3#  \        P                  ! T! T\        VP                  R4      ;'       g    T;'       g    R4      \        VP                  R4      ;'       g    R4      Y#T;'       g    \        P                  ! 4       T\        VP                  R4      ;'       g    \        4       4      R	7      4      p	T	P                  R4      ;'       g    / pT	P                  R4      R8H  ;'       d    TP                  R4      '       * p\"        P$                  ! TP                  R4      ;'       g    R4      T'       d   \        P&                  3# \        P                  3#   \         d    R
\        P                  3u # \         dL   p
\        P!                  RTRR7       \"        P$                  ! RT
 24      \        P                  3u Rp
?
# Rp
?
ii ; i)zIForward to the destination owner; never open its canonical database here.)Úforward_to_ownerrY   rE   r6   z[profile unavailable]rÙ   rŽ  r†  )rÙ   rŽ  r$  rÕ  rä  rý  r†  z;[profile reply unverified; accepted work was not cancelled]z&A2A: dispatch to profile %r unverifiedTry  zProfile dispatch unverified: NÚresultÚoutcomeÚ	completedr  Úfinal_response)Úgateway.session_a2arb  r3   rÓ   r8   rc   r   rs  r\  Úrunr?  rŒ   r*   r   r;   rŸ   rƒ  r   rQ  ÚSTATE_COMPLETED)rn   rÙ   r$  rÕ  r`  rä  rb  rY   ÚhomeÚreceiptÚexcrc  re  s   &&&&&$       r   rJ  ÚA2AAdapter._forward_to_profilea  sÛ  € õ 	9Ü�e—i‘i 	Ó*×EÐE¨e¯i©i¸Ó.?×EÐEÀ2ÓF×LÑLÓNˆÜ˜WÓ%ˆßØ*¬H×,AÑ,AÐAÐAð	jÜ—k’kÑ"2ØœC §	¡	¨&Ó 1× GÐ G°W× GÐ GÀÓHÜ˜5Ÿ9™9 XÓ.×4Ð4°"Ó5¸DØ!×;Ð;¤X×%9Ò%9Ó%;À+Ü˜EŸI™I iÓ0×DÐD´NÓ4DÓEô	#Gó HˆGð —‘˜XÓ&×,Ð,¨"ˆØ—K‘K 	Ó*¨kÑ9×VÐVÀ&Ç*Á*ÈXÓBVÔ>Vˆ	Ü×(Ò(¨¯©Ð4DÓ)E×)KÐ)KÈÓLß,5”×(Ñ(ðRð 	RÜ;C×;PÑ;PðRð 	Røô ô 	hØPÔRZ×RgÑRgÐgÒgÜô 	jä�N‰NÐCÀWÐW[ˆNÔ\Ü×+Ò+Ð.KÈCÈ5Ð,QÓRÔT\×TiÑTiÐiÕiûð	júsI   Á8/G Â(	G Â2"G ÃG Ã%2G ÄG ÇI	Ç4I	Ç=I	Ç>A IÈ>I	ÉI	c               ó4   € V ^8„  d   QhRRRRRRRRRRRRR	R
/# )r   rÔ  r3   rÕ  r$  rü  r[  r4  zOptional[float]r   rm  r   )r   s   "r   r    rN  z  sI   € ÷ Hñ H sð H¸ð HÀ3ð HÈsð HÐ[^ð HØ!0ðHØ<@ñHr!   c                ó   € \         P                  ! VRWQ4       \        P                  ! RW1V4       \         P                  pV\         P
                  \         P                  39   db   VP                  ^,           VP                  ^,           uVn        Vn        Ve,   VP                  \        P                  ! 4       V,
          4       MV;P                  ^,          un        V P                  P                  WV4       V P                  WWT4       R# )zVPersist + audit + count a finished task, mark it terminal, and fire its push callback.rÙ   ÚoutboundN)r   rG  r   rF  rå   ri  ÚSTATE_INPUT_REQUIREDÚoutbound_totalÚtasks_completedÚrecord_latencyrT  r„  r@  r  Ú_send_push_notification)rn   rÔ  rÕ  r$  rü  r[  r4  Úms   &&&&&&& r   rK  ÚA2AAdapter._record_outcomez  sÅ   € ô 	× Ò  ¨W°eÔEÜ�Š�z 4°%Ô8Ü×ÑˆØ”X×-Ñ-¬x×/LÑ/LÐMÔMØ23×2BÑ2BÀQÕ2FÈ×HYÑHYÐ\]ÕH]Ð/ˆAÔ˜aÔ/ØÒ"Ø× Ñ ¤§¢£¨wÕ!6Ô7øà�NŠN˜aÕ�NØ�
‰
×Ñ˜G¨EÔ2Ø×$Ñ$ W¸%ÖGr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úpendingr§   rü  r3   r[  r   r  r   )r   s   "r   r    rN  ‰  s(   € ÷ 'ñ ' dð '°3ð '¸sð 'Àñ 'r!   c           	     ó$  € VR,          VR,          VR,          rep \         P                  ! T;'       g    R4      pVP                  4       pV\        P                  8X  dm   VP                  4       P                  \        P                  4      '       d:   \        P                  V\        \        P                  4      R P                  4       r2V P                  WEWbW1R,          R7       W#3V P                  V4       #   T P                  T4       i ; i)z™Record a dispatched task's outcome; returns (state, reply) after redaction and
input-required detection (a leading marker flags a clarification request).rÔ  rÕ  r$  r6   Nr4  )r4  )r   rQ  Úlstripr   ri  ÚupperrÇ   ÚINPUT_REQUIRED_MARKERrq  r±   r8   rK  rø  )rn   ry  rü  r[  rÔ  rÕ  r$  Ústrippeds   &&&&    r   Ú_finalize_taskÚA2AAdapter._finalize_task‰  sÖ   € ð %,¨IÕ$6¸ÀÕ8MÈwÐW]Í˜Tˆð	'Ü×,Ò,¨U¯[¨[°bÓ9ˆEØ—|‘|“~ˆHØœ×0Ñ0Ô0°X·^±^Ó5E×5PÑ5PÔQY×QoÑQo×5pÒ5pÜ'×<Ñ<¸hÄsÌ8×KiÑKiÓGjÐGkÐ>l×>rÑ>rÓ>t�uØ× Ñ  °dÀ5ÐZcÕRdÐ ÔeØ�<à×Ñ˜gÕ&øˆD×Ñ˜gÕ&ús   œA7C< ÂAC< Ã<Dc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rÚ  r   Údeadliner   Ú
on_timeoutr  r   r   )r   s   "r   r    rN  ˜  s)   € ÷ "ñ "˜6ð "¨Uð "È?ð "Ð_nñ "r!   c                ó„  €   T P                  V'       d   \        R7      # \        RV\        P                  ! 4       ,
          4      R7      #   \         d[    \        P                  ! 4       T8¼  d   Tu # T'       d1    T! 4         K‡    \
         d    \        P                  R3u u # i ; i K¯  \
         d    Tu # i ; i)zµBlock until ``fut`` resolves or ``deadline`` passes (-> ``on_timeout``). ``keepalive`` runs
every _SSE_KEEPALIVE seconds while waiting; if it raises, the client is gone and we stop.g        ©r†  ú[client disconnected])rc  Ú_SSE_KEEPALIVEr%   rT  ÚFuturesTimeoutr;   r   rs  )rÚ  r‚  Ú	keepaliverƒ  s   &&&&r   Ú_await_futureÚA2AAdapter._await_future—  sª   € ð ð"Ø—z‘z¿I¬.�zÓlÐlÌ3ÈsÐT\Ô_c×_hÒ_hÓ_jÕTjÓKk�zÓlÐløÜ!ô PÜ—9’9“; (Ô*Ø%Ò%ßðPÙ!ŸøÜ$ô PÜ (× 5Ñ 5Ð7NÐOÔOðPúò ô
 ô "Ø!Ò!ð"úsK   ƒA –
A ¡*A Á'B?Á5B?Á>BÂB*Â%B?Â)B*Â*B?Â0B?Â9B?Â>B?c               ó    € V ^8„  d   QhRRRR/# )r   ry  r§   r   r  r   )r   s   "r   r    rN  ©  s   € ÷ \ñ \ Dð \¸_ñ \r!   c                	ó„   € V P                  VR ,          VR,          \        4       ,           V\        P                  R34      # )r3  r4  z[agent did not reply in time])rŠ  r*   r   rs  )rn   ry  r‰  s   &&&r   Ú_await_replyÚA2AAdapter._await_reply©  s?   € Ø×!Ñ! '¨(Õ"3°W¸YÕ5GÌ.ÓJZÕ5ZÐ\eÜ#+×#8Ñ#8Ð:YÐ"Zó\ð 	\r!   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r   r½   r	   rô   r§   r$  r3   rÙ   r½  r  rT  r   r   )r   s   "r   r    rN  ­  sD   € ÷ Zñ Z¨ð Z°Tð ZÀð ZÈ^ð ZÐquð Zð  CGñ Zr!   c                	ó6  € V P                  W#VR 7      w  rgVfU   V P                  ! V.V P                  V4      O5!  w  r‰\        P                  ! VR,          VR,          W‰VR,          R7      p\        Y'       d   \        P                  ! V4      4      # T4      # )rÛ   rÔ  rÕ  r  r  )r]  r  rŽ  r   r   Ú_okÚsend_message_response)
rn   r½   rô   r$  rÙ   r  Útaskry  rü  r[  s
   &&&&&&    r   r  ÚA2AAdapter._rpc_message_send­  s–   € Ø×*Ñ*¨6¸uÐ*ÓE‰ˆØŠ<Ø×.Ò.¨wÐT¸×9JÑ9JÈ7Ó9SÓT‰LˆEÜ×&Ò& w¨yÕ'9¸7À<Õ;PÐRWÐkrð  tAõ  lBô  CˆDÜ�6Æ;œ8×9Ò9¸$Ó?ÓYÐYÐTXÓYÐYr!   c               ó   € V ^8„  d   QhRR/# rl  r   )r   s   "r   r    rN  µ  s   € ÷ (ñ ( ñ (r!   c                	óŽ   € V P                  ^È4       R F  w  rV P                  W4       K  	  V P                  4        RV n        R# )éÈ   TN))r«   ztext/event-stream)zCache-Controlzno-cache)r°   r²   r³   Úclose_connection)Úhandlerr·   r¸   s   &  r   Ú_sse_headersÚA2AAdapter._sse_headers´  s?   € à×Ñ˜cÔ"ÛZ‰DˆAØ×Ñ Ö%ñ [à×ÑÔØ#'ˆÖ r!   c               ó    € V ^8„  d   QhRRRR/# )r   Úchunkr3   r   rm  r   )r   s   "r   r    rN  ½  s   € ÷ ñ  3ð ¨4ñ r!   c                	óŽ   € V P                   P                  VP                  R 4      4       V P                   P                  4        R# )r©   N)r´   rµ   r¯   Úflush)rš  rž  s   &&r   Ú
_sse_writeÚA2AAdapter._sse_write¼  s-   € à�‰×Ñ˜EŸL™L¨Ó1Ô2Ø�‰×ÑÖr!   c                	ó   a a€ V V3R  l# )c                 ó(   <€ S P                  SR 4      # )z: keepalive

)r¡  ©Úclsrš  s   €€r   r÷   Ú'A2AAdapter._keepalive.<locals>.<lambda>Ã  s   ø€ �s—~‘~ gÐ/@ÔAr!   r   r¥  s   ffr   Ú
_keepaliveÚA2AAdapter._keepaliveÁ  s	   ù€ åAÐAr!   c               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r   rÔ  r3   rÕ  rü  r[  r½   r	   r   rm  r   )r   s   "r   r    rN  Å  s9   € ÷ 6ñ 6¨sð 6Àð 6ÈCð 6ÐX[ð 6Ðehð 6Ðtxñ 6r!   c                óŒ  € \        V4      ;'       d    V\        P                  8H  pV'       d   \        P                  ! W#V4      .M. \        P                  ! Y#YG'       d   RMT4      .,           pV F)  p	V P                  V\        P                  ! W–4      4       K+  	  V P                  V\        P                  ! 4       4       R# )ux   Emit the final artifact/status events and the closure marker. ``req_id`` threads into the
JSON-RPC SSE envelope (Â§9.4).r6   N)rT  r   ri  Úartifact_updateÚstatus_updater¡  Ússe_dataÚsse_done)
rn   rš  rÔ  rÕ  rü  r[  r½   re  ÚeventsÚevs
   &&&&&&&   r   Ú_emit_terminalÚA2AAdapter._emit_terminalÅ  s˜   € ô ˜“K×EÐE E¬X×-EÑ-EÑ$Eˆ	ßLU”8×+Ò+¨GÀÓGÑHÐ[]Ü×"Ò" 7¸ÆY¹rÐTYÓZðb\õ \ˆãˆBØ�O‰O˜G¤X×%6Ò%6°rÓ%BÖCñ à�‰˜¤×!2Ò!2Ó!4Ö5r!   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   r½   r	   rô   r§   r$  r3   rÙ   r½  r   rm  r   )r   s   "r   r    rN  Ï  s1   € ÷ <ñ <°3ð <Àð <ÈCð <ÐXfð <Ðrvñ <r!   c                óP  € \         P                  ;P                  ^,          un        V P                  V4       Rp V P	                  W4VR7      w  rvVeq   T P                  YR,          VR,          VR,          R,          \         P                  ! VP                  R/ 4      P                  R/ 4      ;'       g    / 4      VR7      # VR	,          VR
,          r˜\         P                  ! W‰\         P                  VR,          R7      p
V P                  V\         P                  ! \         P                  ! V
4      V4      4       V P                  V\         P                  ! \         P                  ! W‰\         P                  4      V4      4       V P                  ! V.V P!                  W`P#                  V4      R7      O5!  w  r¼RpV P                  WW›WÂR7       R#   \$        \&        3 d?    Te"   T P                  T\         P(                  R4       \*        P-                  R4        R# i ; i)uT   message/stream as an SSE response of JSON-RPC-wrapped StreamResponse events (Â§9.4).NrÛ   rò   Ú	contextIdrÝ   rü  r¾   ©r½   rÔ  rÕ  r  r  )r‰  r†  zA2A: stream client disconnected)r   rå   Ústreams_startedr›  r]  r²  r5  rÓ   r   ÚSTATE_SUBMITTEDr¡  r®  Ústream_taskr­  rS  r  rŽ  r¨  ÚBrokenPipeErrorÚConnectionResetErrorrs  rŸ   r    )rn   rš  r½   rô   r$  rÙ   ry  ÚterminalrÔ  rÕ  Ú	submittedrü  r[  s   &&&&&&       r   r	  ÚA2AAdapter._rpc_message_streamÏ  sÝ  € ä×Ñ×(Ò(¨AÕ-Õ(Ø×Ñ˜'Ô"Øˆð	<Ø $× 2Ñ 2°6ÀuÐ 2Ó MÑˆHØÒ#Ø×*Ñ*¨7¸TµNÀHÈ[ÕDYÐ[cÐdlÕ[mÐnuÕ[vÜ+3×+@Ò+@ÀÇÁÈhÐXZÓA[×A_ÑA_Ð`iÐkmÓAn×AtÐAtÐrtÓ+uð  Eð +ó Fð Fà")¨)Õ"4°g¸lÕ6K�ZÜ ×+Ò+¨GÄ×AYÑAYÐfmÐn{Õf|Ô}ˆIØ�O‰O˜G¤X×%6Ò%6´x×7KÒ7KÈIÓ7VÐX^Ó%_Ô`Ø�O‰O˜G¤X×%6Ò%6´x×7MÒ7MÈgÔck×cyÑcyÓ7zð  }Có  &Dô  EØ×.Ò.¨wÐx¸×9JÑ9JÈ7×^mÑ^mÐnuÓ^vÐ9JÓ9wÓx‰LˆEØˆGØ×Ñ °*ÀUÐÖZøÜÔ!5Ð6ô 	<ØÒ"Ø×#Ñ# G¬X×-BÑ-BÐD[Ô\Ü�L‰LÐ:×;ð	<ús    ¼A;G Â8G ÃDG ÇAH%È$H%c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r½   r	   rô   r§   rÙ   r½  r   rm  r   )r   s   "r   r    rN  å  s)   € ÷ ?ñ ?°Cð ?Àð ?Ènð ?Ðhlñ ?r!   c           
     ó†  € V P                  W#V4      w  rVpV'       d   VP                  ^ÈV4      # V P                  V4        V P                  P                  ! V.V P                  V4      O5!  ;pf&   V P                  V\        P                  ! 4       4      # V P                  V\        P                  ! 4       \        4       ,           V P                  V4      VR,          VP                  RR4      34      w  ršV P                  WVR,          WšVR7       R#   \        \         3 d    \"        P%                  R4        R# i ; i)z>Reconnect to an existing task's stream (v1.0 SubscribeToTask).Nrü  r[  r6   rÕ  r·  z"A2A: subscribe client disconnected)Ú
_find_taskr¹   r›  r@  Úwatchr  r¡  r   r¯  rŠ  rT  r*   r¨  rÓ   r²  r»  r¼  rŸ   r    )rn   rš  r½   rô   rÙ   rÔ  r  rÜ   rÚ  rü  r[  s   &&&&&      r   r
  ÚA2AAdapter._rpc_tasks_subscribeå  s  € à"Ÿo™o¨f¸eÓDÑˆ�eßØ—=‘=  eÓ,Ð,Ø×Ñ˜'Ô"ð	?Ø—z‘z×'Ò'¨ÐO°$×2GÑ2GÈÓ2NÓOÐO�ÒXØ—‘ w´×0AÒ0AÓ0CÓDÐDØ×-Ñ-¨c´4·9²9³;ÄÓAQÕ3QÐSW×SbÑSbÐcjÓSkØ/2°7­|¸S¿W¹WÀWÈbÓ=QÐ.RóT‰LˆEà×Ñ °#°lÕ2CÀUÐZ`ÐÖaøÜÔ!5Ð6ô 	?Ü�L‰LÐ=×>ð	?ús   ÁAD ÂA<D Ä&E Ä?E c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r½   r	   rô   r§   rÙ   r½  r   z*tuple[str, Optional[dict], Optional[dict]]r   )r   s   "r   r    rN  ô  s/   € ÷ vñ v ð v¨dð v¸>ð vÐNxñ vr!   c                ó,  € \        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      pV P                  P                  ! V.V P                  V4      O5!  pYEV'       d   R3# \	        V\
        P                  RV 24      3# )zP(task_id, record, None) for a visible task, else (task_id, None, jsonrpc_error).ÚtaskIdrò   r6   Nútask not found: )r3   rÓ   r@  r  rÀ   r   ÚERR_TASK_NOT_FOUND)rn   r½   rô   rÙ   rÔ  r  s   &&&&  r   rÂ  ÚA2AAdapter._find_taskô  s~   € ä�f—j‘j Ó*×DÐD¨f¯j©j¸Ó.>×DÐDÀ"ÓEˆØ�j‰j�nŠn˜WÐD t×'<Ñ'<¸UÓ'CÓDˆØ§S˜TÐuÐu¬d°6¼8×;VÑ;VÐZjÐkrÐjsÐXtÓ.uÐuÐur!   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   r½   r	   rô   r§   rÙ   r½  r   r   )r   s   "r   r    rN  ú  s/   € ÷ Eñ E Sð E°$ð E¸~ð EÐY]ñ Er!   c                	ó’   € V P                  WV4      w  rEpT;'       g*    \        V\        P                  P	                  V4      4      # r™   )rÂ  r’  r   r=  Úto_task)rn   r½   rô   rÙ   Ú_task_idr  rÜ   s   &&&&   r   Ú_rpc_tasks_getÚA2AAdapter._rpc_tasks_getú  s=   € Ø#Ÿ™¨v¸uÓEÑˆ�uØ×DÐDœ˜F¤H×$6Ñ$6×$>Ñ$>¸sÓ$CÓDÐDr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÌ  r   )r   s   "r   r    rN  þ  s/   € ÷ 
Zñ 
Z cð 
Z°4ð 
ZÀð 
ZÐZ^ñ 
Zr!   c                	óä  € \        VP                  R 4      ;'       g    ^ ^ 4      p\        VP                  R4      ;'       g    ^2^24      pV P                  V4      w  rgV P                  P	                  \        VP                  R4      ;'       g    R4      \        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      V\        ^ V4      WgRR7      w  r‰p
\        VP                  RR	4      4      p\        TR
V Uu. uF#  p\        P                  P                  WËR7      NK%  	  upRV	'       d   \        V	4      MRR\        ^\        V^d4      4      RV
/4      # u upi )Ú	pageTokenÚpageSizer¶  r6   rÝ   rü  T)rÕ  rü  Ú	page_sizeÚoffsetÚ
agent_slugrŽ  Ú
with_totalÚincludeArtifactsFr@  )Úinclude_artifactsÚnextPageTokenÚ	totalSize)Ú_to_intrÓ   r  r@  r2  r3   r%   rT  r’  r   r=  rÎ  r-   )rn   r½   rô   rÙ   r×  rÖ  rØ  rŽ  ÚrecsÚnext_offsetÚtotalrÛ  Úrs   &&&&         r   Ú_rpc_tasks_listÚA2AAdapter._rpc_tasks_listþ  sI  € Ü˜Ÿ™ KÓ0×5Ð5°A°qÓ9ˆÜ˜FŸJ™J zÓ2×8Ð8°b¸"Ó=ˆ	Ø!×2Ñ2°5Ó9Ñˆ
Ø#'§:¡:§?¡?Ü˜6Ÿ:™: kÓ2×8Ð8°bÓ9ÄÀVÇZÁZÐPXÓEY×EvÐEvÐ]c×]gÑ]gÐhoÓ]p×EvÐEvÐtvÓAwØ¬¨A¨v«À:Ðimð $3ó $oÑ ˆ˜5ô ! §¡Ð,>ÀÓ!FÓGÐÜ�6˜GÑrvÓ%wÑrvÐmn¤h×&8Ñ&8×&@Ñ&@ÀÐ&@Ö&hÑrvÑ%wØ+Ç¬S°Ô-=ÐRTØ&¬¨A¬s°9¸cÓ/BÓ(CÀ[ÐRWðYó Zð 	ZùÒ%ws   Ä)E-c               ó(   € V ^8„  d   QhRRRRRRRR/# rÌ  r   )r   s   "r   r    rN  
  s)   € ÷ 
<ñ 
<¨ð 
<°Tð 
<À.ð 
<Ð\`ñ 
<r!   c           	     	ód  € V P                  WV4      w  rEpV'       d   V# VR ,          \        P                  9   d)   \        V\        P                  RV RVR ,           24      # V P
                  P                  V\        P                  R4       V P                  P                  VR,          4       V P                  V\        P                  R4       V P
                  P                  ! V.V P                  V4      O5!  ;'       g    Tp\        V\        P                  P                  V4      4      # )rü  ztask z	 already r6   rÕ  )rÂ  r   ÚTERMINAL_STATESrÀ   ÚERR_TASK_NOT_CANCELABLEr@  r  ÚSTATE_CANCELEDrA  Úresetr  rÓ   r  r’  r=  rÎ  )rn   r½   rô   rÙ   rÔ  r  rÜ   s   &&&&   r   Ú_rpc_tasks_cancelÚA2AAdapter._rpc_tasks_cancel
  sï   € Ø"Ÿo™o¨f¸eÓDÑˆ�eßØˆLØˆw�<œ8×3Ñ3Ô3Ü˜¤× @Ñ @ÀEÈ'ÈÐR[Ð\_Ð`gÕ\hÐ[iÐBjÓkÐkØ�
‰
×Ñ˜G¤X×%<Ñ%<¸bÔAØ�‰×Ñ˜#˜lÕ+Ô,Ø×Ñ˜7¤H×$;Ñ$;¸RÔ@Ø�j‰j�nŠn˜WÐD t×'<Ñ'<¸UÓ'CÓD×KÐKÈˆÜ�6œ8×-Ñ-×5Ñ5°cÓ:Ó;Ð;r!   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rÔ  r3   rô   r§   rÙ   r½  r   rm  r   )r   s   "r   r    rN    s/   € ÷ Yñ Y¨Sð Y¸$ð YÀ~ð YÐaeñ Yr!   c                óº  € VP                  R4      ;'       g    / P                  R4      ;'       g    / p\        V\        4      '       dN   VP                  R4      ;'       g5    VP                  R4      ;'       g    / P                  R4      ;'       g    RMRpV'       d:   V P                  P                  ! V\        V4      .V P                  V4      O5!   R# R# )zFv1.0: message/send can carry configuration.taskPushNotificationConfig.ÚconfigurationÚtaskPushNotificationConfigrª  ÚpushNotificationConfigr6   N)rÓ   rö   r§   r@  Úset_push_configr3   r  )rn   rÔ  rô   rÙ   r™  rª  s   &&&&  r   rI  Ú A2AAdapter._register_inline_push  s«   € à�z‰z˜/Ó*×0Ð0¨b×5Ñ5Ð6RÓS×YÐYÐWYˆÜ`jÐknÔpt×`uÒ`uˆs�w‰w�u‹~×[Ð[ #§'¡'Ð*BÓ"C×"IÐ"IÀr×!NÑ!NÈuÓ!U×[Ð[ÐY[øÐ{}ˆßØ�J‰J×&Ò& w´°C³ÐX¸4×;PÑ;PÐQVÓ;WÖXñ r!   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÌ  r   )r   s   "r   r    rN    s/   € ÷ Fñ F¨cð F¸4ð FÈð FÐbfñ Fr!   c                	ó   € \        VP                  R 4      ;'       g    R4      p\        VP                  R4      ;'       g    VP                  R4      ;'       g    / P                  R4      ;'       g    R4      pV'       d	   V'       g   \        V\        P                  R4      # V P
                  P                  ! WE.V P                  V4      O5!  pVe   \        W4      # \        V\        P                  RV 24      # )rÇ  r6   rñ  r%  rª  z.taskId and pushNotificationConfig.url requiredrÈ  )
r3   rÓ   rÀ   r   r  r@  rò  r  r’  rÉ  )rn   r½   rô   rÙ   rÔ  rª  Ústoreds   &&&&   r   Ú_rpc_push_config_createÚ"A2AAdapter._rpc_push_config_create  sã   € Ü�f—j‘j Ó*×0Ð0¨bÓ1ˆÜ�6—:‘:Ð6Ó7×UÐU¸6¿:¹:ÀhÓ;O×UÐUÐSU×ZÑZÐ[`Óa×gÐgÐegÓhˆßŸcÜ˜¤× ;Ñ ;Ð=mÓnÐnØ—‘×+Ò+¨GÐX¸4×;PÑ;PÐQVÓ;WÓXˆØ&,Ò&8Œs�6Ó"ð  	F¼dÀ6Ì8×KfÑKfÐjzð  |Cð  {Dð  iEó  ?Fð  	Fr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÌ  r   )r   s   "r   r    rN  %  s/   € ÷ Pñ P cð P°4ð PÀð PÐ_cñ Pr!   c                ó¨  € \        VP                  R4      ;'       g    R4      pV'       g   \        V\        P                  R4      # T! T\        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      .V P                  V4      O5!  pV'       d   \        W! V4      4      # \        V\        P                  RV 24      # )zTShared get/list/delete: ``op(task_id, config_id, slug, tenant)`` falsy => not found.rÇ  r6   ztaskId requiredrò   ÚconfigIdz push config not found for task: )r3   rÓ   rÀ   r   r  r  r’  rÉ  )rn   r½   rô   rÙ   ÚopÚrenderrÔ  Úfounds   &&&&&&  r   Ú_push_config_opÚA2AAdapter._push_config_op%  sÅ   € ä�f—j‘j Ó*×0Ð0¨bÓ1ˆßÜ˜¤× ;Ñ ;Ð=NÓOÐOÙ�7œC §
¡
¨4Ó 0× PÐ P°F·J±J¸zÓ4J× PÐ PÈbÓQÐqÐTX×TiÑTiÐjoÓTpÓqˆß-2Œs�6˜6 %›=Ó)ð  	P¼¸VÄX×E`ÑE`ð  eEð  FMð  ENð  cOó  9Pð  	Pr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÌ  r   )r   s   "r   r    rN  -  s/   € ÷ hñ h¨3ð h¸ð hÀ^ð hÐ_cñ hr!   c                	óR   € V P                  WW0P                  P                  R  4      # )c                ó   € V # r™   r   )r™  s   &r   r÷   Ú1A2AAdapter._rpc_push_config_get.<locals>.<lambda>.  s   € Ñcfr!   )rÿ  r@  Úget_push_config©rn   r½   rô   rÙ   s   &&&&r   Ú_rpc_push_config_getÚA2AAdapter._rpc_push_config_get-  s"   € Ø×#Ñ# F°E¿:¹:×;UÑ;UÑWfÓgÐgr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÌ  r   )r   s   "r   r    rN  0  s/   € ÷ mñ m¨Cð m¸ð mÀnð mÐ`dñ mr!   c                	ó6   a € S P                  WVV 3R  lR 4      # )c                óV   <€ SP                   P                  ! V .VO5!  ;'       g    . .# r™   )r@  Úlist_push_configs)rt  Ú_cidrV  rn   s   &&*€r   r÷   Ú2A2AAdapter._rpc_push_config_list.<locals>.<lambda>2  sA   ø€ ÐUY×U_ÑU_×UqÒUqÐruÐU~Ðx}ÓU~÷  VGð  VGð  DFð  CGð  VGr!   c                óJ   € R V  Uu. uF  q'       g   K  VNK  	  upRR/# u upi )ÚconfigsrÜ  r6   r   )rþ  Úcs   & r   r÷   r  3  s&   € °9É%Ó>UÉ%ÀQÓST¿q¸qÉ%Ñ>UÐWfÐhjÑ2kùÒ>Us   †	 ” )rÿ  r  s   f&&&r   Ú_rpc_push_config_listÚ A2AAdapter._rpc_push_config_list0  s%   ø€ à×#Ñ# F°Eô  <GÙ$kómð 	mr!   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÌ  r   )r   s   "r   r    rN  5  s/   € ÷ wñ w¨cð w¸4ð wÈð wÐbfñ wr!   c                	óR   € V P                  WW0P                  P                  R  4      # )c                ó
   € R R/# )ÚdeletedTr   )Ú_s   &r   r÷   Ú4A2AAdapter._rpc_push_config_delete.<locals>.<lambda>6  s   € ÐenÐptÑdur!   )rÿ  r@  Údelete_push_configr  s   &&&&r   Ú_rpc_push_config_deleteÚ"A2AAdapter._rpc_push_config_delete5  s"   € Ø×#Ñ# F°E¿:¹:×;XÑ;XÑZuÓvÐvr!   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   rÔ  r3   rÕ  r[  rü  r   rm  r   )r   s   "r   r    rN  8  s8   € ÷ Iñ I¨sð IÀð IÈCð IÐX[ð IÐ`dñ Ir!   c                ó¨  a€ R V3R llpV P                   P                  S4      pV'       g   R# \        P                  ! W`P                  P                  4       R7      '       g
   V! RV4      # \        P                  ! SY$T;'       g    RR,          4      pRR	/pV P                  P                  V4      ;p	'       d   W˜R
&    \        P                  P                  V\        P                  ! V4      P                  R4      VRR7      p
\        P                  P                  V
^
R7      ;_uu_ 4       pVP                   pRRR4       ^ÈXu;8:  d   R8  g   M T! RT4      # \        P$                  ;P&                  ^,          un        \(        P+                  RS4       R#   + '       g   i     Li; i  \"         d   pT! RT4      u Rp?# Rp?ii ; i)zXPOST a v1.0 StreamResponse payload to the task's registered callback (SSRF-checked URL).c               ó    € V ^8„  d   QhRRRR/# )r   r  r3   r   rm  r   )r   s   "r   r    Ú8A2AAdapter._send_push_notification.<locals>.__annotate__:  s   € ÷ 	Xñ 	X�cð 	X Tñ 	Xr!   c                ó–   <€ \         P                  ;P                  ^,          un        \        P                  ! RV ,           S.VO5!   R# )rÿ  z#A2A: push notification for task %s N)r   rå   Úpush_failedrŸ   rƒ  )r  r¡   rÔ  s   &*€r   ÚfailÚ0A2AAdapter._send_push_notification.<locals>.fail:  s4   ø€ Ü×Ñ×(Ò(¨AÕ-Õ(Ü�NŠNÐ@À3ÕFÈÐWÐRVÖWr!   N)Úlocalhost_modeu#   blocked â€” unsafe callback URL: %sr6   :NiÐ  Nr«   r¬   zX-A2A-Signaturer©   ÚPOST)ÚdatarÒ   ró   r…  z
failed: %sr   zgot HTTP %dz'A2A: push notification sent for task %s)r@  Úpop_push_urlr   Úis_safe_callback_urlrè   ré   r   r­  Úsign_push_payloadrL   ÚrequestÚRequestr­   r®   r¯   ÚurlopenrÝ   r;   rå   Ú	push_sentrŸ   r    )rn   rÔ  rÕ  r[  rü  r#  Úcallback_urlr¦   rÒ   Ú	signaturer  ÚresprÝ   rh  s   &f&&&         r   ru  Ú"A2AAdapter._send_push_notification8  sv  ø€ ÷	Xð 	Xð —z‘z×.Ñ.¨wÓ7ˆßÙÜ×,Ò,¨\×J`ÑJ`×JoÑJoÓJq×rÓrÙÐ=¸|ÓLÐLÜ×(Ò(¨°*ÀeÇkÀkÈrÐSXÕEYÓZˆØ!Ð#5Ð6ˆØ×.Ñ.×@Ñ@ÀÓIÐIˆ9ÖIØ)2Ð%Ñ&ð	)Ü—.‘.×(Ñ(¨¼D¿JºJÀwÓ<O×<VÑ<VÐW^Ó<_ÐipÐyÐ(ó  AˆCÜ—‘×'Ñ'¨°RÐ'×8Ô8¸DØŸ™�÷ 9ð �fÖ"˜sÖ"Ù˜ vÓ.Ð.Ü×Ñ×"Ò" aÕ'Õ"Ü�‰Ð>ÀÖH÷ 9×8ûäô 	)Ù˜ aÓ(Õ(ûð	)ús=   ÃA/F3 Ä2F Ä?F3 Æ F0	Æ+F3 Æ0F3 Æ3GÆ>GÇGÇGc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r+  r3   ÚcontentÚreply_torZ   ÚmetadatazOptional[dict[str, Any]]r   )r   s   "r   r    rN  R  s/   € ÷ Qñ Q #ð Q°ð Q¸}ð QÐ_wñ Qr!   c           	   ƒ  óz  "  € T;'       g    / P                  R4      '       g   \        P                  RV4       MGT P                  T\        P
                  T;'       g    R4      '       g   \        P                  RV4       \        R\        \        \        P                  ! 4       R,          4      4      R7      # 5i)zæFulfil the oldest pending reply Future for this context (``chat_id`` = A2A context id).
Only sends carrying ``metadata['notify']`` (the base adapter's final-reply marker) satisfy
the caller; progress/status/preview sends must not.Únotifyz+A2A: ignoring non-final send for context %sr6   z0A2A: send() for context %s had no pending waiterTrâ  )Úsuccessr1  )
rÓ   rŸ   r    r  r   ri  r   r3   rŒ   rT  )rn   r+  r4  r5  r6  s   &&&&&r   ÚsendÚA2AAdapter.sendR  sƒ   é € ð —�˜B×#Ñ# H×-Ò-Ü�L‰LÐFÈÕPØ×1Ñ1°'¼8×;SÑ;SÐU\×UbÐUbÐ`b×cÒcÜ�L‰LÐKÈWÔUÜ $´3´s¼4¿9º9»;ÈÕ;MÓ7NÓ3OÔPÐPùs   ‚!B;¤:B;ÁB;Á,AB;c               ó    € V ^8„  d   QhRRRR/# )r   r+  r3   r   rm  r   )r   s   "r   r    rN  \  s   € ÷ ñ ¨ð Àñ r!   c              ƒ  	ó   "  € R # 5ir™   r   )rn   r+  r6  s   &&&r   Úsend_typingÚA2AAdapter.send_typing\  s   é € Ùùs   ‚c               ó    € V ^8„  d   QhRRRR/# )r   r+  r3   r   zdict[str, Any]r   )r   s   "r   r    rN  _  s   € ÷ 8ñ 8¨3ð 8°>ñ 8r!   c              ƒ  	ó   "  € R RV 2RR/# 5i)r<   r)  r}   r*  r   )rn   r+  s   &&r   Úget_chat_infoÚA2AAdapter.get_chat_info_  s   é € Ø˜$˜w˜iÐ(¨&°$Ð7Ð7ùs   ‚
c               ó$   € V ^8„  d   QhRRRRRR/# )r   r\  r   rd  r   r   rm  r   )r   s   "r   r    rN  b  s#   € ÷ %ñ %°,ð %ÐIZð %Ð_cñ %r!   c              ƒ  ó–  "  € \        \        VRR4      ;'       g    R4      pV'       d�   \        VRR4      p\        P                  \	        V\         4      '       d   TMR3pV P
                  ! V.\        P                  \        P                  R3\        P                  \        P                  R3/P                  W%4      O5!   R# R# 5i)zÁResolve the task future when processing ends without a reply send (failures,
cancellations, empty runs, or a reply the gateway already streamed to the user) so the
HTTP thread returns promptly.r1  r6   Ú_streamed_final_responsez[agent processing failed]N)r3   r  r   ri  rö   r  r   ÚFAILURErs  Ú	CANCELLEDré  rÓ   )rn   r\  rd  rÔ  Ú	_streamedrB   s   &&&   r   Úon_processing_completeÚ!A2AAdapter.on_processing_completeb  s®   é € ô ”g˜e \°2Ó6×<Ð<¸"Ó=ˆßô   Ð'AÀ2ÓFˆIÜ×/Ñ/¼jÈÔTW×>XÒ>X±Ð^`ÐaˆGØ×Ò˜wð %Ü!×)Ñ)¬H×,AÑ,AÐC^Ð+_Ü!×+Ñ+¬h×.EÑ.EÀrÐ-Jð*÷ ‰c�'Ó#ö%ñ ùs   ‚(C	«BC	)r4  rE  r3  r6  rF  r7  r:  rB  rH  rC  rÑ   rÿ   rè   r8  rA  r<  r9  rç   r|   r)  r@  r™   )NN)r6   )NF)?rq   rr   rs   rt   ru   r-  r!  r<   rV  ri  ru  rb  r}  r5  r¥  rë   râ   r  rä   rÄ  rÛ  rà  rè  rë  rð  rø  rr  r  r  r  r!  r]  rJ  rK  r  ÚstaticmethodrŠ  rŽ  r  r›  r¡  Úclassmethodr¨  r²  r	  r
  rÂ  rÐ  rã  rë  rI  r÷  rÿ  r  r  r  ru  r:  r>  rB  rJ  rx   ry   rz   s   @r   r–   r–     s”  ø† Ù%õ#.ðJ ôó ðð ôó ðõõ0'õ Cõ	õ2õhK÷0õ<õ÷
÷?õõ,ð !Ðõõ7õ
8õõ>õrõ`÷x÷>\ð@RØ9=÷R÷2Hõ'ð ô"ó ð"÷"\÷Zð ô(ó ð(ð ôó ðð ñBó ðB÷6÷<÷,?õv÷E÷
Z÷
<÷Y÷FõP÷h÷m÷
wõI÷4Q÷õ8÷%ó %r!   r–   )
)r  ÚSendMessagezmessage/send)r	  ÚSendStreamingMessagezmessage/stream)rÐ  ÚGetTaskz	tasks/get)rã  Ú	ListTasksz
tasks/list)rë  Ú
CancelTaskztasks/cancel)r
  ÚSubscribeToTaskztasks/subscribe)r÷  Ú CreateTaskPushNotificationConfigz#tasks/pushNotificationConfig/createz tasks/pushNotificationConfig/setztasks/pushNotification/set)r  ÚGetTaskPushNotificationConfigz tasks/pushNotificationConfig/get)r  ÚListTaskPushNotificationConfigsz!tasks/pushNotificationConfig/list)r  Ú DeleteTaskPushNotificationConfigz#tasks/pushNotificationConfig/delete)é`   )OÚ__conditional_annotations__ru   Ú
__future__r   r\  r^   r;  r­   Úloggingr&   r�   r9   r…   rT  Úurllib.parserL   Úurllib.requestÚcollectionsr   r   Úconcurrent.futuresr   r   rˆ  Úhttp.serverr   r   Útypingr	   r
   r   Úgateway.platforms.baser   r   Úgateway.platforms.eventr   r   r   Úgateway.configr   Úgateway.platforms._sharedr   rÞ  r   r7   r6   r   r   Ú	getLoggerrq   rŸ   r0  r/   r.   r|  r  r‡  r•  Újsonrpc_resultr’  Újsonrpc_errorrÀ   Ú_METHOD_TABLEr—  r   Ú__annotations__r*   r0   r=   rF   rO   rW   rc   re   r€   r‰   r’   r”   r–   )rš  ÚmethodsÚirv  rY  s   0000@r   Ú<module>rm     sa  øðôSõ
 #ã Û Û Û Û Û 	Û 	Û Û Û Û Û ß *Ý %Ý =ß Cß &Ñ &ç Bß PÑ PÝ #ß eç  à	×	Ò	˜8Ó	$€à€ð @CÀEÈ2Ð <Ð Ð(Ð*<Ø€	Ø€ØUÐ à×Ñ€Ø×Ñ€ð€ñ 3@ö)Ù2?Ð.˜WÉIÐV]ÖL^ÁDÀA€A��a‘ÐÒÑL^�A±-ô)€Ð
%ó õ
õ^õ
	õIõHõCõ	ô	Ð0ô 	õJõ
÷%ôiYÐ.ô iYôXm	%Ð$ö m	%ùõQ)s   Ã"E
