§
    éŽ’jÅ�  ã                   ó¤  — U d Z ddlZddlZddlZddlmZmZmZmZ ddl	m
Z
 ddl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dlmZ ddlmZ ddlmZ ddlm Z!  ej"        e¦  «        Z#dZ$ e%¦   «         Z&dZ'ej(        j)        ej(        j*        ej(        j+        dœZ,ej-        j.        ej-        j/        ej-        j0        ej-        j1        dœZ2ej3        j*        ej3        j4        ej3        j5        dœZ6ej7        ej8        ej9        ej:        fZ;dede<ee=e         f         fd„Z> G d„ d¦  «        Z?ej@        jA        ejB        ej@        jC        ejD        ej@        jE        ejF        ej@        jG        ejH        ej@        jI        ejJ        ej@        jK        ejL        ej@        jM        ejN        ej@        jO        ejP        iZQeReSef         eTd<   deSdeSddfd„ZUeZVdejW        dejW        fd„ZXejY        jZ        j[        ejZ        j\        ejY        jZ        j]        ejZ        j^        ejY        jZ        j_        ejZ        j`        ejY        jZ        ja        ejZ        jb        ejY        jZ        jc        ejZ        jd        ejY        jZ        je        ejZ        jf        iZgd ejY        jZ        dejZ        fd!„Zh G d"„ d#eji        ¦  «        Zj G d$„ d%¦  «        ZkdS )&z(Event processor for localharness events.é    N)ÚAnyÚCallableÚ	CoroutineÚcast)Újson_format)Úlocalharness_pb2)Útypes)Ú
HookRouter)ÚBUILTIN_TOOL_PROTO_FIELDS)Úmake_step_id)Únormalize_wire_path)ÚWIRE_PATH_ARGUMENT_KEYS)Úhook_runner)Úhooks)Úpolicy)Útool_runnerÚmcp_tool)ÚSOURCE_SYSTEMÚSOURCE_USERÚSOURCE_MODEL)ÚSTATE_ACTIVEÚ
STATE_DONEÚSTATE_WAITING_FOR_USERÚSTATE_ERROR)ÚTARGET_USERÚTARGET_ENVIRONMENTÚTARGET_UNSPECIFIEDÚvalueÚreturnc                 ó
  — t          | t          ¦  «        rd| gfS t          | t          t          f¦  «        rcg }g }| D ]@}t	          |¦  «        \  }}|                     |¦  «         |�|                     |¦  «         ŒA t          | ¦  «        |¦  «        pd|fS t          | t          ¦  «        rRi }g }|  	                    ¦   «         D ]3\  }}t	          |¦  «        \  }}|                     |¦  «         |�|||<   Œ4|pd|fS | g fS )a)  Splits media attachments out of a tool result value.

  Recurses through lists and dicts, pulling out any Image/Document/Audio/Video
  so they can be delivered to the model as supplemental media rather than being
  JSON-serialized (which would just embed opaque base64 in the text result).

  Args:
    value: The tool's return value.

  Returns:
    A (cleaned_value, media) tuple: ``cleaned_value`` is ``value`` with the
    media removed (None if it was entirely media), and ``media`` is the list of
    extracted media objects in encounter order.
  N)
Ú
isinstanceÚ_MEDIA_TYPESÚlistÚtupleÚ_extract_media_from_resultÚextendÚappendÚtypeÚdictÚitems)	r   Úcleaned_listÚ
list_mediaÚitemÚcleaned_itemÚ
item_mediaÚcleaned_dictÚ
dict_mediaÚkeys	            úbC:\Projects\DSCons\.venv\Lib\site-packages\google\antigravity\connections\local\event_processor.pyr%   r%   E   s:  € õ �•|Ñ$Ô$ð Ø�%�ˆ=ÐÝ���e�}Ñ%Ô%ð 9Ø€LØ€JØð *ð *ˆÝ!;¸DÑ!AÔ!AÑ€l�JØ×Ò˜
Ñ#Ô#Ð#Ø	Ð	!Ø×Ò˜LÑ)Ô)Ð)øØ�4�‰;Œ;�|Ñ$Ô$Ð,¨¨jÐ8Ð8Ý�•tÑÔð .Ø€LØ€JØ—[’[‘]”]ð )ð )‰	ˆˆTÝ!;¸DÑ!AÔ!AÑ€l�JØ×Ò˜
Ñ#Ô#Ð#Ø	Ð	!Ø(ˆ�SÑøØÐ ˜D :Ð-Ð-Ø	�ˆÐó    c                   óL   — e Zd ZdZd„ Zdej        j        ddfd„Zde	de
fd„ZdS )	Ú_StepTrackerzITracks internal state transitions of a single step to deduplicate events.c                 ó~   — t           j        j        j        | _        d| _        d| _        t          ¦   «         | _        d S )NF)	r   Ú
StepUpdateÚStateÚSTATE_UNSPECIFIEDÚstateÚpre_step_dispatchedÚpost_step_dispatchedÚsetÚhandled_requests©Úselfs    r3   Ú__init__z_StepTracker.__init__n   s9   € åÔ#Ô)Ô;ð 	„Jð  %€DÔØ %€DÔÝ&)¡e¤e€DÔÐÐr4   Ú	new_stater   Nc                 ó¸   — | j         t          j        j        j        k    r3|t          j        j        j        k    r| j                             ¦   «          || _         d S ©N)r;   r   r8   r9   r   r?   Úclear)rA   rC   s     r3   Úupdate_statez_StepTracker.update_statev   sV   € àŒ
Õ&Ô1Ô7ÔNÒNÐNØÝÔ&Ô,ÔCòDð Dð Ô×!Ò!Ñ#Ô#Ð#Ø€D„J€J€Jr4   Úrequest_typec                 óP   — || j         v rdS | j                              |¦  «         dS )NFT)r?   Úadd)rA   rH   s     r3   Úmark_handledz_StepTracker.mark_handled   s1   € Ø�tÔ,Ð,Ð,ØˆUØÔ×Ò˜lÑ+Ô+Ð+Øˆ4r4   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   r   r8   r9   rG   ÚstrÚboolrK   © r4   r3   r6   r6   k   st   € € € € € ØQÐQð,ð ,ð ,ðÐ$4Ô$?Ô$Eð È$ð ð ð ð ð sð ¨tð ð ð ð ð ð r4   r6   Ú_TOOL_RESULT_MODELSÚ	tool_nameÚ
result_strzlocal_types.ToolOutput | Nonec                 ót  — |r	| t           vrdS 	 t           |                               |¦  «        }t          d|¦  «        S # t          t          t
          j        f$ r\ | t          j        j	        k    rt          j        |¬¦  «        cY S | t          j        j        k    rt          j        |¬¦  «        cY S Y dS w xY w)zNExtracts a structured tool result from canonical JSON string or fallback text.Nzlocal_types.ToolOutput)Úsummary)Úoutput)rS   Úmodel_validate_jsonr   Ú
ValueErrorÚ	TypeErrorÚpydanticÚValidationErrorr	   ÚBuiltinToolsÚ	EDIT_FILEÚlocal_typesÚEditFileResultÚ	FIND_FILEÚFindFileResult)rT   rU   Úress      r3   Ú_extract_tool_resultre   ’   sÒ   € ð 
ð �yÕ(;Ð;Ð;Øˆ4ðÝ
˜iÔ
(×
<Ò
<¸ZÑ
HÔ
H€CÝÐ(¨#Ñ.Ô.Ð.øåÝÝÔð
ð 	ð 	ð 	ð
 •EÔ&Ô0Ò0Ð0ÝÔ'°
Ð;Ñ;Ô;Ð;Ð;Ð;Ø•EÔ&Ô0Ò0Ð0ÝÔ'¨zÐ:Ñ:Ô:Ð:Ð:Ð:Øˆ4ˆ4ð	øøøs   �/? ¿AB7Â*B7Â6B7Úusage_metadatac           
      óŽ  — t          j        |                      d¦  «        r| j        nd|                      d¦  «        r| j        nd|                      d¦  «        r| j        nd|                      d¦  «        r| j        nd|                      d¦  «        r| j        nd| j        rt          j	        | j        ¦  «        nd¬¦  «        S )z*Extracts UsageMetadata from proto message.Úprompt_token_countNÚcached_content_token_countÚcandidates_token_countÚthoughts_token_countÚtotal_token_count)rh   ri   rj   rk   rl   Úservice_tier)
