Ë
    ãß²jt,  ã                  óä   — d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZmZmZmZmZ ddlmZmZmZmZmZ dZ G d„ d	e«      Ze G d
„ d«      «       Ze G d„ d«      «       Z G d„ de«      Zy)zZOne backend-owned connection operation per ``manage_connections`` call. Pure data, no I/O.é    )ÚannotationsN)Ú	dataclassÚfield)ÚAnyÚCallableÚClassVarÚDictÚListÚOptional)ÚRESOLVED_STATESÚActorÚSettleReasonÚTargetStateÚallowedg     Àr@c                  ó   — e Zd Zy)ÚIllegalTransitionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú?/home/ubuntu/.hermes/hermes-agent/tools/connectors/operation.pyr   r      s   „ Ør   r   c                  óú   — e Zd ZU ded<   ded<   ded<   ej
                  Zded<   dZded<   dZded	<   d
Z	ded<   d
Z
ded<   d
Zded<   dZded<    ee¬«      Zded<    ee¬«      Zded<   edd„«       Zddœdd„Zy
)ÚTargetÚstrÚnameÚkindÚactionr   ÚstateÚ ÚdetailÚinstructionsNúOptional[str]Úconnect_urlÚconnection_idÚattemptç        ÚfloatÚnext_read_at©Údefault_factoryzList[Dict[str, Any]]Úrequired_envúDict[str, Any]Úextrac                ó&   — | j                   t        v S ©N)r   r   ©Úselfs    r   ÚresolvedzTarget.resolved+   s   € à�z‰zœ_Ð,Ð,r   T©Úwith_urlc               óö  — | j                   | j                  | j                  | j                  j                  dœ}| j
                  r| j
                  |d<   | j                  r| j                  |d<   |r| j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   |j                  | j                  «       |S )N)r   r   r   r   r!   r"   r$   r%   r&   r,   )r   r   r   r   Úvaluer!   r"   r$   r%   r&   r,   Úupdater.   )r2   r5   Úouts      r   ÚsnapshotzTarget.snapshot/   sÌ   € Ø'+§y¡y¸$¿)¹)ÈtÏ{É{Ðei×eoÑeo×euÑeuÑvˆØ�;Š;Ø ŸK™KˆC�‰MØ×ÒØ"&×"3Ñ"3ˆC�ÑÙ˜×(Ò(Ø!%×!1Ñ!1ˆC�ÑØ×ÒØ#'×#5Ñ#5ˆC�Ñ Ø�<Š<Ø!Ÿ\™\ˆC�	‰NØ×ÒØ"&×"3Ñ"3ˆC�ÑØ�
