§
    œŠtj]†  ã                  óÂ  — d Z ddlm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 ddlmZ ddlmZ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 m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= erddl>m?Z?m@Z@ ddlAmBZB  ejC        eD¦  «        ZEdZFdZGdZHd.d„ZIe G d „ d!¦  «        ¦   «         ZJ G d"„ d#e7e:         ¦  «        ZK ed$¬%¦  «         G d&„ d'¦  «        ¦   «         ZL G d(„ d¦  «        ZM G d)„ d*e#¦  «        ZN G d+„ d,e6eKe:         e8e:f         ¦  «        ZOg d-¢ZPdS )/z:Middleware that exposes a persistent shell tool to agents.é    )ÚannotationsN)Ú	dataclassÚfield)ÚPath)ÚTYPE_CHECKINGÚ	AnnotatedÚAnyÚLiteralÚcastÚoverload)ÚToolMessage)Úrun_in_executor)ÚToolException)ÚUntrackedValue)Ú	BaseModelÚmodel_validator)ÚSkipJsonSchema)ÚNotRequiredÚoverride)ÚSHELL_TEMP_PREFIXÚBaseExecutionPolicyÚCodexSandboxExecutionPolicyÚDockerExecutionPolicyÚHostExecutionPolicy)ÚPIIDetectionErrorÚPIIMatchÚRedactionRuleÚResolvedRedactionRule)ÚAgentMiddlewareÚ
AgentStateÚContextTÚPrivateStateAttrÚ	ResponseT)ÚToolRuntimeÚtool)ÚMappingÚSequence)ÚRuntimeÚ__LC_SHELL_DONE__aG  Execute a shell command inside a persistent session. Before running a command, confirm the working directory is correct (e.g., inspect with `ls` or `pwd`) and ensure any parent directories exist. Prefer absolute paths and quote paths containing spaces, such as `cd "/path/with spaces"`. Chain multiple commands with `&&` or `;` instead of embedding newlines. Avoid unnecessary `cd` usage unless explicitly required so the session remains stable. Outputs may be truncated when they become very large, and long running commands will be terminated once their configured timeout elapses.ÚshellÚsessionÚShellSessionÚtempdirú'tempfile.TemporaryDirectory[str] | NoneÚtimeoutÚfloatÚreturnÚNonec                ó&  — t          j        t          ¦  «        5  |                      |¦  «         d d d ¦  «         n# 1 swxY w Y   |�Ht          j        t          ¦  «        5  |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S d S ©N)Ú
contextlibÚsuppressÚ	ExceptionÚstopÚcleanup)r+   r-   r/   s      úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain/agents/middleware/shell_tool.pyÚ_cleanup_resourcesr;   G   s  € õ 
Ô	�YÑ	'Ô	'ð ð Ø�Š�WÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àÐÝÔ ¥Ñ+Ô+ð 	ð 	Ø�OŠOÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð Ðs!   š<¼A ÁA Á"BÂBÂBc                  ó^   — e Zd ZU dZded<   ded<   ded<    edd¬	¦  «        Zd
ed<   dd„ZdS )Ú_SessionResourcesz&Container for per-run shell resources.r,   r+   r.   r-   r   ÚpolicyF)ÚinitÚreprzweakref.finalizeÚ	finalizerr1   r2   c                ór   — t          j        | t          | j        | j        | j        j        ¦  «        | _        d S r4   )ÚweakrefÚfinalizer;   r+   r-   r>   Útermination_timeoutrA   ©Úselfs    r:   Ú__post_init__z_SessionResources.__post_init__Z   s2   € Ý Ô)ØÝØŒLØŒLØŒKÔ+ñ
ô 
ˆŒˆˆó    N©r1   r2   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   rA   rH   © rI   r:   r=   r=   Q   st   € € € € € € à0Ð0àÐÐÑØ4Ð4Ð4Ñ4ØÐÐÑØ"' %¨U¸Ð"?Ñ"?Ô"?€IÐ?Ð?Ð?Ñ?ð
ð 
ð 
ð 
ð 
ð 
rI   r=   c                  ó   — e Zd ZU dZded<   dS )ÚShellToolStatez¡Agent state extension for tracking shell session resources.

    Type Parameters:
        ResponseT: The type of the structured response. Defaults to `Any`.
    zRNotRequired[Annotated[_SessionResources | None, UntrackedValue, PrivateStateAttr]]Úshell_session_resourcesN©rK   rL   rM   rN   rO   rP   rI   r:   rR   rR   d   s4   € € € € € € ðð ðð ð ñ ð ð rI   rR   T)Úfrozenc                  óZ   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   dS )ÚCommandExecutionResultz)Structured result from command execution.ÚstrÚoutputú
int | NoneÚ	exit_codeÚboolÚ	timed_outÚtruncated_by_linesÚtruncated_by_bytesÚintÚtotal_linesÚtotal_bytesNrT   rP   rI   r:   rW   rW   p   sf   € € € € € € à3Ð3à€K€K�KØÐÐÑØ€O€O�OØÐÐÑØÐÐÑØÐÐÑØÐÐÑÐÐrI   rW   c                  ó†   — e Zd ZdZd(d„Zd)d„Zd)d„Zd*d„Zd+d„Zd,d„Z	d-d„Z
d)d„Zd.d„Zd)d„Z	 d/d0d#„Zed1d&„¦   «         Zd'S )2r,   zDPersistent shell session that supports sequential command execution.Ú	workspacer   r>   r   Úcommandútuple[str, ...]ÚenvironmentúMapping[str, str]r1   r2   c                óþ   — || _         || _        || _        t          |¦  «        | _        d | _        d | _        t          j        ¦   «         | _	        t          j        ¦   «         | _        d | _        d | _        d| _        d S )NF)Ú
_workspaceÚ_policyÚ_commandÚdictÚ_environmentÚ_processÚ_stdinÚqueueÚQueueÚ_queueÚ	threadingÚLockÚ_lockÚ_stdout_threadÚ_stderr_threadÚ_terminated)rG   rd   r>   re   rg   s        r:   Ú__init__zShellSession.__init__€   sq   € ð $ˆŒØˆŒØˆŒÝ  Ñ-Ô-ˆÔØ6:ˆŒØˆŒÝ;@¼;¹=¼=ˆŒÝ”^Ñ%Ô%ˆŒ
Ø7;ˆÔØ7;ˆÔØ ˆÔÐÐrI   c                óŽ  — | j         r| j                              ¦   «         €dS | j                             | j        | j        | j        ¬¦  «        | _         | j         j        �| j         j        �| j         j	        €d}t          |¦  «        ‚| j         j        | _        d| _        t          j        ¦   «         | _        t!          j        | j        | j         j        dfd¬¦  «        | _        t!          j        | j        | j         j	        dfd¬¦  «        | _        | j                             ¦   «          | j                             ¦   «          dS )	z”Start the shell subprocess and reader threads.

        Raises:
            RuntimeError: If the shell session pipes cannot be initialized.
        N)rd   Úenvre   z)Failed to initialize shell session pipes.FÚstdoutT)ÚtargetÚargsÚdaemonÚstderr)ro   Úpollrk   Úspawnrj   rn   rl   Ústdinr}   r�   ÚRuntimeErrorrp   ry   rq   rr   rs   rt   ÚThreadÚ_enqueue_streamrw   rx   Ústart©rG   Úmsgs     r:   rˆ   zShellSession.start“   s?  € ð Œ=ð 	˜Tœ]×/Ò/Ñ1Ô1Ð9ØˆFàœ×*Ò*Ø”oØÔ!Ø”Mð +ñ 
