§
    éŽ’jW6  ã                   óì   — d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ dej        de
j        fd„Zdeeef         ddfd„Z G d„ d¦  «        ZdS )zRRoutes lifecycle hook requests from the local harness to Python SDK hook handlers.é    N)ÚAnyÚCallableÚ	Coroutine)Úlocalharness_pb2)Útypes)Úmake_step_id)Únormalize_wire_path)ÚPROTO_FIELD_TO_SDK_NAME)ÚWIRE_PATH_ARGUMENT_KEYS)Úhook_runner)ÚhooksÚuiÚreturnc           
      óš  — g }| j         D �] }|                     d¦  «        r|                     |j        ¦  «         Œ3|                     d¦  «        rX	 t	          j        |j        j        ¦  «        }|                     t	          j        |¬¦  «        ¦  «         Œ�# t          $ r Y Œœw xY w|                     d¦  «        rk|j
        }	 |                     t	          j        |j        |j        |                     d¦  «        r|j        nd¬¦  «        ¦  «         �Œ# t          $ r Y �Œw xY w�Œ"|sdS t          |¦  «        d	k    r|d
         S |S )zBUnmarshals proto UserInput into rich SDK types.Content primitives.ÚtextÚslash_command)ÚnameÚmediaÚdescriptionN)ÚdataÚ	mime_typer   Ú é   r   )ÚpartsÚHasFieldÚappendr   r   ÚBuiltinSlashCommandNamer   r   ÚSlashCommandÚ
ValueErrorr   Ú
from_bytesr   r   r   Úlen)r   Úcontent_listÚpartÚsc_namer   s        ú^C:\Projects\DSCons\.venv\Lib\site-packages\google\antigravity\connections\local\hook_router.pyÚ_from_proto_user_inputr&      sŠ  € à/1€,ØŒhð ñ €dØ‡}‚}�VÑÔð Ø×Ò˜$œ)Ñ$Ô$Ð$Ð$Ø	�Š�Ñ	'Ô	'ð ðÝÔ/°Ô0BÔ0GÑHÔHˆØ×Ò�EÔ.°GÐ<Ñ<Ô<Ñ=Ô=Ð=Ð=øÝð ð ð Øˆðøøøà	�Š�wÑ	Ô	ð ØŒj€eðØ×ÒÝÔØ”ZØœ/à).¯ª¸Ñ)FÔ)FÐP�EÔ%Ð%ÈDð	ñ ô ñ	
ô 	
ð 	
ñ 	
øõ ð ð ð Ø‰ðøøøñð 
ð Øˆ2ÝˆÑÔ˜!ÒÐØ˜Œ?ÐØ	Ðs&   ÁABÂ
B'Â&B'ÃADÄ
D'Ä&D'Úargsc                 ó–   — t           D ]@}|                      |¦  «        }t          |t          ¦  «        r|rt	          |¦  «        | |<   ŒAdS )züConverts wire-format URIs to clean filesystem paths in-place.

  Paths arrive as file:/// or cns:// URIs over the wire protocol.
  User hooks expect clean absolute paths (e.g. /home/user/file.py),
  so we normalize known path fields before dispatch.
  N)r   ÚgetÚ
