+
    jHàj%"  ã                   óŒ   € R t ^ RIt^ RIHt ^ RIHt Rt ! R R]4      tR R ltR t	R	 t
R
 tR tR tR tR tR tR tR tR# )aö  The ``manage_connections`` card on the session authority: ``connection.respond``, the operation's ``status``/``wake`` and the card's Try again (``connectors.connect`` with ``reconnect``), plus the open card a resume restores (``pending_connection``).

The operation lives in ``tools/connectors/live.py`` under the turn's session key (the live session's route) and profile, so a card can only drive its own session's operation. Account-owned calls (the Connectors page) are not the session's and stay on the legacy handlers (``tui_gateway/methods_connectors.py``). Answers and refusals share that file's code (``tools.connectors.run.respond``, ``tui_gateway/connector_refusals.py``); ``ConnectorRefusal`` carries a refusal through the authority's error path.
N)Úpartial)ÚRuntimeStoreErrorc                   ó6   a a€ ] tR t^t oRtV 3R ltRtVtV ;t# )ÚConnectorRefusalz‹A refusal on the legacy connector handlers' wire shape: their code, their human message, their ``ConnectorErrorReason`` as ``data.reason``.c                óX   <€ \         SV `  \        V4      VR 7       WuV n        V n        R# ))ÚdetailN)ÚsuperÚ__init__ÚstrÚ	wire_codeÚwire_message)ÚselfÚcodeÚreasonÚmessageÚ	__class__s   &&&&€Ú@/home/ubuntu/.hermes/hermes-agent/gateway/session_connections.pyr	   ÚConnectorRefusal.__init__   s(   ø€ Ü‰Ñœ˜V›¨WÐÔ5Ø,0Ð)ˆŒ˜Ö)ó    )r   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r	   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   Ú__classdict__s   @@r   r   r      s   ù‡ € ñ V÷:õ :r   r   c                ó$   € V ^8„  d   QhR\         /# )é   Úreturn)Úbool)Úformats   "r   Ú__annotate__r#      s   € ÷ Fñ FœTñ Fr   c                 ó¬   € \        V \        4      '       d   V P                  R 4      MRp\        V\        4      ;'       d    VP                  R4      R8H  # )ÚownerNÚtypeÚsession)Ú
isinstanceÚdictÚget)Úparamsr%   s   & r   Úsession_ownedr,      sA   € Ü#-¨f´d×#;Ò#;ˆF�J‰J�wÔÀ€EÜ�eœTÓ"×EÐE u§y¡y°Ó'8¸IÑ'EÐEr   c           	      óT   € \          Uu/ uF  q\        \        W4      bK  	  up# u upi )N)ÚMETHODSr   Ú_handle)Ú
connectionÚmethods   & r   Úhandlersr2      s$   € ÝGNÓOÁw¸V”GœG ZÓ8Ò8ÁwÑOÐOùÒOs   ‰%c                óª   € ^ RI Hp VP                  V P                  V,          P                  V P
                  R7      pVe   VP                  4       # R# )zTThe open operation of a live session as its ``connection.request`` payload, or None.©Úlive©Úprofile_homeN)Útools.connectorsr5   ÚcurrentÚsessionsÚrouteÚ
profile_idÚrequest_payload)Ú	authorityÚ
session_idr5   Ú	operations   &&  r   Úpending_connectionrA      sH   € å%Ø—‘˜Y×/Ñ/°
Õ;×AÑAÐPY×PdÑPd�Óe€IØ*3Ò*?ˆ9×$Ñ$Ó&ÐIÀTÐIr   c                óÒ  € ^ RI Hp ^ RIHpHp ^ RIHpHp ^ RIH	p V R8H  pV'       d   TMWp,          P                  p	 T	P                  VP                  4        U
Uu/ uF  w  r«V'       d
   V
