
    im2              
          d dl mZmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZ  e       Zded	ed
ededef
dZej?                  d      d        Z ej?                  d      defd       Z!ej?                  d      defd       Z"ejG                  d      de	fd       Z$ejK                  d      dedefd       Z&ejO                  d      defd       Z(ejG                  d      dedefd       Z)ejG                  d      dedefd       Z*ej?                  d      defd        Z+y!)"    )	APIRouterHTTPException)Any)WorkflowCopyRequestWorkflowRenameRequestWorkflowUpdateContentRequestWorkflowUploadContentRequest)copy_workflowpersist_workflowrename_workflowvalidate_workflow_contentvalidate_workflow_filename)YAML_DIR)ResourceConflictErrorResourceNotFoundErrorSecurityErrorValidationErrorWorkflowExecutionError)get_server_loggerLogTypefilenamecontentallow_overwriteactionsuccess_messagec                   	 t        | j                         |      \  }}t        |z  }|j                         r|st	        dd      |j                         s|rt	        dd      t        ||||t               d||j                  |      d	S # t        $ r  t        $ r  t        $ r5}t               }	|	j                  |d
|        t        d| d|       d }~ww xY w)Ni  z8Workflow already exists; use the update API to overwritestatus_codedetail  Workflow file not found)r   	directorysuccess)r   statusr   messagez!Unexpected error during workflow z
Failed to z workflow: )r   stripr   existsr   r   formatr   	Exceptionr   log_exceptionr   )
r   r   r   r   r   safe_filenameyaml_content	save_pathexcloggers
             D/Users/bowang/.openclaw/workspace/ChatDev/server/routes/workflows.py_persist_workflow_from_contentr2      s    L&?@PRY&Z#|},	oC8rss!oC8QRRfX`a%&--}-E
 	

    L"$S$EfX"NO$z&SE%JKKLs   BB C +0CC z/api/workflowsc                     K   t        j                         sdg iS dt        j                  d      D  cg c]  } | j                   c} iS c c} w w)N	workflowsz*.yaml)r   r(   globname)files    r1   list_workflowsr8   @   sG     ??R  h0GH0G$))0GHIIHs   1AA
	Az/api/workflows/{filename}/argsc                 *  K   t        t               	 t        | d      }t        |       t        |z  }|j	                         r|j                         st        dd|      |j                  d      }t        ||      \  }}g }t        |t              r|j                  d      xs i }t        |t              r|j                  d	      xs g }t        |t              rt        |      d
k(  rt        dd|      |D ]  }	t        |	t              rt        |	      dk7  r"|	j                         \  \  }
}t        |
t              sHd|
i}t        |t              r>|D ]9  }t        |t              s|j                         D ]  \  }}||t        |      <    ; |j                  |        t!               }|j#                  dt$        j&                  |t        |             d	|iS # t(        $ r}t+        ddt        |      i      d }~wt,        $ r}t+        ddt        |      i      d }~wt        $ r}t+        ddt        |      i      d }~wt.        $ r6}t!               }|j1                  |d|         t+        ddd| i      d }~ww xY ww)NTrequire_yaml_extensionr!   workflowresource_typeresource_idutf-8encodinggraphargsr    Workflow file does not have args   r6   zWorkflow args retrieved)log_typer   
args_count  r&   r   r    +Unexpected error retrieving workflow args:   "Failed to retrieve workflow args: )printstrr   r   r(   is_filer   	read_textr   
isinstancedictgetlistlenitemsappendr   infor   WORKFLOWr   r   r   r*   r+   )r   r,   	file_pathraw_content_r-   rD   rC   raw_argsitemarg_name	spec_listarg_infospeckeyvaluer0   r/   s                     r1   get_workflow_argsre   G   s    	#JO
28TXYm},	!):):)<')()   ))7);3M;O<%'lD) $$W-3E%& 99V,2h-8})3>*4(5 
 !))$5Ta$15.-9)(C8$4:H3E%i6(1#-dD#96:jjl
U=BS(: 7C )2
 H- !)" #$%%%"4y	 	 	
 ~ 
s3x(
 	
  
s3x(
 	
 ! 
s3x(
 	
  
"$S$OPXz"Z[!CC5IJ
 	
	
sT   JEG% 0A4G% $J%	J.HJH**J6IJ1JJJz/api/workflows/{filename}/descc                 b  K   	 t        | d      }t        |z  }|j                         r|j                         st	        dd|      |j                  d      }t        ||      \  }}d}t        |t              rV|j                  d	      xs i }t        |t              r1|j                  d
      xs d}t        |      dk(  rt	        dd|      t               }|j                  dt        j                  |       d
|iS # t        $ r}	t!        ddt#        |	      i      d }	~	wt$        $ r}	t!        ddt#        |	      i      d }	~	wt        $ r}	t!        ddt#        |	      i      d }	~	wt&        $ r6}	t               }|j)                  |	d|         t!        ddd|	 i      d }	~	ww xY ww)NTr:   r!   r<   r=   r@   rA    rC   descriptionr   rE   zWorkflow description retrievedrG   r   rI   r&   r   r    rJ   rK   rL   )r   r   r(   rO   r   rP   r   rQ   rR   rS   rU   r   rX   r   rY   r   r   rN   r   r*   r+   )
r   r,   rZ   r[   r\   r-   descrC   r0   r/   s
             r1   get_workflow_descrk      s    :
28TXY},	!):):)<')()   ))7);3M;O<lD) $$W-3E%&yy/52t9>3>*4(5 
 #$,%%" 	 	

 t$$ 