isinstanceÚstrr	   )r'   ÚkeyÚvals      r%   Ú_normalize_path_argsr.   @   sW   € õ %ð +ð +€cØ
�(Š(�3‰-Œ-€CÝ�#•sÑÔð + ð +Ý% cÑ*Ô*€dˆ3�iøð+ð +ó    c            
       óò  — e Zd ZdZ	 ddej        deej        ge	e
e
df         f         deeege
f         dz  fd„Zede
fd„¦   «         Zd	ej        d
ej        ddfd„Zd	ej        d
ej        ddfd„Zdej        d
ej        ddfd„Zdej        d
ej        ddfd„Zdej        d
ej        ddfd„Zdej        d
ej        ddfd„Zdej        d
ej        ddfd„Zdej        d
ej        ddfd„Zdej        ddfd„ZdS )Ú
HookRouterz_Routes and dispatches CallHookRequest messages from the local harness to the active HookRunner.Nr   Úevent_senderÚresult_extractorc                 ó\  — || _         || _        || _        d | _        t          j        | j        t          j        | j        t          j	        | j
        t          j        | j        t          j        | j        t          j        | j        t          j        | j        t          j        | j        i| _        d S ©N)Ú_hook_runnerÚ_sendÚ_extract_resultÚ_current_turn_contextr   ÚLIFECYCLE_HOOK_ON_SESSION_STARTÚ_handle_session_startÚLIFECYCLE_HOOK_ON_SESSION_ENDÚ_handle_session_endÚLIFECYCLE_HOOK_PRE_TURNÚ_handle_pre_turnÚLIFECYCLE_HOOK_POST_TURNÚ_handle_post_turnÚLIFECYCLE_HOOK_POST_TOOLÚ_handle_post_toolÚLIFECYCLE_HOOK_ON_TOOL_ERRORÚ_handle_on_tool_errorÚLIFECYCLE_HOOK_PRE_TOOLÚ_handle_pre_toolÚLIFECYCLE_HOOK_ON_COMPACTIONÚ_handle_on_compactionÚ	_handlers)Úselfr   r2   r3   s       r%   Ú__init__zHookRouter.__init__P   s‘   € ð $€DÔØ€D„JØ+€DÔØ&*€DÔõ 	Ô8ØÔ&åÔ6ØÔ$åÔ0°$Ô2GÝÔ1°4Ô3IÝÔ1°4Ô3IÝÔ5ØÔ&åÔ0°$Ô2GÝÔ5ØÔ&ð	ð 	„N€N€Nr/   r   c                 ó   — | j         S )zDThe active TurnContext set by the most recent PreTurn hook, or None.)r9   )rK   s    r%   Úcurrent_turn_contextzHookRouter.current_turn_contexty   s   € ð Ô%Ð%r/   Ú_Úrespc              ƒ   óž   K  — | j                              ¦   «         ƒ d {V —† |j                             t	          j        ¦   «         ¦  «         d S r5   )r6   Údispatch_session_startÚempty_resultÚCopyFromr   ÚEmptyResult©rK   rO   rP   s      r%   r;   z HookRouter._handle_session_start~   sV   è è € ð
 Ô
×
2Ò
2Ñ
4Ô
4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÔ×ÒÕ/Ô;Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r/   c              ƒ   óž   K  — | j                              ¦   «         ƒ d {V —† |j                             t	          j        ¦   «         ¦  «         d S r5   )r6   Údispatch_session_endrS   rT   r   rU   rV   s      r%   r=   zHookRouter._handle_session_end†   sV   è è € ð
 Ô
×
0Ò
0Ñ
2Ô
2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ØÔ×ÒÕ/Ô;Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r/   Úreqc              ƒ   óè  K  — d}|                      d¦  «        r3|j                              d¦  «        rt          |j        j        ¦  «        }| j                             |¦  «        ƒ d {V —†\  }}|| _        t          j        ¦   «         }|�|j	        rt          j        j
        j        |_        n)t          j        j
        j        |_        |j        pd|_        |j                             |¦  «         d S )Nr   Úpre_turn_argsÚ
user_input)r   r[   r&   r\   r6   Údispatch_pre_turnr9   r   ÚPreTurnResultÚallowÚDecisionÚALLOWÚdecisionÚDENYÚmessageÚreasonÚpre_turn_resultrT   )rK   rY   rP   r\   ÚresÚturn_contextÚptrs          r%   r?   zHookRouter._handle_pre_turnŽ   sð   è è € ð
 !#€JØ
