§
    éŽ’j9Ç  ã                   ó.  — d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZmZmZmZmZ ddlmZ ddl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/ e&j0        Z0e&j1        Z1e&j2        Z2dZ3dZ4ej5        j6        e!j7        j6        ej5        j8        e!j7        j8        ej5        j9        e!j7        j9        iZ:dej5        dz  de!j7        j5        fd„Z;ej<        j=        e!j>        ej<        j?        e!j@        iZAdej<        dz  de!j<        fd„ZBdejC        de!jC        fd„ZDdejE        dz  de!jE        fd„ZFdejG        dz  de!jG        dz  fd„ZHdejI        dz  de!jI        dz  fd„ZJdeKejL                 deKe!jM                 fd„ZN	 d6ded ef         d!e/jO        dz  de!jP        fd"„ZQ ejR        d#¦  «        ZSd$eTdeTfd%„ZUd&ejV        deWeTz  dz  fd'„ZX G d(„ d)e$jY        ¦  «        ZZd*ej[        de!j\        j]        fd+„Z^deTfd,„Z_d-Z`d.eaeTeTf         dz  deTfd/„ZbebZcd0ejd        de!jd        fd1„Zed2eTejf        z  dz  de!jf        dz  fd3„Zg G d4„ d5e$jh        ¦  «        ZidS )7z0Local connection for the Google Antigravity SDK.é    N)ÚAnyÚAsyncIteratorÚCallableÚSequenceÚcast)Útypes)Újson_format)Úoverride)Úlocalharness_pb2)Ú
connection)Úevent_processor)Úlocal_connection_config)Úhook_runner)Úpolicy)Úschema_utils©Útool_runneré´   é   ÚmodeÚreturnc                 óP   — | t           v rt           |          S t          j        j        S ©N)Ú_SESSION_CONTINUATION_MODE_MAPr   ÚHarnessConfigÚ%SESSION_CONTINUATION_MODE_UNSPECIFIED)r   s    úcC:\Projects\DSCons\.venv\Lib\site-packages\google\antigravity\connections\local\local_connection.pyÚ"to_proto_session_continuation_moder   G   s'   € ð 
Õ+Ð+Ð+Ý)¨$Ô/Ð/Ý	Ô	'Ô	MÐMó    Úbehaviorc                 óJ   — | �| t           v rt           |          S t          j        S r   )Ú_AGENT_BEHAVIOR_MAPr   ÚAGENT_BEHAVIOR_AUTONOMOUS)r    s    r   Úto_proto_agent_behaviorr$   Y   s)   € ð Ð˜hÕ*=Ð=Ð=Ý˜xÔ(Ð(Ý	Ô	3Ð3r   Ú
model_typec                 óž   — | t           j        j        k    rt          j        S | t           j        j        k    rt          j        S t          j        S r   )r   Ú	ModelTypeÚTEXTr   ÚMODEL_TYPE_TEXTÚIMAGEÚMODEL_TYPE_IMAGEÚMODEL_TYPE_UNSPECIFIED)r%   s    r   Úto_proto_model_typer-   a   s?   € ð •5”?Ô'Ò'Ð'ÝÔ+Ð+Ø•5”?Ô(Ò(Ð(ÝÔ,Ð,Ý	Ô	0Ð0r   Úoptionsc                 ó"  — t          j        ¦   «         }| ry| j        rt          | j        j        ¦  «        |_        | j        rMt          | j        d¦  «        rt          | j        j        ¦  «        |_        nt          | j        ¦  «        |_        |S )zHConverts SDK GeminiModelOptions to localharness protobuf representation.Úvalue)r   ÚGeminiModelOptionsÚthinking_levelÚstrr0   Úservice_tierÚhasattr)r.   Úprotos     r   Úbuild_gemini_options_protor7   k   sŒ   € õ Ô
-Ñ
/Ô
/€%Øð 7ØÔð ?Ý  Ô!7Ô!=Ñ>Ô>€eÔØÔð 7Ý	�Ô% wÑ	/Ô	/ð 7Ý  Ô!5Ô!;Ñ<Ô<ˆÔÐå  Ô!5Ñ6Ô6ˆÔØ	€,r   Úconfigc                 óÀ  — | sdS t          j        ¦   «         }| j        rF| j                             d¬¦  «        }|r)|j                             t          j        di |¤Ž¦  «         | j        rF| j                             d¬¦  «        }|r)|j                             t          j        di |¤Ž¦  «         |                     d¦  «        s|                     d¦  «        sdS |S )z4Builds a RetryConfig proto from a RetryConfig model.NT©Úexclude_noneÚ	api_retryÚmodel_output_retry© )	r   ÚRetryConfigr<   Ú
model_dumpÚCopyFromÚModelAPIRetryConfigr=   ÚModelOutputRetryConfigÚHasField)r8   r6   Úapi_dataÚoutput_datas       r   Úbuild_retry_config_protorG   {   s  € ð 
ð Øˆ4Ý
Ô
&Ñ
(Ô
(€%ØÔð ØÔ×*Ò*¸Ð*Ñ=Ô=€HØð Ø„o×ÒÝ
Ô
.Ð
:Ð
:°Ð
:Ð
:ñô ð ð Ôð ØÔ+×6Ò6ÀDÐ6ÑIÔI€KØð ØÔ×'Ò'Ý
Ô
1Ð
@Ð
@°KÐ
@Ð
@ñô ð ð �.Š.˜Ñ
%Ô
%ðà�nŠnÐ1Ñ2Ô2ðð ˆ4Ø	€,r   c                 ó`   — | sdS |                       d¬¦  «        }|sdS t          j        di |¤ŽS )z6Builds a BudgetConfig proto from a BudgetConfig model.NTr:   r>   )r@   r   ÚBudgetConfig)r8   Údatas     r   Úbuild_budget_config_protorK   –   sK   € ð 
ð Øˆ4Ø	×	Ò	¨Ð	Ñ	-Ô	-€$Ø	ð Øˆ4Ý	Ô	&Ð	.Ð	.¨Ð	.Ð	.Ð.r   Úmodelsc                 ó`  — g }| D �]'}t          j        |j        pdd„ |j        D ¦   «         ¬¦  «        }t	          |j        t          j        ¦  «        r´t          j        |j        j        pd|j        j        pi |j        j	        pd¬¦  «        }|j        j
        rQ|j        j
                             d¬¦  «        r1|j
                             t          |j        j
        ¦  «        ¦  «         |j                             |¦  «         �nt	          |j        t          j        ¦  «        rÍt          j        |j        j        pd|j        j        pi |j        j        pd|j        j        pd|j        j	        pd¬¦  «        }|j        j
        rQ|j        j
                             d¬¦  «        r1|j
                             t          |j        j
        ¦  «        ¦  «         |j                             |¦  «         n$t'          dt)          |j        ¦  «        › �¦  «        ‚|                     |¦  «         �Œ)|S )	z<Builds a list of ModelConfig protos from a ModelConfig list.Ú c                 ó,   — g | ]}t          |¦  «        ‘ŒS r>   )r-   )Ú.0Úts     r   ú
<listcomp>z&build_models_proto.<locals>.<listcomp>ª   s!   € Ð7Ð7Ð7¨!Õ" 1Ñ%Ô%Ð7Ð7Ð7r   )Únamer   )Úbase_urlÚhttp_headersÚapi_keyTr:   )rT   rU   ÚprojectÚlocationrV   zUnrecognized endpoint type: )r   ÚModelConfigrS   r   Ú
isinstanceÚendpointÚGeminiAPIEndpointrT   rU   rV   r.   r@   rA   r7   Úgemini_api_endpointÚVertexEndpointrW   rX   Úvertex_endpointÚ
ValueErrorÚtypeÚappend)rL   ÚprotosÚmr6   Úapi_endpoint_protoÚvertex_endpoint_protos         r   Úbuild_models_protorg   ¢   sJ  € ð €&Øð #ñ #€aÝÔ(ØŒVˆ\�rØ7Ð7¨q¬wÐ7Ñ7Ô7ðñ ô €Eõ �!”*�eÔ5Ñ6Ô6ð JÝ+Ô=Ø”:Ô&Ð,¨"Ø”zÔ.Ð4°"Ø”*Ô$Ð*¨ðñ ô Ðð
 
ŒÔ	ð 
 ¤
Ô 2× =Ò =Øð !>ñ !ô !ð 
ð 	Ô"×+Ò+Ý& q¤zÔ'9Ñ:Ô:ñ	
ô 	
ð 	
ð Ô×(Ò(Ð);Ñ<Ô<Ð<Ñ<Ý	�A”J¥Ô 4Ñ	5Ô	5ð JÝ.Ô=Ø”:Ô&Ð,¨"Ø”zÔ.Ð4°"Ø”*Ô$Ð*¨Ø”:Ô&Ð,¨"Ø”*Ô$Ð*¨ðñ ô Ðð 
ŒÔ	ð 
 ¤
Ô 2× =Ò =Øð !>ñ !ô !ð 
ð 	Ô%×.Ò.Ý& q¤zÔ'9Ñ:Ô:ñ	
ô 	
ð 	
ð Ô×$Ò$Ð%:Ñ;Ô;Ð;Ð;åÐHµd¸1¼:Ñ6FÔ6FÐHÐHÑIÔIÐIØ
‡M‚M�%ÑÔÐÑØ	€-r   Úfn.r   c           
      óè  ‡— t          | t          j        ¦  «        rVt          j        t          | dd¦  «        | j        pdt          j        t          j
        | j        ¦  «        ¦  «        ¬¦  «        S | }t          | dd¦  «        pt          | ¦  «        j        }|�||j        v r|                     |¦  «        }t!          |d¦  «        sŒ|Šˆfd„}||_        t#          |dt          ‰dd¦  «        ¦  «         	 t#          |dt%          j        ‰¦  «        ¦  «         n7# t(          t*          f$ r# t#          |dt          ‰di ¦  «        ¦  «         Y nw xY w|}t,          j                             |d	¬
¦  «        }|j        r|j                             d¬¦  «        }n|j        r|j        }ndi dœ}t          j        |j        |j        pdt          j        t          j
        |¦  «        ¦  «        ¬¦  «        S )aä  Converts a Python callable to a localharness Tool proto.

  Uses google.genai.types.FunctionDeclaration for schema extraction.
  If a ``tool_runner`` is provided, the runner's ``get_public_callable``
  is used to strip injectable parameters (e.g. ``ToolContext``) from
  the schema so the model never sees them.

  Args:
      fn: The Python callable to convert.
      tool_runner: Optional ToolRunner that owns schema-hiding logic.

  Returns:
      A localharness_pb2.Tool proto.
  Ú__name__rN   )rS   ÚdescriptionÚparameters_json_schemaNc                  ó   •—  ‰| i |¤ŽS r   r>   )ÚargsÚkwargsÚorig_fns     €r   Úwrappedz'callable_to_tool_proto.<locals>.wrappedò   s   ø€ ØˆW�dÐ%˜fÐ%Ð%Ð%r   Ú__doc__Ú__signature__Ú__annotations__Ú