‰
�4—:‘:ÔØˆ
r   ©ÚreturnÚbool)r5   r=   r<   r-   )r   r   r   Ú__annotations__r   Úpendingr   r!   r"   r$   r%   r&   r)   r   Úlistr,   Údictr.   Úpropertyr3   r:   r   r   r   r   r      sœ   … à
ƒIØ
ƒIØƒKØ$×,Ñ,€Eˆ;Ó,Ø€FˆCÓØ€L�#ÓØ!%€K�Ó%à#'€M�=Ó'à!€Gˆ]Ó!ð €L�%Óñ */¸tÔ)D€LÐ&ÓDá!°$Ô7€Eˆ>Ó7àò-ó ð-ð ,0ö r   r   c                  óP  — e Zd ZU dZded<   ded<   dZded<   dZded	<   dZd
ed<    ed„ ¬«      Z	ded<    ee
j                  ¬«      Zded<   dZded<   dZded<   dZded<   dZded<    eej"                  d¬«      Zded<    edd¬«      Zded <    eej(                  d¬«      Zd!ed"<   d7d#„Zd8d$„Zddddd%œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9d&„Zej4                  d'œd:d(„Zd;d)„Zd<d*„Zed=d+„«       Zed=d,„«       Z d>d?d-„Z!d>d@d.„Z"d=d/„Z#d0d1œdAd2„Z$d0d1œdAd3„Z%d0d1œdAd4„Z&d0d1œdAd5„Z'd;d6„Z(y)BÚConnectionOperationNzeClassVar[Optional[Callable[['ConnectionOperation', Optional[Dict[str, Any]], Dict[str, Any]], None]]]Ú	on_changezList[Target]Útargetsr    r   Úsession_keyÚprofile_keyr#   Útool_call_idc                 óD   — t        j                  «       j                  d d S )Né   )ÚuuidÚuuid4Úhexr   r   r   ú<lambda>zConnectionOperation.<lambda>N   s   € ¬t¯z©z«|×/?Ñ/?ÀÀÐ/D€ r   r*   Úop_idr(   Ú
created_atr'   Údeadline_atúOptional[float]Ú
settled_atzOptional[SettleReason]Ú
settled_byr   ÚintÚseqF)r+   Úreprzthreading.EventÚwake)ÚdefaultrX   úOptional[Dict[str, Any]]Ú_settled_snapshotzthreading.LockÚ_lockc                óN   — | j                   s| j                  t        z   | _         y y r0   )rR   rQ   ÚOPERATION_DEADLINE_SECONDSr1   s    r   Ú__post_init__z!ConnectionOperation.__post_init__[   s"   € Ø×ÒØ#Ÿ™Ô1KÑKˆDÕð  r   c                óB   ‡— t        ˆfd„| j                  D «       d «      S )Nc              3  óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wr0   )r   )Ú.0Útr   s     €r   ú	<genexpr>z-ConnectionOperation.target.<locals>.<genexpr>`   s   øè ø€ Ò?˜1°·±¸$³”QÑ?ùs   ƒ˜)ÚnextrF   )r2   r   s    `r   ÚtargetzConnectionOperation.target_   s   ø€ ÜÓ? §¡Ô?ÀÓFÐFr   )r!   r$   r%   r&   c               ó  — | j                  |«      }	|	€t        d|›�«      ‚| j                  5  |	j                  |k(  r
	 ddd«       yt	        |	j
                  |	j                  |«      |k7  rKt        |	j
                  › d|› d|	j                  j                  › d|j                  › d|j                  › �	«      ‚||	j                  j                  |j                  |j                  dœ}
||	_        |�||	_        |	j                  |
d<   |�||	_        |�||	_	        |�||	_
        |rt        |«      |	_        | j                  «       }ddd«       | j                  j                  «        | j!                  
«       |
S # 1 sw Y   Œ7xY w)	z¹Move one target; the contract decides whether ``actor`` may. Returns the change, or None
        when the target is already in ``to``. Allowed after settlement: the frozen result stays.Núunknown target Ú z: z -> z by )rg   ÚfromÚtoÚactorr!   )rg   r   r]   r   r   r   r7   r!   r$   r%   r&   rA   r.   Ú_bump_lockedrY   ÚsetÚ_changed)r2   r   rl   rm   r!   r$   r%   r&   r.   rg   Úchanger:   s               r   Ú
