
    Pj                    ,   d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 dZ
dZ e	e      j                         j                  Zedz  Zedz  Zed	z  Z e	d
      Z e	d      ZddZddZddZddZddZdddZddZedk(  r e e             y)a  Fast, self-healing AgentV11 entrypoint for local MCSJ.

Examples:
  python C:/MCSJAgent/SwingBridge/mcsj-fast-fx.py ensure
  python C:/MCSJAgent/SwingBridge/mcsj-fast-fx.py state
  python C:/MCSJAgent/SwingBridge/mcsj-fast-fx.py find --panel-class ...
  python C:/MCSJAgent/SwingBridge/mcsj-fast-fx.py edit --panel-class ...
  python C:/MCSJAgent/SwingBridge/mcsj-fast-fx.py cell --panel-class ...
    )annotationsN)PathiW&  z	127.0.0.1zmcsj-swing-bridge-client.pyzAgentV15.jarzjattach32.exezC:/MCSJAgent/mcsj-jab-client.pyz&C:/MCSJAgent/cache/agentv15-owner.jsonc                 V   	 t        j                  t        t        fd      5 } | j	                  d       | j                  t         j                         | j                  d      j                  dd      j                         dk(  cd d d        S # 1 sw Y   y xY w# t        $ r Y y	w xY w)
N   timeouts   PING
@   utf-8replace)errorsPONGF)socketcreate_connectionHOSTPORTsendallshutdownSHUT_WRrecvdecodestripOSError)socks    )C:/MCSJAgent/SwingBridge/mcsj-fast-v11.pypingr      s    %%tTlA>$LL#MM&..)99R=''	'BHHJfT ?>>  s/   !B A#B	B BB B 	B('B(c                    t        j                  t        j                  t	        t
              dgddd      } | j                  dk7  r&t        d| j                  j                         z         	 t        j                  | j                        }|j                  d	      r|j                  d
      s!t        dt        j                  |      z         |S # t        j                  $ r!}t        d| j                  d d z         |d }~ww xY w)NstateT   capture_outputtextr   r   zJAB state failed: zJAB state was not JSON: i  okpidzMCSJ/JAB is not ready: )
subprocessrunsys
executablestr
JAB_CLIENT
returncodeRuntimeErrorstderrr   jsonloadsstdoutJSONDecodeErrorgetdumps)resultpayloadexcs      r   live_mcsj_stater6   (   s    ^^	Z'2$F A/&--2E2E2GGHHV**V]]+ ;;tGKK$64tzz'7JJKKN	  V5ds8KKLRUUVs   .C D%DDc                 ,   t        j                  g dddd      } t        j                  dt        z  t        j
                        }| j                  j                         D ]1  }|j                  |      }|st        |j                  d            c S  y )N)netstatz-anoz-pTCPT
   r   z7^\s*TCP\s+127\.0\.0\.1:%d\s+\S+\s+LISTENING\s+(\d+)\s*$   )r$   r%   recompiler   Ir/   
splitlinesmatchintgroup)r3   patternliner@   s       r   port_owner_pidrE   8   sw    ^^<TX\fhiFjjSVZZ\^\`\`aG((*d#u{{1~&& +     c                     	 t        j                  t        j                  d            S # t        t         j
                  f$ r Y y w xY w)Nr
   encoding)r-   r.   OWNER_CACHE	read_textr   r0    rF   r   read_owner_cacherM   B   sA    zz+///ABBT))* s   (+ AAc                    t         j                  j                  dd       t         j                  t	        j
                  | d      d       y )NT)parentsexist_ok,:
separatorsr
   rH   )rJ   parentmkdir
write_textr-   r2   )r4   s    r   write_owner_cacherY   I   s:    TD94::g*EPWXrF   c           
     2   t               }| r
t               nd }|r>||j                  d      k(  r*|r(t               rd|j                  dd      |t        |dddS t               }t        |d         }t               }|||k7  rt        dt        ||fz        d}||k(  r
t               st        j                  t        t              t        |      d	d
ddt        t        fz  gdddt        t                    }|j                  dk7  sd|j                  vr3t        d|j                  |j                   z   j#                         z         d}t               }||k7  s
t               st        d      d|j                  dd      |t        ||dd}t%        |       |S )Nr#   OKdatabaseTitle Fzpid-cache+port-owner+ping)statusr\   r#   portownerPidattachedNow
verifiedByz0port %d is owned by PID %d, not live MCSJ PID %dload
instrumentfalsez%s=%dT   )r    r!   r   cwdr   zResponse code = 0zAgentV11 attach failed: z?AgentV11 attached but port ownership/health verification failedtitlezJAB+port-owner+ping)rE   rM   r1   r   r   r6   rA   r+   r$   r%   r(   JATTACHAGENTROOTr*   r/   r,   r   rY   )allow_cachedownercachedr   r#   attachedr3   r4   s           r   ensure_agentrp   N   s   E#/TF%6::e,,46#ZZ< 5
 	
 E
eEl
CEUc\MQUW\^aPbbccHSLTV\3s8V\7GuVZmD[\dBCI
 !%8%M9V]]V]]=Z<a<a<ccdd C<tv`aa7B/+G gNrF   c            
        t         j                  dd  } | r| d   j                         nd}	 h d}h d}||vrt        d|z         t	        |dk7  xr ||v      }|dk(  r!t        t        j                  |d	
             ydddddddddd	}|j                  ||      g| dd  z   }t        j                  t         j                  t        t              dt        t              g|z   d      }|j                  S # t         $ rF}t        t        j                  dt        |      dd	
      t         j"                         Y d }~yd }~ww xY w)Nr;   r   r   >   celledit
fxedittextfxtablecellfxfirebuttonfxselectdatefxselectcombofxselectradiofire-buttonselect-dateselect-comboselect-radio>   rr   rs   findr   ensurefxfindfxstatert   ru   rv   rw   rx   ry   fxcombooptionsrz   r{   r|   r}   combo-optionsz-command is not exposed by hardened launcher: r   )rl   rQ   rT   r   r   rt   ru   ry   rv   r   rx   rw   )	r   r~   rs   rr   r}   rz   r   r|   r{   z--port<   r   ERROR)r^   message)file)r&   argvlowerr+   rp   printr-   r2   r1   r$   r%   r'   r(   CLIENTr   r*   	Exceptionr,   )	argscommandmutation_commandsallowed_commandsensuredaliases	forwardedr3   r5   s	            r   mainr   z   sU   88AB<D!%d1gmmo7G J \**NQXXYYW-@-eWTeEegh$**W<=%xWd  wF  We  xH  Zi  zH  I[['23d12h>	^^S[(CI>J
     djjGCAjY`c`j`jks   AC8 A6C8 8	E<EE__main__)returnbool)r   dict)r   z
int | None)r   zdict | None)r4   r   r   None)T)rl   r   r   r   )r   rA   )__doc__
__future__r   r-   r<   r   r$   r&   pathlibr   r   r   __file__resolverV   rk   r   rj   ri   r)   rJ   r   r6   rE   rM   rY   rp   r   __name__
SystemExitrL   rF   r   <module>r      s    #  	   
 H~&&	-	-~

 34
;< Y
)X0 z
TV
 rF   