GEMINI_API)ÚcallableÚ
api_optionTr:   Úobject)ra   Ú
properties)rZ   Út_runnerÚToolWithSchemar   ÚToolÚgetattrrr   ÚjsonÚdumpsr   Únormalize_schemaÚinput_schemara   rj   ÚtoolsÚget_public_callabler5   ÚsetattrÚinspectÚ	signaturer`   Ú	TypeErrorÚgenai_typesÚFunctionDeclarationÚfrom_callable_with_api_optionÚ
parametersr@   rl   rS   rk   )rh   r   Ú	target_fnÚ	tool_namerq   Údeclr‹   rp   s          @r   Úcallable_to_tool_protor�   Î   s@  ø€ õ$ �•HÔ+Ñ,Ô,ð ÝÔ Ý�R˜ RÑ(Ô(Ø”JÐ$ "Ý#œzÝÔ)¨"¬/Ñ:Ô:ñ 
ô  
ðñ ô ð ð €)Ý�b˜* dÑ+Ô+Ð@­t°B©x¬xÔ/@€)ØÐ ¨kÔ.?Ð!?Ð!?Ø×/Ò/°	Ñ:Ô:€Iå	�˜JÑ	'Ô	'ð Ø€Gð&ð &ð &ð &ð &ð !€GÔÝˆG�Y¥¨°¸DÑ AÔ AÑBÔBÐBðÝˆg�­Ô(9¸'Ñ(BÔ(BÑCÔCÐCÐCøÝ�	Ð"ð ð ð ÝØ
Ð$¥g¨gÐ7HÈ"Ñ&MÔ&Mñô ð ð ð ðøøøð €Iå	Ô	(×	FÒ	FØØð 
Gñ 
ô 
€$ð 
„_ð 6Ø”×+Ò+¸Ð+Ñ>Ô>€J€JØÔ"ð 6ØÔ,€J€Jà"°"Ð5Ð5€JÝ	Ô	ØŒ9ØÔ"Ð( bÝ!œZÝ
Ô
'¨
Ñ
3Ô
3ñô ð
ñ 
ô 
ð s   Ã8#D Ä1EÅEz%[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]Útextc                 óp   — | sdS t                                d| ¦  «        }|                     ¦   «         sdS |S )zHStrips null bytes and replaces dangerous control characters with spaces.rN   ú )Ú_CONTROL_CHAR_REÚsubÚstrip)r�   Ú	sanitizeds     r   Ú_sanitize_promptr—     sA   € à	ð Øˆ2Ý×"Ò" 3¨Ñ-Ô-€)Ø	�ŠÑ	Ô	ð Øˆ3Ø	Ðr   Úec                 óØ   — t          | dd¦  «        }|�t          |d¦  «        r|j        S t          | dd¦  «        }|�t          |d¦  «        r|j        S |€|€dS t          | dd¦  «        S )zMSafely retrieves the WebSocket close code across websockets library versions.ÚrcvdNÚcodeÚsentiî  )r}   r5   r›   )r˜   rš   rœ   s      r   Ú_get_ws_close_coder�   "  s~   € å	��F˜DÑ	!Ô	!€$Ø	Ð�' $¨Ñ/Ô/ÐØŒ9ÐÝ	��F˜DÑ	!Ô	!€$Ø	Ð�' $¨Ñ/Ô/ÐØŒ9ÐØ	€\�d�lØˆ4Ý	��F˜DÑ	!Ô	!Ð!r   c                   óú  — e Zd ZdZ	 	 	 	 	 	 	 	 d0dej        e         dz  dedej	        dz  de
j        dz  deej                 dz  deeef         dz  d	ej        dz  d
eedf         dz  dej        dz  deeej        f         dz  fd„Zedefd„¦   «         Zedeej                 fd„¦   «         Zeedej        dz  fd„¦   «         ¦   «         Zedef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ej         dz  deddfd„Z!de"e#j$                 fd„Z%d1d„Z&d1d„Z'd1d„Z(d1d„Z)d1d„Z*d e+j,        ddfd!„Z-d"eddfd#„Z.ede/j0        e         fd$„¦   «         Z1ede/j2        fd%„¦   «         Z3ededz  fd&„¦   «         Z4e4j5        d'edz  ddfd(„¦   «         Z4d)e+j6        ddfd*„Z7d+ej8        deeef         fd,„Z9d-e+j:        ddfd.„Z;d-e+j:        ddfd/„Z<dS )2ÚLocalConnectionz)Connection to the Go-based local harness.NÚprocessÚwsr   r   Úinitial_historyÚenvÚdebug_configÚdynamic_policy_mapzpolicy.PolicyÚinitial_usageÚinitial_trajectory_usagesc                 óv  — || _         || _        || _        || _        || _        || _        |pg | _        d| _        d| _        d| _	        t          j        | j        ||||	|
¬¦  «        | _        t          j        |                      ¦   «         ¦  «        | _        t%          j        d¬¦  «        | _        d | _        d S )NF)Úsend_input_event_fnr   r   r¥   r¦   r§   éd   )Úmaxlen)Ú_hook_runnerÚ_processÚ_wsÚ_tool_runnerÚ_envÚ_debug_configÚ!_LocalConnection__initial_historyÚ_client_cancelledÚ_is_receivingÚ_disconnectingr   ÚLocalHarnessEventProcessorÚ_send_input_eventÚ
_processorÚasyncioÚcreate_taskÚ_ws_reader_loopÚ_reader_taskÚcollectionsÚdequeÚ_stderr_linesÚ_stderr_thread)Úselfr    r¡   r   r   r¢   r£   r¤   r¥   r¦   r§   s              r   Ú__init__zLocalConnection.__init__2  sÍ   € ð $€DÔØ€D„MØ€D„HØ#€DÔØ€D„IØ%€DÔØ,Ð2°€DÔØ"€DÔØ€DÔð  €DÔå%Ô@Ø Ô2ØØØ-Ø#Ø";ðñ ô €D„Oõ  Ô+¨D×,@Ò,@Ñ,BÔ,BÑCÔC€DÔõ
 2=Ô1BÈ#Ð1NÑ1NÔ1N€DÔØ37€DÔÐÐr   r   c                 ó>   — | j         j                             ¦   «         S )z;Returns True if the connection is idle and ready for input.)r¸   Úis_idleÚis_set©rÁ   s    r   rÄ   zLocalConnection.is_idle^  s   € ð Œ?Ô"×)Ò)Ñ+Ô+Ð+r   c                 ó   — | j         S )zAReturns the pre-existing session steps restored during handshake.)r²   rÆ   s    r   Ú_initial_historyz LocalConnection._initial_historyc  s   € ð Ô!Ð!r   c                 ó   — | j         S )z4Returns the debug configuration for this connection.©r±   rÆ   s    r   r¤   zLocalConnection.debug_configh  ó   € ð ÔÐr   c                 ó   — | j         j        pdS )z3Returns the conversation identifier, if one exists.rN   ©r¸   Úmain_trajectory_idrÆ   s    r   Úconversation_idzLocalConnection.conversation_idn  s   € ð Œ?Ô-Ð3°Ð3r   c                 ó   — | j         j        S )z6Returns total cumulative token usage from the backend.)r¸   Úcumulative_usagerÆ   s    r   rÑ   z LocalConnection.cumulative_usages  s   € ð Œ?Ô+Ð+r   c                 ó   — | j         j        S )z?Returns per-trajectory cumulative token usage from the backend.)r¸   Útrajectory_usagesrÆ   s    r   rÓ   z!LocalConnection.trajectory_usagesx  s   € ð Œ?Ô,Ð,r   c                 ó   — | j         j        S )zAReturns the stop reason of the most recent turn from the backend.)r¸   Ú_last_turn_stop_reasonrÆ   s    r   rÕ   z&LocalConnection._last_turn_stop_reason}  s   € ð Œ?Ô1Ð1r   Úpromptro   c              ‹   óv  K  — d| _         | j                             ¦   «          |€dg}nAt          |t          j        j        ¦  «        rt          |t          t          f¦  «        s|}n|g}t          j
        d„ |D ¦   «         ¬¦  «        }t          j        |¬¦  «        }|                      |¦  «        ƒ d{V —† dS )z‰Sends a prompt to the agent.

    Args:
      prompt: The user prompt or content to send.
      **kwargs: Strategy-specific options.
    FNrN   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r>   )Úto_proto_input_content)rP   Úcs     r   rR   z(LocalConnection.send.<locals>.<listcomp>•  s!   € Ð?Ð?Ð?¨QÕ% aÑ(Ô(Ð?Ð?Ð?r   )Úparts)Ú
user_input)r³   r¸   Úreset_for_turnrZ   r½   Úabcr   r3   Úbytesr   Ú	UserInputÚ
InputEventr·   )rÁ   rÖ   ro   Úcontent_listÚuser_input_pbÚevents         r   ÚsendzLocalConnection.send‚  sÜ   è è € ð #€DÔØ„O×"Ò"Ñ$Ô$Ð$à€~Ø�T€l€lÝ	�F�KœOÔ4Ñ	5Ô	5ð ½jØ••e�ñ?ô ?ð ð €l€là�X€lÝ$Ô.Ø?Ð?°,Ð?Ñ?Ô?ðñ ô €Mõ Ô'°=ÐAÑAÔA€Eà
×
 Ò
  Ñ
'Ô
'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r   c                óÎ  K  — | j         rt          d¦  «        ‚d| _         	 | j        rB| j        j                             ¦   «         r$| j        rt          j        ¦   «         ‚	 d| _         dS 	 | j        rB| j        j                             ¦   «         r$| j        rt          j        ¦   «         ‚	 d| _         dS | j        j         	                    ¦   «         ƒ d{V —†}t          |t          ¦  «        r|‚|t          j        u rŒ”|€$| j        rt          j        ¦   «         ‚	 d| _         dS t          |t          ¦  «        r|‚t          t          j        |¦  «        }|W V — |j        t          j        j        k    re|j        t          j        j        k    rKt-          |dd¦  «        }|dv rt          j        |j        pd¦  «        ‚t3          j        d	||j        ¦  «         �Œp# d| _         w xY w)
z/Receives steps as they complete from the agent.zFConcurrent receive_steps() calls are not supported on this connection.TFNÚ	http_coder   )i�  i‘  i“  zSystem error occurred.zSystem step error (HTTP %s): %s)r´   ÚRuntimeErrorrÄ   r¸   Ú
step_queueÚemptyr³   r   ÚAntigravityCancelledErrorÚgetrZ   Ú	Exceptionr   ÚIDLE_SENTINELr   ÚLocalConnectionStepÚstatusÚ
StepStatusÚERRORÚsourceÚ
StepSourceÚSYSTEMr}   ÚAntigravityConnectionErrorÚerrorÚloggingÚwarning)rÁ   Ústep_objrç   s      r   Úreceive_stepszLocalConnection.receive_steps›  s<  è è € ð Ôð Ýðñô ð ð €DÔð,!Ø	Œð ˜$œ/Ô4×:Ò:Ñ<Ô<ð ØÔ!ð 	2ÝÔ/Ñ1Ô1Ð
1ØðP !€dÔÐÐðM$ØŒ<ð 	˜DœOÔ6×<Ò<Ñ>Ô>ð 	ØÔ#ð 4ÝÔ1Ñ3Ô3Ð3Ø
ðD !€dÔÐÐðA œÔ3×7Ò7Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9ˆå�h¥	Ñ*Ô*ð 	Øˆ.à•Ô4Ð4Ð4Ø
ØÐØÔ#ð 4ÝÔ1Ñ3Ô3Ð3Ø
ð, !€dÔÐÐõ+ �h¥	Ñ*Ô*ð 	Øˆ.å�Ô;¸XÑFÔFˆØˆˆˆˆð ŒO�uÔ/Ô5Ò5Ð5Ø”¥5Ô#3Ô#:Ò:Ð:å˜h¨°QÑ7Ô7ˆ)Ø˜/Ð)Ð)ÝÔ2Ø”Ð:Ð":ñô ð õ ŒOØ1°9¸h¼nñô ð ñE$øðL !€dÔÐ Ð Ð Ð s    ¡?G Á*A G Â4A&G Ä$B7G Ç	G$c              ƒ   ó:  K  — | j         j                             ¦   «         ƒ d{V —† | j         j                             ¦   «         sV	 | j         j                             ¦   «          n# t          j        $ r Y dS w xY w| j         j                             ¦   «         ¯TdS dS )z)Blocks until the connection becomes idle.N)r¸   rÄ   Úwaitré   rê   Ú
get_nowaitr¹   Ú
QueueEmptyrÆ   s    r   Úwait_for_idlezLocalConnection.wait_for_idleÓ  s»   è è € à
Œ/Ô
!×
&Ò
&Ñ
(Ô
(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØŒoÔ(×.Ò.Ñ0Ô0ð ðØŒÔ"×-Ò-Ñ/Ô/Ð/Ð/øÝÔð ð ð Øˆˆðøøøð ŒoÔ(×.Ò.Ñ0Ô0ð ð ð ð ð s   ÁA% Á%A8Á7A8c                 óz   ‡ ‡— ˆ ˆfd„}t          j        |dd¬¦  «        }|                     ¦   «          |‰ _        dS )z™Starts a background daemon thread that drains the harness stderr.

    Args:
      stderr_stream: The binary stderr stream from the harness process.
    c                  óæ   •— 	 ‰D ]Z} |                       dd¬¦  «                             ¦   «         }‰j                             |¦  «         t	          j        d|¦  «         Œ[d S # t          $ r Y d S w xY w)Núutf-8Úreplace)Úerrorszharness stderr: %s)ÚdecodeÚrstripr¿   rb   rø   Úinfor`   )Úraw_lineÚlinerÁ   Ústderr_streams     €€r   Ú_drainz4LocalConnection._start_stderr_reader.<locals>._drainã  s“   ø€ ðØ%ð 	3ð 	3ˆHØ—’ °�Ñ;Ô;×BÒBÑDÔDˆ$Ø
