o
    +i                     @  sj   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ dZdZG d	d
 d
e	Zd
gZdS )z7Anthropic-specific middleware for the Claude bash tool.    )annotations)	AwaitableCallable)Any)ShellToolMiddleware)ModelRequestModelResponsebash_20250124bashc                      sJ   e Zd ZdZ	ddddddddd fddZd ddZd!ddZ  ZS )"ClaudeBashToolMiddlewarez?Middleware that exposes Anthropic's native bash tool to models.N)startup_commandsshutdown_commandsexecution_policyredaction_rulestool_descriptionenvworkspace_root
str | Noner   (tuple[str, ...] | list[str] | str | Noner   r   
Any | Noner   "tuple[Any, ...] | list[Any] | Noner   r   dict[str, Any] | NonereturnNonec                  s"   t  j||||||td|d	 dS )a  Initialize middleware for Claude's native bash tool.

        Args:
            workspace_root: Base directory for the shell session.
                If omitted, a temporary directory is created.
            startup_commands: Optional commands executed after the session starts.
            shutdown_commands: Optional commands executed before session shutdown.
            execution_policy: Execution policy controlling timeouts and limits.
            redaction_rules: Optional redaction rules to sanitize output.
            tool_description: Optional override for tool description.
            env: Optional environment variables for the shell session.
        )z	/bin/bash)	r   r   r   r   r   r   	tool_nameshell_commandr   N)super__init__BASH_TOOL_NAME)selfr   r   r   r   r   r   r   	__class__ `/var/www/html/psymed-ai/venv/lib/python3.10/site-packages/langchain_anthropic/middleware/bash.pyr      s   
z!ClaudeBashToolMiddleware.__init__requestr   handler'Callable[[ModelRequest], ModelResponse]r   c                 C  s2   dd |j D }g |ttd}||j|dS )z:Replace parent's shell tool with Claude's bash descriptor.c                 S      g | ]}t |d dtkr|qS nameNgetattrr   .0tr"   r"   r#   
<listcomp>@       z<ClaudeBashToolMiddleware.wrap_model_call.<locals>.<listcomp>typer)   toolsr4   BASH_TOOL_TYPEr   overrider   r$   r%   filteredr4   r"   r"   r#   wrap_model_call:   s
   z(ClaudeBashToolMiddleware.wrap_model_call2Callable[[ModelRequest], Awaitable[ModelResponse]]c                   s:   dd |j D }g |ttd}||j|dI dH S )zAAsync: replace parent's shell tool with Claude's bash descriptor.c                 S  r'   r(   r*   r,   r"   r"   r#   r/   L   r0   z=ClaudeBashToolMiddleware.awrap_model_call.<locals>.<listcomp>r1   r3   Nr5   r8   r"   r"   r#   awrap_model_callF   s   z)ClaudeBashToolMiddleware.awrap_model_call)N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r$   r   r%   r&   r   r   )r$   r   r%   r;   r   r   )__name__
__module____qualname____doc__r   r:   r<   __classcell__r"   r"   r    r#   r      s    
$r   N)r@   
__future__r   collections.abcr   r   typingr   &langchain.agents.middleware.shell_toolr   !langchain.agents.middleware.typesr   r   r6   r   r   __all__r"   r"   r"   r#   <module>   s    
@