ô 
ˆŒð ŒMÔÐ'ØŒ}Ô#Ð+ØŒ}Ô#Ð+à=ˆCÝ˜sÑ#Ô#Ð#à”mÔ)ˆŒØ ˆÔÝ”k‘m”mˆŒå'Ô.ØÔ'Ø”-Ô&¨Ð1Øð
ñ 
ô 
ˆÔõ
 (Ô.ØÔ'Ø”-Ô&¨Ð1Øð
ñ 
ô 
ˆÔð
 	Ô×!Ò!Ñ#Ô#Ð#ØÔ×!Ò!Ñ#Ô#Ð#Ð#Ð#rI   c                ól   — |                       | j        j        ¦  «         |                      ¦   «          dS )zRestart the shell process.N)r8   rk   rE   rˆ   rF   s    r:   ÚrestartzShellSession.restartº   s*   € à�	Š	�$”,Ô2Ñ3Ô3Ð3Ø�
Š
‰ŒˆˆˆrI   r/   r0   c                óF  — | j         sdS | j                              ¦   «         €o| j        sh	 | j                             d¦  «         | j                             ¦   «          n3# t          t          f$ r t           	                    dd¬¦  «         Y nw xY w	 | j          
                    |¬¦  «        €|                      ¦   «          n)# t          j        $ r |                      ¦   «          Y nw xY wd| _        t          j        t           ¦  «        5  | j                             ¦   «          ddd¦  «         n# 1 swxY w Y   d| _         dS # d| _        t          j        t           ¦  «        5  | j                             ¦   «          ddd¦  «         n# 1 swxY w Y   d| _         w xY w)zStop the shell subprocess.Nzexit
z8Failed to write exit command; terminating shell session.T©Úexc_info©r/   )ro   r‚   ry   rp   ÚwriteÚflushÚBrokenPipeErrorÚOSErrorÚLOGGERÚdebugÚwaitÚ_kill_processÚ
subprocessÚTimeoutExpiredr5   r6   r7   Úclose)rG   r/   s     r:   r8   zShellSession.stop¿   s8  € àŒ}ð 	ØˆFàŒ=×ÒÑÔÐ'°Ô0@Ð'ðØ”×!Ò! (Ñ+Ô+Ð+Ø”×!Ò!Ñ#Ô#Ð#Ð#øÝ#¥WÐ-ð ð ð Ý—’ØNØ!ð ñ ô ð ð ð ðøøøð		!ØŒ}×!Ò!¨'Ð!Ñ2Ô2Ð:Ø×"Ò"Ñ$Ô$Ð$øøÝÔ(ð 	!ð 	!ð 	!Ø×ÒÑ Ô Ð Ð Ð ð	!øøøð  $ˆDÔÝÔ$¥YÑ/Ô/ð $ð $Ø”×!Ò!Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $à ˆDŒMˆMˆMøð  $ˆDÔÝÔ$¥YÑ/Ô/ð $ð $Ø”×!Ò!Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $à ˆDŒMÐ Ð Ð Ð sq   «3A Á-BÂBÂ/C ÃE Ã#C)Ã&E Ã(C)Ã)E ÄD2Ä2D6Ä9D6Å!F Å'FÆF ÆFÆF ÆFÆF rX   rW   c               ó¸  — | j         r| j                              ¦   «         �d}t          |¦  «        ‚t          › t	          j        ¦   «         j        › �}t          j        ¦   «         |z   }| j	        5  |  
                    ¦   «          |                     d¦  «        r|n|› d�}	 | j                             |¦  «         | j                             d|› d�¦  «         | j                             ¦   «          n8# t          t           f$ r$ |                      |¦  «        cY cddd¦  «         S w xY w|                      |||¦  «        cddd¦  «         S # 1 swxY w Y   dS )z*Execute a command in the persistent shell.NzShell session is not running.ú
zprintf 'z
 %s\n' $?
)ro   r‚   r…   Ú_DONE_MARKER_PREFIXÚuuidÚuuid4ÚhexÚtimeÚ	monotonicrv   Ú_drain_queueÚendswithrp   r‘   r’   r“   r”   Ú_collect_output_after_exitÚ_collect_output)rG   re   r/   rŠ   ÚmarkerÚdeadlineÚpayloads          r:   ÚexecutezShellSession.executeÙ   sê  € àŒ}ð 	$ ¤× 2Ò 2Ñ 4Ô 4Ð @Ø1ˆCÝ˜sÑ#Ô#Ð#å'Ð;­¬©¬Ô)9Ð;Ð;ˆÝ”>Ñ#Ô# gÑ-ˆàŒZð 	Cð 	CØ×ÒÑÔÐØ!(×!1Ò!1°$Ñ!7Ô!7ÐK�g�gÀ¸^¸^¸^ˆGðAØ”×!Ò! 'Ñ*Ô*Ð*Ø”×!Ò!Ð"A¨VÐ"AÐ"AÐ"AÑBÔBÐBØ”×!Ò!Ñ#Ô#Ð#Ð#øÝ#¥WÐ-ð Að Að Að ×6Ò6°xÑ@Ô@Ð@Ð@ð	Cð 	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	CðAøøøð
 ×'Ò'¨°¸'ÑBÔBð	Cð 	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cs7   Á01EÂ"AC4Ã3EÃ4&D)ÄEÄ(D)Ä)EÅEÅEr¨   r©   c           	     óJ  — g }d}d}d}d}d }	d}
	 |t          j        ¦   «         z
  }|dk    rd}