r	   ÚUsageMetadataÚHasFieldrh   ri   rj   rk   rl   rm   ÚServiceTier)rf   s    r3   Úparse_usage_metadatarq   ª   sé   € õ 
Ô	à	×	 Ò	 Ð!5Ñ	6Ô	6ð˜Ô:Ð:àà	×	 Ò	 Ð!=Ñ	>Ô	>ð" Ô!JÐ!Jàà	×	 Ò	 Ð!9Ñ	:Ô	:ð˜^ÔBÐBàà	×	 Ò	 Ð!7Ñ	8Ô	8ð˜>Ô>Ð>àà	×	 Ò	 Ð!4Ñ	5Ô	5ð˜Ô8Ð8àà	Ô	$ð•5Ô$ ^Ô%@ÑAÔAÐAàð%
ñ 
ô 
ð r4   Úreasonc                 óV   — t                                | t          j        j        ¦  «        S )z$Extracts StopReason from proto enum.)Ú_STOP_REASON_MAPÚgetr	   Ú
StopReasonÚUNSPECIFIED)rr   s    r3   Ú_parse_stop_reasonrx   Ú   s    € õ 
×	Ò	˜f¥eÔ&6Ô&BÑ	CÔ	CÐCr4   c                   óR   — e Zd ZU dZdZeed<   edee	e
f         dd fd„¦   «         ZdS )ÚLocalConnectionStepz-Connection-specific step for LocalConnection.r   Ú	http_codeÚ	step_dictr   c                 ó|  ‡— ‰                      dd¦  «        }‰                      dd¦  «        }‰                      dd¦  «        }‰                      dd¦  «        }t          ||¦  «        }g }t          ˆfd„t          j        ¦   «         D ¦   «         di f¦  «        }|\  }	}
t          |
t          ¦  «        r|
ni }d}d}|	s†t          ‰v r}‰t                   }t          |t          ¦  «        r[|                      d	d¦  «        }|                      d
d¦  «        }|}	|}|                      d¦  «        pd}t          j	        |¦  «        }|	s±d‰v r­‰d         }t          |t          ¦  «        r�d|v rŒ|d         }t          |t          ¦  «        ro|                      dd¦  «        }	|                      d¦  «        }|                      d¦  «        pd}	 t          j	        |¦  «        }n# t          j
        $ r i }Y nw xY w|	r’d}t          D ]=}||v r7t          ||         t          ¦  «        rt          ||         ¦  «        }|||<   |}Œ>|                     t          j        |	||pt          ||¦  «        t          ||¦  «        ||¬¦  «        ¦  «         t          j        j        }‰                      d¦  «        �t          j        j        }n´‰                      d¦  «        �t          j        j        }n�|	s,t+          ˆfd„t          j        ¦   «         D ¦   «         ¦  «        rt          j        j        }nM‰                      d¦  «        rt          j        j        }n&‰                      d¦  «        rt          j        j        }‰                      d¦  «        }t          |t          ¦  «        r*t4                                |t          j        j        ¦  «        nt          j        j        }‰                      d¦  «        }t          |t          ¦  «        r*t8                                |t          j        j        ¦  «        nt          j        j        }|t          j        j        k    }|t          j        j        k    }tA          ‰                      d¦  «        ¦  «        }‰                      d¦  «        dk    }|o|o|o|} d}!|t          j        j        k    rn‰                      di ¦  «        }"|"                      d¦  «        }#|#rA	 t          j	        |#¦  «        }!n+# t          j
        $ r tC          j"        dd¬¦  «         Y nw xY w‰                      di ¦  «        }$|$                      d d¦  «        }%|$                      d!d¦  «        }& | d+i d|“d|“d|“d|“d|“d"|“d|“d#|“d$‰                      dd¦  «        “d%‰                      d&d¦  «        “d‰                      dd¦  «        “d'‰                      d'd¦  «        “d(|“d|%“d!|&“d)| “dtF                                ‰                      dd¦  «        t          j$        j        ¦  «        “d*|!“ŽS ),zÏCreates a LocalConnectionStep from a dictionary representation of StepUpdate.

    Args:
      step_dict: Dictionary containing StepUpdate fields.

    Returns:
      A new LocalConnectionStep instance.
    Útrajectory_idÚ Úparent_trajectory_idÚdepthr   Ú