transitionzConnectionOperation.transitionb   sn  € ð —‘˜TÓ"ˆØˆ>Ü# o°d°XÐ$>Ó?Ð?Ø�Z‰Zñ 	+Ø�|‰|˜rÒ!Ø÷	+ð 	+ô �v—{‘{ F§L¡L°"Ó5¸Ò>Ü'¨6¯;©;¨-°q¸¸¸bÀÇÁ×ASÑASÐ@TÐTXÐY[×YaÑYaÐXbÐbfÐgl×grÑgrÐfsÐ(tÓuÐuØ $¨f¯l©l×.@Ñ.@ÈÏÉÐ[`×[fÑ[fÑgˆFØˆFŒLØÐ!Ø &�”Ø%Ÿ}™}ˆF�8ÑØÐ&Ø%0�Ô"ØÐ(Ø'4�Ô$ØÐ"Ø!(�”ÙÜ# E›{�”Ø×(Ñ(Ó*ˆH÷%	+ð& 	�	‰	�‰ŒØ�‰�f˜hÔ'Øˆ÷+	+ð 	+ús   ®E8ÁC:E8Å8F)rm   c               ó�  — | j                  |«      }|€t        d|›�«      ‚| j                  5  ||_        ||_        ||j
                  j                  |j
                  j                  |j                  |dœ}| j                  «       }ddd«       | j                  j                  «        | j                  «       y# 1 sw Y   Œ6xY w)a  Replace a target's link and detail without a state change (a repeated failure).

        ``actor`` says who produced the new text: a second failure of a backend attempt is the
        backend's report, not the user's move, and the frame must not claim otherwise.Nri   )rg   rk   rl   rm   r!   )rg   r   r]   r$   r!   r   r7   rn   rY   ro   rp   )r2   r   r$   r!   rm   rg   rq   r:   s           r   ÚrefreshzConnectionOperation.refreshƒ   s­   € ð
 —‘˜TÓ"ˆØˆ>Ü# o°d°XÐ$>Ó?Ð?Ø�Z‰Zñ 	+Ø!,ˆFÔØ"ˆFŒMØ $¨f¯l©l×.@Ñ.@ÈÏÉ×HZÑHZÐej×epÑepØ &ñ(ˆFà×(Ñ(Ó*ˆH÷	+ð 	�	‰	�‰ŒØ�‰�f˜hÕ'÷	+ð 	+ús   ®AB<Â<Cc                ód   — | j                   €| xj                  dz  c_        | j                  «       S )a·  Advance the write counter and take the snapshot that frame carries. Both happen under
        ``_lock`` so a second writer cannot backdate this frame with its own state.

        After settlement the frozen snapshot is the frame, seq included: a later write changes
        nothing the renderer can see, so it must not leave the operation naming a seq no frame
        carried (the resume snapshot would wait for a frame that never comes).é   )r\   rW   Ú_result_lockedr1   s    r   rn   z ConnectionOperation._bump_locked”   s,   € ð ×!Ñ!Ð)Ø�HŠH˜‰M�HØ×"Ñ"Ó$Ð$r   c                óH   — t        | «      j                  }|� || ||«       y y r0   )ÚtyperE   )r2   rq   r:   Úhooks       r   rp   zConnectionOperation._changedŸ   s(   € Ü�D‹z×#Ñ#ˆØÐÙ��v˜xÕ(ð r   c                óh   — t        | j                  «      xr t        d„ | j                  D «       «      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wr0   )r3   )rc   rd   s     r   re   z3ConnectionOperation.all_resolved.<locals>.<genexpr>¦   s   è ø€ Ò)K¸¨!¯*­*Ñ)Kùs   ‚)r=   rF   Úallr1   s    r   Úall_resolvedz ConnectionOperation.all_resolved¤   s%   € ä�D—L‘LÓ!ÒK¤cÑ)K¸d¿l¹lÔ)KÓ&KÐKr   c                ó   — | j                   d uS r0   )rT   r1   s    r   ÚsettledzConnectionOperation.settled¨   s   € à�‰ dÐ*Ð*r   c                ól   — t        d| j                  |€t        j                  «       z
  «      S |z
  «      S )Nr'   )ÚmaxrR   Útime)r2   Únows     r   Úremaining_secondsz%ConnectionOperation.remaining_seconds¬   s/   € Ü�3˜×(Ñ(¸3¸;¬D¯I©I«KÑPÓQÐQÈCÑPÓQÐQr   c                ó¶  — | j                   5  | j                  �
	 ddd«       y|€t        j                  «       n|| _        || _        | j                  D ]$  }|j
                  rŒt        j                  |_        Œ& | j                  «       | _
        ddd«       | j                  j                  «        | j                  d| j                  «       y# 1 sw Y   Œ@xY w)z5Compare-and-set: the first caller freezes the result.NFT)r]   rT   rƒ   rU   rF   r3   r   Únot_connectedr   rn   r\   rY   ro   rp   )r2   Úbyr„   rg   s       r   ÚsettlezConnectionOperation.settle¯   s±   € à�Z‰Zñ 	9Ø�‰Ð*Ø÷	9ð 	9ð .1¨[œdŸi™iœk¸cˆDŒOØ ˆDŒOØŸ,™,ò =�Ø—“Ü#.×#<Ñ#<�F•Lð=ð &*×%6Ñ%6Ó%8ˆDÔ"÷	9ð 	�	‰	�‰ŒØ�‰�d˜D×2Ñ2Ô3Ø÷	9ð 	9ús   �C¤?CÁ$,CÃCc                ó\   — | j                   xr | j                  t        j                   «      S r0   )r~   r‰   r   r1   s    r   Úsettle_if_all_resolvedz*ConnectionOperation.settle_if_all_resolved¾   s"   € Ø× Ñ ÒK T§[¡[´×1JÑ1JÓ%KÐKr   T©Ú	with_urlsc               ó  — | j                   | j                  | j                  | j                  | j                  r| j                  j
                  nd | j                  D �cg c]  }|j                  |¬«      ‘Œ c}dœS c c}w )Nr4   )rP   rW   rR   rT   rU   rF   )rP   rW   rR   rT   rU   r7   rF   r:   )r2   r�   rd   s      r   Ú_snapshot_lockedz$ConnectionOperation._snapshot_lockedÁ   sb   € à—Z‘ZØ—8‘8Ø×+Ñ+ØŸ/™/Ø37·?²?˜$Ÿ/™/×/Ò/ÈØ@DÇÁÖM¸1˜Ÿ