Ô
×
#Ò
# DÑ
)Ô
)Ð
)Ý
Œ,Ð+¨TÑ
2Ô
2Ð
2Ð
2ð	3ð 	3øõ ð ð ð Øˆˆðøøøs   ƒAA" Á"
A0Á/A0Tzharness-stderr)ÚtargetÚdaemonrS   N)Ú	threadingÚThreadÚstartrÀ   )rÁ   r  r  rQ   s   ``  r   Ú_start_stderr_readerz$LocalConnection._start_stderr_readerÜ  sW   øø€ ðð ð ð ð ð õ 	Ô ¨tÐ:JÐKÑKÔK€AØ‡G‚G�I„I€IØ€DÔÐÐr   c              ƒ   ó`  K  — d| _         d}| j        ry| j        j        rm	 |                      t	          j        d¬¦  «        ¦  «        ƒ d{V —† | j        j                             ¦   «         ƒ d{V —† n# t          $ r}|}Y d}~nd}~ww xY w	 | j         
                    ¦   «         ƒ d{V —† | j                             ¦   «          	 | j        ƒ d{V —† n# t          j        $ r Y nw xY w	 t          j        | j                             ¦   «         d¬¦  «        ƒ d{V —† n# t          j        $ r Y nw xY w| j        r*| j        j        r| j        j                             ¦   «          | j        r¶	 | j                             t*          ¬¦  «         n”# t,          j        $ r‚ | j                             ¦   «          	 | j                             d¬¦  «         nI# t,          j        $ r7 | j                             ¦   «          | j                             d¬¦  «         Y nw xY wY nw xY w|�|‚dS # |�|‚w xY w)z5Tears down the harness connection in a careful order.TN)Úsession_end_requestg      à?)Útimeouté   )rµ   r¬   Úon_session_end_hooksr·   r   rá   r¸   Úsession_end_donerý   rí   Úcancel_background_tasksr¼   Úcancelr¹   ÚCancelledErrorÚwait_forr®   ÚcloseÚTimeoutErrorr­   ÚstdinÚ_PROCESS_WAIT_TIMEOUT_SECONDSÚ
subprocessÚTimeoutExpiredÚ	terminateÚkill)rÁ   Ú
hook_errorr˜   s      r   Ú
disconnectzLocalConnection.disconnectð  së  è è € à€DÔØ€Jð Ôð ˜TÔ.ÔCð ðØ×$Ò$ÝÔ'¸DÐAÑAÔAñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ŒoÔ.×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øÝð ð ð Øˆ
ˆ
ˆ
ˆ
ˆ
ˆ
øøøøðøøøð!àŒO×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5à
Ô×ÒÑ Ô Ð ðØÔÐÐÐÐÐÐÐÐøÝÔ#ð ð ð ØˆðøøøðÝÔ˜tœxŸ~š~Ñ/Ô/¸Ð=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=øÝÔ!ð ð ð Øˆðøøøð 
Œð $˜4œ=Ô.ð $ØŒÔ×!Ò!Ñ#Ô#Ð#ð 
Œð 	*ð	*Ø
Œ-×
Ò
Õ%BÐ
Ñ
CÔ
CÐ
CÐ
CøÝÔ(ð 	*ð 	*ð 	*Ø
Œ-×
!Ò
!Ñ
#Ô
#Ð
#ð*ØŒM×Ò qÐÑ)Ô)Ð)Ð)øÝÔ*ð *ð *ð *ØŒM×ÒÑ Ô Ð ØŒM×Ò qÐÑ)Ô)Ð)Ð)Ð)ð*øøøøøð		*øøøð 
Ð	ØÐð 
 Ð	øˆÐ	ØÐÐÐÐÐsµ    AA3 Á3
B	Á=BÂB	Â8H' ÃC ÃH' ÃC&Ã#H' Ã%C&Ã&H' Ã*3D ÄH' ÄD0Ä-H' Ä/D0Ä0;H' Å, F ÆH' Æ(HÆ6GÇHÇAHÈHÈHÈHÈH' ÈHÈH' È'H-c              ƒ   óx   K  — d| _         t          j        d¬¦  «        }|                      |¦  «        ƒ d{V —† dS )zCancels the current turn.T)Úhalt_requestN)r³   r   rá   r·   ©rÁ   rä   s     r   r  zLocalConnection.cancel"  sM   è è € à!€DÔÝÔ'°TÐ:Ñ:Ô:€EØ
×
 Ò
  Ñ
'Ô
'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r   c              ƒ   óà  K  — 	 | j         2 3 d{V —†}t          j        d|¦  «         t          j        ¦   «         }t          j        ||¦  «         | j                             |¦  «        ƒ d{V —† Œe6 �n# t          j
        $ r¥}t          |¦  «        }| j        rt          j        d|¦  «         nod                     | j        ¦  «        pd}d|› d|› �}t          j        |¦  «         | j        j                             t%          j        |¦  «        ¦  «        ƒ d{V —† Y d}~nid}~wt(          $ rY}t          j        d|¦  «         | j        j                             t%          j        d	|› �¦  «        ¦  «        ƒ d{V —† Y d}~nd}~ww xY w| j        j                             t,          j        ¦  «        ƒ d{V —† dS # | j        j                             t,          j        ¦  «        ƒ d{V —† w xY w)
zAReads OutputEvents from the WebSocket and delegates to processor.NzRAW WS MSG: %sz,WebSocket closed (code %s); normal shutdown.ú
z(no stderr output)z3Harness process exited unexpectedly (WS close code z).
Harness stderr:
zError in reader loop: %szError in reader loop: )r®   rø   r  r   ÚOutputEventr	   ÚParser¸   Úprocess_eventÚ
websocketsÚConnectionClosedr�   rµ   Újoinr¿   r÷   ré   Úputr   rö   rí   Ú	exceptionr   ÚCLOSE_SENTINEL)rÁ   Úraw_msgrä   r˜   Ú
close_codeÚstderr_tailÚ	error_msgs          r   r»   zLocalConnection._ws_reader_loop(  sŽ  è è € ðKØœ8ð 3ð 3ð 3ð 3ð 3ð 3ð 3�ÝŒÐ% wÑ/Ô/Ð/Ý Ô,Ñ.Ô.ˆÝÔ˜' 5Ñ)Ô)Ð)ØŒo×+Ò+¨EÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð	 $™8øõ
 Ô&ð 
ð 
ð 
Ý% aÑ(Ô(€jØ	Ô	ð 
åŒÐCÀZÑPÔPÐPÐPð —i’i Ô 2Ñ3Ô3ÐKÐ7Kˆð0À*ð 0ð 0Ø"-ð0ð 0ð 	õ 	Œ�iÑ Ô Ð ØŒoÔ(×,Ò,ÝÔ,¨YÑ7Ô7ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøøøøøøõ ð ð ð ÝÔÐ2°AÑ6Ô6Ð6ØŒOÔ&×*Ò*Ý
Ô
*Ð+GÀAÐ+GÐ+GÑ
HÔ
Hñô ð ð ð ð ð ð ð ð ð ð ð ð øøøøðøøøð ŒOÔ&×*Ò*­?Ô+IÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJøˆDŒOÔ&×*Ò*­?Ô+IÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJøøøsN   „A3 ‹A0‘A A3 Á1F< Á3FÂBD"ÄF< Ä"FÄ/AFÅ>F< ÆFÆF< Æ<1G-rä   c              ƒ   ón   K  — | j                              t          j        |¦  «        ¦  «        ƒ d{V —† dS )z0Helper to send an InputEvent over the WebSocket.N)r®   rå   r	   ÚMessageToJsonr)  s     r   r·   z!LocalConnection._send_input_eventI  s=   è è € à
Œ(�-Š-�Ô1°%Ñ8Ô8Ñ
9Ô
9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r   Úcontentc              ƒ   ój   K  — t          j        |¬¦  «        }|                      |¦  «        ƒ d{V —† dS )z%Sends a trigger message to the agent.)Úautomated_triggerN)r   rá   r·   )rÁ   r;  rä   s      r   Úsend_trigger_notificationz)LocalConnection.send_trigger_notificationM  sE   è è € åÔ'¸'ÐBÑBÔB€EØ
×
 Ò
  Ñ
'Ô
'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r   c                 ó   — | j         j        S r   )r¸   ré   rÆ   s    r   Ú_step_queuezLocalConnection._step_queueS  s   € àŒ?Ô%Ð%r   c                 ó   — | j         j        S r   )r¸   rÄ   rÆ   s    r   Ú_is_idlezLocalConnection._is_idleW  s   € àŒ?Ô"Ð"r   c                 ó   — | j         j        S r   rÍ   rÆ   s    r   Ú_main_trajectory_idz#LocalConnection._main_trajectory_id[  s   € àŒ?Ô-Ð-r   Úvalc                 ó   — || j         _        d S r   rÍ   )rÁ   rE  s     r   rD  z#LocalConnection._main_trajectory_id_  s   € à),€D„OÔ&Ð&Ð&r   Ú	tool_callc              ƒ   óJ   K  — | j                              |¦  «        ƒ d{V —† dS )z-Handles tool execution and hook interception.N)r¸   Úhandle_tool_call)rÁ   rG  s     r   Ú_handle_tool_callz!LocalConnection._handle_tool_callc  s6   è è € ð Œ/×
*Ò
*¨9Ñ
5Ô
5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5r   Úresultc                 ó6   — | j                              |¦  «        S )z5Converts a ToolResult to a dictionary representation.)r¸   Útool_result_to_dict)rÁ   rK  s     r   Ú_tool_result_to_dictz$LocalConnection._tool_result_to_dicti  s   € àŒ?×.Ò.¨vÑ6Ô6Ð6r   Ústep_updatec              ƒ   óJ   K  — | j                              |¦  «        ƒ d{V —† dS )z+Handles question requests from the harness.N)r¸   Úhandle_question_request©rÁ   rO  s     r   Ú_handle_question_requestz(LocalConnection._handle_question_requestm  s6   è è € ð Œ/×
1Ò
1°+Ñ
>Ô
>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>r   c              ƒ   óJ   K  — | j                              |¦  «        ƒ d{V —† dS )z4Handles tool confirmation requests from the harness.N)r¸   Ú handle_tool_confirmation_requestrR  s     r   Ú!_handle_tool_confirmation_requestz1LocalConnection._handle_tool_confirmation_requests  s6   è è € ð Œ/×
:Ò
:¸;Ñ
GÔ
GÐGÐGÐGÐGÐGÐGÐGÐGÐGr   )NNNNNNNN©r   N)=rj   Ú
__module__Ú__qualname__rr   r!  ÚPopenrß   r   rz   Ú
ToolRunnerÚh_runnerÚ
HookRunnerr   r   ÚStepÚdictr3   r   ÚDebugConfigÚUsageMetadatarÂ   ÚpropertyÚboolrÄ   rÈ   r
   r¤   rÏ   rÑ   rÓ   Ú
StopReasonrÕ   ÚContentrå   r   r   rï   rû   r   r  r&  r  r»   r   rá   r·   r>  r¹   ÚQueuer@  ÚEventrB  rD  ÚsetterÚToolCallrJ  Ú
ToolResultrN  Ú
StepUpdaterS  rV  r>   r   r   rŸ   rŸ   /  s½  € € € € € Ø1Ð1ð 15Ø04Ø59Ø#'Ø48Ø>BØ26ØIMð*8ð *8àÔ Ô&¨Ñ-ð*8ð ð*8ð Ô&¨Ñ-ð	*8ð
 Ô&¨Ñ-ð*8ð   ¤
Ô+¨dÑ2ð*8ð ��S�Œ>˜DÑ ð*8ð Ô*¨TÑ1ð*8ð ˜s OÐ3Ô4°tÑ;ð*8ð Ô(¨4Ñ/ð*8ð "& c¨5Ô+>Ð&>Ô!?À$Ñ!Fð*8ð *8ð *8ð *8ðX ð,�tð ,ð ,ð ,ñ „8ð,ð ð" ¨¬Ô 4ð "ð "ð "ñ „8ð"ð Øð˜JÔ2°TÑ9ð ð ð ñ „8ñ „8ðð ð4˜sð 4ð 4ð 4ñ „8ð4ð ð, Ô 3ð ,ð ,ð ,ñ „8ð,ð ð-  c¨5Ô+>Ð&>Ô!?ð -ð -ð -ñ „8ð-ð ð2 eÔ&6ð 2ð 2ð 2ñ „8ð2ð(˜uœ}¨tÑ3ð (¸sð (Àtð (ð (ð (ð (ð26!à�_Ô8Ô9ð6!ð 6!ð 6!ð 6!ðpð ð ð ðð ð ð ð(0ð 0ð 0ð 0ðd(ð (ð (ð (ðKð Kð Kð KðB:Ð+;Ô+Fð :È4ð :ð :ð :ð :ð(°Sð (¸Tð (ð (ð (ð (ð ð&˜7œ=¨Ô-ð &ð &ð &ñ „8ð&ð ð#˜œð #ð #ð #ñ „8ð#ð ð. 3¨¡:ð .ð .ð .ñ „8ð.ð Ôð- S¨4¡Zð -°Dð -ð -ð -ñ Ôð-ð6Ø'Ô0ð6àð6ð 6ð 6ð 6ð7¨Ô)9ð 7¸dÀ3ÈÀ8¼nð 7ð 7ð 7ð 7ð?Ø)Ô4ð?àð?ð ?ð ?ð ?ðHØ)Ô4ðHàðHð Hð Hð Hð Hð Hr   rŸ   r;  c                 ó   — t          | t          ¦  «        r-t          j                             t          | ¦  «        ¬¦  «        S t          | t          j        ¦  «        rEt          j                             | j        ¬¦  «        }t          j                             |¬¦  «        S t          | t          j	        t          j
        t          j        t          j        f¦  «        }|rQt          j                             | j        | j        | j        ¬¦  «        }t          j                             |¬¦  «        S t#          dt%          | ¦  «        › �¦  «        ‚)z3Converts dynamic prompt fragments into proto Parts.©r�   ©rS   )Úslash_command)Ú	mime_typerJ   rk   )Úmediaz!Unsupported prompt content type: )rZ   r3   r   rà   ÚPartr—   r   ÚSlashCommandrS   ÚImageÚDocumentÚAudioÚVideoÚMediarp  rJ   rk   r‡   ra   )r;  Úsc_pbÚis_semantic_mediaÚmedia_pbs       r   rÙ   rÙ   z  s%  € õ ��ÑÔð KÝÔ%×*Ò*Õ0@ÀÑ0IÔ0IÐ*ÑJÔJÐJå��Ô+Ñ,Ô,ð @ÝÔ&×3Ò3ØŒ\ð 4ñ ô €Eõ Ô%×*Ò*¸Ð*Ñ?Ô?Ð?å Ø•”�Uœ^­U¬[½%¼+ÐFñô Ðð ð ;ÝÔ)×/Ò/ØÔ#ØŒ\ØÔ'ð 0ñ ô €Hõ
 Ô%×*Ò*°Ð*Ñ:Ô:Ð:åÐEµd¸7±m´mÐEÐEÑFÔFÐFr   c                  óx   — 	 t           j                             d¦  «        S # t           j        j        $ r Y dS w xY w)z2Returns the version of the Google Antigravity SDK.úgoogle-antigravityz	0.0.0-dev)Ú	importlibÚmetadataÚversionÚPackageNotFoundErrorr>   r   r   Ú_get_sdk_versionr‚  •  sG   € ðÝÔ×%Ò%Ð&:Ñ;Ô;Ð;øÝ	Ô	Ô	0ð ð ð àˆ;ˆ;ðøøøs   ‚! ¡9¸9ÚANTIGRAVITY_HARNESS_PATHr£   c                 óì  — | rt           | v r| t                    S t          j                             t           ¦  «        x}r|S 	 t          j                             d¦  «        }|j        r£|j        D ]›}t          |¦  «         	                    dd¦  «        }| 
                    d¦  «        rat          j                             t          |                     ¦   «         ¦  «        ¦  «        }t          j                             |¦  «        r|c S Œœn'# t          j        j        t           t"          f$ r Y nw xY w	 t$          j        dk    rdnd}t          t          j                             d¦  «                             |¦  «        ¦  «        }t          j                             |¦  «        r|S n# t,          t"          t.          f$ r Y nw xY wt1          j        d	¦  «        x}r|S t5          d
t           › d�¦  «        ‚)z-Returns the default localharness binary path.r}  ú\ú/)z#google/antigravity/bin/localharnessz'google/antigravity/bin/localharness.exeÚwin32zbin/localharness.exezbin/localharnesszgoogle.antigravityÚlocalharnessz[Could not find default localharness binary. Please specify binary_path explicitly, set the zÌ environment variable, or ensure it is in your PATH. Note: If you are running from the root of the repository, the local source tree might shadow your pip-installed package and prevent resource discovery.)Ú_HARNESS_PATH_ENV_VARÚosÚenvironrì   r~  r  ÚdistributionÚfilesr3   r  ÚendswithÚpathÚabspathÚlocateÚexistsr�  r`   ÚAttributeErrorÚsysÚplatformÚ	resourcesÚjoinpathÚImportErrorÚKeyErrorÚshutilÚwhichrè   )r£   Úharness_pathÚdistÚfÚnormalized_pathÚbinary_pathÚsuffixr�  s           r   Ú!_get_default_binary_path_externalr¢  ¡  s  € ð 	ð &Õ" cÐ)Ð)ØÕ$Ô%Ð%õ ”Z—^’^Õ$9Ñ:Ô:Ð:€\ð ØÐð	ÝÔ×*Ò*Ð+?Ñ@Ô@€DØ„zð 	ØŒzð ð ˆ!Ý˜a™&œ&Ÿ.š.¨¨sÑ3Ô3ˆØ×#Ò#ð %
ñ ô ð 	õ œŸš­¨A¯HªH©J¬J©¬Ñ8Ô8ˆ+ÝŒW�^Š^˜KÑ(Ô(ð ØÐÐÐøøøÝ
Ô
Ô
1µ:½~Ð	Nð 	ð 	ð 	Ø€Dð	øøøð	õ Œ<˜7Ò"Ð"ð 	Ðàð õ
 ÝÔ×!Ò!Ð"6Ñ7Ô7×@Ò@ÀÑHÔHñô €Kõ 
„w‡~‚~�kÑ"Ô"ð ØÐðøå
•~¥xÐ	0ð 	ð 	ð 	Ø€Dð	øøøõ Œ\˜.Ñ)Ô)Ð)€Tð Ø€Kåðå	ðð ð ñ	ô 	ð s,   ÁCD Ä
D Ä!D0Ä/D0Ä4A3F) Æ)GÇGÚ
server_cfgc                 ó   — t          | t          j        ¦  «        rYt          j        | j        | j        pg | j        pg | j        pdt          j	        | j
        | j        | j        pi ¬¦  «        ¬¦  «        S t          | t          j        ¦  «        rSt          j        | j        | j        pg | j        pg | j        pdt          j        | j        | j        pi ¬¦  «        ¬¦  «        S t#          dt%          | ¦  «        › �¦  «        ‚)z7Converts an McpServerConfig to a McpServerConfig proto.r   )Úcommandrn   r£   )rS   Úenabled_toolsÚdisabled_toolsÚtimeout_secondsÚstdio)ÚurlÚheaders)rS   r¦  r§  r¨  ÚhttpzUnknown McpServerConfig type: )rZ   r   ÚMcpStdioServerr   ÚMcpServerConfigrS   r¦  r§  r¨  ÚMcpStdioTransportr¥  rn   r£   ÚMcpStreamableHttpServerÚMcpHttpTransportrª  r«  r`   ra   )r£  s    r   Ú_to_mcp_server_protor²  ß  s   € õ
 �
