
    h              
       4   S r SSKrSSKrSSKJr  SSKJr  SSKr " S S5      r\S:X  Ga  \	" S5        \	" S	5        \	" S5        \" 5       r
\	" S
5        \
R                  SS5      r\	" S\S    35        \	" S\R                  S\R                  SS5      5       35        \	" S5        \
R                  SS5      r\	" S\R                  SS5       35        \	" S\S    35        \	" S5        \
R                  SSS5      r\	" S\S    35        \	" S\R                  S \R                  SS5      5       35        \	" S!5        \
R                  SS"5      r\	" S\S    35        \S   (       a  \	" S#\S$    35        \	" S%5        \
R!                  S&S'5      r\	" S\S    35        \	" S(\R                  S)/ 5       35        \	" S*5        \
R                  S+S,5      r\	" S\S   (       +  35        \	" S\R                  SS5       35        \	" S-5        \	" S.5        \	" S5        gg)/zN
Eden's Tool Interface
Provides safe, monitored access to system capabilities
    N)datetime)Pathc                   L    \ rS rSrS
S jrS rSS jrSS jrSS jrSS jr	Sr
g	)SafeToolkit   c                     [        U5      U l        U R                  R                  SSS9  [         R                  " 5       S-  U l        g )NTparentsexist_okzeden-agi-project)r   log_dirmkdirhomeproject_root)selfr   s     1/home/james-whalen/eden-agi-project/core/tools.py__init__SafeToolkit.__init__   s8    G}4$7 IIK*<<    c                 r   [         R                  " 5       R                  5       UU[        U5      SS US.nU R                  [         R                  " 5       R                  S5       S3-  n[        US5       nUR                  [        R                  " U5      S-   5        SSS5        g! , (       d  f       g= f)zLog every tool useNi  )	timestamptoolparamsresultsuccessz%Y-%m-%dz.jsonla
)
r   now	isoformatstrr   strftimeopenwritejsondumps)r   	tool_namer   r   r   	log_entrylog_filefs           r   _logSafeToolkit._log   s     "113&k$3'
	 <<X\\^%<%<Z%H$I"PP(C AGGDJJy)D01 !  s   6)B((
B6c           
      D  ^ / SQn[        U4S jU 5       5      (       a  SnU R                  STUS.US5        SUSS.$  [        R                  " TSSSS	[	        U R
                  5      S
9nUR                  S:H  UR                  UR                  SS.nU R                  STUS.XUS   5        U$ ! [        R                   a"    SSSS.nU R                  STUS.US5        Us $ [         a2  nS[	        U5      SS.nU R                  STUS.US5        Us SnA$ SnAff = f)z(Execute bash command in safe environment)rm -rf /zdd if=mkfsz:(){:|:&};:z>>/etc/z	curl httpwgetc              3   ,   >#    U  H	  oT;   v   M     g 7f)N ).0dcommands     r   	<genexpr>#SafeToolkit.bash.<locals>.<genexpr>#   s     /YG|Ys   z+BLOCKED: Dangerous command pattern detectedbash)r3   descFT)r   outputblocked   )shellcapture_outputtexttimeoutcwdr   )r   stdoutstderrr9   r   zCommand timeout (30s))r   errorr9   N)anyr)   
subprocessrunr   r   
returncoder@   rA   TimeoutExpired	Exception)r   r3   description	dangerousr   r8   rB   es    `      r   r6   SafeToolkit.bash    s3   a	/Y///BFIIf';GQVW$4HH	^^#))*F ",,1 -- -- 	F IIf';GXaQbcM(( 	 %0GTYZEIIf';GPUVL 	 %A5IEIIf';GPUVL	s%    A.B/ /3D$	D-'DDDc                 .    U R                   U-  n[        UR                  5       5      R                  [        U R                   5      5      (       d  SSS.$ UR	                  5       (       d  SSS.$ [        US5       nUR                  5       nSSS5        SW[        U5      S.nU R                  S	XS
.S[        U5       S3S5        U$ ! , (       d  f       NB= f! [         a0  nS[        U5      S.nU R                  S	XS
.US5        Us SnA$ SnAff = f)zRead file contents safelyF(Access denied: Outside project directoryr   rB   zFile not foundrNT)r   contentpath	read_filerR   r7   zRead  chars)
r   r   resolve
startswithexistsr!   readr)   lenrH   )	r   rR   rI   	full_pathr(   rQ   r   rK   rB   s	            r   rS   SafeToolkit.read_fileE   s   	))D0Iy((*+66s4;L;L7MNN#(3]^^##%%#(3CDDi%&&( & "&'3y>RFIIkD#F%PST[P\~]cHdfjkM &%  	 %A7EIIkD#FuUL	sB   AC C 0C <C	;C 	
CC 
D$%D	DDc                 B    U R                   U-  n[        UR                  5       5      R                  [        U R                   5      5      (       d  SSS.$ UR                  R                  SSS9  [        US5       nUR                  U5        SSS5        S[        U5      [        U5      S.nU R                  S	XS
.S[        U5       S3S5        U$ ! , (       d  f       NK= f! [         a0  nS[        U5      S.nU R                  S	XS
.US5        Us SnA$ SnAff = f)zWrite file safelyFrN   rO   Tr	   wN)r   rR   bytes
write_filerT   zWrote rU   )r   r   rV   rW   parentr   r!   r"   rZ   r)   rH   )	r   rR   rQ   rI   r[   r(   r   rK   rB   s	            r   r`   SafeToolkit.write_file\   s	   	))D0Iy((*+66s4;L;L7MNN#(3]^^""4$"?i%  & "&s9~GUFIIlT$G6RUV]R^Q__eIfhlmM &%  	 %A7EIIlT$GPUVL	s=   AC$ &C$ <CAC$ 
C!C$ $
D.%DDDc                 P    U R                   U-  n[        UR                  5       5      R                  [        U R                   5      5      (       d  SSS.$ UR	                  5       (       d  SSS.$ UR                  5        Vs/ s H'  n[        UR                  U R                   5      5      PM)     nnSU[        U5      S.nU R                  SXS.S	[        U5       S
3S5        U$ s  snf ! [         a0  nS[        U5      S.nU R                  SXS.US5        Us SnA$ SnAff = f)zList files in directoryFrN   rO   zDirectory not foundT)r   filescount
list_files)dirr7   zListed z itemsN)
r   r   rV   rW   rX   iterdirrelative_torZ   r)   rH   )	r   	directoryrI   r[   r(   rd   r   rK   rB   s	            r   rf   SafeToolkit.list_filesr   s   	))I5Iy((*+66s4;L;L7MNN#(3]^^##%%#(3HIIDMDUDUDWXDWqSt'8'89:DWEX!%E
KFIIlI$KwWZ[`WaVbbhMikopM	 Y  	 %A7EIIlI$KUTYZL	s<   AC+ C+ 0C+ .C&05C+ &C+ +
D%5%D D% D%)r   r   N)zdata/tool_logs) ).rl   )__name__
__module____qualname____firstlineno__r   r)   r6   rS   r`   rf   __static_attributes__r0   r   r   r   r      s!    =
2#J.,r   r   __main__z<============================================================zEDEN SAFE TOOLKIT TESTz
1. Testing bash command:zecho 'Hello from Eden!'ztest echo commandz   Success: r   z   Output: r@   rB   rl   z'
2. Testing dangerous command blocking:r,   ztest dangerous commandz   Blocked: r9   Fz   Message: r8   z
3. Testing file write:ztest_eden.txtz%Eden was here!
Building toward AGI...ztest file creationz	   Path: rR   z
4. Testing file read:ztest file readingz   Content:
   rQ   z
5. Testing file listing:rm   zlist project rootz
   Files: rd   z0
6. Testing security - trying to escape sandbox:z../../etc/passwdztest securityz=
============================================================z.TEST COMPLETE - Check data/tool_logs/ for logs)__doc__rD   osr   pathlibr   r#   r   rn   printtoolsr6   r   getr`   rS   rf   r0   r   r   <module>rz      sN  
  	   z zx z	(O	
"#	(OME	
&'ZZ13FGF	L	*+
,-	K

8VZZ-DEF
GH	
45ZZ
$<=F	LIu56
78	L)*
+,	
$%o/WYmnF	L	*+
,-	IfjjGR)@AB
CD	
#$___.ABF	L	*+
,-i 	!2 345	
&'c#67F	L	*+
,-	Jvzz'2./
01	
=>__/AF	LVI../
01	LGR01
23	/	
:;	(OQ r   