
    i
                         d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ  G d de      Zy)z:GraphExecutor variant that reports results over WebSocket.    N)List)WorkflowLogger)GraphExecutor)GraphContext)AttachmentService)ArtifactDispatcher)WebPromptChannel)WorkflowSessionStore)SessionExecutionController)WorkspaceArtifactWorkspaceArtifactHookc                   j     e Zd ZdZ	 ddededededef
 fdZ	d	e
fd
Zd Zd Zdee   d	dfdZ xZS )WebSocketGraphExecutorz7GraphExecutor subclass that emits events via WebSocket.Ngraph
session_idsession_controllerattachment_servicesession_storec                       _          _         _         _        | _        i  _        t        |       _         fd}t        	 %  |||       y )Nc                 |    t        | j                        }t        | j                  j                  |      S )N)r   r   websocket_managerr   attachment_store)r   emit_callbackprompt_channel)r	   r   r   _handle_workspace_artifacts)runtime_contextr   r   selfr   r   r   s     O/Users/bowang/.openclaw/workspace/ChatDev/server/services/websocket_executor.pyhook_factoryz5WebSocketGraphExecutor.__init__.<locals>.hook_factory'   sF    -%#5"3#5!0!A!AN )!0!A!A">>-     )r   workspace_hook_factorycancel_event)
r   r   r   r   r   resultsr   artifact_dispatchersuper__init__)
r   r   r   r   r   r   r   r"   r   	__class__s
   ` ````   r   r&   zWebSocketGraphExecutor.__init__   so     %"4"4!2*#5j-Qb#c 	 	 	!#/%	 	 	
r    returnc                     ddl m}  || j                  | j                  | j                  j
                  | j                  j                        S )Nr   )WebSocketLogger) server.services.websocket_loggerr*   r   r   r   name	log_level)r   r*   s     r   _create_loggerz%WebSocketGraphExecutor._create_logger<   s5    Dt55t

Y]YcYcYmYmnnr    c                 ~   K   t        j                         j                  d | j                  |       d {    y 7 wN)asyncioget_event_looprun_in_executor_execute)r   task_prompts     r   execute_graph_asyncz*WebSocketGraphExecutor.execute_graph_asyncA   s+     $$&66tT]]KXXXs   3=;=c                     | j                   S r0   )outputs)r   s    r   get_resultsz"WebSocketGraphExecutor.get_resultsD   s    ||r    	artifactsc                 :    | j                   j                  |       y r0   )r$   emit_workspace_artifacts)r   r:   s     r   r   z2WebSocketGraphExecutor._handle_workspace_artifactsG   s      99)Dr    r0   )__name__
__module____qualname____doc__r   strr   r   r
   r&   r   r.   r6   r9   r   r   r   __classcell__)r'   s   @r   r   r      sw    A %
%
 %
 7	%

 .%
 ,%
No o
YET:K5L EQU Er    r   )r@   r1   typingr   utils.loggerr   workflow.graphr   workflow.graph_contextr   "server.services.attachment_servicer   #server.services.artifact_dispatcherr   server.services.prompt_channelr	   server.services.session_storer
   !server.services.session_executionr   !workflow.hooks.workspace_artifactr   r   r    r    r   <module>rN      s7    @   ' ( / @ B ; > H V6E] 6Er    