™
¨I˜
Õ6ÒMñ
ð 	
ùò Ns   ÁA<c               óö   — | j                   �W| j                   d   D �cg c]  }t        |«      ‘Œ }}|s|D ]  }|j                  dd «       Œ t        | j                   |¬«      S | j                  |¬«      S c c}w )NrF   r$   )rF   rŒ   )r\   rA   Úpopr�   )r2   r�   rd   rF   s       r   rw   z"ConnectionOperation._result_lockedË   s}   € Ø×!Ñ!Ð-Ø(,×(>Ñ(>¸yÑ(IÖJ 1”t˜A•wÐJˆGÐJÙØ ò /�AØ—E‘E˜-¨Õ.ð/ä˜×.Ñ.¸Ô@Ð@Ø×$Ñ$¨yÐ$Ó9Ð9ùò Ks   žA6c               ój   — | j                   5  | j                  |¬«      cd d d «       S # 1 sw Y   y xY w)NrŒ   )r]   rw   )r2   r�   s     r   r:   zConnectionOperation.snapshotÔ   s/   € Ø�Z‰Zñ 	<Ø×&Ñ&°Ð&Ó;÷	<÷ 	<ò 	<ús   �)©2c               óÐ  — | j                   5  | j                  |¬«      }d d d «       d   D ]  }|j                  dd «       Œ |j                  d«      €|S ddlm} ddlm} |d   D ]o  }|j                  dd «       |j                  d	«      d
k(  r|j                  d«      nd }|sŒ?|j                  t        |«      d¬«      } ||d¬«      \  }}	|sŒk||d<   Œq |S # 1 sw Y   Œ½xY w)NrŒ   rF   r%   rT   r   )Úregistry)Úbuild_catalog_listing_with_formr"   r   ÚmcpÚtoolsT)ÚquietiÜ  )Ú
max_tokensÚtools_listing)
r]   rw   r‘   ÚgetÚtools.registryr”   Útools.tool_search_catalogr•   Úget_definitionsro   )
r2   r�   Úresultrg   r”   r•   ÚnamesÚdefinitionsÚlistingÚ_forms
             r   rŸ   zConnectionOperation.resultØ   sõ   € Ø�Z‰Zñ 	>Ø×(Ñ(°9Ð(Ó=ˆF÷	>à˜YÑ'ò 	.ˆFØ�J‰J�¨Õ-ð	.à�:‰:�lÓ#Ð+ØˆMÝ+ÝMà˜YÑ'ò 	2ˆFð �J‰J�~ tÔ,Ø+1¯:©:°fÓ+=ÀÒ+F�F—J‘J˜wÔ'ÈDˆEÙØØ"×2Ñ2´3°u³:ÀTÐ2ÓJˆKÙ<¸[ÐUYÔZ‰NˆG�UÚØ*1��Ò'ð	2ð ˆ÷+	>ð 	>ús   �CÃC%c                ó.  — | j                   5  | j                  D �cg c]  }|j                  «       ‘Œ }}| j                  }ddd«       | j                  | j
                  t        dœ}| j                  r| j                  |d<   |S c c}w # 1 sw Y   ŒKxY w)z¡The ``connection.request`` payload and the resume snapshot: identity, live target snapshots
        (links included, the panel owns them), server-owned deadline.N)rP   rW   rR   Útimeout_secondsrF   rI   )r]   rF   r:   rW   rP   rR   r_   rI   )r2   rd   rF   rW   Úpayloads        r   Úrequest_payloadz#ConnectionOperation.request_payloadð   s�   € ð �Z‰Zñ 	Ø-1¯\©\Ö:¨�q—z‘z•|Ð:ˆGÐ:Ø—(‘(ˆC÷	ð —Z‘ZØØ×+Ñ+Ü9Øñ#