�EÔ0Ñ1Ô1ð ÝÔ+ØŒ_Ø Ô.Ð4°"Ø!Ô0Ð6°BØ"Ô2Ð7°aÝÔ0ØÔ&Ø”Ø”Ð$ "ð
ñ 
ô 
ð
ñ 
ô 
ð 
õ �*�eÔ;Ñ<Ô<ð 
ÝÔ+ØŒ_Ø Ô.Ð4°"Ø!Ô0Ð6°BØ"Ô2Ð7°aÝÔ.Ø”ØÔ&Ð,¨"ð
ñ 
ô 
ð	ñ 	ô 	ð 	õ 	ÐFµD¸Ñ4DÔ4DÐFÐFÑGÔGÐGr   Úinstructionsc                 óœ  — | sdS t          | t          ¦  «        r)t          j        t          j        | ¬¦  «        g¬¦  «        } t          j        ¦   «         }t          | t          j        ¦  «        rR|j         	                    t          j        t
          j         
                    | j        ¬¦  «        g¬¦  «        ¦  «         nŠt          | t          j        ¦  «        rpt          j        ¦   «         }| j        r| j        |_        | j        D ](}|j                             |j        |j        ¬¦  «         Œ)|j         	                    |¦  «         |S )aÿ  Converts string or SystemInstructions model to localharness SystemInstructions proto.

  String instructions and TemplatedSystemInstructions map to
  AppendedSystemInstructions (appending to default agent system instructions).
  CustomSystemInstructions map to CustomSystemInstructions (replacing default
  system instructions).

  Args:
    instructions: System instructions as string or SystemInstructions object.

  Returns:
    The localharness SystemInstructions proto, or None if instructions is empty.
  N©r;  ©Úsectionsrm  )Úpart)Útitler;  )rZ   r3   r   ÚTemplatedSystemInstructionsÚSystemInstructionSectionr   ÚSystemInstructionsÚCustomSystemInstructionsÚcustomrA   rr  r�   ÚAppendedSystemInstructionsÚidentityÚcustom_identityr·  Úappended_sectionsÚaddr¹  r;  Úappended)r³  r6   rÄ  Úsecs       r   Úto_system_instructions_protorÆ  þ  sZ  € ð  