step_indexc              3   óD   •K  — | ]\  }}|‰v ¯	|j         ‰|         fV — Œd S rE   )r   )Ú.0Ú	tool_enumÚproto_fieldr|   s      €r3   ú	<genexpr>z0LocalConnectionStep.from_dict.<locals>.<genexpr>û   sJ   øè è € ð 	
ð 	
á&�	˜;Ø˜iÐ'Ð'ð Œ_˜i¨Ô4Ð5à'Ð'Ð'Ð'ð	
ð 	
r4   NÚserver_namerT   Úarguments_jsonú{}Úcustom_toolÚ	tool_callÚnameÚid)r�   ÚargsrŽ   Ústep_idÚcanonical_pathrˆ   Ú
compactionÚfinishc              3   óF   •K  — | ]}‰                      |¦  «        d uV — Œd S rE   )ru   )r„   Úkr|   s     €r3   r‡   z0LocalConnectionStep.from_dict.<locals>.<genexpr><  sE   øè è € ð !ð !Ø)*ˆ	�Š�aÑÔ Ð$ð!ð !ð !ð !ð !ð !r4   ÚtextÚthinkingÚsourcer;   Útargetr   Úoutput_stringz'Failed to parse structured output JSON.T©Úexc_infoÚerrorÚerror_messager{   r(   ÚstatusÚcontentÚcontent_deltaÚ
text_deltaÚthinking_deltaÚ
tool_callsÚis_complete_responseÚstructured_outputrR   )%ru   Ú_make_step_idÚnextr   r*   r!   r)   Ú_MCP_TOOL_PROTO_FIELDÚjsonÚloadsÚJSONDecodeErrorr   rP   r   r'   r	   ÚToolCallÚStepTypeÚUNKNOWNÚ
COMPACTIONÚFINISHÚanyÚvaluesÚ	TOOL_CALLÚTEXT_RESPONSEÚTHINKINGÚ_SOURCE_MAPÚ
StepSourceÚ_STATUS_MAPÚ
StepStatusÚMODELÚDONErQ   ÚloggingÚwarningÚ_TARGET_MAPÚ
StepTarget)'Úclsr|   Útraj_idÚparent_traj_idÚ	depth_valÚstep_idxÚid_strr¤   Úactive_tool_pairÚactive_tool_nameÚsub_msgÚactive_tool_argsÚactive_server_nameÚactive_tool_idÚmcp_dictrˆ   rT   r‰   Úct_dictÚtc_dictr‘   Úpath_keyÚ
normalizedÚ	step_typeÚ
source_strr˜   Ú
status_strrŸ   Úis_from_modelÚis_doneÚhas_textÚis_target_userr¥   r¦   Úfinish_dictrš   Úerror_fieldÚ	error_msgr{   s'    `                                     r3   Ú	from_dictzLocalConnectionStep.from_dictæ   s  ø€ ð �mŠm˜O¨RÑ0Ô0€GØ—]’]Ð#9¸2Ñ>Ô>€NØ—’˜g qÑ)Ô)€IØ�}Š}˜\¨1Ñ-Ô-€Hå˜7 HÑ-Ô-€Fà€Jõ ð	
ð 	
ð 	
ð 	
å*CÔ*IÑ*KÔ*Kð	
ñ 	
ô 	
ð
 
ˆrˆ
ñô Ðð !1ÑÐ�gÝ",¨WµdÑ";Ô";ÐC�w�wÀÐàÐØ€Nð ð 6Õ 5¸Ð BÐ BØÕ0Ô1€hÝ	�H�dÑ	#Ô	#ð 6Ø—l’l =°"Ñ5Ô5ˆØ—L’L ¨bÑ1Ô1ˆ	Ø$ÐØ(ÐØ!ŸšÐ&6Ñ7Ô7Ð?¸4ˆÝœ: nÑ5Ô5Ðàð " °Ð :Ð :Ø˜-Ô(€gÝ	�G�TÑ	"Ô	"ð 	" {°gÐ'=Ð'=Ø˜+Ô&ˆÝ�g�tÑ$Ô$ð 	"Ø$Ÿ[š[¨°Ñ4Ô4Ð
Ø"Ÿ;š; tÑ,Ô,ˆ.Ø"Ÿ;š;Ð'7Ñ8Ô8Ð@¸Dˆ.ð"Ý#œz¨.Ñ9Ô9ÐÐøÝÔ%ð "ð "ð "Ø!ÐÐÐð"øøøð ð Ø€nå-ð &ð &ˆ(ØÐ'Ð'Ð'­JØ˜XÔ&­ñ-
ô -
Ð'õ +Ð+;¸HÔ+EÑFÔFˆ*Ø'1Ð
˜8Ñ
$Ø%ˆ.øà×ÒÝ
Œ.Ø#Ø#ØÐC¥=°¸(Ñ#CÔ#CÝ# G¨XÑ6Ô6Ø+Ø,ðñ ô ñ	ô 	ð 	õ ”Ô&€IØ‡}‚}�\Ñ"Ô"Ð.Ý”.Ô+€i€iØ	�Š�xÑ	 Ô	 Ð	,Ý”.Ô'€i€iØ	ð *�Sð !ð !ð !ð !Ý.GÔ.NÑ.PÔ.Pð!ñ !ô !ñ ô ð *õ ”.Ô*€i€iØ	�Š�vÑ	Ô	ð *Ý”.Ô.€i€iØ	�Š�zÑ	"Ô	"ð *Ý”.Ô)€ià—’˜xÑ(Ô(€Jõ �j¥#Ñ&Ô&ð	&��Š˜
¥EÔ$4Ô$<Ñ=Ô=Ð=åÔÔ%ð ð —’˜wÑ'Ô'€Jõ �j¥#Ñ&Ô&ð	&��Š˜
¥EÔ$4Ô$<Ñ=Ô=Ð=åÔÔ%ð ð �eÔ.Ô4Ò4€MØ�Ô(Ô-Ò-€GÝ�I—M’M &Ñ)Ô)Ñ*Ô*€HØ—]’] 8Ñ,Ô,°Ò=€NàÐA˜'ÐA hÐA°>ð ð ÐØ•E”NÔ)Ò)Ð)Ø—M’M (¨BÑ/Ô/€kØ!—o’o oÑ6Ô6€mØ	ð ð	Ý"œj¨Ñ7Ô7Ð
Ð
øÝÔ#ð 	ð 	ð 	Ý
Œ/Ø7À$ðñ ô ð ð ð ð	øøøð
 —-’- ¨Ñ,Ô,€KØ—’ °Ñ4Ô4€IØ—’ ¨QÑ/Ô/€Iàˆ3ð ð ð Øˆ6ðà�8ðð �gðð ,˜^ð	ð
 ˆiðð ˆYðð ˆvðð ˆvðð —’˜f bÑ)Ô)Ð)ðð  —m’m L°"Ñ5Ô5Ð5ðð —’˜z¨2Ñ.Ô.Ð.ðð !—}’}Ð%5°rÑ:Ô:Ð:ðð �:ðð ˆiðð �)ðð  2Ð1ð!õ" �ŠØ�MŠM˜( BÑ'Ô'­Ô)9Ô)Añ
ô 
ð 
ð#ð( ,Ð+ð)ð s$   ÇG! Ç!G5Ç4G5Ó4T	 Ô	%T1Ô0T1N)rL   rM   rN   rO   r{   ÚintÚ__annotations__Úclassmethodr)   rP   r   rÜ   rR   r4   r3   rz   rz   á   si   € € € € € € Ø5Ð5à€)ˆSÐÐÑàðY  S¨# X¤ð YÐ3Hð Yð Yð Yñ „;ðYð Yð Yr4   rz   c                   óÐ  — e Zd ZdZddddddœdeej        geeedf         f         de	j
        dz  dej        dz  deeej        f         dz  dej        dz  d	eeej        f         dz  fd
„Zd+d„Zedej        fd„¦   «         Zedeeej        f         fd„¦   «         Zedej        fd„¦   «         Zd+d„Zdej        fd„Zd+d„Zdej        ddfd„Z dej!        ddfd„Z"dej!        de#ej$                 ddfd„Z%dej!        ddfd„Z&dej!        de'ddfd„Z(dej)        ddfd„Z*dej+        deeef         fd„Z,d e#ej+                 ddfd!„Z-d"ej.        ddfd#„Z/d$d%œd&ed'd(d)eddfd*„Z0dS ),ÚLocalHarnessEventProcessorzFProcesses OutputEvent messages from the local harness and routes them.N)r   r   Údynamic_policy_mapÚinitial_usageÚinitial_trajectory_usagesÚsend_input_event_fnr   r   râ   rã   rä   c                óP  — || _         || _        || _        |pi | _        t	          j        ¦   «         | _        t	          j        ¦   «         | _        | j         	                    ¦   «          t	          j        ¦   «         | _
        d | _        i | _        t          ¦   «         | _        |rt          || j         t          ¦  «        nd | _        |�|                     ¦   «         nt%          j        ¦   «         | _        |�|                     ¦   «         ni | _        t$          j        j        | _        d S rE   )Ú_send_input_eventÚ_hook_runnerÚ_tool_runnerÚ_dynamic_policy_mapÚasyncioÚQueueÚ
step_queueÚEventÚis_idler>   Úsession_end_doneÚmain_trajectory_idÚ_step_trackersÚ_background_tasksr
   re   Ú_hook_routerÚ
