
    4li                     N   S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJrJ	r	J
r
   " S S5      r\S:X  a\  \" S5      r \" S5        \R                  5       r\" S\" \5       S	35        \(       a  \" S
\S    S    35        \R%                  5         gg! \R%                  5         f = f)    N)DictAnyListOptionalc            	           \ rS rSrSrSS\S\\\4   4S jjrS rS r	S	 r
SS
\S\\\4   S\\\4   4S jjrSS
\S\\\4   4S jjrS\\\\4      4S jrS\S\\\4   S\\\4   4S jrS rSrg)GHLMCPBridge	   zp
Bridges Genesis Python environment to the GHL MCP Node.js server.
Implements standard MCP JSON-RPC over stdio.
N
server_direnvc                    Xl         S U l        SU l        0 U l        SU l        / U l        0 U l        [        R                  R                  5        H<  u  p4Uc  M
  UR                  SS5      nUR                  SS5      nX`R                  U'   M>     [        R                  R                  US5      n[        R                  R                  U5      (       a  [        US5       nU H  n	U	R                  5       n	SU	;   d  M  U	R!                  S5      (       a  M3  U	R#                  SS5      n
[%        U
5      S	:X  d  MV  U
u  pUR                  5       R                  SS5      nUR                  5       R                  S
5      R                  S5      R                  SS5      nX`R                  U'   M     S S S 5        U(       a  U R                  R'                  U5        g g ! , (       d  f       N2= f)N   F  z.envr=#   "')r
   process
request_idpending_requestsinitializedtoolsr   osenvironitemsreplacepathjoinexistsopenstrip
startswithsplitlenupdate)selfr
   r   kvclean_kclean_venv_pathflinepartskeyvals                )e:\genesis-system\tools\ghl_mcp_bridge.py__init__GHLMCPBridge.__init__   s|   $ " 
 JJ$$&DA}))D"-))D"-$+!	 ' 77<<
F377>>(##h$D::<Dd{4??3+?+? $

3 2u:?',HC&)iik&9&9$&CG&)iik&7&7&<&B&B3&G&O&OPTVX&YG07HHW-  % HHOOC   %$s   G=GG8A4G
G&c                    Sn[         R                  R                  U R                  SS5      R	                  SS5      nX/n[        SSR                  U5       35         [        R                  " UU R                  R	                  SS5      [        R                  [        R                  [        R                  SU R                  R                  5        VVs0 s H  u  pEU[        U5      _M     snnS	S
S9	U l        [        R                  " U R                   SS9R#                  5         [        R                  " U R$                  SS9R#                  5         gs  snnf ! [         a^  n[        SU 35        U R                  R                  5        H+  u  pESU;   d  S[        U5      ;   d  M  [        SU S35        M-     UeSnAff = f)z&Starts the MCP server as a subprocess.nodedistz	server.jsr   r   z[Bridge] Starting GHL Server:  Tr   zutf-8)cwdstdinstdoutstderrtextr   bufsizeencodingu$   ❌ [Bridge] Subprocess ValueError: z   [Culprit] ENV z: (has null)N)targetdaemon)r   r   r    r
   r   print
subprocessPopenPIPEr   r   strr   
ValueError	threadingThread_read_stderrstart_read_stdout)r(   	node_pathjs_pathcmdr)   r*   es          r3   _start_serverGHLMCPBridge._start_server1   sn    	'',,tDLLTSUV".sxx}o>?	%++OO++D"5 oo!!+/88>>+;<+;41QAY+;< 
DL( 	 1 1$?EEG 1 1$?EEG =  	8<=(19A-aS=> ) G	s2   A7E E.E E 
G&A F?*F??Gc                     U R                   R                   H,  n[        SUR                  5        3[        R                  S9  M.     g )Nz[GHL-MCP-LOG] )file)r   r=   rC   r#   sys)r(   r/   s     r3   rK   GHLMCPBridge._read_stderrR   s1    LL''DN4::<.1

C (    c                 
   U R                   R                   HN  n [        R                  " U5      nSU;   a&  US   nX0R                  ;   a  X R                  U'   MD  MF  SU;   a  MN  MP     g ! [        R
                   a     Mj  f = f)Nidmethod)r   r<   jsonloadsr   JSONDecodeError)r(   r/   msgreq_ids       r3   rM   GHLMCPBridge._read_stdoutV   s    LL''D
jj&3; YF!6!668;--f5 7_ % ( '' s   >A*A**BBr[   paramsreturnc                    U R                   (       dA  U R                  5         U R                  SS0 SSS.S.5        U R                  S5        SU l        U R
                  nU =R
                  S	-  sl        S
UUU=(       d    0 S.nS U R                  U'   U R                   R                  R                  [        R                  " U5      S-   5        U R                   R                  R                  5         [        R                  " 5       nU R                  U   cK  [        R                  " 5       U-
  S:  a  SSSS.0$ [        R                  " S5        U R                  U   c  MK  U R                  R                  U5      $ )N
initializez
2024-11-05zgenesis-bridgez1.0.0)nameversion)protocolVersioncapabilities
clientInfoznotifications/initializedTr   2.0)jsonrpcrZ   r[   rb   
   errori zRequest timeout)codemessageg?)r   rR   _send_request_send_notificationr   r   r   r;   writer\   dumpsflushtimesleeppop)r(   r[   rb   r`   request
start_times         r3   rr   GHLMCPBridge._send_requestd   sH   || |#/ "'7GL. 
 ##$?@#D1 l	
 )-f%  G!4t!;<  " YY[
##F+3yy{Z'",&=N!OPPJJsO ##F+3
 $$((00rX   c                     SUU=(       d    0 S.nU R                   R                  R                  [        R                  " U5      S-   5        U R                   R                  R                  5         g )Nrk   )rl   r[   rb   rm   )r   r;   rt   r\   ru   rv   )r(   r[   rb   notifications       r3   rs   GHLMCPBridge._send_notification   sT    l

 	  L!9D!@A  "rX   c                     U R                  S5      nSU;   a&  US   R                  S/ 5      U l        U R                  $ / $ )Nz
tools/listresultr   )rr   getr   )r(   responses     r3   
list_toolsGHLMCPBridge.list_tools   sB    %%l3x!(+//<DJ::	rX   	tool_name	argumentsc                 0    U R                  SUUS.5      nU$ )Nz
tools/call)rf   r   )rr   )r(   r   r   r   s       r3   	call_toolGHLMCPBridge.call_tool   s&    %%l"5
  rX   c                 j    U R                   (       a"  U R                   R                  5         S U l         g g N)r   	terminate)r(   s    r3   stopGHLMCPBridge.stop   s%    <<LL""$DL rX   )r   r   r   r   r   r
   r   r   )__name__
__module____qualname____firstlineno____doc__rG   r   r4   rR   rK   rM   r   rr   rs   r   r   r   r   __static_attributes__ rX   r3   r   r   	   s    
 !3  !T#s(^  !DHBD!1C !1c3h !14PSUXPX> !1F# #d38n #Dc3h0 3 4S> d3PS8n  rX   r   __main__z!E:\genesis-system\mcp-servers\ghlz[TEST] Fetching tools...z[TEST] Found z tools.z[TEST] First tool: rf   )r\   rD   r   rV   rI   rw   typingr   r   r   r   r   r   bridgerC   r   r   r&   r   r   rX   r3   <module>r      s      	 
   , ,X  X t z>?F()!!#c%j\12'a(8'9:;  	s   AB B$