ð Øˆ4Ý��cÑ"Ô"ð ÝÔ4ÝÔ0¸ÐFÑFÔFÐGðñ ô €Lõ Ô
-Ñ
/Ô
/€%Ý��eÔ<Ñ=Ô=ð &Ø	„L×ÒÝÔ1å Ô9×>Ò>Ø%Ô*ð ?ñ ô ðð	
ñ 	
ô 	
ñô ð ð õ �,¥Ô AÑBÔBð &ÝÔ:Ñ<Ô<€HØÔð 7Ø!-Ô!6€hÔØÔ$ð Kð KˆØÔ ×$Ò$¨3¬9¸c¼kÐ$ÑJÔJÐJÐJØ	„N×Ò˜HÑ%Ô%Ð%Ø	€,r   c            *       óX  — e Zd ZU dZeej                 ed<   ej        dz  ed<   e	dz  ed<   ddddddddddddddddddddœde
j        dz  dej        dz  d	eej                 dz  d
ee         dz  deej        z  dz  dej        dz  dedz  dej        dz  dedz  dee         dz  dedz  deej                 dz  deeef         dz  deej                 dz  dej        dz  dej        dz  dej        dz  deej                 dz  deedef         ez           dz  f&d„Z	 d2dej        ej        z  dz  dede ej!                 fd „Z"d!eej        z  dz  de#j        dz  fd"„Z$d!eej        z  dz  de#j        dz  fd#„Z%	 d2dej        ej        z  dz  dede#j&        fd$„Z'd%eee#j(        f         dee#j)                 fd&„Z*de#j+        fd'„Z,dee         fd(„Z-e.e/dej        dz  fd)„¦   «         ¦   «         Z0dej1        fd*„Z2d3d+„Z3d,e4d-ed.e5j6        e7         de8eef         fd/„Z9d3d0„Z:d3d1„Z;dS )4ÚLocalConnectionStrategyz,Strategy for establishing a LocalConnection.Ú_modelsNÚ_system_instructionsÚ_connection)r   r   rL   Úskills_pathsÚsystem_instructionsÚcapabilities_configrÏ   Úsession_continuation_modeÚsave_dirÚ
workspacesÚapp_data_dirÚmcp_serversr£   Ú	subagentsr¤   Úretry_configÚbudget_configÚpoliciesr‚   r   r   rL   rÌ  rÍ  rÎ  rÏ   rÏ  rÐ  rÑ  rÒ  rÓ  r£   rÔ  r¤   rÕ  rÖ  r×  r‚   .c                óD  — t          |¦  «        | _        || _        || _        || _        d| _        |pg | _        |pg | _        || _        || _	        || _
        || _        || _        |pg | _        i | _        d| _        t!          |t"          ¦  «        r/t%          j        t%          j        |¬¦  «        g¬¦  «        | _        n|| _        |pt%          j        ¦   «         | _        || _        || _        |	| _        t5          j        |
¦  «        | _        || _        |pg | _        dS )aà  Initializes the instance.

    Args:
      tool_runner: Optional ToolRunner for custom tools.
      hook_runner: Optional HookRunner for custom hooks.
      models: Optional list of model targets.
      skills_paths: Optional list of paths to search for skills.
      system_instructions: Optional SystemInstructions or string shorthand.
      capabilities_config: Optional CapabilitiesConfig to configure tools.
      conversation_id: Optional conversation identifier.
      session_continuation_mode: Optional mode for establishing a connection.
      save_dir: Optional directory to save trajectories.
      workspaces: Optional list of workspace paths.
      app_data_dir: Optional directory for harness app data.
      mcp_servers: Optional sequence of MCP server configurations.
      env: Optional dictionary of custom environment variables.
      subagents: Optional list of static subagent configurations.
      debug_config: Optional debug configuration for the connection.
      retry_config: Optional retry configuration for model API and outputs.
      budget_config: Optional session budget configuration.
      policies: Optional list of policy rules for the Go evaluator.
      tools: Optional list of tools for the root agent.
    Nrµ  r¶  )Ú_get_default_binary_pathÚ_binary_pathr¯   r¬   Ú_toolsrË  Ú_mcp_serversrÉ  Ú_skills_pathsr°   r±   Ú_retry_configÚ_budget_configÚ	_policiesÚ_dynamic_policy_maprÊ  rZ   r3   r   rº  r»  ÚCapabilitiesConfigÚ_capabilities_configÚ_conversation_idÚ_session_continuation_modeÚ	_save_dirr   Únormalize_workspace_pathsÚ_workspacesÚ_app_data_dirÚ
_subagents)rÁ   r   r   rL   rÌ  rÍ  rÎ  rÏ   rÏ  rÐ  rÑ  rÒ  rÓ  r£   rÔ  r¤   rÕ  rÖ  r×  r‚   s                       r   rÂ   z LocalConnectionStrategy.__init__1  sD  € õ\ 1°Ñ5Ô5€DÔØ#€DÔØ#€DÔØ€D„KØ/3€DÔØ#Ð) r€DÔØ,2¨L°b€D„LØ%€DÔØ€D„IØ%€DÔØ%€DÔØ'€DÔØ�^ €D„Nà9;€DÔð BF€DÔÝÐ%¥sÑ+Ô+ð 6Ý"'Ô"CÝÔ2Ð;NÐOÑOÔOÐPð#ñ #ô #€dÔÐð #6€dÔàÐ9�uÔ7Ñ9Ô9ð 	Ôð ,€DÔØ&?€DÔ#Ø€D„NÝ.ÔHØñô €DÔð &€DÔØ�o 2€D„O€O€Or   FÚcfgÚis_subagentr   c                 óz  — |€f|r2t          j        t           j                             ¦   «         ¬¦  «        }n2t          j        t           j                             ¦   «         d¬¦  «        }t          t           j        ¦  «        }|j        �t          |j        ¦  «        S |j        �|t          |j        ¦  «        z
  S |S )N©r¦  F)r¦  Úenable_subagents)r   ÚSubagentCapabilitiesÚBuiltinToolsÚ	read_onlyrâ  Úsetr¦  r§  )rÁ   rë  rì  Ú	all_toolss       r   Ú_resolve_active_toolsz-LocalConnectionStrategy._resolve_active_toolsƒ  s»   € ð
 €{Ø	ð 
ÝÔ(ÝÔ,×6Ò6Ñ8Ô8ð
ñ 
ô 
ˆˆõ Ô&ÝÔ,×6Ò6Ñ8Ô8Ø"ð
ñ 
ô 
ˆõ •EÔ&Ñ'Ô'€IØ
ÔÐ$Ý�Ô"Ñ#Ô#Ð#Ø
ÔÐ%Ø�˜SÔ/Ñ0Ô0Ñ0Ð0ØÐr   r³  c                 ó    — t          |¦  «        S r   ©rÆ  ©rÁ   r³  s     r   Ú_to_system_instructions_protoz5LocalConnectionStrategy._to_system_instructions_proto™  ó   € õ (¨Ñ5Ô5Ð5r   c                 ó    — t          |¦  «        S r   r÷  rø  s     r   Ú&_to_subagent_system_instructions_protoz>LocalConnectionStrategy._to_subagent_system_instructions_protoŸ  rú  r   c                 óB  — |                       ||¬¦  «        }d}d }g }|�?t          |dd¦  «        ot          j        j        |v }t          |dd ¦  «        }|j        pg }n|st          j        j        |v }t          j        ||¬¦  «        }|�||_        d }|�"t          |dd ¦  «        pt          |dd ¦  «        }|�|j	        nd}	|�+|j
        �$t          t          |j
        d	z  ¦  «        ¦  «        nd
}
t          j        |t          j        t          j        j        |v ¬¦  «        t          j        t          j        j        |v ¬¦  «        t          j        t          j        j        |v |	|
¬¦  «        t          j        t          j        j        |v ¬¦  «        t          j        t          j        j        |v ¬¦  «        t          j        t          j        j        |v ¬¦  «        t          j        t          j        j        |v ¬¦  «        t          j        t          j        j        |v ¬¦  «        t          j        t          j        j        |v ¬¦  «        t          j         t          j        j!        |v ¬¦  «        t          j"        t          j        j#        |v ¬¦  «        ¬¦  «        S )N©rì  Frï  TÚmax_subagent_depth)ÚenabledÚallowed_subagentsÚrun_command_configÚrun_commandiè  r   )r   )r   Úenable_daemon_commandsÚmax_timeout_ms)rÔ  ÚfindÚuser_questionsr  Ú	file_editÚ	view_fileÚwrite_to_fileÚgrep_searchÚlist_dirÚgenerate_imageÚ
search_webÚread_url_content)$rõ  r}   r   rñ  ÚSTART_SUBAGENTr  r   ÚSubagentsConfigÚmax_nesting_depthÚenable_daemonsr¨  ÚintÚroundÚHarnessSideToolsÚFindToolConfigÚ	FIND_FILEÚUserQuestionsConfigÚASK_QUESTIONÚRunCommandToolConfigÚRUN_COMMANDÚFileEditToolConfigÚ	EDIT_FILEÚViewFileToolConfigÚ	VIEW_FILEÚWriteToFileToolConfigÚCREATE_FILEÚGrepSearchToolConfigÚ
SEARCH_DIRÚListDirToolConfigÚLIST_DIRÚGenerateImageToolConfigÚGENERATE_IMAGEÚSearchWebToolConfigÚ
SEARCH_WEBÚReadUrlContentToolConfigÚREAD_URL_CONTENT)rÁ   rë  rì  Úactive_toolsÚsubagent_enabledÚ	max_depthr  Úsubagents_protoÚrun_cmd_cfgÚenable_daemonÚ
timeout_mss              r   Ú_to_harness_side_tools_protoz4LocalConnectionStrategy._to_harness_side_tools_proto¥  s  € ð
 ×-Ò-¨c¸{Ð-ÑKÔK€LØÐØ€IØÐà
€Ý  Ð&8¸$Ñ?Ô?ð Ý
Ô
Ô
+¨|Ð
;ð õ ˜#Ð3°TÑ:Ô:€iØÔ/Ð5°2ÐÐØð KÝÔ+Ô:¸lÐJÐå&Ô6Ø Ø+ðñ ô €Oð ÐØ*3€oÔ'à€KØ
€Ý˜CÐ!5°tÑ<Ô<ð ÅØ
ˆ}˜dñAô A€kð '2Ð&=ˆÔ"Ð"À5ð ð
 Ð" {Ô'BÐ'Nõ 	�E�+Ô-°Ñ4Ñ5Ô5Ñ6Ô6Ð6àð õ Ô,Ø!ÝÔ,ÝÔ&Ô0°LÐ@ð