�nƒ	 | j                             |¬¦  «        \  }}n# t          j        $ r d}
Y �nOw xY w|€Œ\|dk    rl|                     |¦  «        rW|                     d¦  «        \  }}}|                      | 	                    ¦   «         ¦  «        }	|  
                    ||¦  «         nÖ|dz  }|                     dd	¦  «        }|t          |¦  «        z  }|| j        j        k    rd}�Œ| j        j        �|| j        j        k    rd}�Œ/|d
k    rX|                     d¦  «        }|                     d|› �¦  «         |                     d¦  «        r|                     d¦  «         n|                     |¦  «         �Œ£|
rEt&                               d|¦  «         |                      ¦   «          t-          dd d||||¬¦  «        S d                     |¦  «        }t-          ||	d||||¬¦  «        S )Nr   FTr�   r}   ú é   úutf-8Úreplacer�   r�   ú	[stderr] z?Command timed out after %.2f seconds; restarting shell session.Ú ©rY   r[   r]   r^   r_   ra   rb   )r¢   r£   rs   Úgetrq   ÚEmptyÚ
startswithÚ	partitionÚ	_safe_intÚstripÚ_drain_remaining_stderrÚencodeÚlenrk   Úmax_output_linesÚmax_output_bytesÚrstripÚappendr¥   r•   ÚwarningrŒ   rW   Újoin)rG   r¨   r©   r/   Ú	collectedra   rb   r^   r_   r[   r]   Ú	remainingÚsourceÚdataÚ_ÚstatusÚencodedÚstrippedrY   s                      r:   r§   zShellSession._collect_outputð   s’  € ð  "ˆ	ØˆØˆØ"ÐØ"ÐØ $ˆ	Øˆ	ð,	'Ø ¥4¤>Ñ#3Ô#3Ñ3ˆIØ˜AŠ~ˆ~Ø �	ÙðØ#œ{Ÿš°y˜ÑAÔA‘�˜˜øÝ”;ð ð ð Ø �	Ø‘ðøøøð ˆ|Øà˜Ò!Ð! d§o¢o°fÑ&=Ô&=Ð!Ø#Ÿ~š~¨cÑ2Ô2‘��1�fØ ŸNšN¨6¯<ª<©>¬>Ñ:Ô:�	ð ×,Ò,¨Y¸ÑAÔAÐAØà˜1ÑˆKØ—k’k '¨9Ñ5Ô5ˆGØ�3˜w™<œ<Ñ'ˆKà˜Tœ\Ô:Ò:Ð:Ø%)Ð"Ùð ”Ô-Ð9Ø $¤,Ô"?Ò?Ð?à%)Ð"Ùà˜Ò!Ð!ØŸ;š; tÑ,Ô,�Ø× Ò Ð!7¨XÐ!7Ð!7Ñ8Ô8Ð8Ø—=’= Ñ&Ô&ð +Ø×$Ò$ TÑ*Ô*Ð*øà× Ò  Ñ&Ô&Ð&ñY,	'ð\ ð 	Ý�NŠNØQØñô ð ð �LŠL‰NŒNˆNÝ)ØØØØ#5Ø#5Ø'Ø'ðñ ô ð ð —’˜Ñ#Ô#ˆÝ%ØØØØ1Ø1Ø#Ø#ð
ñ 
ô 
ð 	
s   ±A ÁA%Á$A%c           	     óR  — g }d}d}d}d}d}t          t          j        ¦   «         |z   |¦  «        }	 |t          j        ¦   «         z
  }	|	dk    r�n	 | j                             |	¬¦  «        \  }
}n# t
          j        $ r Y nÛw xY w|€ŒW|dz  }|                     dd	¦  «        }|t          |¦  «        z  }|| j	        j
        k    rd}Œ—| j	        j        �|| j	        j        k    rd}Œ¶|
d
k    rX|                     d¦  «        }|                     d|› �¦  «         |                     d¦  «        r|                     d¦  «         n|                     |¦  «         �Œ*d}| j        r| j                             ¦   «         }d                     |¦  «        }t%          ||d||||¬¦  «        S )a”  Collect output after the shell exited unexpectedly.

        Called when a `BrokenPipeError` occurs while writing to stdin, indicating the
        shell process terminated (e.g., due to an 'exit' command).

        Args:
            deadline: Absolute time by which collection must complete.

        Returns:
            `CommandExecutionResult` with collected output and the process exit code.
        r   Fgš™™™™™¹?Tr�   Nr®   r¯   r°   r�   r�   r±   r²   r³   )Úminr¢   r£   rs   r´   rq   rµ   r»   r¼   rk   r½   r¾   r¿   rÀ   r¥   ro   r‚   rÂ   rW   )rG   r©   rÃ   ra   rb   r^   r_   Údrain_timeoutÚdrain_deadlinerÄ   rÅ   rÆ   rÉ   rÊ   r[   rY   s                   r:   r¦   z'ShellSession._collect_output_after_exitG  sû  € ð  "ˆ	ØˆØˆØ"ÐØ"Ðð ˆÝ�Tœ^Ñ-Ô-°Ñ=¸xÑHÔHˆð"	'Ø&­¬Ñ)9Ô)9Ñ9ˆIØ˜AŠ~ˆ~ÙðØ#œ{Ÿš°y˜ÑAÔA‘�˜˜øÝ”;ð ð ð Ø�ðøøøð ˆ|àà˜1ÑˆKØ—k’k '¨9Ñ5Ô5ˆGØ�3˜w™<œ<Ñ'ˆKà˜Tœ\Ô:Ò:Ð:Ø%)Ð"Øð ”Ô-Ð9Ø $¤,Ô"?Ò?Ð?à%)Ð"Øà˜Ò!Ð!ØŸ;š; tÑ,Ô,�Ø× Ò Ð!7¨XÐ!7Ð!7Ñ8Ô8Ð8Ø—=’= Ñ&Ô&ð +Ø×$Ò$ TÑ*Ô*Ð*øà× Ò  Ñ&Ô&Ð&ñE"	'ðJ !%ˆ	ØŒ=ð 	-Øœ×*Ò*Ñ,Ô,ˆIà—’˜Ñ#Ô#ˆÝ%ØØØØ1Ø1Ø#Ø#ð