model_copyr	   rn   Ú_cumulative_usageÚcopyÚ_trajectory_usagesrv   rw   Ú_turn_stop_reason)rA   rå   r   r   râ   rã   rä   s          r3   rB   z#LocalHarnessEventProcessor.__init__†  s  € ð 1€DÔØ#€DÔØ#€DÔàÐ ˜bð 	Ôõ ”m‘o”o€D„OÝ”=‘?”?€D„LØ„L×ÒÑÔÐÝ#œM™OœO€DÔØ"€DÔØ?A€DÔÝ ™UœU€DÔð ð	�
�; Ô 6Õ8LÑMÔMÐMàð 	Ôð Ð$ð 	× Ò Ñ"Ô"Ð"åÔ Ñ"Ô"ð 	Ôð %Ð0ð 	"×&Ò&Ñ(Ô(Ð(àð 	Ôõ
 05Ô/?Ô/K€DÔÐÐr4   r   c                 ó<  — | j                              ¦   «          d | _        t          j        j        | _        | j                             ¦   «         sL	 | j         	                    ¦   «          n# t          j        $ r Y d S w xY w| j                             ¦   «         ¯Jd S d S rE   )rï   rF   rñ   r	   rv   rw   rù   rí   ÚemptyÚ
get_nowaitrë   Ú
QueueEmptyr@   s    r3   Úreset_for_turnz)LocalHarnessEventProcessor.reset_for_turn°  s¯   € Ø„L×ÒÑÔÐØ"€DÔÝ"Ô-Ô9€DÔØŒo×#Ò#Ñ%Ô%ð ðØŒ×"Ò"Ñ$Ô$Ð$Ð$øÝÔð ð ð Øˆˆðøøøð Œo×#Ò#Ñ%Ô%ð ð ð ð ð s   ÁA+ Á+A>Á=A>c                 ó   — | j         S )z6Returns total cumulative token usage from the backend.)rö   r@   s    r3   Úcumulative_usagez+LocalHarnessEventProcessor.cumulative_usageº  ó   € ð Ô!Ð!r4   c                 ó4   — | j                              ¦   «         S )z?Returns per-trajectory cumulative token usage from the backend.)rø   r÷   r@   s    r3   Útrajectory_usagesz,LocalHarnessEventProcessor.trajectory_usages¿  s   € ð Ô"×'Ò'Ñ)Ô)Ð)r4   c                 ó   — | j         S )z0Returns the stop reason of the most recent turn.)rù   r@   s    r3   Ú_last_turn_stop_reasonz1LocalHarnessEventProcessor._last_turn_stop_reasonÄ  r  r4   c              ƒ   ó¾   K  — | j         D ]}|                     ¦   «          Œ| j         rt          j        | j         ddiŽƒ d {V —† | j                              ¦   «          d S )NÚreturn_exceptionsT)ró   Úcancelrë   ÚgatherrF   )rA   Útasks     r3   Úcancel_background_tasksz2LocalHarnessEventProcessor.cancel_background_tasksÉ  sx   è è € ØÔ&ð ð ˆØ
‡k‚k�m„m€m€mØÔð LÝŒN˜DÔ2ÐKÀdÐKÐKÐKÐKÐKÐKÐKÐKÐKØÔ× Ò Ñ"Ô"Ð"Ð"Ð"r4   c                 óŽ   — | j         €J ‚| j        r| j        j        r| j        j        S t          j        | j         j        ¦  «        S rE   )rè   rô   Úcurrent_turn_contextr   ÚTurnContextÚsession_contextr@   s    r3   Ú_get_turn_contextz,LocalHarnessEventProcessor._get_turn_contextÐ  sL   € ØÔÐ(Ð(Ð(ØÔð 4˜TÔ.ÔCð 4ØÔÔ3Ð3ÝÔ˜TÔ.Ô>Ñ?Ô?Ð?r4   c                 ó    — t          j        |¦  «        }| j                             |¦  «         |                     | j        j        ¦  «         d S rE   )rë   Úcreate_taskró   rJ   Úadd_done_callbackÚdiscard)rA   ÚcoroÚts      r3   Ú_run_in_backgroundz-LocalHarnessEventProcessor._run_in_backgroundÖ  sI   € ÝÔ˜DÑ!Ô!€AØÔ×Ò˜qÑ!Ô!Ð!Ø×Ò˜Ô.Ô6Ñ7Ô7Ð7Ð7Ð7r4   Úeventc              ƒ   ó0  K  — |                      d¦  «        r/|                      |                      |j        ¦  «        ¦  «         dS |                      d¦  «        r¨| j        r3|                      | j                             |j        ¦  «        ¦  «         nlt          j        |j        j	        t          j
        ¦   «         ¬¦  «        }|                      |                      t          j        |¬¦  «        ¦  «        ¦  «         dS |                      d¦  «        r| j                             ¦   «          dS |                      d¦  «        �rÂ|j        }|j        |j        f}|| j        vrt'          ¦   «         | j        |<   | j        |         }|                     |j        ¦  «         t-          j        |j        d¬	¦  «        }t0                               |¦  «        }|}|}	| j        rD|j        r=d
}
|j        D ]}|j        | j        j        v rd}
 nŒ|
r|                     dg i¬¦  «        }	| j                              |	¦  «        ƒ d{V —† | j!        €|j        r|j        | _!        |j"        s`| j#        rY|j        t          j$        j%        j&        k    r:d|_"        | j#         '                    |  (                    ¦   «         |¦  «        ƒ d{V —† |j        t          j$        j%        j)        t          j$        j%        j*        fv }|rH|j+        sA| j#        r:d|_+        | j#         ,                    |  (                    ¦   «         |¦  «        ƒ d{V —† |j        t          j$        j%        j-        k    r¤|                      d¦  «        r=| .                    d¦  «        r(|                      |  /                    |¦  «        ¦  «         |                      d¦  «        r=| .                    d¦  «        r(|                      |  0                    |¦  «        ¦  «         dS |                      d¦  «        r~|j1        }|                      d¦  «        rte          |j3        ¦  «        | _4        |j5        D ]?}|j        r6|                      d¦  «        r!te          |j6        ¦  «        | j7        |j        <   Œ@dS |                      d¦  «        �r|j8        }| j!        o|j        | j!        k    }|r1|                      d¦  «        rts          j:        d|j;        ¦  «         dS |j<        rt{          |j<        ¦  «        | _>        |j        t          j?        j%        j@        k    r4| jA         B                    ¦   «         r| jA         C                    ¦   «          �nW|j        t          j?        j%        jD        k    r‹|                      d¦  «        r7| j                              t‹          jF        |j;        ¦  «        ¦  «        ƒ d{V —† | jA                             ¦   «          | j                              tŽ          ¦  «        ƒ d{V —† n­|j        t          j?        j%        jH        k    rŽ|                      d¦  «        r|j;        nd}| j                              t‹          jF        |¦  «        ¦  «        ƒ d{V —† | jA                             ¦   «          | j                              tŽ          ¦  «        ƒ d{V —† dS |                      d¦  «        r/|                      |  I                    |jJ        ¦  «        ¦  «         dS dS )zLProcesses OutputEvents from the harness, routes steps, and dispatches tools.Úpolicy_decision_requestNÚcall_hook_request)Ú
request_idÚempty_result)Úcall_hook_responseÚsession_end_responseÚstep_updateT)Úpreserving_proto_field_nameFr¤   ©ÚupdateÚquestions_requestÚtool_confirmation_requestÚusage_updateÚtotalÚusageÚtrajectory_state_updater�   z)Subagent trajectory failed with error: %szTurn cancelledrŒ   )Kro   r  Ú_handle_policy_decision_requestr  rô   Úhandler  r   ÚCallHookResponser  ÚEmptyResultrç   Ú
InputEventrð   r>   r   r~   r‚   rò   r6   rG   r;   r   ÚMessageToDictrz   rÜ   ré   r¤   r�   Ú
tool_namesrõ   rí   Úputrñ   r<   rè   r8   r9   r:   Údispatch_pre_stepr  r   r   r=   Údispatch_post_stepr   rK   Úhandle_question_requestÚ handle_tool_confirmation_requestr&  rq   r'  rö   Úagentsr(  rø   r)  r½   Úinfor�   Ústop_reasonrx   rù   ÚTrajectoryStateUpdateÚSTATE_RUNNINGrï   Úis_setrF   ÚSTATE_FULLY_IDLEr	   ÚAntigravityExecutionErrorÚIDLE_SENTINELÚSTATE_CANCELLEDÚhandle_tool_callrŒ   )rA   r  Úrespr   Ústep_keyÚtrackerr|   Úparsed_stepÚstep_objÚstep_obj_for_queueÚis_local_custom_toolÚtcÚis_terminalr&  ÚentryÚtsuÚis_subagentÚmsgs                     r3   Úprocess_eventz(LocalHarnessEventProcessor.process_eventÛ  sä  è è € à‡~‚~Ð/Ñ0Ô0ð Ø
×ÒØ
×
.Ò
.¨uÔ/LÑ
MÔ
Mñô ð ð €fà‡~‚~Ð)Ñ*Ô*ð Ø	Ô	ð 
Ø×ÒØÔ×$Ò$ UÔ%<Ñ=Ô=ñ	
ô 	
ð 	
ð 	
õ  Ô0ØÔ.Ô9Ý)Ô5Ñ7Ô7ð
ñ 
ô 
ˆð 	×ÒØ×"Ò"Ý Ô+¸tÐDÑDÔDñô ñ	
ô 	
ð 	
ð
 €fà‡~‚~Ð,Ñ-Ô-ð Ø