ñ 
ô 
õ (Ô;ÝÔ&Ô3°|ÐCð
ñ 
ô 
õ %Ô9ÝÔ&Ô2°lÐBØ#0Ø%ð
ñ 
ô 
õ
 #Ô5ÝÔ&Ô0°LÐ@ð
ñ 
ô 
õ #Ô5ÝÔ&Ô0°LÐ@ð
ñ 
ô 
õ 'Ô<ÝÔ&Ô2°lÐBð
ñ 
ô 
õ %Ô9ÝÔ&Ô1°\ÐAð
ñ 
ô 
õ "Ô3ÝÔ&Ô/°<Ð?ð
ñ 
ô 
õ (Ô?ÝÔ&Ô5¸ÐEð
ñ 
ô 
õ $Ô7ÝÔ&Ô1°\ÐAð
ñ 
ô 
õ *ÔBÝÔ&Ô7¸<ÐGð
ñ 
ô 
ðE%ñ %ô %ð %r   Úall_tool_protosc                 ó  — g }| j         D �]}}|j        p0t          j        t          j                             ¦   «         ¬¦  «        }g }|j        pg D ]À}t          |t          ¦  «        rK|}||v r| 	                    ||         ¦  «         Œ9| 	                    t          j        |¬¦  «        ¦  «         Œbt          |¦  «        r6t          || j        ¬¦  «        }|||j        <   | 	                    |¦  «         Œ§t!          d|j        › d|› �¦  «        ‚| 	                    t          j        |j        |j        |                      |j        ¦  «        |                      |d¬¦  «        |t-          |j        ¦  «        ¬¦  «        ¦  «         �Œ|S )	zCResolves and builds CustomAgent configuration protos for subagents.rî  rn  r   zInvalid tool type in subagent 'z' tools list: Trþ  )rS   rk   rÍ  Úharness_side_toolsr‚   Úagent_behavior)rê  Úcapabilitiesr   rð  rñ  rò  r‚   rZ   r3   rb   r   r|   rv   r�   r¯   rS   r`   ÚCustomAgentrk   rü  rÍ  r4  r$   r8  )	rÁ   r5  Úcustom_agents_protosÚsubagentr9  Úresolved_subagent_toolsÚtoolrS   r6   s	            r   Ú_build_custom_subagents_protosz6LocalConnectionStrategy._build_custom_subagents_protosô  sà  € ð
 ÐØ”Oð &ñ &ˆØÔ*ð ­eÔ.HÝÔ*×4Ò4Ñ6Ô6ð/ñ /ô /€lð !#ÐØ”.Ð& Bð ð ˆ$Ý�d�CÑ Ô ð 	Øˆ$Ø�_Ð$Ð$Ø#×*Ò*¨?¸4Ô+@ÑAÔAÐAÐAà#×*Ò*Õ+;Ô+@ÀdÐ+KÑ+KÔ+KÑLÔLÐLÐLÝ�d‰^Œ^ð 	Ý(¨¸4Ô;LÐMÑMÔMˆ%Ø(-ˆ/˜%œ*Ñ
%Ø
!×
(Ò
(¨Ñ
/Ô
/Ð
/Ð
/åð°´ð ð Øðð ñô ð ð
 ×!Ò!Ý
Ô
&Ø”=Ø"Ô.Ø"&×"MÒ"MØÔ.ñ#ô #ð "&×!BÒ!BØ¨Dð "Cñ "ô "ð ,Ý4ØÔ-ñô ðñ ô ñô ð ñ ð   Ðr   c                 ó’  ‡— i }| j         rA| j         j                             ¦   «         D ]"}t          || j         ¬¦  «        }|||j        <   Œ#g }| j        �­| j        D ]¤}t          |t          ¦  «        rI||v r|                     ||         ¦  «         Œ7|                     t          j
        |¬¦  «        ¦  «         Œ`t          |¦  «        r5t          || j         ¬¦  «        }|||j        <   |                     |¦  «         Œ¥nµ| j         r®t          ¦   «         Š| j        D ]x}|j        pg D ]l}t          |t          ¦  «        r‰                     |¦  «         Œ-t          |¦  «        r0t          || j         ¬¦  «        }‰                     |j        ¦  «         ŒmŒyˆfd„|                     ¦   «         D ¦   «         }|                      | j        ¦  «        }	g }
| j        rt'          | j        ¦  «        }
d„ | j        D ¦   «         }|                      | j        ¦  «        }d„ | j        pg D ¦   «         }|                      ¦   «         }|                      |¦  «        }t          j        ||	| j        pdt9          | j        ¦  «        |
|| j        pg || j        j        pd| j        j         pd| j!        pJt          tE          j#        d	¦  «        d
z  dz   $                    ¦   «          %                    ¦   «         ¦  «        |||tM          | j        j'        ¦  «        ¬¦  «        }| j(        r0tS          | j(        ¦  «        }|r|j*         +                    |¦  «         | j,        r0t[          | j,        ¦  «        }|r|j.         +                    |¦  «         | j/        r;ta          j1        | j/        ¦  «        \  }| _2        |j3         +                    |¦  «         |S )z>Translates Pydantic config objects into a HarnessConfig proto.r   Nrn  c                 ó"   •— g | ]\  }}|‰v¯	|‘ŒS r>   r>   )rP   rS   r6   Úsubagent_tool_namess      €r   rR   zALocalConnectionStrategy._build_harness_config.<locals>.<listcomp>D  s3   ø€ ð ð ð áˆd�EØÐ,Ð,Ð,ð à,Ð,Ð,r   c           	      ó¦   — g | ]N}t          j        t          j        t          j        |¦  «                             ¦   «         ¬ ¦  «        ¬¦  «        ‘ŒOS ))Ú	directory)Úfilesystem_workspace)r   Ú	WorkspaceÚFilesystemWorkspaceÚpathlibÚPathÚas_posix)rP   Úps     r   rR   zALocalConnectionStrategy._build_harness_config.<locals>.<listcomp>Q  sh   € ð ð ð ð õ 	Ô"Ý!1Ô!EÝ!œ, q™/œ/×2Ò2Ñ4Ô4ð"ñ "ô "ð	
ñ 	
ô 	
ðð ð r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r>   )r²  )rP   Úss     r   rR   zALocalConnectionStrategy._build_harness_config.<locals>.<listcomp>^  s.   € ð ð ð Ø$%Õ˜QÑÔðð ð r   rN   r   Ú~z.geminiÚantigravity)r‚   rÍ  Ú
cascade_idrÏ  rL   rÑ  rÌ  r7  Úcompaction_thresholdÚfinish_tool_schema_jsonrÒ  rÓ  Úenabled_hooksÚcustom_subagentsr8  )4r¯   r‚   Úvaluesr�   rS   rÛ  rZ   r3   rb   r   r|   rv   ró  rê  rÃ  Úitemsrù  rÊ  rÉ  rg   rè  r4  rã  rÜ  Ú_get_enabled_hooksr?  r   rä  r   rå  rÝ  rQ  rR  ré  rH  rI  Ú
expanduserÚresolver$   r8  rÞ  rG   rÕ  rA   rß  rK   rÖ  rà  r   Ú_to_policy_config_protorá  Úpolicy_config)rÁ   r5  rh   r6   Úroot_tool_protosr>  ÚsarQ   Úsubagent_protoÚsystem_instructions_protoÚmodels_protosÚworkspace_protosr7  Úmcp_server_protosrS  r;  Úharness_configÚretry_protoÚbudget_protor[  rB  s                       @r   Ú_build_harness_configz-LocalConnectionStrategy._build_harness_config#  sd  ø€ à€OØÔð ,ØÔ!Ô'×.Ò.Ñ0Ô0ð ,ð ,ˆ"Ý& r°tÔ7HÐIÑIÔIˆØ&+ˆ˜œ
Ñ#Ð#àÐØ„{ÐØ”+ð 	)ð 	)ˆ$Ý�d�CÑ Ô ð 	)Ø�_Ð$Ð$Ø×#Ò# O°DÔ$9Ñ:Ô:Ð:Ð:à×#Ò#Õ$4Ô$9¸tÐ$DÑ$DÔ$DÑEÔEÐEÐEÝ�d‰^Œ^ð 	)Ý(¨¸4Ô;LÐMÑMÔMˆ%Ø(-ˆ/˜%œ*Ñ
%Ø
×
!Ò
! %Ñ
(Ô
(Ð
(øð	)ð 
Ô	ð õ  ™EœEÐØ”ð 9ð 9ˆ"Ø”�˜Rð 	9ð 	9ˆAÝ˜�3ÑÔð 9Ø×#Ò# AÑ&Ô&Ð&Ð&Ý˜‰{Œ{ð 9Ý3Ø˜tÔ0ðñ ô ˆNð  ×#Ò# NÔ$7Ñ8Ô8Ð8øð	9ðð ð ð à,×2Ò2Ñ4Ô4ðñ ô Ðð !%× BÒ BØÔ!ñ!ô !Ðð €MØ„|ð 7Ý(¨¬Ñ6Ô6€mðð ð Ô!ðñ ô Ðð ×:Ò:ØÔ!ñô Ððð Ø)-Ô):Ð)@¸bðñ ô Ðð ×+Ò+Ñ-Ô-€Mà×>Ò>¸ÑOÔOÐÝ%Ô3ØØ5ØÔ(Ð.¨BÝ"DØÔ+ñ#
ô #
ð Ø#ØÔ'Ð-¨2Ø-ð Ô%Ô:Ð?¸að Ô%Ô=ÐCÀàÔ'ð 
ÝÝŒ\˜#ÑÔ Ñ*¨]Ñ:ßŠZ‰\Œ\ßŠW‰YŒYñ
ô 
ð
 &Ø#Ø-Ý.ØÔ%Ô4ñ
ô 
ð7ñ ô €Nð> Ôð :Ý,¨TÔ-?Ñ@Ô@€kØ	ð :ØÔ#×,Ò,¨[Ñ9Ô9Ð9àÔð <Ý.¨tÔ/BÑCÔC€lØ	ð <ØÔ$×-Ò-¨lÑ;Ô;Ð;à„~ð ;Ý06Ô0NØ
Œ.ñ1ô 1Ñ-€m�TÔ-ð Ô"×+Ò+¨MÑ:Ô:Ð:àÐr   c           	      óÎ  — g }| j         s|S | j         j        t          j        f| j         j        t          j        f| j         j        t          j        f| j         j        t          j	        f| j         j
        t          j        f| j         j        t          j        f| j         j        t          j        f| j         j        t          j        fg}|D ]\  }}|r|                     |¦  «         Œ|S )zAReturns a list of proto enum IDs for registered hook collections.)r¬   Úon_session_start_hooksr   ÚLIFECYCLE_HOOK_ON_SESSION_STARTr  ÚLIFECYCLE_HOOK_ON_SESSION_ENDÚpre_turn_hooksÚLIFECYCLE_HOOK_PRE_TURNÚpost_turn_hooksÚLIFECYCLE_HOOK_POST_TURNÚpre_tool_call_decide_hooksÚLIFECYCLE_HOOK_PRE_TOOLÚpost_tool_call_hooksÚLIFECYCLE_HOOK_POST_TOOLÚon_tool_error_hooksÚLIFECYCLE_HOOK_ON_TOOL_ERRORÚon_compaction_hooksÚLIFECYCLE_HOOK_ON_COMPACTIONrb   )rÁ   rS  Úhook_mappingÚ