ñ 
ô 
ð 	
s   ÁA0 Á0BÂBc                ó  — | j         sd S t          t          d¦  «        r�	 t          j        | j         j        ¦  «        }|t          j        ¦   «         k    r!t          j        |t          j        ¦  «         d S n8# t          $ r Y d S t          $ r t                               dd¬¦  «         Y nw xY w	 | j                              ¦   «          d S # t          $ r Y d S t          $ r  t                               dd¬¦  «         Y d S w xY w)NÚkillpgz/Group kill failed; falling back to direct kill.TrŽ   zDirect kill failed.)ro   ÚhasattrÚosÚgetpgidÚpidÚgetpgrprÐ   ÚsignalÚSIGKILLÚProcessLookupErrorr”   r•   rÁ   Úkill)rG   Ú
child_pgids     r:   r˜   zShellSession._kill_process‘  sU  € ØŒ}ð 	ØˆFå•2�xÑ Ô ð 	ðÝœZ¨¬Ô(9Ñ:Ô:�
ð ¥¤¡¤Ò-Ð-Ý”I˜j­&¬.Ñ9Ô9Ð9Ø�Fð .øõ &ð ð ð à��Ýð ð ð õ —’ØEØ!ð ñ ô ð ð ð ðøøøð	ØŒM×ÒÑ Ô Ð Ð Ð øÝ!ð 	ð 	ð 	àˆDˆDÝð 	ð 	ð 	õ �NŠNØ%Øð ñ ô ð ð ð ð ð	øøøs0    AA7 Á7
B,Â%B,Â+B,Â0C Ã
DÃ%DÄ DÚstreamr	   Úlabelc                ó¦   — t          |j        d¦  «        D ]}| j                             ||f¦  «         Œ| j                             |d f¦  «         d S )Nr²   )ÚiterÚreadliners   Úput)rG   rÛ   rÜ   Úlines       r:   r‡   zShellSession._enqueue_stream¹  sV   € Ý˜œ¨"Ñ-Ô-ð 	+ð 	+ˆDØŒK�OŠO˜U D˜MÑ*Ô*Ð*Ð*ØŒ�Š˜ ˜Ñ&Ô&Ð&Ð&Ð&rI   c                óh   — 	 	 | j                              ¦   «          n# t          j        $ r Y d S w xY wŒ2r4   )rs   Ú
get_nowaitrq   rµ   rF   s    r:   r¤   zShellSession._drain_queue¾  sL   € ð	ðØ”×&Ò&Ñ(Ô(Ð(Ð(øÝ”;ð ð ð Ø��ðøøøð	s   ƒ �0¯0çš™™™™™©?rÃ   ú	list[str]rÍ   c                ó¶  — t          t          j        ¦   «         |z   |¦  «        }	 |t          j        ¦   «         z
  }|dk    rdS 	 | j                             |¬¦  «        \  }}n# t
          j        $ r Y dS w xY w|�|dk    rŒ^|                     d¦  «        }|                     d|› �¦  «         | 	                    d¦  «        r|                     d¦  «         Œµ)a\  Drain any stderr output that arrived concurrently with the done marker.

        The stdout and stderr reader threads run independently. When a command writes to
        stderr just before exiting, the stderr output may still be in transit when the
        done marker arrives on stdout. This method briefly polls the queue to capture
        such output.

        Args:
            collected: The list to append collected stderr lines to.
            deadline: The original command deadline (used as an upper bound).
            drain_timeout: Maximum time to wait for additional stderr output.
        Tr   r�   Nr�   r�   r±   )