‡|‚|�OÑ$Ô$ð H¨Ô):×)CÒ)CØñ*ô *ð Hõ *¨#Ô*;Ô*FÑGÔG€jØ"Ô/×AÒAÀ*ÑMÔMÐMÐMÐMÐMÐMÐMÑ€CˆØ!-€DÔÝ
Ô
(Ñ
*Ô
*€CØ
€{�c”i€{Ý%Ô3Ô<ÔB€c„l€lå%Ô3Ô<ÔA€c„lØ”;Ð$ "€c„jØÔ×!Ò! #Ñ&Ô&Ð&Ð&Ð&r/   c              ƒ   ó@  K  — d}|                      d¦  «        r|j        j        }| j        pt	          j        | j        j        ¦  «        }| j                             ||¦  «        ƒ d {V —† d | _        |j	         
                    t          j        ¦   «         ¦  «         d S )Nr   Úpost_turn_args)r   rk   Úresponse_textr9   r   ÚTurnContextr6   Úsession_contextÚdispatch_post_turnrS   rT   r   rU   )rK   rY   rP   rl   Úturn_ctxs        r%   rA   zHookRouter._handle_post_turn¢   s®   è è € ð
 €MØ
‡|‚|Ð$Ñ%Ô%ð 7ØÔ(Ô6€mØÔ)ð ­UÔ->ØÔÔ)ñ.ô .€Hð Ô
×
.Ò
.¨x¸Ñ
GÔ
GÐGÐGÐGÐGÐGÐGÐGØ!%€DÔØÔ×ÒÕ/Ô;Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r/   c              ƒ   ó  K  — d}i }d}d}d}|                      d¦  «        r§|j        }t          j        |j        |j        ¦  «        }|j        rt          j        |j        ¦  «        }|j        r|j        }|j	        r|j	        }|j
        s|                      d¦  «        rt          |j
        |j        ¦  «        }t          |¦  «         d}	t          D ]2}