hooks_listÚ	hook_types        r   rW  z*LocalConnectionStrategy._get_enabled_hooks–  s	  € à€MØÔð ØÐð ÔÔ4ÝÔ<ð	
ð
 ÔÔ2ÝÔ:ð	
ð
 ÔÔ,ÝÔ4ð	
ð
 ÔÔ-ÝÔ5ð	
ð
 ÔÔ8ÝÔ4ð	
ð
 ÔÔ2ÝÔ5ð	
ð
 ÔÔ1ÝÔ9ð	
ð
 ÔÔ1ÝÔ9ð	
ð;!€LðD ".ð (ð (Ñˆ
�IØ	ð (Ø×Ò˜YÑ'Ô'Ð'øØÐr   c                 ó   — | j         S )z2Returns the debug configuration for this strategy.rÊ   rÆ   s    r   r¤   z$LocalConnectionStrategy.debug_configÃ  rË   r   c                 ó\   — t          | d¦  «        r| j        €t          d¦  «        ‚| j        S )z#Returns the established Connection.rË  Nz5Connection not established. Use as a context manager.)r5   rË  rè   rÆ   s    r   ÚconnectzLocalConnectionStrategy.connectÉ  s<   € å�4˜Ñ'Ô'ð ¨4Ô+;Ð+CÝØ
Añô ð ð ÔÐr   c                 ó  — | j         sdS | j         D ]t}|j        rO	 |j                             ¦   «          Œ$# t          $ r'}t	          j        t          |¦  «        ¦  «        |‚d}~ww xY wt	          j        d|j        › d�¦  «        ‚dS )z7Validates that all required configurations are present.NzModel 'z#' must have an endpoint configured.)rÉ  r[   Úvalidate_endpointr`   r   ÚAntigravityValidationErrorr3   rS   )rÁ   rd   r˜   s      r   Ú_validate_connectionz,LocalConnectionStrategy._validate_connectionÑ  s¶   € àŒ<ð Ø€fàŒ\ð 	
ð 	
ˆØ	
Œð 
ð	@Ø
Œ*×
&Ò
&Ñ
(Ô
(Ð
(Ð
(øÝð 	@ð 	@ð 	@ÝÔ0µ°Q±´Ñ8Ô8¸aÐ
?øøøøð	@øøøõ Ô.ØA�a”fÐAÐAÐAñ
ô 
ð 	
ð	
ð 	
s   ›5µ
A&¿"A!Á!A&ÚportrV   r    c              ƒ   óö  K  — t          t          ¦  «        D ]|}dD ]W}d|› d|› d�}	 t          j        |d|id¬¦  «        ƒ d{V —†}||fc c S # t          t          j        f$ r}|}	Y d}~ŒPd}~ww xY wt          j        dd	|z  z  ¦  «        ƒ d{V —† Œ}|                     ¦   «          d
}
|j	        �,|j	         
                    ¦   «                              d¦  «        }
t          d|› dt          › d|
› �¦  «        |	‚)z@Attempts to connect to the local harness WebSocket with backoff.)Ú	localhostz	127.0.0.1zws://ú:r†  zx-goog-api-keyN)Úadditional_headersÚmax_sizegš™™™™™¹?é   rN   r  z"Failed to connect to WebSocket at z after z attempts. Stderr: )ÚrangeÚ_MAX_WEBSOCKET_CONNECT_RETRIESr/  r|  ÚOSErrorÚWebSocketExceptionr¹   Úsleepr$  ÚstderrÚreadr  rè   )rÁ   r�  rV   r    ÚattemptÚhostÚws_urlr¡   r˜   Úlast_exceptionr�  s              r   Ú_connect_websocketz*LocalConnectionStrategy._connect_websocketá  s�  è è € õ Õ7Ñ8Ô8ð .ð .ˆØ,ð 
ð 
ˆ$Ø'˜Ð'Ð' Ð'Ð'Ð'ˆð	ÝÔ'ØØ"2°GÐ!<Øðñ ô ð ð ð ð ð ð ˆ"ð
 �V�Ð
Ð
Ð
Ð
Ð
øÝ�Ô6Ð7ð 	ð 	ð 	Øˆ.ˆ.ˆ.ˆ.ˆ.ˆ.øøøøð	øøøåŒM˜#  G¡Ñ,Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-à‡L‚L�N„N€NØ€FØ„~Ð!ØŒ~×"Ò"Ñ$Ô$×+Ò+¨GÑ4Ô4€fÝ
ð	H¨Vð 	Hð 	HÝ*ð	Hð 	HØ?Eð	Hð 	Hñô ð ðs   §"AÁA0Á$A+Á+A0c              ƒ   ó$	  K  — |                       ¦   «          |                      ¦   «         }t          ¦   «         }t          j        d|t          j        ¦   «         t          j        ¦   «                              ¦   «         t          j	        ¦   «         ¬¦  «        }| j
        r#d„ | j
                             ¦   «         D ¦   «         ni }t          j        | j        pd||¬¦  «        }| j
        �i t          j        ¥|¥nd}t!          j        | j        gt           j        t           j        t           j        |¬¦  «        }|                     ¦   «         }|j        €J ‚|j        €J ‚|j        €J ‚|j                             t3          j        dt7          |¦  «        ¦  «        |z   ¦  «         |j                             ¦   «          |j                             d	¦  «        }	|	s>|j                             ¦   «                              d
¦  «        }
t?          d|
› �¦  «        ‚t3          j         d|	¦  «        d         }t          j!        ¦   «         }| "                    |j                             |¦  «        ¦  «         |  #                    |j$        |j%        |¦  «        ƒ d{V —†\  }}	 t          j&        |¬¦  «        }| '                    tQ          j)        |¦  «        ¦  «        ƒ d{V —† | *                    ¦   «         ƒ d{V —†}g }d}i }tW          |tX          tZ          f¦  «        rµt          j.        ¦   «         }tQ          j/        ||¦  «         |j0        }d„ |j1        D ¦   «         }| 2                    d¦  «        rtg          j4        |j5        ¦  «        }|j6        D ]?}|j7        r6| 2                    d¦  «        r!tg          j4        |j8        ¦  «        ||j7        <   Œ@nh# tr          $ r[}| :                    ¦   «          |j                             ¦   «                              d
¦  «        }
t?          d|› d|
› �¦  «        |‚d}~ww xY wtw          ||| j<        | j=        || j
        | j>        | j?        pd||¬¦
  «
        | _@        | j@         A                    |j        ¦  «         dS )zStarts the backend.Úpython)Úlanguager€  Úlanguage_versionrŠ  Ú
os_versionc                 óN   — i | ]"\  }}t          |¦  «        t          |¦  «        “Œ#S r>   )r3   )rP   ÚkÚvs      r   ú
<dictcomp>z6LocalConnectionStrategy.__aenter__.<locals>.<dictcomp>
  s*   € Ð6Ð6Ð6™D˜A˜q�ˆQ‰Œ•�Q‘”Ð6Ð6Ð6r   rN   )Ústorage_directoryÚclient_infor£   N)r  Ústdoutr�  r£   z<Ié   r  z+Failed to read length from stdout. Stderr: r   )r8   c                 ót   — g | ]5}t           j                             t          j        |d ¬¦  «        ¦  «        ‘Œ6S )T)Úpreserving_proto_field_name)r   rï   Ú	from_dictr	   ÚMessageToDict)rP   Ústep_update_protos     r   rR   z6LocalConnectionStrategy.__aenter__.<locals>.<listcomp>A  sW   € ð 