Ô×ÒÑ!Ô!Ð!Ø€fà‡~‚~�mÑ$Ô$ñ RØÔ%€kð Ô+¨[Ô-CÐD€hØ	˜Ô,Ð	,Ð	,Ý(4©¬ˆÔ˜HÑ%àÔ# HÔ-€gØ×Ò˜;Ô,Ñ-Ô-Ð-õ Ô+Ø
Ô
¸ðñ ô €iõ (×1Ò1°)Ñ<Ô<€kØ€hà#ÐØ	Ô	ð N˜xÔ2ð NØ$ÐØÔ%ð 	ð 	ˆBØŒW˜Ô)Ô4Ð4Ð4Ø#'Ð ØˆEð 5ð  ð 	Nð  (×2Ò2¸<ÈÐ:LÐ2ÑMÔMÐ
àŒO×ÒÐ 2Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð 
Ô	 Ð	(¨[Ô-FÐ	(Ø"-Ô";ˆÔð Ô)ð	
àÔð	
ð ÔÝÔ(Ô.Ô@òAð Að '+ˆÔ#ØÔ×1Ò1Ø×"Ò"Ñ$Ô$ hñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð  Ô%Ý
Ô
%Ô
+Ô
6Ý
Ô
%Ô
+Ô
7ð*ð €kð 
ð 
˜WÔ9ð 
¸dÔ>Oð 
Ø'+ˆÔ$ØÔ×2Ò2Ø×"Ò"Ñ$Ô$ hñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Ô
ÝÔ(Ô.ÔEòFð Fð ×ÒÐ 3Ñ4Ô4ð 	OØ×!Ò!Ð"5Ñ6Ô6ð OØ×#Ò# D×$@Ò$@ÀÑ$MÔ$MÑNÔNÐNà×ÒÐ ;Ñ<Ô<ð 	Ø×!Ò!Ð"=Ñ>Ô>ð Ø×#Ò#Ø×5Ò5°kÑBÔBñô ð ð €fà‡~‚~�nÑ%Ô%ð 	ØÔ'€lØ	×	Ò	˜wÑ	'Ô	'ð JÝ!5°lÔ6HÑ!IÔ!IˆÔØÔ&ð ð ˆ%ØÔð 	 5§>¢>°'Ñ#:Ô#:ð 	Ý9MØŒkñ:ô :ˆ$Ô
! %Ô"5Ñ
6øð €fà‡~‚~Ð/Ñ0Ô0ñ ,ØÔ)€cà
Ô
!ð ;ØÔ 4Ô#:Ò:ð ð 
ð Ø�<Š<˜Ñ Ô ð 	OÝ
Œ,ÐBÀCÄIÑ
NÔ
NÐ
NØˆà	Œð EÝ!3°C´OÑ!DÔ!DˆÔð Œ)ÝÔ3Ô9ÔGòHð Hð Œ<×ÒÑ Ô ð 	Ø
Œ,×
Ò
Ñ
Ô
Ð
ùð Œ)ÝÔ3Ô9ÔJòKð Kð �<Š<˜Ñ Ô ð 	Ø”×#Ò#ÝÔ-¨c¬iÑ8Ô8ñô ð ð ð ð ð ð ð ð 	Œ×ÒÑÔÐØŒo×!Ò!¥-Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ð Œ)ÝÔ3Ô9ÔIòJð Jð Ÿ<š<¨Ñ0Ô0ÐFˆcŒiˆiÐ6FˆØŒo×!Ò!¥%Ô"AÀ#Ñ"FÔ"FÑGÔGÐGÐGÐGÐGÐGÐGÐGØŒ×ÒÑÔÐØŒo×!Ò!¥-Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø€fà‡~‚~�kÑ"Ô"ð Ø
×Ò˜d×3Ò3°E´OÑDÔDÑEÔEÐEØ€fðð r4   r   c              ƒ   óR  ‡K  — 	 g }g }t          |j        j        ¦  «        D ]‚\  }}|                     d¦  «        rh|j        }d„ t          |j        ¦  «        D ¦   «         }|                     t          j        |j	        |¬¦  «        ¦  «         |                     |¦  «         Œƒd„ |j        j        D ¦   «         }| j
        �r*|�r'|                      ¦   «         }	| j
                             |	t          j        |¬¦  «        ¬¦  «        ƒ d{V —†\  }
}}
|r×t          ||j        ¦  «        D ]Á\  }}t!          j        ¦   «         }|j        rd|_        n•t!          j        ¦   «         }|j        rNg }|j        D ]8}	 |                     t-          |¦  «        d	z
  ¦  «         Œ)# t.          $ r Y Œ5w xY w||j        dd…<   |j        r|j        |_        |j                             |¦  «         |||<   ŒÂn>|s!|j        j        rt9          j        d
¦  «         n| j
        st9          j        d¦  «         |                      ||¦  «        ƒ d{V —† dS # t>          $ rSŠt9          j         d¦  «         ˆfd„|j        j        D ¦   «         }|                      ||¦  «        ƒ d{V —† Y dŠ‹dS dŠ‹ww xY w)z+Handles question requests from the harness.Úmultiple_choicec                 ó`   — g | ]+\  }}t          j        t          |d z   ¦  «        |¬¦  «        ‘Œ,S )é   )rŽ   r–   )r	   ÚAskQuestionOptionrP   )r„   ÚjÚchoices      r3   ú
<listcomp>zFLocalHarnessEventProcessor.handle_question_request.<locals>.<listcomp>“  sF   € ð ð ð á�!�Võ Ô%­¨Q°©U©¬¸&ÐAÑAÔAðð ð r4   )ÚquestionÚoptionsc                 ó8   — g | ]}t          j        d ¬¦  «        ‘ŒS )T)Ú
unanswered)r   ÚUserQuestionAnswer)r„   Ú_s     r3   rV  zFLocalHarnessEventProcessor.handle_question_request.<locals>.<listcomp>œ  s6   € ð ð ð àõ Ô
-¸Ð
>Ñ
>Ô
>ðð ð r4   )Ú	questions)Úturn_contextÚinteraction_specNTrR  zUReceived question_request with questions but none were multiple_choice. Skipping all.zDReceived question_request but no HookRunner is configured. Skipping.z._handle_question_request failed; sending errorc                 óf   •— g | ]-}t          j        t          j        d ‰›�¬¦  «        ¬¦  «        ‘Œ.S )zSDK error processing question: )Úfreeform_response)Úmultiple_choice_answer)r   r[  ÚMultipleChoiceAnswer)r„   r\  Úes     €r3   rV  zFLocalHarnessEventProcessor.handle_question_request.<locals>.<listcomp>Ê  s]   ø€ ð ð ð ð õ Ô
-Ý%5Ô%JØ$KÀaÐ$KÐ$Kð&ñ &ô &ðñ ô ðð ð r4   )!Ú	enumerater$  r]  ro   rP  Úchoicesr'   r	   ÚAskQuestionEntryrW  rè   r  Údispatch_interactionÚAskQuestionInteractionSpecÚzipÚ	responsesr   r[  ÚskippedrZ  rc  Úselected_option_idsrÝ   rZ   Úselected_choice_indicesra  rb  ÚCopyFromr½   r¾   Ú_send_question_responseÚ	ExceptionÚ	exception)rA   r   Úquestions_listÚindices_to_hookÚiÚuqÚmcÚoptsÚanswersÚctxr\  Úquestion_resÚorig_idxÚrÚansÚmc_ansÚindicesÚopt_idrd  s                     @r3   r4  z2LocalHarnessEventProcessor.handle_question_request‰  s›  øè è € ðE?Ø€nØ€oÝ˜[Ô:ÔDÑEÔEð 
$ð 
$‰%ˆ!ˆRØ�;Š;Ð(Ñ)Ô)ð 		$ØÔ!ˆ"ðð å(¨¬Ñ4Ô4ðñ ô ˆ$ð ×
Ò
ÝÔ$¨b¬kÀ4ÐHÑHÔHñô ð ð ×
 Ò
  Ñ