|                     |
¦  «        }t          |t           ¦  «        r|r|}	 nŒ3t#          j        ||||||	¬¦  «        }| j        pt)          j        | j        j        ¦  «        }| j                             ||¬¦  «        ƒ d{V —†\  }}}t3          j        ¦   «         }|j        rAt2          j        j        j        |_        |j        �t          j         |j        ¦  «        |_!        n)t2          j        j        j"        |_        |j#        pd|_$        |j%         &                    |¦  «         dS )z:Handles PreTool decide hooks dispatched by the Go harness.r   NÚpre_tool_argsÚ
step_index)r   r'   ÚidÚstep_idÚserver_nameÚcanonical_path)rh   Ú	tool_call)'r   rr   r
   r)   Ú	tool_nameÚarguments_jsonÚjsonÚloadsrv   Úcall_idÚtrajectory_idr   rs   r.   r   r*   r+   r   ÚToolCallr9   r   rm   r6   rn   Údispatch_pre_tool_callr   ÚPreToolResultr_   r`   ra   rb   Úmodified_argsÚdumpsÚmodified_arguments_jsonrc   rd   re   Úpre_tool_resultrT   )rK   rY   rP   ry   r'   rv   r}   ru   Úptarw   r,   r-   Útcrp   ÚresultrO   ri   s                    r%   rG   zHookRouter._handle_pre_tool±   s;  è è € ð €IØ€DØ"€KØ€GØ€GØ
‡|‚|�OÑ$Ô$ð !ØÔ€cÝ)Ô-¨c¬m¸S¼]ÑKÔK€iØ	Ô	ð .ÝŒz˜#Ô,Ñ-Ô-ˆð 
Œð &Ø”oˆØ	Œð Ø”+ˆØ	Ô	ð B˜cŸlšl¨<Ñ8Ô8ð BÝ˜sÔ0°#´.ÑAÔAˆÝ˜4Ñ Ô Ð ð "&€NÝ&ð ð ˆØ�HŠH�S‰MŒM€cÝ	�C�Ñ	Ô	ð  #ð ØˆØˆøå	ŒØØØØØØ%ð
ñ 
ô 
€Bð Ô)ð ­UÔ->ØÔÔ)ñ.ô .€Hð Ô*×AÒAØ¨ð Bñ ô ð ð ð ð ð ð �L€FˆAˆqõ Ô
(Ñ
*Ô
*€CØ„|ð (Ý%Ô3Ô<ÔB€c„lØ	Ô	Ð	)Ý&*¤j°Ô1EÑ&FÔ&FˆÔ#øå%Ô3Ô<ÔA€c„lØ”>Ð' R€c„jØÔ×!Ò! #Ñ&Ô&Ð&Ð&Ð&r/   c              ƒ   ó   K  — d}d }d }d }d }d}|                      d¦  «        r¹|j        }	t          j        |	j        |	j        ¦  «        }|	j        pd }|	j        pd }|	j        s|	                      d¦  «        rt          |	j        |	j	        ¦  «        }|	j
        s|	j        nd }|	j
        }| j        r-|	j
        s&|	j        r|                      ||	j        ¦  «        }
|
�|
}t          j        ||||||pd ¬¦  «        }| j        pt!          j        | j        j        ¦  «        }t!          j        |¦  «        }| j                             ||¦  «        ƒ d {V —† |j                             t1          j        ¦   «         ¦  «         d S )Nr   Úpost_tool_argsrs   )r   rt   ru   rv   rˆ   Úerror)r   rŠ   r
   r)   ry   rv   r}   r~   r   rs   r‹   rˆ   r8   r   Ú
ToolResultr9   r   rm   r6   rn   ÚOperationContextÚdispatch_post_tool_callrS   rT   r   rU   )rK   rY   rP   ry   rv   r}   ru   Ú
result_valÚ	error_strr†   Ú	extractedÚtool_resultrp   Úop_ctxs                 r%   rC   zHookRouter._handle_post_toolí   s¶  è è € ð
 €IØ"€KØ€GØ€GØ€JØ€IØ
‡|‚|Ð$Ñ%Ô%ð !ØÔ€cÝ)Ô-¨c¬m¸S¼]ÑKÔK€iØ”OÐ+ t€kØ”Ð#˜t€gØ	Ô	ð B˜cŸlšl¨<Ñ8Ô8ð BÝ˜sÔ0°#´.ÑAÔAˆØ%(¤YÐ8�3”:�:°D€jØ”)€iØ	Ô	ð ! c¤ið !°C´Jð !Ø×(Ò(¨°C´JÑ?Ô?ˆ	ØÐ Ø ˆ*ÝÔ"ØØØØØØÐ˜4ðñ ô €Kð Ô)ð ­UÔ->ØÔÔ)ñ.ô .€Hõ Ô# HÑ-Ô-€FØ
Ô
×
3Ò
3°F¸KÑ
HÔ
HÐHÐHÐHÐHÐHÐHÐHØÔ×ÒÕ/Ô;Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r/   c              ƒ   óZ  K  — d}d}d}d}d}|                      d¦  «        rw|j        }|j        p|}t          j        |j        |j        ¦  «        }|j        pd}|j        pd}|j        s|                      d¦  «        rt          |j        |j
        ¦  «        }t          j        |||||¬¦  «        }	| j        pt          j        | j        j        ¦  «        }
t          j        |
¦  «        }| j                             ||	¦  «        ƒ d{V —†\  }}|j        rjt+          |t,          ¦  «        rU|                     ¦   «         rA|j                             t5          j        |                     ¦   «         ¬¦  «        ¦  «         dS |j                             t5          j        ¦   «         ¦  «         dS )zAHandles OnToolError lifecycle hooks dispatched by the Go harness.zTool failedr   NÚon_tool_error_argsrs   )r}   ru   )Úcustom_error_message)r   r•   Úerror_messager
   r)   ry   rv   r}   r~   r   rs   r   ÚToolExecutionErrorr9   r   rm   r6   rn   r�   Údispatch_on_tool_errorr_   r*   r+   ÚstripÚon_tool_error_resultrT   r   ÚOnToolErrorResultrS   rU   )rK   rY   rP   r—   ry   rv   r}   ru   Úoter‹   rp   r“   Úhook_resultÚrecovery_vals                 r%   rE   z HookRouter._handle_on_tool_error  sõ  è è € ð "€MØ€IØ€KØ€GØ€GØ
‡|‚|Ð(Ñ)Ô)ð BØÔ"€cØÔ'Ð8¨=€mÝ)Ô-¨c¬m¸S¼]ÑKÔK€iØ”OÐ+ t€kØ”Ð#˜t€gØ	Ô	ð B˜cŸlšl¨<Ñ8Ô8ð BÝ˜sÔ0°#´.ÑAÔAˆåÔ$Ø�y +°wÈðñ ô €Eð Ô)ð ­UÔ->ØÔÔ)ñ.ô .€Hõ Ô# HÑ-Ô-€FØ&*Ô&7×&NÒ&NØ�ñ'ô 'ð !ð !ð !ð !ð !ð !Ñ€K�ð
 	ÔðAå�|¥SÑ)Ô)ðAð ×ÒÑ Ô ðAð
 Ô×(Ò(Ý
Ô
,Ø#/×#5Ò#5Ñ#7Ô#7ðñ ô ñô ð ð ð ð Ô× Ò Õ!1Ô!=Ñ!?Ô!?Ñ@Ô@Ð@Ð@Ð@r/   c           
   ƒ   óT  K  — |                      d¦  «        r|j        nt          j        ¦   «         }t	          |j        |j        ¦  «        }t          j        |t          j	        j
        t          j        j        t          j        j        t          j        j        |j        pd|j        pd|j        ¬¦  «        }| j        pt'          j        | j        j        ¦  «        }| j                             ||¦  «        ƒ d{V —† |j                             t          j        ¦   «         ¦  «         dS )zAHandles an incoming LIFECYCLE_HOOK_ON_COMPACTION CallHookRequest.Úon_compaction_argszContext compactionr   )rt   ÚtypeÚstatusÚsourceÚtargetÚcontentr~   rs   N)r   r¡   r   ÚOnCompactionArgsr   r~   rs   r   ÚStepÚStepTypeÚ
COMPACTIONÚ
StepStatusÚDONEÚ
StepSourceÚSYSTEMÚ
StepTargetÚUSERÚsummaryr9   r   rm   r6   rn   Údispatch_compactionrS   rT   rU   )rK   rY   rP   r'   ru   Ústep_objrp   s          r%   rI   z HookRouter._handle_on_compaction@  s  è è € ð �<Š<Ð,Ñ-Ô-ð	1ˆÔÐåÔ.Ñ0Ô0ð 	õ
 ˜4Ô-¨t¬Ñ?Ô?€GÝŒzØÝŒ^Ô&ÝÔÔ$ÝÔÔ&ÝÔÔ$Ø”Ð4Ð 4ØÔ(Ð.¨BØ”?ð	ñ 	ô 	€Hð Ô)ð ­UÔ->ØÔÔ)ñ.ô .€Hð Ô
×
/Ò
/°¸(Ñ
CÔ
CÐCÐCÐCÐCÐCÐCÐCØÔ×ÒÕ/Ô;Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r/   c              ƒ   ó  K  — t          j        |j        ¬¦  «        }	 | j                             |j        ¦  «        }|r |||¦  «        ƒ d{V —† nKt          j        d|j        |j        ¦  «         |j	         
                    t          j        ¦   «         ¦  «         n;# t          $ r.}t          j        d|j        ¦  «         d|›�|_        Y d}~nd}~ww xY w|                      t          j        |¬¦  «        ¦  «        ƒ d{V —† dS )zUHandles an incoming CallHookRequest and sends a CallHookResponse back to the harness.)Ú
request_idNz8Unknown or unhandled hook received -> type: %s, name: %szHook %s failedzHook failed: )Úcall_hook_response)r   ÚCallHookResponserµ   rJ   r)   r¢   ÚloggingÚwarningr   rS   rT   rU   Ú	ExceptionÚ	exceptionr—   r7   Ú
InputEvent)rK   rY   rP   ÚhandlerÚes        r%   ÚhandlezHookRouter.handle\  s=  è è € åÔ,¸¼ÐGÑGÔG€Dð1Ø”×"Ò" 3¤8Ñ,Ô,€gØ	ð CØˆg�c˜4Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð åŒØFØŒHØŒHñ	
ô 	
ð 	
ð
 	Ô×"Ò"Õ#3Ô#?Ñ#AÔ#AÑBÔBÐBøøõ ð 1ð 1ð 1ÝÔÐ(¨#¬(Ñ3Ô3Ð3Ø0¨1Ð0Ð0€dÔÐÐÐÐÐøøøøð1øøøð �*Š*Õ%Ô0ÀDÐIÑIÔIÑ
JÔ
JÐJÐJÐJÐJÐJÐJÐJÐJÐJs   žA?B Â
CÂ($CÃCr5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úhook_runner_libÚ
HookRunnerr   r   r¼   r   r   r+   rL   ÚpropertyrN   ÚCallHookRequestr·   r;   r=   r?   rA   rG   rC   rE   rI   r¿   © r/   r%   r1   r1   M   s˜  € € € € € ØgÐgð <@ð'ð 'à"Ô-ð'ð ØÔ&Ð
'¨°3¸¸T°>Ô)BÐ
Bôð'ð ! # s ¨S Ô1°DÑ8ð'ð 'ð 'ð 'ðR ð& Cð &ð &ð &ñ „8ð&ð?à	Ô	)ð?ð Ô-ð?ð ð	?ð ?ð ?ð ?ð?à	Ô	)ð?ð Ô-ð?ð ð	?ð ?ð ?ð ?ð'àÔ+ð'ð Ô-ð'ð ð	'ð 'ð 'ð 'ð(?àÔ+ð?ð Ô-ð?ð ð	?ð ?ð ?ð ?ð:'àÔ+ð:'ð Ô-ð:'ð ð	:'ð :'ð :'ð :'ðx%?àÔ+ð%?ð Ô-ð%?ð ð	%?ð %?ð %?ð %?ðN*AàÔ+ð*Að Ô-ð*Að ð	*Að *Að *Að *AðX?àÔ+ð?ð Ô-ð?ð ð	?ð ?ð ?ð ?ð8KÐ.Ô>ð KÀ4ð Kð Kð Kð Kð Kð Kr/   r1   )rÃ   r{   r¸   Útypingr   r   r   Úgoogle.antigravity.protor   Úgoogle.antigravityr   Ú<google.antigravity.connections.local.local_connection_configr   r	   r
   r   Úgoogle.antigravity.hooksr   rÄ   r   Ú	UserInputÚContentr&   Údictr+   r.   r1   rÈ   r/   r%   ú<module>rÑ      sg  ðð YÐ Xà €€€Ø €€€Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø $Ð $Ð $Ð $Ð $Ð $Ø UÐ UÐ UÐ UÐ UÐ UØ \Ð \Ð \Ð \Ð \Ð \Ø `Ð `Ð `Ð `Ð `Ð `Ø `Ð `Ð `Ð `Ð `Ð `Ø CÐ CÐ CÐ CÐ CÐ CØ *Ð *Ð *Ð *Ð *Ð *ðÐ/Ô9ð ¸e¼mð ð ð ð ðB
+˜t C¨ Hœ~ð 
+°$ð 
+ð 
+ð 
+ð 
+ðdKð dKð dKð dKð dKñ dKô dKð dKð dKð dKr/   