rÌ   r¢   r£   rs   r´   rq   rµ   r¿   rÀ   r¥   )	rG   rÃ   r©   rÍ   rÎ   rÄ   rÅ   rÆ   rÊ   s	            r:   rº   z$ShellSession._drain_remaining_stderrÅ  sö   € õ �Tœ^Ñ-Ô-°Ñ=¸xÑHÔHˆð	'Ø&­¬Ñ)9Ô)9Ñ9ˆIØ˜AŠ~ˆ~Ø�ðØ#œ{Ÿš°y˜ÑAÔA‘�˜˜øÝ”;ð ð ð Ø��ðøøøàˆ|˜v¨Ò1Ð1ØØ—{’{ 4Ñ(Ô(ˆHØ×ÒÐ3¨Ð3Ð3Ñ4Ô4Ð4Ø�}Š}˜TÑ"Ô"ð 'Ø× Ò  Ñ&Ô&Ð&ð	's   ÁA$ Á$A7Á6A7ÚvaluerZ   c                ó†   — t          j        t          ¦  «        5  t          | ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r4   )r5   r6   Ú
ValueErrorr`   )rç   s    r:   r¸   zShellSession._safe_intä  s{   € åÔ ¥Ñ,Ô,ð 	ð 	Ý�u‘:”:ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àˆts   š6¶:½:N)
rd   r   r>   r   re   rf   rg   rh   r1   r2   rJ   )r/   r0   r1   r2   )re   rX   r/   r0   r1   rW   )r¨   rX   r©   r0   r/   r0   r1   rW   )r©   r0   r1   rW   )rÛ   r	   rÜ   rX   r1   r2   )rä   )rÃ   rå   r©   r0   rÍ   r0   r1   r2   )rç   rX   r1   rZ   )rK   rL   rM   rN   rz   rˆ   rŒ   r8   r«   r§   r¦   r˜   r‡   r¤   rº   Ústaticmethodr¸   rP   rI   r:   r,   r,   }   s2  € € € € € ØNÐNð!ð !ð !ð !ð&%$ð %$ð %$ð %$ðNð ð ð ð
!ð !ð !ð !ð4Cð Cð Cð Cð.U
ð U
ð U
ð U
ðnH
ð H
ð H
ð H
ðT&ð &ð &ð &ðP'ð 'ð 'ð 'ð
ð ð ð ð MQð'ð 'ð 'ð 'ð 'ð> ðð ð ñ „\ðð ð rI   c                  óp   — e Zd ZU dZdZded<   	 dZded<   	 dZded<   	  ed	¬
¦  «        dd„¦   «         Z	dS )Ú_ShellToolInputz+Input schema for the persistent shell tool.Nú
str | Nonere   zbool | NonerŒ   z Annotated[Any, SkipJsonSchema()]ÚruntimeÚafter)Úmoder1   c                ó‚   — | j         €| j        sd}t          |¦  «        ‚| j         �| j        rd}t          |¦  «        ‚| S )Nz2Shell tool requires either 'command' or 'restart'.z+Specify only one of 'command' or 'restart'.)re   rŒ   ré   r‰   s     r:   Úvalidate_payloadz _ShellToolInput.validate_payloadû  sG   € àŒ<Ð¨¬ÐØFˆCÝ˜S‘/”/Ð!ØŒ<Ð#¨¬Ð#Ø?ˆCÝ˜S‘/”/Ð!ØˆrI   )r1   rì   )
rK   rL   rM   rN   re   rO   rŒ   rî   r   rò   rP   rI   r:   rì   rì   ë  sˆ   € € € € € € Ø5Ð5à€GÐÐÐÑØ'à€GÐÐÐÑØ/à04€GÐ4Ð4Ð4Ñ4ðð €_˜'Ð"Ñ"Ô"ðð ð ñ #Ô"ðð ð rI   rì   c            
      ór  ‡ — e Zd ZdZeZ	 dAdddddedddœdBˆ fd„ZedCd„¦   «         Z	edDd„¦   «         Z
edEd„¦   «         ZedFd#„¦   «         ZdFd$„ZedGd%„¦   «         ZdGd&„ZdHd(„ZdId)„ZdJd,„ZdJd-„ZdKd0„ZedLd6„¦   «         ZedMd7„¦   «         ZdNd9„Zedd:œdOd>„¦   «         Zedd:œdPd?„¦   «         Zdd:œdQd@„Zˆ xZS )RÚShellToolMiddlewareu  Middleware that registers a persistent shell tool for agents.

    The middleware exposes a single long-lived shell session. Use the execution policy
    to match your deployment's security posture:

    * `HostExecutionPolicy` â€“ full host access; best for trusted environments where the
        agent already runs inside a container or VM that provides isolation.
    * `CodexSandboxExecutionPolicy` â€“ reuses the Codex CLI sandbox for additional
        syscall/filesystem restrictions when the CLI is available.
    * `DockerExecutionPolicy` â€“ launches a separate Docker container for each agent run,
        providing harder isolation, optional read-only root filesystems, and user
        remapping.

    When no policy is provided the middleware defaults to `HostExecutionPolicy`.
    N)Ústartup_commandsÚshutdown_commandsÚexecution_policyÚredaction_rulesÚtool_descriptionÚ	tool_nameÚshell_commandr|   Úworkspace_rootústr | Path | Nonerõ   ú(tuple[str, ...] | list[str] | str | Nonerö   r÷   úBaseExecutionPolicy | Nonerø   ú6tuple[RedactionRule, ...] | list[RedactionRule] | Nonerù   rí   rú   rX   rû   úSequence[str] | str | Noner|   úMapping[str, Any] | Noner1   r2   c               óh  •‡ — t          ¦   «                              ¦   «          |rt          |¦  «        nd‰ _        |‰ _        ‰                      |¦  «        ‰ _        ‰                      |	¦  «        ‰ _        |�|‰ _	        nt          ¦   «         ‰ _	        |pd}
t          d„ |
D ¦   «         ¦  «        ‰ _        ‰                      |¦  «        ‰ _        ‰                      |¦  «        ‰ _        |pt           }t#          ‰ j        t$          |¬¦  «        dddœdˆ fd„¦   «         }|‰ _        ‰ j        g‰ _        dS )aˆ  Initialize an instance of `ShellToolMiddleware`.

        Args:
            workspace_root: Base directory for the shell session.

                If omitted, a temporary directory is created when the agent starts and
                removed when it ends.
            startup_commands: Optional commands executed sequentially after the session
                starts.
            shutdown_commands: Optional commands executed before the session shuts down.
            execution_policy: Execution policy controlling timeouts, output limits, and
                resource configuration.

                Defaults to `HostExecutionPolicy` for native execution.
            redaction_rules: Optional redaction rules to sanitize command output before
                returning it to the model.

                !!! warning
                    Redaction rules are applied post execution and do not prevent
                    exfiltration of secrets or sensitive data when using
                    `HostExecutionPolicy`.

            tool_description: Optional override for the registered shell tool
                description.
            tool_name: Name for the registered shell tool.

                Defaults to `"shell"`.
            shell_command: Optional shell executable (string) or argument sequence used
                to launch the persistent session.

                Defaults to an implementation-defined bash command.
            env: Optional environment variables to supply to the shell session.

                Values are coerced to strings before command execution. If omitted, the
                session inherits the parent process environment.
        NrP   c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r4   )Úresolve)Ú.0Úrules     r:   ú	<genexpr>z/ShellToolMiddleware.__init__.<locals>.<genexpr>T  sC   è è € ð I
ð I
Ø#ˆD�LŠL‰NŒNðI
ð I
ð I
ð I
ð I
ð I
rI   )Úargs_schemaÚdescriptionF©re   rŒ   rî   ú!ToolRuntime[None, ShellToolState]re   rí   rŒ   r\   r1   úToolMessage | strc                óx   •— ‰                      | j        ¦  «        }‰                     |||dœ| j        ¬¦  «        S )Nr  )Útool_call_id)Ú_get_or_create_resourcesÚstateÚ_run_shell_toolr  )rî   re   rŒ   Ú	resourcesrG   s       €r:   Ú
shell_toolz0ShellToolMiddleware.__init__.<locals>.shell_tool]  sK   ø€ ð ×5Ò5°g´mÑDÔDˆIØ×'Ò'ØØ#°Ð8Ð8Ø$Ô1ð (ñ ô ð rI   )rî   r  re   rí   rŒ   r\   r1   r  )Úsuperrz   r   Ú_workspace_rootÚ
_tool_nameÚ_normalize_shell_commandÚ_shell_commandÚ_normalize_envrn   Ú_execution_policyr   ÚtupleÚ_redaction_rulesÚ_normalize_commandsÚ_startup_commandsÚ_shutdown_commandsÚDEFAULT_TOOL_DESCRIPTIONr%   rì   Ú_shell_toolÚtools)rG   rü   rõ   rö   r÷   rø   rù   rú   rû   r|   Úrulesr
  r  Ú	__class__s   `            €r:   rz   zShellToolMiddleware.__init__  sm  øø€ õb 	‰Œ×ÒÑÔÐØ7EÐO�t NÑ3Ô3Ð3È4ˆÔØ#ˆŒØ"×;Ò;¸MÑJÔJˆÔØ ×/Ò/°Ñ4Ô4ˆÔØÐ'Ø%5ˆDÔ"Ð"å%8Ñ%:Ô%:ˆDÔ"ØÐ% 2ˆÝCHð I