ˆð ×ÒØ&*×&7Ñ&7ˆG�NÑ#Øˆùò ;÷	ð 	ús   �BœB³BÂBÂB)r<   ÚNone)r   r   r<   zOptional[Target])r   r   rl   r   rm   r   r!   r#   r$   r#   r%   r#   r&   r#   r.   r   r<   r[   )
r   r   r$   r#   r!   r   rm   r   r<   r¨   )r<   r-   )rq   r[   r:   r-   r<   r¨   r;   r0   )r„   rS   r<   r(   )rˆ   r   r„   rS   r<   r=   )r�   r=   r<   r-   ))r   r   r   rE   r>   rG   rH   rI   r   rP   rƒ   rQ   rR   rT   rU   rW   Ú	threadingÚEventrY   r\   ÚLockr]   r`   rg   rr   r   Úuserrt   rn   rp   rB   r~   r€   r…   r‰   r‹   r�   rw   r:   rŸ   r§   r   r   r   rD   rD   A   s·  … ð
 	ð ð ó ð ÓØ€K�Óà€K�Óà"&€L�-Ó&ÙÑ'DÔE€Eˆ3ÓEÙ¨d¯i©iÔ8€J�Ó8Ø€K�ÓØ"&€J�Ó&Ø)-€JÐ&Ó-ð €CˆƒLá!°)·/±/ÈÔN€Dˆ/ÓNÙ27ÀÈ5Ô2QÐÐ/ÓQÙ!°)·.±.ÀuÔM€Eˆ>ÓMóLóGð TXØ%)È$ÐimñØðØ(ðØ16ðØCPðà"ðà:GðàYfðð ðð 
"ó	ðB ]b×\fÑ\fõ (ó"	%ó)ð
 òLó ðLð ò+ó ð+ôRôóLð 59õ 
ð 37õ :ð -1õ <ð +/õ ô0r   rD   c                  ó   — e Zd ZdZy)ÚDetachedOperationN)r   r   r   rE   r   r   r   r®   r®     s   „ à�Ir   r®   )Ú__doc__Ú
__future__r   r©   rƒ   rL   Údataclassesr   r   Útypingr   r   r   r	   r
   r   Útools.connectors.contractr   r   r   r   r   r_   Ú
ValueErrorr   r   rD   r®   r   r   r   ú<module>rµ      s{   ðÙ `å "ã Û Û ß (ß @× @ç `Õ `ð #Ð ô	˜
ô 	ð ÷(ð (ó ð(ðV ÷}ð }ó ð}ô@Ð+õ r   