R8X  d   K  W«bK  	  upp
4      pT'       g   TR3#  YÅP                  TP                  R4      4      3# u upp
i   T d   p\        T!  ThRp?ii ; i  T d   p\        T!  ThRp?ii ; i)z«The validated envelope and, for ``connection.respond``, the answer validated on its own as the legacy handler does: a bad answer is ``INVALID_ANSWER``, not a bad envelope.)ÚValidationError)ÚINVALID_ANSWERÚINVALID_PARAMS)ÚConnectionAnswerÚConnectionOperationParams)r.   úconnection.respondÚresultN)ÚpydanticrC   Útui_gateway.connector_refusalsrD   rE   Ú*tui_gateway.contracts.connectors_operationrF   rG   Útui_gateway.contracts.registryr.   r+   Úmodel_validateÚitemsr   r*   )r1   r+   rC   rD   rE   rF   rG   Ú	CONTRACTSÚrespondÚcontractÚkÚvÚrequestÚexcs   &&            r   Ú_requestrW   %   sÚ   € å(ßMßfÝCØÐ,Ñ,€Gß,3Ñ(¸Õ9J×9QÑ9Q€Hð9Ø×)Ñ)¸F¿L¹L¼NÔ*n¹N±D°A×SZÐ_`ÐdlÑ_l¬4¨1ª4¹NÒ*nÓoˆ÷ Ø˜ˆ}Ðð9Ø×7Ñ7¸¿
¹
À8Ó8LÓMÐMÐMùó +oøØô 9Ü Ñ/°SÐ8ûð9ûð ô 9Ü Ñ/°SÐ8ûð9úsG   ¿B7 ÁB1
Á5B1
Á;B7 Â C Â1B7 Â7CÂ>
CÃCÃC&Ã
C!Ã!C&c                 ól   € ^ RI Hp V P                  4       pV! / VCRVP                  R4      RJ/C4      # )é    )Úconnector_ui_payloadÚsettledÚ
settled_atN)Útui_gateway.connector_payloadrZ   Úsnapshotr*   )r@   rZ   r^   s   &  r   Ú_viewr_   9   s:   € ÝBØ×!Ñ!Ó#€HÙÐ _ 8Ð _¨Y¸¿¹À\Ó8RÐZ^Ð8^Ñ _Ó`Ð`r   c              ƒ   óN  "  € ^ RI Hp ^ RIHp ^ RIHp ^ RIHp \        W4      w  r‰V P                  p
V! V
P                  VP                  P                  4      pT! YY1R8X  d   RMR4       VP                  V
P                  9  d   \        R4      hV
P                  VP                  ,          P                  pVR	8X  d   VP!                  WÊP                  R
7      pM'VP#                  WÈP$                  V
P                  R
7      pVf   \'        VP(                  !  hVR8X  d   \+        V4      # VR8X  d   VP,                  P/                  4        RR/# VR8X  d$   \0        P2                  ! \4        WÙ4      G Rj  x€L
 # \0        P2                  ! \6        W«WØ4      G Rj  x€L
 #  L( L5i)rY   )Ú	authorize)Ú
SessionRefr4   ©Úconnector_refusalsúconnectors.operation.statuszsession:readzsession:controlÚ	not_foundúconnectors.connectr6   Núconnectors.operation.wakeÚstatusÚokrH   )Úgateway.session_busy_controlsra   Úgateway.session_contractrb   r8   r5   Útui_gatewayrd   rW   r>   r<   r%   r?   r:   r   r;   r9   r*   Úop_idr   ÚUNKNOWN_OPERATIONr_   ÚwakeÚsetÚasyncioÚ	to_threadÚ_respondÚ_retry)r0   r1   Ú_refr+   ra   rb   r5   ÚrefusalsrU   Úanswerr>   Úrefr;   r@   s   &&&&          r   r/   r/   ?   sZ  é € Ý7Ý3Ý%Ý:Ü˜vÓ.�O€GØ×$Ñ$€IÙ
�Y×)Ñ)¨7¯=©=×+CÑ+CÓ
D€Cáˆj˜vÐC`Ô9`¡~ÐfwÔxØ
‡~�~˜Y×/Ñ/Ô/Ü Ó,Ð,Ø×Ñ˜sŸ~™~Õ.×4Ñ4€EØÐ%Ô%Ø—L‘L ×5IÑ5I�LÓJ‰	à—H‘H˜U§M¡MÀ	×@TÑ@T�HÓUˆ	ØÒÜ × :Ñ :Ñ;Ð;ØÐ.Ô.Ü�YÓÐØÐ,Ô,Ø�‰×ÑÔØ˜$ÐÐØÐ%Ô%Ü×&Ò&¤x°ÓC×CÐCÜ×"Ò"¤6¨9¸9ÓN×NÐNñ DÙNùs$   ‚E6F%Å8F!Å9#F%ÆF#ÆF%Æ#F%c           
      ó’   € ^ RI Hp ^ RIHp ^ RIHp  RRRV! WP                  RR7      4      /#   T d   p\        T!  ThR	p?ii ; i)
rY   )ÚIllegalTransition)rQ   )rD   ri   rj   r[   T)Úexclude_noneN)Útools.connectors.operationr{   Útools.connectors.runrQ   rK   rD   Úmodel_dump_jsonr   )r@   rx   r{   rQ   rD   rV   s   &&    r   rt   rt   \   sP   € Ý<Ý,Ý=ð9Ø˜$ 	©7°9×>TÑ>TÐbfÐ>TÓ>gÓ+hÐiÐiøØô 9Ü Ñ/°SÐ8ûð9ús   ”0 °A·
AÁAc                óø  € ^ RI Hp ^ RIHp ^ RIHpHpHpHp	H	p
H
p VP                  '       g
   \        V!  hVP                   Ft  pVP                  V4      pVf   K  VP                  e   VP                  VP                  8w  g+   VP                   RVP"                  VP                   39  g   Km  \        V
!  h	  \%        W4      ;_uu_ 4        \'        W4        VP)                  W#P                  4      p RRR4       Xe   \        TP/                  Yè4      !  h\1        T4      #   \*         d    h T d   p\        T! T4      !  ThRp?i\,         d   p\        T	!  ThRp?ii ; i  + '       g   i     Ly; i)z]The card's Try again, under the session's own context, as the sidecar ran it for its session.)Úrun)ÚGatewayAuthError)rE   ÚREISSUE_REFUSALSÚREISSUE_REFUSEDÚREQUEST_FAILEDÚUNKNOWN_TARGET_REFUSALÚauth_refusalN)r8   r�   Útools.connectors.gateway.errorsr‚   rK   rE   rƒ   r„   r…   r†   r‡   Ú	reconnectr   Ú
connectorsÚtargetÚaliasÚconnection_idÚ	repair_idÚ_session_contextÚ_require_connectorsÚreissuer   Ú	Exceptionr*   r_   )r>   ry   r@   rU   r�   r‚   rE   rƒ   r„   r…   r†   r‡   Únamer‹   r   rV   s   &&&&            r   ru   ru   f   sF  € å$Ý@÷V÷ Và××ÐÜ Ñ/Ð/Ø×"Ô"ˆØ×!Ñ! $Ó'ˆàÔ G§M¡MÒ$=À&Ç,Á,ÐRY×R_ÑR_ÔB_Ø&-×&;Ñ&;ÀDÈ&×JZÑJZÐ\b×\pÑ\pÐCqÖ&qÜ"Ð$:Ñ;Ð;ñ #ô 
˜)×	)Õ	)Ü˜IÔ+ð	=Ø—[‘[ ×,>Ñ,>Ó?‰F÷ 
*ð ÒÜÐ 0× 4Ñ 4°VÓ MÑNÐNÜ�ÓÐøô !ô 	ØØô 	@Ü"¡L°Ó$5Ñ6¸CÐ?ûÜô 	=Ü" NÑ3¸Ð<ûð	=ú÷ 
*×	)úsB   ÃE)ÃD'Ä'E&Ä8E&Ä9E	Å	E&ÅE&Å
E!Å!E&Å&E)Å)E9	c                ó°   € ^ RI p^ RIHp ^ RIHp \        W4      w  rVRVP                  WVRR7      9  g   V! 4       '       g   \        VP                  !  hR# )zlThe sidecar's ``_session_connector_gate``: connectors on, and ``manage_connections`` in the session's tools.N)Úconnectors_availablerc   Úmanage_connectionsT)Ú
quiet_mode)	Úmodel_toolsr8   r•   rm   rd   Ú_session_toolsetsÚ_select_tool_namesr   ÚCONNECTORS_UNAVAILABLE)r>   ry   r˜   r•   rw   ÚenabledÚdisableds   &&     r   r�   r�   ƒ   s^   € ãÝ5Ý:Ü)¨)Ó9Ñ€GØ ;×#AÑ#AÀ'Ð`dÐ#AÓ#eÔeñ  nB÷  nDò  nDÜ × ?Ñ ?Ñ@Ð@ñ nDr   c                 ó  € V P                  V4      pVe   \        VRR 4      \        VRR 4      3# ^ RIHp ^ RIHp ^ RIHp V! V P                  V P                  VP                  ,          P                  4      pVe   VP                  V RR7      M/ pVe   \        VP                  V4      4      MR pT! T! VP                  R4      ;'       g    / P                  R4      4      ;'       g    R Ve   VP                   MR	4      p	W‰3# )
NÚenabled_toolsetsÚdisabled_toolsets)Úparse_config_string_list)Úpolicy_for_source)Úsession_disabled_toolsetsF)ÚsecretsÚagentÚcli)r¥   ÚgetattrÚagent.skill_utilsr¡   Úgateway.session_policyr¢   Útoolsetsr£   Úrunnerr:   r?   ÚsourceÚconfigÚlistÚcurrent_toolsetsr*   Úplatform)
r>   ry   r¥   r¡   r¢   r£   Úpolicyr­   rœ   r�   s
   &&        r   r™   r™   �   sî   € Ø�O‰O˜CÓ €EØÒÜ�uÐ0°$Ó7¼ÀÐH[Ð]aÓ9bÐbÐbÝ:Ý8Ý2Ù˜y×/Ñ/°×1CÑ1CÀCÇNÁNÕ1S×1ZÑ1ZÓ[€FØ8>Ò8JˆV�]‰]˜9¨eˆ]Ô4ÐPR€FØ7=Ò7IŒd�6×*Ñ*¨6Ó2Ô3Èt€GÙ(Ñ)AÀ6Ç:Á:ÈgÓCV×C\ÐC\ÐZ\×BaÑBaÐbuÓBvÓ)w×)Ð)Ð{Ø<BÒ<N¨¯ªÐTYó[€HàÐÐr   c           
     óØ   € ^ RI Hp ^ RIHp V P                  VP
                  ,          pV! VP                  . / VP                  V! W4      R7      pV P                  P                  V4      # )z–The session vars a turn of this session binds (``GatewayRunner._session_env_scope``), so a re-mint carries the turn's caller identity and session key.)ÚSessionContext)Úphysical_target)r¬   Úconnected_platformsÚhome_channelsÚsession_keyr?   )
Úgateway.sessionr³   Úgateway.session_ancillaryr´   r:   r?   r¬   r;   r«   Ú_session_env_scope)r>   ry   r³   r´   r5   Úcontexts   &&    r   r�   r�   œ   sX   € å.Ý9Ø×Ñ˜cŸn™nÕ-€DÙ D§K¡KÀRÐWYØ)-¯©ÁÐPYÓ@_ôa€Gà×Ñ×.Ñ.¨wÓ7Ð7r   )rH   re   rh   rg   )r   rr   Ú	functoolsr   Úhermes_state_runtimer   r.   r   r,   r2   rA   rW   r_   r/   rt   ru   r�   r™   r�   © r   r   Ú<module>r¿      sd   ðñó Ý å 2à
r€ô:Ð(ô :õFò
PòJò9ò(aòOò:9òò:Aòô8r   