ð I
Ø',ðI
ñ I
ô I
ñ D
ô D
ˆÔð "&×!9Ò!9Ð:JÑ!KÔ!KˆÔØ"&×":Ò":Ð;LÑ"MÔ"MˆÔð 'ÐBÕ*Bˆå	ˆdŒo­?ÈÐ	TÑ	TÔ	Tð #'Ø!ð		ð 	ð 	ð 	ð 	ð 	ð 	ñ 
UÔ	Tð	ð &ˆÔØÔ&Ð'ˆŒ
ˆ
ˆ
rI   Úcommandsrf   c                óX   — | €dS t          | t          ¦  «        r| fS t          | ¦  «        S )NrP   )Ú
isinstancerX   r  )r&  s    r:   r  z'ShellToolMiddleware._normalize_commandsn  s5   € ð ÐØ�2Ý�h¥Ñ$Ô$ð 	Ø�;ÐÝ�X‰ŒÐrI   c                ó‚   — | €dS t          | t          ¦  «        r| fnt          | ¦  «        }|sd}t          |¦  «        ‚|S )N)z	/bin/bashz1Shell command must contain at least one argument.)r(  rX   r  ré   )rû   Ú
normalizedrŠ   s      r:   r  z,ShellToolMiddleware._normalize_shell_commandx  sS   € ð Ð Ø!�>Ý)3°MÅ3Ñ)GÔ)GÐa�mÐ%Ð%ÍUÐS`ÑMaÔMaˆ
Øð 	"ØEˆCÝ˜S‘/”/Ð!ØÐrI   údict[str, str] | Nonec                ó¶   — | €d S i }|                       ¦   «         D ]=\  }}t          |t          ¦  «        sd}t          |¦  «        ‚t          |¦  «        ||<   Œ>|S )Nz+Environment variable names must be strings.)Úitemsr(  rX   Ú	TypeError)r|   r*  Úkeyrç   rŠ   s        r:   r  z"ShellToolMiddleware._normalize_env„  sf   € àˆ;Ø�4Ø%'ˆ
ØŸ)š)™+œ+ð 	)ð 	)‰JˆC�Ý˜c¥3Ñ'Ô'ð %ØC�Ý ‘n”nÐ$Ý! %™jœjˆJ�s‰OˆOØÐrI   r  úShellToolState[ResponseT]rî   úRuntime[ContextT]údict[str, Any] | Nonec                ó4   — |                       |¦  «        }d|iS )zöStart the shell session and run startup commands.

        Args:
            state: The current agent state.
            runtime: The runtime context.

        Returns:
            Shell session resources to be stored in the agent state.
        rS   )r  ©rG   r  rî   r  s       r:   Úbefore_agentz ShellToolMiddleware.before_agent�  s"   € ð ×1Ò1°%Ñ8Ô8ˆ	Ø)¨9Ð5Ð5rI   c              ƒ  ó@   K  — t          d| j        ||¦  «        ƒ d{V —†S )züAsync start the shell session and run startup commands.

        Args:
            state: The current agent state.
            runtime: The runtime context.

        Returns:
            Shell session resources to be stored in the agent state.
        N)r   r5  ©rG   r  rî   s      r:   Úabefore_agentz!ShellToolMiddleware.abefore_agent   s1   è è € õ % T¨4Ô+<¸eÀWÑMÔMÐMÐMÐMÐMÐMÐMÐMrI   c                óî   — |                      d¦  «        }t          |t          ¦  «        sdS 	 |                      |j        ¦  «         |                     ¦   «          dS # |                     ¦   «          w xY w)zDRun shutdown commands and release resources when an agent completes.rS   N)r´   r(  r=   Ú_run_shutdown_commandsr+   rA   r4  s       r:   Úafter_agentzShellToolMiddleware.after_agent®  sz   € ð —I’IÐ7Ñ8Ô8ˆ	Ý˜)Õ%6Ñ7Ô7ð 	àˆFð	"Ø×'Ò'¨	Ô(9Ñ:Ô:Ð:à×ÒÑ!Ô!Ð!Ð!Ð!øˆI×ÒÑ!Ô!Ð!Ð!øøøs   ®A ÁA4c              ƒ  ó2   K  — |                       ||¦  «        S )zJAsync run shutdown commands and release resources when an agent completes.)r;  r7  s      r:   Úaafter_agentz ShellToolMiddleware.aafter_agentº  s   è è € ð ×Ò  wÑ/Ô/Ð/rI   r=   c                ó¬   — |                      d¦  «        }t          |t          ¦  «        r|S |                      ¦   «         }|t	          d|¦  «        d<   |S )aÈ  Get existing resources from state or create new ones if they don't exist.

        This method enables resumability by checking if resources already exist in the state
        (e.g., after an interrupt), and only creating new resources if they're not present.

        Args:
            state: The agent state which may contain shell session resources.

        Returns:
            Session resources, either retrieved from state or newly created.
        rS   údict[str, Any])r´   r(  r=   Ú_create_resourcesr   )rG   r  r  Únew_resourcess       r:   r  z,ShellToolMiddleware._get_or_create_resourcesÀ  s\   € ð —I’IÐ7Ñ8Ô8ˆ	Ý�iÕ!2Ñ3Ô3ð 	ØÐà×.Ò.Ñ0Ô0ˆàCP�Ð˜uÑ%Ô%Ð&?Ñ@ØÐrI   c                ód  — | j         }d }|€/t          j        t          ¬¦  «        }t	          |j        ¦  «        }n|}|                     dd¬¦  «         t          || j        | j	        | j
        pi ¦  «        }	 |                     ¦   «          t                               d|¦  «         |                      |¦  «         n^# t          $ rQ t                               d¦  «         |                     | j        j        ¦  «         |�|                     ¦   «          ‚ w xY wt)          ||| j        ¬¦  «        S )N)ÚprefixT)ÚparentsÚexist_okzStarted shell session in %sz5Starting shell session failed; cleaning up resources.)r+   r-   r>   )r  ÚtempfileÚTemporaryDirectoryr   r   ÚnameÚmkdirr,   r  r  rn   rˆ   r•   ÚinfoÚ_run_startup_commandsÚBaseExceptionÚ	exceptionr8   rE   r9   r=   )rG   rd   r-   Úworkspace_pathr+   s        r:   r@  z%ShellToolMiddleware._create_resourcesÕ  s:  € ØÔ(ˆ	Ø;?ˆØÐÝÔ1Õ9JÐKÑKÔKˆGÝ! '¤,Ñ/Ô/ˆNˆNà&ˆNØ× Ò ¨¸Ð Ñ=Ô=Ð=åØØÔ"ØÔØÔÐ# ñ	
ô 
ˆð		Ø�MŠM‰OŒOˆOÝ�KŠKÐ5°~ÑFÔFÐFØ×&Ò& wÑ/Ô/Ð/Ð/øÝð 	ð 	ð 	Ý×ÒÐTÑUÔUÐUØ�LŠL˜Ô/ÔCÑDÔDÐDØÐ"Ø—’Ñ!Ô!Ð!Øð	øøøõ !¨¸'È$ÔJ`ÐaÑaÔaÐas   Á8AB= Â=ADr+   r,   c                óÆ   — | j         sd S | j         D ]O}|                     || j        j        ¬¦  «        }|j        s	|j        dvrd|› d|j        › �}t          |¦  «        ‚ŒPd S )Nr�   ¾   Nr   zStartup command 'z' failed with exit code )r  r«   r  Ústartup_timeoutr]   r[   r…   )rG   r+   re   ÚresultrŠ   s        r:   rK  z)ShellToolMiddleware._run_startup_commandsò  s�   € ØÔ%ð 	ØˆFØÔ-ð 	(ð 	(ˆGØ—_’_ W°dÔ6LÔ6\�_Ñ]Ô]ˆFØÔð ( FÔ$4¸IÐ$EÐ$EØ]¨'Ð]Ð]È6ÔK[Ð]Ð]�Ý" 3Ñ'Ô'Ð'ð %Fð	(ð 	(rI   c                óŽ  — | j         sd S | j         D ]³}	 |                     || j        j        ¬¦  «        }|j        rt
                               d|¦  «         n*|j        dvr!t
                               d||j        ¦  «         Œr# t          t          t          f$ r(}t
                               d||d¬¦  «         Y d }~Œ¬d }~ww xY wd S )Nr�   z Shutdown command '%s' timed out.rP  z%Shutdown command '%s' exited with %s.z'Failed to run shutdown command '%s': %sTrŽ   )r   r«   r  Úcommand_timeoutr]   r•   rÁ   r[   r…   r   r”   )rG   r+   re   rR  Úexcs        r:   r:  z*ShellToolMiddleware._run_shutdown_commandsû  s  € ØÔ&ð 	ØˆFØÔ.ð 	ð 	ˆGðØ Ÿš¨¸$Ô:PÔ:`˜ÑaÔa�ØÔ#ð Ý—N’NÐ#EÀwÑOÔOÐOÐOØÔ%¨YÐ6Ð6Ý—N’NØ?ÀÈ&ÔJZñô ð øøõ !¥-µÐ9ð ð ð Ý—’Ø=¸wÈÐVZð ñ ô ð ð ð ð ð ð øøøøðøøøð	ð 	s   ”A.BÂCÂB=Â=CÚcontentú%tuple[str, dict[str, list[PIIMatch]]]c                ó¶   — i }|}| j         D ]J}|                     |¦  «        \  }}|r.|                     |j        g ¦  «                             |¦  «         ŒK||fS )z3Apply configured redaction rules to command output.)r  ÚapplyÚ