#Ô
#Ð
#øðð àÔ0Ô:ðñ ô €gð
 
Ô	ñ $
˜~ñ $
Ø×$Ò$Ñ&Ô&ˆØ#'Ô#4×#IÒ#IØÝ"Ô=Ø(ðñ ô ð $Jñ $
ô $
ð 
ð 
ð 
ð 
ð 
ð 
Ñˆˆ<˜ð ð 	$Ý  °,Ô2HÑIÔIð $ð $‰kˆh˜Ý"Ô5Ñ7Ô7ˆCØŒyð :Ø#ˆcŒnˆnå'Ô<Ñ>Ô>ˆfØÔ&ð <Ø�ØÔ3ð ð �FðØ—N’N¥3 v¡;¤;°¡?Ñ3Ô3Ð3Ð3øÝ#ð ð ð Ø�Dðøøøà4;�Ô.¨q¨q¨qÑ1ØÔ$ð ?Ø+,Ô+>�Ô(ØÔ(×1Ò1°&Ñ9Ô9Ð9Ø #ˆG�HÑÐøØð 	
 +Ô"?Ô"Ið 	
ÝŒð.ñ	
ô 	
ð 	
ð 	
ð Ô ð 
ÝŒðñ	
ô 	
ð 	
ð
 ×(Ò(¨°gÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øÝð 
?ð 
?ð 
?ÝÔÐHÑIÔIÐIðð ð ð ð Ô0Ô:ðñ ô €gð ×(Ò(¨°gÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øøøøð
?øøøs>   …E1I	 Å7%FÆI	 Æ
F*Æ'I	 Æ)F*Æ*BI	 É	
J&ÉAJ!Ê!J&ry  c              ƒ   óè   K  — t          j        |j        |j        t           j                             |¬¦  «        ¬¦  «        }t          j        |¬¦  «        }|                      |¦  «        ƒ d{V —† dS )z2Helper to format and send a UserQuestionsResponse.)ry  )r~   r‚   Úresponse)Úquestion_responseN)r   ÚUserQuestionsResponser~   r‚   ÚQuestionsResponser.  rç   )rA   r   ry  rA  Úinput_events        r3   rp  z2LocalHarnessEventProcessor._send_question_responseÔ  s‹   è è € õ Ô1Ø!Ô/ØÔ)Ý!Ô7×IÒIØð Jñ 
ô 
ðñ ô €Dõ #Ô-ÀÐEÑEÔE€KØ
×
 Ò
  Ñ
-Ô
-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-r4   c              ƒ   óD   K  — |                       |d¬¦  «        ƒ d{V —† dS )a  Handles tool confirmation requests from the harness.

    Auto-accepts unconditionally. Pre-tool gating is handled by
    FirePreToolHook -> CallHookRequest -> HookRouter._handle_pre_tool.

    Args:
      step_update: The StepUpdate containing the tool confirmation request.
    T)ÚacceptedN)Ú_send_tool_confirmation)rA   r   s     r3   r5  z;LocalHarnessEventProcessor.handle_tool_confirmation_requestä  s9   è è € ð ×
&Ò
& {¸TÐ
&Ñ
BÔ
BÐBÐBÐBÐBÐBÐBÐBÐBÐBr4   r‰  c              ƒ   ó¬   K  — t          j        |j        |j        |¬¦  «        }t          j        |¬¦  «        }|                      |¦  «        ƒ d{V —† dS )z-Helper to format and send a ToolConfirmation.)r~   r‚   r‰  )Útool_confirmationN)r   ÚToolConfirmationr~   r‚   r.  rç   )rA   r   r‰  rA  r‡  s        r3   rŠ  z2LocalHarnessEventProcessor._send_tool_confirmationñ  so   è è € õ Ô,Ø!Ô/ØÔ)Øðñ ô €Dõ
 #Ô-ÀÐEÑEÔE€KØ
×
 Ò
  Ñ
-Ô
-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-r4   rŒ   c           	   ƒ   ó¨  K  — 	 t          j        |j        pd¦  «        }t          j        |j        |j        |¬¦  «        }t          |j        dt          j        j	        t          j
        j        t          j        j        t          j        j        |g¬¦  «        }| j                             |¦  «        ƒ d{V —† | j        r�	 | j                             |g¦  «        ƒ d{V —†}|d         }nF# t(          $ r9}t          j        |j        |j        t-          |¦  «        |¬¦  «        }Y d}~nd}~ww xY w|                      |g¦  «        ƒ d{V —† dS t1          j        d|j        ¦  «         dS # t(          $ r]}t1          j        d	¦  «         |                      t          j        |j        |j        d
|›�¬¦  «        g¦  «        ƒ d{V —† Y d}~dS d}~ww xY w)z-Handles tool execution and hook interception.rŠ   )rŽ   r�   r�   rR  )rŽ   r‚   r(   r˜   r™   rŸ   r¤   Nr   )rŽ   r�   r�   rr  zIReceived tool call %s but no tool runner is configured. Yielding to user.z2_handle_tool_call failed; returning error to modelzInternal SDK error: )rŽ   r�   r�   )rª   r«   r‰   r	   r­   rŽ   r�   rz   r®   r´   r¸   r»   rÀ   ÚENVIRONMENTrº   ÚACTIVErí   r1  ré   Úprocess_tool_callsrq  Ú
ToolResultrP   Ú_send_tool_resultsr½   r¾   rr  )rA   rŒ   r�   rH  Útool_call_stepÚresultsÚresultrd  s           r3   r@  z+LocalHarnessEventProcessor.handle_tool_callý  sS  è è € ð+	ÝŒZ˜	Ô0Ð8°DÑ9Ô9€dåŒ>˜Yœ\°	´ÀTÐJÑJÔJ€bå*ØŒ\ØÝŒ~Ô'ÝÔ!Ô'ÝÔ!Ô-ÝÔ!Ô(Ø�Tðñ ô €nð ŒO×Ò Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/à	Ô	ð 
ð		ØÔ+×>Ò>À¸tÑDÔDÐDÐDÐDÐDÐDÐDˆ'Ø˜1”:ˆ&ˆ&øÝð 	ð 	ð 	ÝÔ#Ø”Ø”>Ý˜‘F”FØð	ñ ô ˆ&ˆ&ˆ&ˆ&ˆ&ˆ&øøøøð	øøøð ×%Ò% v hÑ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/åŒð àŒNñ	
ô 	
ð 	
ð 	
ð 	
øõ
 ð 	ð 	ð 	ÝÔÐLÑMÔMÐMØ×#Ò#Ý
Ô
Ø”Ø”>Ø0¨1Ð0Ð0ðñ ô ð%ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøøð	øøøsI   „B;E* Ã )C* Ã)E* Ã*
D-Ã4/D(Ä#E* Ä(D-Ä-E* ÅE* Å*
GÅ4AGÇGr–  c                 ó¢  — |j         �	d|j         iS |j        }t          |d¦  «        r|                     d¬¦  «        }n$t          |d¦  «        r|                     ¦   «         }	 t
                               |d¬¦  «        }n5# t          $ r( t          j	        dd¬	¦  «         t          |¦  «        }Y nw xY wt          |t          ¦  «        sd