ð 
ð 
ð "õ Ô/×9Ò9ÝÔ)Ø%À4ðñ ô ñô ð
ð 
ð 
r   rÑ   Úusagez%Failed to initialize conversation at z
. Stderr: )
r    r¡   r   r   r¢   r£   r¤   r¥   r¦   r§   )Br€  rf  r‚  r   Ú
ClientInfor•  Úpython_versionÚsystemÚlowerÚreleaser°   rV  ÚInputConfigræ  rŠ  r‹  r!  rZ  rÚ  ÚPIPEÚSerializeToStringr  rŸ  r�  ÚwriteÚstructÚpackÚlenÚflushrŽ  r  rè   ÚunpackÚOutputConfigÚParseFromStringr“  r�  rV   ÚInitializeConversationEventrå   r	   r:  ÚrecvrZ   r3   rß   r,  r-  Ú initialize_conversation_responseÚhistoryrD   r   Úparse_usage_metadatarÑ   Útrajectory_usageÚtrajectory_idr¦  rí   r$  rŸ   r¯   r¬   r±   rá  rË  r  )rÁ   rc  Úsdk_versionÚclient_info_protoÚenv_mapÚinput_configÚ
merged_envr    Ú
serializedÚraw_lenÚstderr_outputÚlengthÚoutput_configr¡   r‘  Ú
init_eventÚraw_init_respr¢   r¦   r§   Úinit_resp_eventÚ	init_respÚentryr˜   s                           r   Ú
__aenter__z"LocalConnectionStrategy.__aenter__ü  sâ  è è € à×ÒÑÔÐà×/Ò/Ñ1Ô1€NÝ"Ñ$Ô$€KÝ(Ô3ØØÝ!Ô0Ñ2Ô2ÝŒ?ÑÔ×"Ò"Ñ$Ô$ÝÔ#Ñ%Ô%ðñ ô Ðð ;?¼)ÐKÐ6Ð6 D¤I§O¢OÑ$5Ô$5Ð6Ñ6Ô6Ð6Èð õ $Ô/Øœ.Ð.¨BØ%Øðñ ô €Lð /3¬iÐ.CÐ*•B”JÐ* 'Ð*Ð*È€JåÔØ	Ô	ÐÝŒoÝŒÝŒØðñ ô €Gð ×/Ò/Ñ1Ô1€JØŒ=Ð$Ð$Ð$ØŒ>Ð%Ð%Ð%ØŒ>Ð%Ð%Ð%à„M×Ò�œ D­#¨j©/¬/Ñ:Ô:¸ZÑGÑHÔHÐHØ„M×ÒÑÔÐØŒn×!Ò! !Ñ$Ô$€GØð Ø”n×)Ò)Ñ+Ô+×2Ò2°7Ñ;Ô;€mÝØ
G¸Ð
GÐ
Gñô ð õ Œ]˜4 Ñ)Ô)¨!Ô,€FÝ$Ô1Ñ3Ô3€MØ×!Ò! '¤.×"5Ò"5°fÑ"=Ô"=Ñ>Ô>Ð>ð
 ×.Ò.ØÔ˜MÔ1°7ñô ð ð ð ð ð ð �J€Bˆð$Ý#Ô?Øðñ ô €jð �GŠG•KÔ-¨jÑ9Ô9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ØŸGšG™IœI�o�o�o�o�o�o€mØ*,€oØ€mØ"$ÐÝ	�M¥C­ <Ñ	0Ô	0ð Ý*Ô6Ñ8Ô8ˆÝÔ˜-¨Ñ9Ô9Ð9Ø#ÔDˆ	ð
ð 
ð &/Ô%6ð
ñ 
ô 
ˆð ×ÒÐ0Ñ1Ô1ð 	Ý)Ô>ØÔ(ñô ˆ-ð Ô/ð 	ð 	ˆEØÔ ð  U§^¢^°GÑ%<Ô%<ð åÔ4°U´[ÑAÔAð & eÔ&9Ñ:øøøõ ð ð ð Ø‡l‚l�n„n€nØ”n×)Ò)Ñ+Ô+×2Ò2°7Ñ;Ô;€mÝð°&ð ð Øðð ñô ð ðøøøøðøøøõ 'ØØØÔ%ØÔ%Ø'ØŒIØÔ'ØÔ3Ð;°tØ#Ø";ðñ ô €DÔð 	Ô×)Ò)¨'¬.Ñ9Ô9Ð9Ð9Ð9s   ÊD3O Ï
P5ÏAP0Ð0P5c              ƒ   óŒ   K  — t          | d¦  «        r/| j        r*| j                             ¦   «         ƒ d{V —† d| _        dS dS dS )z2Tears down the backend and releases all resources.rË  N)r5   rË  r&  )rÁ   Úexc_typeÚexc_valÚexc_tbs       r   Ú	__aexit__z!LocalConnectionStrategy.__aexit__g  sk   è è € åˆt�]Ñ#Ô#ð ¨Ô(8ð ØÔ×'Ò'Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø€dÔÐÐðð ð ð r   )FrW  )<rj   rX  rY  rr   Úlistr   ÚModelTargetrt   r¼  rŸ   rz   r[  r\  r]  r3   râ  ÚSessionContinuationModer   r®  r_  ÚSubagentConfigr   r`  r?   rI   r   ÚPolicyr   r   rÂ   rð  rc  ró  rñ  rõ  r   rù  rü  r  r4  r|   r:  r?  r   rf  rW  rb  r
   r¤   Ú
Connectionr|  r€  r  r!  rZ  rß   Útupler“  rÍ  rÒ  r>   r   r   rÈ  rÈ  *  s¾  € € € € € € Ø4Ð4à�Ô!Ô"Ð"Ð"Ñ"ØÔ0°4Ñ7Ð7Ð7Ñ7Ø Ñ%Ð%Ð%Ñ%ð
 15Ø04Ø/3Ø'+ØCGØ=AØ$(ØHLØ!Ø%)Ø!%Ø<@Ø#'Ø59Ø48Ø/3Ø15Ø-1Ø9=ð+P&ð P&ð P&ð Ô&¨Ñ-ðP&ð Ô&¨Ñ-ð	P&ð
 �5Ô$Ô%¨Ñ,ðP&ð ˜”I Ñ$ðP&ð  Ô!9Ñ9¸DÑ@ðP&ð !Ô3°dÑ:ðP&ð ˜T‘zðP&ð "'Ô!>ÀÑ!EðP&ð �d‘
ðP&ð �s”)˜dÑ"ðP&ð ˜$‘JðP&ð ˜EÔ1Ô2°TÑ9ðP&ð ��S�Œ>˜DÑ ðP&ð  �eÔ*Ô+¨dÑ2ð!P&ð" Ô*¨TÑ1ð#P&ð$ Ô%¨Ñ,ð%P&ð& Ô'¨$Ñ.ð'P&ð( �V”]Ô# dÑ*ð)P&ð* �h˜s C˜xÔ(¨3Ñ.Ô/°$Ñ6ð+P&ð P&ð P&ð P&ðj  ðð àÔ# eÔ&@Ñ@À4ÑGðð ðð ˆ5ÔÔð	ð ð ð ð,6à˜%Ô2Ñ2°TÑ9ð6ð Ô*¨TÑ1ð6ð 6ð 6ð 6ð6à˜%Ô2Ñ2°TÑ9ð6ð Ô*¨TÑ1ð6ð 6ð 6ð 6ð  ðMð MàÔ# eÔ&@Ñ@À4ÑGðMð ðMð Ô(ð	Mð Mð Mð Mð^- à˜CÐ!1Ô!6Ð6Ô7ð- ð ÐÔ(Ô)ð- ð - ð - ð - ð^qÐ%5Ô%Cð qð qð qð qðf+ $ s¤)ð +ð +ð +ð +ðZ Øð˜JÔ2°TÑ9ð ð ð ñ „8ñ „8ðð�zÔ,ð ð ð ð ð
ð 
ð 
ð 
ð ØðØ #ðØ.8Ô.>¸uÔ.EðàˆS�#ˆX„ðð ð ð ð6i:ð i:ð i:ð i:ðVð ð ð ð ð r   rÈ  r   )jrr   r¹   r½   Úimportlib.metadatar~  Úimportlib.resourcesr…   r~   rø   rŠ  rH  r•  Úrerš  r°  r!  r”  r  Útypingr   r   r   r   r   Úgoogle.genair   rˆ   Úgoogle.protobufr	   Útyping_extensionsr
   r/  Úgoogle.antigravity.protor   Úgoogle.antigravityÚgoogle.antigravity.connectionsr   Ú$google.antigravity.connections.localr   r   Úgoogle.antigravity.hooksr   r\  r   Úgoogle.antigravity.toolsr   r   rz   rï   rî   r4  r   r‰  rÕ  ÚRESUMEr   ÚCREATE_OR_RESUMEÚCREATE_ONLYr   r   ÚAgentBehaviorÚ
AUTONOMOUSr#   ÚINTERACTIVEÚAGENT_BEHAVIOR_INTERACTIVEr"   r$   r'   r-   r1   r7   r?   rG   rI   rK   rÓ  rÔ  rY   rg   r[  r|   r�   Úcompiler“   r3   r—   r0  r  r�   rØ  rŸ   ÚContentPrimitiverà   rr  rÙ   r‚  r‰  r_  r¢  rÙ  r®  r²  r¼  rÆ  ÚConnectionStrategyrÈ  r>   r   r   ú<module>rñ     s×  ðð 7Ð 6à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?à -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø @Ð @Ð @Ð @Ð @Ð @Ø HÐ HÐ HÐ HÐ HÐ HØ <Ð <Ð <Ð <Ð <Ð <Ø +Ð +Ð +Ð +Ð +Ð +Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø <Ð <Ð <Ð <Ð <Ð <à%Ô9Ð ØÔ-€Ø Ô/€ð !'Ð Ø!"Ð ð 
Ô!Ô(Ð*:Ô*HÔ*OØ	Ô!Ô2ØÔ&Ô7à	Ô!Ô-ØÔ&Ô2ð"Ð ðNØ
Ô
'¨$Ñ
.ðNàÔ#Ô;ðNð Nð Nð Nð 
ÔÔ"ØÔ2à	ÔÔ#ØÔ3ðÐ ð4ØÔ! DÑ(ð4àÔ#ð4ð 4ð 4ð 4ð1Ø”ð1àÔð1ð 1ð 1ð 1ðØÔ%¨Ñ,ðàÔ(ðð ð ð ð ØÔ Ñ$ðàÔ! DÑ(ðð ð ð ð6	/ØÔ Ñ%ð	/àÔ" TÑ)ð	/ð 	/ð 	/ð 	/ð)Ø�Ô"Ô#ð)à	Ð
Ô
&Ô'ð)ð )ð )ð )ð\ /3ðAð AØ��c�ÔðAàÔ$ tÑ+ðAð ÔðAð Að Að AðN �2”:ÐFÑGÔGÐ ð˜3ð  3ð ð ð ð ð
"˜*Ô5ð 
"¸#À¹)ÀdÑ:Jð 
"ð 
"ð 
"ð 
"ðHHð HHð HHð HHð HH�jÔ+ñ HHô HHð HHðV
GØÔ#ðGàÔÔ$ðGð Gð Gð Gð6˜#ð ð ð ð ð 3Ð ð8¨4°°S°¬>¸DÑ+@ð 8ÀSð 8ð 8ð 8ð 8ðv =Ð ðHØÔ%ðHàÔ%ðHð Hð Hð Hð>)Ø˜Ô0Ñ0°4Ñ7ð)àÔ(¨4Ñ/ð)ð )ð )ð )ðXA	ð A	ð A	ð A	ð A	˜jÔ;ñ A	ô A	ð A	ð A	ð A	r   