setdefaultÚpii_typeÚextend)rG   rV  Úmatches_by_typeÚupdatedr  Úmatchess         r:   Ú_apply_redactionsz%ShellToolMiddleware._apply_redactions  sq   € à57ˆØˆØÔ)ð 	Nð 	NˆDØ#Ÿzšz¨'Ñ2Ô2ÑˆG�WØð NØ×*Ò*¨4¬=¸"Ñ=Ô=×DÒDÀWÑMÔMÐMøØ˜Ð'Ð'rI   r  rª   r?  r  r   c               ó   — d S r4   rP   ©rG   r  rª   r  s       r:   r  z#ShellToolMiddleware._run_shell_tool  s	   € ð �crI   c               ó   — d S r4   rP   rb  s       r:   r  z#ShellToolMiddleware._run_shell_tool  s	   € ð ˆcrI   r  c          
     ó¬  — |j         }|                     d¦  «        r�t                               d¦  «         	 |                     ¦   «          |                      |¦  «         n># t          $ r1}t                               d¦  «         d}t          |¦  «        |‚d }~ww xY wd}|  	                    ||d¬¦  «        S |                     d¦  «        }|rt          |t          ¦  «        sd	}t          |¦  «        ‚t                               d
|¦  «         |                     || j        j        ¬¦  «        }	|	j        r/| j        j        }
d|
d›d�}|  	                    ||ddd dœ¬¦  «        S 	 |                      |	j        ¦  «        \  }}np# t$          $ rc}t                               d|j        ¦  «         d|j        › d�}|  	                    ||dd|	j        |j        |j        idœ¬¦  «        cY d }~S d }~ww xY w|pd}|	j        r,|                     ¦   «         › d| j        j        › d|	j        › d�}|	j        r8| j        j        �,|                     ¦   «         › d| j        j        › d|	j        › d�}|	j        dvr!|                     ¦   «         › d|	j        › �}d}nd}d|	j        |	j        |	j        |	j        |	j        |dœ}|  	                    ||||¬¦  «        S ) NrŒ   z$Restarting shell session on request.z=Restarting shell session failed; session remains unavailable.z Failed to restart shell session.zShell session restarted.Úsuccess)rÈ   re   zDShell tool expects a 'command' string when restart is not requested.zExecuting shell command: %sr�   zError: Command timed out after z.1fz	 seconds.ÚerrorT)r]   r[   )rÈ   Úartifactz+Blocking command output due to detected %s.zOutput blocked: detected ú.F)r]   r[   r_  z<no output>z