|iS |S )z5Converts a ToolResult to a dictionary representation.Nr�   Ú
model_dumprª   )Úmoder)   zEPydantic serialization failed for tool result, falling back to stringTr›   r–  )r�   r–  Úhasattrr˜  r)   Ú_ANY_ADAPTERÚdump_pythonrq  r½   r¾   rP   r!   )rA   r–  rX   s      r3   Útool_result_to_dictz.LocalHarnessEventProcessor.tool_result_to_dict.  s÷   € à„|ÐØ�v”|Ð$Ð$àŒ]€FÝˆv�|Ñ$Ô$ð Ø× Ò  fÐ Ñ-Ô-€f€fÝ	�˜Ñ	 Ô	 ð Ø�{Š{‰}Œ}€fðÝ×'Ò'¨°VÐ'Ñ<Ô<€f€føÝð ð ð Ý„oðàðñ ô ð õ
 �6‰{Œ{€f€f€fðøøøõ �f�dÑ#Ô#ð  Ø˜ÐÐà€Ms   Á$B Â/B3Â2B3r•  c           	   ƒ   ó0  K  — |D �]}|j         st          d|j        › d�¦  «        ‚|j        �!t	          j        |j         |j        ¬¦  «        }n•t          |j        ¦  «        \  }}|r|€dt          |¦  «        › d�}|r| 	                    d|i¬¦  «        n|}t	          j        |j         t          j        |                      |¦  «        ¦  «        d	„ |D ¦   «         ¬
¦  «        }t	          j        |¬¦  «        }|                      |¦  «        ƒ d{V —† �ŒdS )z1Sends tool execution results back to the harness.zToolResult for 'z`' is missing an id. The LocalConnection protocol requires an id to correlate results with calls.N)rŽ   rž   z	Returned z media attachment(s).r–  r"  c                 óZ   — g | ](}t          j        |j        |j        |j        ¬ ¦  «        ‘Œ)S ))Ú	mime_typeÚdataÚdescription)r   ÚMediar   r¡  r¢  )r„   r-   s     r3   rV  zALocalHarnessEventProcessor._send_tool_results.<locals>.<listcomp>d  sL   € ð  ð  ð  ð õ !Ô&Ø"œnØœØ $Ô 0ðñ ô ð ð  ð  r4   )rŽ   Úresponse_jsonÚsupplemental_media)Útool_response)rŽ   rZ   r�   r�   r   ÚToolResponser%   r–  Úlenrõ   rª   Údumpsr�  r.  rç   )rA   r•  r–  rƒ  Úcleaned_valueÚmediaÚresult_for_jsonr‡  s           r3   r“  z-LocalHarnessEventProcessor._send_tool_resultsH  s}  è è € àð $0ñ $0ˆØŒYð 
Ýð˜vœ{ð ð ð ñ
ô 
ð 	
ð
 
ŒÐ	!Ý#Ô0ØŒyØ œ,ð
ñ 
ô 
ˆˆõ  :¸&¼-ÑHÔHÑˆ�uØð 	H�]Ð*ØG¥c¨%¡j¤jÐGÐGÐGˆ-ð ðˆF×Ò h°Ð%>ÐÑ?Ô?Ð?àð 	õ
 $Ô0ØŒyÝœ* T×%=Ò%=¸oÑ%NÔ%NÑOÔOð ð  ð "ð ñ  ô  ð
ñ 
ô 
ˆõ %Ô/¸hÐGÑGÔG€kØ×"Ò" ;Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ñ/ðI$0ð $0r4   Úrequestc              ƒ   óX  K  — |j         }| j                             |¦  «        }|€Gt          j        d|¦  «         |                      |j        t          j        d|› �¬¦  «        ƒ d{V —† dS 	 t          j
        |j        j        pd¦  «        }n# t          j        $ r i }Y nw xY wt          j        |j        j        ||j        j        pd¬¦  «        }	 |j        �Kt'          j        ||¦  «        ƒ d{V —†}|s.|                      |j        t          j        ¬¦  «        ƒ d{V —† dS |j        t&          j        j        k    rlt'          j        ||¦  «        ƒ d{V —†}|                      |j        |rt          j        nt          j        |rdnd	|j        p|j        › d