s3x(
 	
  
s3x(
 	
 ! 
s3x(
 	
  
"$S$OPXz"Z[!CC5IJ
 	
	
sM   F/C<D  F/	F,
D""F,.EF,E**F,61F''F,,F/z/api/workflows/upload/contentrequestc                 R   K   t        | j                  | j                  ddd      S w)NFuploadz5Workflow {filename} created successfully from contentr   r   r   )r2   r   r   )rl   s    r1   upload_workflow_contentrp      s,     )O s   %'z /api/workflows/{filename}/updatec                 >   K   t        | |j                  ddd      S w)NTupdatez(Workflow {filename} updated successfullyro   )r2   r   )r   rl   s     r1   update_workflow_contentrs      s&     )B s   z /api/workflows/{filename}/deletec                 R  K   	 t        | d      }t        |z  }|j                         r|j                         st	        dd|      	 |j                          t               }|j                  d
t        j                  |       d|d| ddS # t        $ r3}t               }|j                  |d|        t        dd|i	      d }~ww xY w# t        $ r  t        $ r  t        $ r  t        $ r2}t               }|j                  |d|         t        d|       d }~ww xY ww)NTr:   r!   r<   r=   z Failed to delete workflow file: zFailed to delete workflow filer   )detailszWorkflow file deletedri   deletedz
Workflow 'z' deleted successfullyr$   z$Unexpected error deleting workflow: zFailed to delete workflow: )r   r   r(   rO   r   unlinkr*   r   r+   r   rX   r   rY   r   r   )r   r,   rZ   r/   r0   s        r1   delete_workflowrx      sZ    &J28TXY},	!):):)<')() 	p #$#%%" 	 	
  %#M?2HI
 	
  	p&(F  (H&XY()IT^`mSnoo	p"      J"$S$H
"ST$'B3%%HIIJsM   D'AC 	B 5C D'	C.CCC $D$2-DD$$D'z /api/workflows/{filename}/renamec                 r  K   	 t        | |j                  t               dt        | d      t        |j                  d      d|j                   ddS # t        $ r  t
        $ r  t        $ r  t        $ r  t        $ r2}t               }|j                  |d|         t        d	|       d }~ww xY ww)
Nr"   r#   Tr:   zWorkflow renamed to '' successfullyr%   sourcetargetr&   z$Unexpected error renaming workflow: zFailed to rename workflow: )r   new_filenamer   r   r   r   r   r   r*   r   r+   r   r   rl   r/   r0   s       r1   rename_workflow_filer     s     J'"6"6(K0RVW01E1E^bc.w/C/C.DNS	
 	
        J"$S$H
"ST$'B3%%HIIJ)   B7AA B7-B4-B//B44B7z/api/workflows/{filename}/copyc                 r  K   	 t        | |j                  t               dt        | d      t        |j                  d      d|j                   ddS # t        $ r  t
        $ r  t        $ r  t        $ r  t        $ r2}t               }|j                  |d|         t        d	|       d }~ww xY ww)
Nrz   r#   Tr:   zWorkflow copied to 'r{   r|   z#Unexpected error copying workflow: zFailed to copy workflow: )r
   r   r   r   r   r   r   r   r*   r   r+   r   r   s       r1   copy_workflow_filer   4  s     Hh 4 4I0RVW01E1E^bc-g.B.B-C>R	
 	
        H"$S$Gz"RS$'@%FGGHr   z/api/workflows/{filename}/getc                   K   	 t        | d      }t        |z  }|j                         r|j                         st	        dd|      t        |dd      5 }|j                         }d d d        t               }|j                  d	t        j                  |
       diS # 1 sw Y   9xY w# t        $ r  t        $ r  t        $ r  t        $ r2}t               }|j                  |d|         t        d|       d }~ww xY ww)NTr:   r!   r<   r=   rr@   rA   zWorkflow file content retrievedri   r   z&Unexpected error retrieving workflow: zFailed to retrieve workflow: )r   r   r(   rO   r   openreadr   rX   r   rY   r   r   r*   r+   r   )r   r,   rZ   handler[   r0   r/   s          r1   get_workflow_raw_contentr   L  s    L28TXY},	!):):)<')()  )S73v ++-K 4 #$5@P@P[hi;'' 43      L"$S$J8*"UV$'DSE%JKKLsA   DAB+ B'7B+ DB($B+ +$D-C<<DDN),fastapir   r   typingr   server.modelsr   r   r   r	    server.services.workflow_storager
   r   r   r   r   server.settingsr   utils.exceptionsr   r   r   r   r   utils.structured_loggerr   r   routerrN   boolr2   rS   r8   re   rk   postrp   putrs   deleterx   r   r   r        r1   <module>r      s   ,    %  ?	LLL 	L
 L LD J J ,-Q
c Q
 .Q
h ,-;
c ;
 .;
| ,-+G  . ./C :V  0 12'JC 'J 3'JT /0J J7L J 1J. -.Hs H5H H /H. +,LS L -Lr   