... Output truncated at z lines (observed z).z bytes (observed rP  z

Exit code: )r]   r[   r^   r_   ra   rb   Úredaction_matches)r+   r´   r•   rJ  rŒ   rK  rL  rM  r   Ú_format_tool_messager(  rX   r«   r  rT  r]   r`  rY   r   rÁ   r[  r[   r_  r^   r¿   r½   ra   r_   r¾   rb   )rG   r  rª   r  r+   ÚerrrŠ   Úmessagere   rR  Útimeout_secondsÚsanitized_outputr_  rf  Úfinal_statusrg  s                   r:   r  z#ShellToolMiddleware._run_shell_tool(  s·  € ð Ô#ˆà�;Š;�yÑ!Ô!ð 
	VÝ�KŠKÐ>Ñ?Ô?Ð?ð2Ø—’Ñ!Ô!Ð!Ø×*Ò*¨7Ñ3Ô3Ð3Ð3øÝ ð 2ð 2ð 2Ý× Ò Ð!`ÑaÔaÐaØ8�Ý# CÑ(Ô(¨cÐ1øøøøð2øøøð 1ˆGØ×,Ò,¨W°lÈ9Ð,ÑUÔUÐUà—+’+˜iÑ(Ô(ˆØð 	%�j¨µ#Ñ6Ô6ð 	%ØXˆCÝ Ñ$Ô$Ð$å�ŠÐ1°7Ñ;Ô;Ð;Ø—’ °$Ô2HÔ2X�ÑYÔYˆàÔð 	Ø"Ô4ÔDˆOØV¸ÐVÐVÐVÐVˆGØ×,Ò,ØØØà!%Ø!%ðð ð	 -ñ ô ð ð	Ø(,×(>Ò(>¸v¼}Ñ(MÔ(MÑ%Ð˜g˜gøÝ ð 	ð 	ð 	Ý�NŠNÐHÈ%Ì.ÑYÔYÐYØC°%´.ÐCÐCÐCˆGØ×,Ò,ØØØà!&Ø!'Ô!1Ø %¤°´Ð>ðð ð	 -ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøøð	øøøð ,Ð<¨}ÐØÔ$ð 	à#×*Ò*Ñ,Ô,ð 4ð 4Ø+/Ô+AÔ+Rð4ð 4à#Ô/ð4ð 4ð 4ð ð
 Ô$ð 	¨Ô)?Ô)PÐ)\à#×*Ò*Ñ,Ô,ð 4ð 4Ø+/Ô+AÔ+Rð4ð 4à#Ô/ð4ð 4ð 4ð ð Ô 9Ð,Ð,Ø"2×"9Ò"9Ñ";Ô";Ð^Ð^ÈFÔL\Ð^Ð^ÐØ8?ˆLˆLà$ˆLð ØÔ)Ø"(Ô";Ø"(Ô";Ø!Ô-Ø!Ô-Ø!(ð
ð 
ˆð ×(Ò(ØØØØð	 )ñ 
ô 
ð 	
s6   ¸)A" Á"
BÁ,,BÂBÅ*F Æ
G5ÆAG0Ç*G5Ç0G5)rg  rÈ   úLiteral['success', 'error']rg  c               ó   — d S r4   rP   ©rG   rV  r  rÈ   rg  s        r:   rj  z(ShellToolMiddleware._format_tool_message‡  s	   € ð �crI   c               ó   — d S r4   rP   rr  s        r:   rj  z(ShellToolMiddleware._format_tool_message‘  s	   € ð ˆcrI   c               óD   — |pi }|€|S t          ||| j        ||¬¦  «        S )N)rV  r  rH  rÈ   rg  )r   r  rr  s        r:   rj  z(ShellToolMiddleware._format_tool_message›  s@   € ð �>˜rˆØÐØˆNÝØØ%Ø”ØØð
ñ 
ô 
ð 	
rI   r4   )rü   rý   rõ   rþ   rö   rþ   r÷   rÿ   rø   r   rù   rí   rú   rX   rû   r  r|   r  r1   r2   )r&  rþ   r1   rf   )rû   r  r1   rf   )r|   r  r1   r+  )r  r0  rî   r1  r1   r2  )r  r0  rî   r1  r1   r2   )r  r0  r1   r=   )r1   r=   )r+   r,   r1   r2   )rV  rX   r1   rW  )r  r=   rª   r?  r  rX   r1   r   )r  r=   rª   r?  r  r2   r1   rX   )r  r=   rª   r?  r  rí   r1   r  )
rV  rX   r  rX   rÈ   rp  rg  r2  r1   r   )
rV  rX   r  r2   rÈ   rp  rg  r2  r1   rX   )
rV  rX   r  rí   rÈ   rp  rg  r2  r1   r  )rK   rL   rM   rN   rR   Ústate_schemaÚSHELL_TOOL_NAMErz   rê   r  r  r  r   r5  r8  r;  r=  r  r@  rK  r:  r`  r   r  rj  Ú__classcell__)r%  s   @r:   rô   rô     s–  ø€ € € € € ðð ð  "€Lð -1ðS(ð FJØFJØ7;ØRVØ'+Ø(Ø48Ø(,ðS(ð S(ð S(ð S(ð S(ð S(ð S(ð S(ðj ðð ð ñ „\ðð ð	ð 	ð 	ñ „\ð	ð ð	ð 	ð 	ñ „\ð	ð ð6ð 6ð 6ñ „Xð6ðNð Nð Nð Nð ð	"ð 	"ð 	"ñ „Xð	"ð0ð 0ð 0ð 0ðð ð ð ð*bð bð bð bð:(ð (ð (ð (ðð ð ð ð"(ð (ð (ð (ð ðð ð ñ „Xðð ðð ð ñ „Xðð]
ð ]
ð ]
ð ]
ð~ ð +/ðð ð ð ð ñ „Xðð ð +/ðð ð ð ð ñ „Xðð +/ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rI   rô   )r   r   r   r   rô   )r+   r,   r-   r.   r/   r0   r1   r2   )QrN   Ú
__future__r   r5   ÚloggingrÒ   rq   rÖ   r™   rF  rt   r¢   rŸ   rC   Údataclassesr   r   Úpathlibr   Útypingr   r   r	   r
   r   r   Úlangchain_core.messagesr   Úlangchain_core.runnablesr   Úlangchain_core.tools.baser   Ú"langgraph.channels.untracked_valuer   Úpydanticr   r   Úpydantic.json_schemar   Útyping_extensionsr   r   Ú&langchain.agents.middleware._executionr   r   r   r   r   Ú&langchain.agents.middleware._redactionr   r   r   r   Ú!langchain.agents.middleware.typesr   r    r!   r"   r#   Úlangchain.toolsr$   r%   Úcollections.abcr&   r'   Úlanggraph.runtimer(   Ú	getLoggerrK   r•   rž   r!  rv  r;   r=   rR   rW   r,   rì   rô   Ú__all__rP   rI   r:   ú<module>rŒ     s  ðØ @Ð @à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià /Ð /Ð /Ð /Ð /Ð /Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø =Ð =Ð =Ð =Ð =Ð =Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø /Ð /Ð /Ð /Ð /Ð /Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ð -Ð -àð *Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1à)Ð)Ð)Ð)Ð)Ð)ð 
ˆÔ	˜8Ñ	$Ô	$€Ø)Ð ðQð ð €ðð ð ð ð ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ð$	ð 	ð 	ð 	ð 	�Z 	Ô*ñ 	ô 	ð 	ð €�$ÐÑÔð	ð 	ð 	ð 	ð 	ñ 	ô 	ñ Ôð	ðkð kð kð kð kñ kô kð kð\ð ð ð ð �iñ ô ð ð6f
ð f
ð f
ð f
ð f
˜/¨.¸Ô*CÀXÈyÐ*XÔYñ f
ô f
ð f
ðRð ð €€€rI   