�¬¦  «        ƒ d{V —† dS |j        t&          j        j        k    r?|                      |j        t          j        d|j        p|j        › d�¬¦  «        ƒ d{V —† dS |j        t&          j        j        k    r.|                      |j        t          j        ¬¦  «        ƒ d{V —† dS dS # t>          $ rP}t          j         d|¦  «         |                      |j        t          j        d|› �¬¦  «        ƒ d{V —† Y d}~dS d}~ww xY w)z@Evaluates a dynamic policy rule and sends the decision response.NzUnknown policy rule_id: %szUnknown rule_id: )ÚoutcomeÚdeny_reasonrŠ   )r�   r�   rˆ   )r¯  r   zDenied by user (z).zDenied by policy 'z'.z'Policy evaluation failed for rule_id=%szPolicy evaluation error: )!Úrule_idrê   ru   r½   r�   Ú_send_policy_decision_responser  r   ÚPOLICY_EVALUATION_OUTCOME_DENYrª   r«   Ú	tool_argsr‰   r¬   r	   r­   rT   rˆ   ÚwhenÚ
policy_libÚ_evaluate_predicateÚ"POLICY_EVALUATION_OUTCOME_NO_MATCHÚdecisionÚDecisionÚASK_USERÚ_execute_ask_userÚPOLICY_EVALUATION_OUTCOME_ALLOWr�   ÚtoolÚDENYÚAPPROVErq  rr  )	rA   r­  r±  ÚpÚ	args_dictrŒ   Úpredicate_matchedÚallowrd  s	            r3   r*  z:LocalHarnessEventProcessor._handle_policy_decision_requestt  sç  è è € ð Œo€GØÔ ×$Ò$ WÑ-Ô-€Aà€yÝ„mÐ0°'Ñ:Ô:Ð:Ø×/Ò/Ø
Ô
Ý"ÔAØ3¨'Ð3Ð3ð 0ñ ô ð ð ð ð ð ð ð ð
 €fðÝ”*˜WÔ.Ô=ÐEÀÑFÔF€i€iøÝÔð ð ð Ø€i€i€iðøøøõ ”ØÔÔ(ØØÔ%Ô1Ð9°Tðñ ô €Ið(à	
ŒÐ	Ý",Ô"@ÀÀIÑ"NÔ"NÐNÐNÐNÐNÐNÐNÐØ ð 	Ø×3Ò3ØÔ Ý&ÔIð 4ñ ô ð ð ð ð ð ð ð ð ˆ&ð 
Œ•zÔ*Ô3Ò	3Ð	3Ý Ô2°1°iÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆØ×1Ò1ØÔàðAÕ$ÔDÐDå!Ô@àð9˜˜à8 A¤FÐ$4¨a¬fÐ8Ð8Ð8ð 2ñ 
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Œ:�Ô,Ô1Ò1Ð1Ø×1Ò1ØÔÝ$ÔCØA¨Q¬VÐ-=°q´vÐAÐAÐAð 2ñ 
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 Œ:�Ô,Ô4Ò4Ð4Ø×1Ò1ØÔÝ$ÔDð 2ñ 
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 5Ð4øõ
 ð ð ð ÝÔÐAÀ7ÑKÔKÐKØ×/Ò/Ø
Ô
Ý"ÔAØ5°!Ð5Ð5ð 0ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð øøøøðøøøsA   Á. B ÂB#Â"B#ÃAI Ä&BI Æ,AI ÈAI É
J)ÉAJ$Ê$J)r   )r°  r  r¯  z(localharness_pb2.PolicyEvaluationOutcomer°  c             ƒ   ó”   K  — t          j        |||¬¦  «        }|                      t          j        |¬¦  «        ¦  «        ƒ d{V —† dS )z8Sends a PolicyDecisionResponse back to the localharness.)r  r¯  r°  )Úpolicy_decision_responseN)r   ÚPolicyDecisionResponserç   r.  )rA   r  r¯  r°  rA  s        r3   r²  z9LocalHarnessEventProcessor._send_policy_decision_response¹  s{   è è € õ Ô2ØØØðñ ô €Dð
 ×
 Ò
 ÝÔ#¸TÐBÑBÔBñô ð ð ð ð ð ð ð ð ð r4   )r   N)1rL   rM   rN   rO   r   r   r.  r   r   Úh_runnerÚ
HookRunnerÚt_runnerÚ
ToolRunnerr)   rP   r¶  ÚPolicyr	   rn   rB   rþ   Úpropertyr   r  rv   r  r  r   r  r  r  ÚOutputEventrN  r8   r4  r#   r[  rp  r5  rQ   rŠ  r­   r@  r’  r�  r“  ÚPolicyDecisionRequestr*  r²  rR   r4   r3   rá   rá   ƒ  s½  € € € € € ØNÐNð 15Ø04Ø@DØ26ØIMð(Lð (Lð (Lð $ØÔ&Ð
'¨°3¸¸T°>Ô)BÐ
Bôð(Lð Ô&¨Ñ-ð(Lð Ô&¨Ñ-ð(Lð ˜s JÔ$5Ð5Ô6¸Ñ=ð(Lð Ô(¨4Ñ/ð(Lð "& c¨5Ô+>Ð&>Ô!?À$Ñ!Fð(Lð (Lð (Lð (LðTð ð ð ð ð" Ô 3ð "ð "ð "ñ „8ð"ð ð*  c¨5Ô+>Ð&>Ô!?ð *ð *ð *ñ „8ð*ð ð" eÔ&6ð "ð "ð "ñ „8ð"ð#ð #ð #ð #ð@ Ô!2ð @ð @ð @ð @ð8ð 8ð 8ð 8ð
lÐ'7Ô'Cð lÈð lð lð lð lð\I?Ø)Ô4ðI?àðI?ð I?ð I?ð I?ðV.à#Ô.ð.ð Ð$Ô7Ô8ð.ð ð	.ð .ð .ð .ð CØ)Ô4ðCàðCð Cð Cð Cð
.Ø)Ô4ð
.Ø@Dð
.àð
.ð 
.ð 
.ð 
.ð/	Ø'Ô0ð/	àð/	ð /	ð /	ð /	ðb¨Ô(8ð ¸TÀ#ÀsÀ(¼^ð ð ð ð ð4&0¨d°5Ô3CÔ.Dð &0Èð &0ð &0ð &0ð &0ðXCØ%Ô;ðCàðCð Cð Cð CðT ðð ð àðð :ð	ð
 ðð ðð ð ð ð ð r4   rá   )lrO   rë   rª   r½   Útypingr   r   r   r   Úgoogle.protobufr   r\   Úgoogle.antigravity.protor   Úgoogle.antigravityr	   Ú$google.antigravity.connections.localr`   Ú0google.antigravity.connections.local.hook_routerr
   Ú<google.antigravity.connections.local.local_connection_configr   r   r   r   Úgoogle.antigravity.hooksr   rÈ  r   r   r¶  Úgoogle.antigravity.toolsr   rÊ  ÚTypeAdapterr›  r©   Úobjectr>  ÚCLOSE_SENTINELr¸   ÚSYSTEMÚUSERr»   r·   rº   r�  r¼   ÚWAITING_FOR_USERÚERRORr¹   rÀ   r�  rw   r¿   ÚImageÚDocumentÚAudioÚVideor"   r$   r#   r%   r6   r^   ÚRUN_COMMANDÚRunCommandResultÚLIST_DIRÚListDirectoryResultrb   rc   Ú
SEARCH_DIRÚSearchDirectoryResultr_   ra   ÚGENERATE_IMAGEÚGenerateImageResultÚ
SEARCH_WEBÚSearchWebResultÚREAD_URL_CONTENTÚReadUrlContentResultrS   r)   rP   rÞ   re   r§   rn   rq   r9  rv   Ú$STOP_REASON_MAX_MODEL_CALLS_EXCEEDEDÚMAX_MODEL_CALLS_EXCEEDEDÚ#STOP_REASON_MAX_TOOL_CALLS_EXCEEDEDÚMAX_TOOL_CALLS_EXCEEDEDÚ%STOP_REASON_MAX_INPUT_TOKENS_EXCEEDEDÚMAX_INPUT_TOKENS_EXCEEDEDÚ&STOP_REASON_MAX_OUTPUT_TOKENS_EXCEEDEDÚMAX_OUTPUT_TOKENS_EXCEEDEDÚ%STOP_REASON_MAX_TOTAL_TOKENS_EXCEEDEDÚMAX_TOTAL_TOKENS_EXCEEDEDÚSTOP_REASON_QUOTA_EXHAUSTEDÚQUOTA_EXHAUSTEDrt   rx   ÚSteprz   rá   rR   r4   r3   ú<module>rý     sz  ðð /Ð .Ð .à €€€Ø €€€Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø €€€à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø $Ð $Ð $Ð $Ð $Ð $Ø EÐ EÐ EÐ EÐ EÐ EØ GÐ GÐ GÐ GÐ GÐ GØ bÐ bÐ bÐ bÐ bÐ bØ UÐ UÐ UÐ UÐ UÐ UØ \Ð \Ð \Ð \Ð \Ð \Ø `Ð `Ð `Ð `Ð `Ð `Ø <Ð <Ð <Ð <Ð <Ð <Ø *Ð *Ð *Ð *Ð *Ð *Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø <Ð <Ð <Ð <Ð <Ð <à#ˆxÔ# CÑ(Ô(€Ø"Ð à�‘”€Ø€ð Ô%Ô,ØÔ#Ô(ØÔ$Ô*ðð €ð Ô$Ô+ØÔ"Ô'Ø#Ô.Ô?ØÔ#Ô)ð	ð €ð Ô#Ô(ØÔ*Ô6ØÔ*Ô6ðð €ð ”˜Uœ^¨U¬[¸%¼+ÐF€ð# cð #¨e°C¸¸c¼°NÔ.Cð #ð #ð #ð #ðLð ð ð ð ñ ô ð ð8 
ÔÔ" KÔ$@Ø	ÔÔ Ô!@Ø	ÔÔ  +Ô"<Ø	ÔÔ! ;Ô#DØ	ÔÔ  +Ô"<Ø	ÔÔ% {Ô'FØ	ÔÔ! ;Ô#>Ø	ÔÔ'¨Ô)Ið	'Ð �T˜#˜s˜(”^ð 	ð 	ñ 	ðØðØ #ðà$ðð ð ð ð* €ðØ$Ô2ðà
Ôðð ð ð ð6 Ô*Ô5ÔZØÔÔ1àÔ*Ô5ÔYØÔÔ0àÔ*Ô5Ô[ØÔÔ2àÔ*Ô5Ô\ØÔÔ3àÔ*Ô5Ô[ØÔÔ2àÔ*Ô5ÔQØÔÔ(ð#Ð ð,DØÔ2Ô=ðDà
ÔðDð Dð Dð Dð_ð _ð _ð _ð _˜%œ*ñ _ô _ð _ðDE	ð E	ð E	ð E	ð E	ñ E	ô E	ð E	ð E	ð E	r4   