
    PL
ji*                        d Z ddlmZ ddlZddlZddlmZ dd	ZddZddZ	d dZ
d!dZd"dZd#dZd!dZd$dZd%dZdS )&u8  ``hermes lsp`` CLI subcommand.

Subcommands:

- ``status`` — show service state, configured servers, install status.
- ``install <server_id>`` — eagerly install one server's binary.
- ``install-all`` — try to install every server with a known recipe.
- ``restart`` — tear down running clients so the next edit re-spawns.
- ``which <server_id>`` — print the resolved binary path for one server.
- ``list`` — print the registry of supported servers.

The handlers are kept here (rather than in
``hermes_cli/main.py``) so the LSP module ships self-contained.
    )annotationsN)Optional
subparsersargparse._SubParsersActionreturnNonec                   |                      ddd          }|                    d          }|                     dd	          }|                    d
dd           |                     dd	          }|                    ddd           |                     dd	          }|                    dd	           |                     dd	          }|                    ddd           |                     dd	          }|                     dd	          }|                    dd	           |                    t                     d S )!z?Wire the ``hermes lsp`` subcommand tree into the main argparse.lspz#Language Server Protocol managementzUManage the LSP layer that powers post-write semantic diagnostics in write_file/patch.)helpdescriptionlsp_command)deststatuszShow LSP service status)r   z--json
store_truezEmit machine-readable JSON)actionr   listzList supported language serversz--installed-onlyz5Only show servers whose binary is currently availableinstallzInstall a server binaryserverzServer id (e.g. pyright, gopls)install-allz5Install every server with a known auto-install recipez--include-manualz8Even attempt servers marked manual-install (best effort)restartz3Tear down running LSP clients (next edit re-spawns)whichzPrint binary path for a serverz	Server id)funcN)
add_parseradd_subparsersadd_argumentset_defaultsrun_lsp_command)	r   parsersub
sub_statussub_listsub_installsub_install_allsub_restart	sub_whichs	            1/home/kuhnn/.hermes/hermes-agent/agent/lsp/cli.pyregister_subparserr'      s   ""2/	 #  F 

]

3
3C/HIIJ,H     ~~f+L~MMHD     ..1J.KKKX,MNNNnnD %  O   G !    ..B !  K
 w-MNNI8+666
_-----    argsargparse.Namespaceintc                   t          | dd          pd}	 |dk    rt          t          | dd                    S |dk    rt          t          | dd                    S |dk    rt          | j                  S |d	k    rt          t          | d
d                    S |dk    rt                      S |dk    rt          | j                  S t          j	        
                    d| d           dS # t          $ r Y dS w xY w)z5Top-level dispatcher for ``hermes lsp <subcommand>``.r   Nr   jsonFr   installed_onlyr   r   include_manualr   r   zunknown lsp subcommand: 
      )getattr_cmd_status	_cmd_list_cmd_installr   _cmd_install_all_cmd_restart
_cmd_whichsysstderrwriteKeyboardInterrupt)r)   r   s     r&   r   r   F   s   
$t
,
,
8C(??wtVU;;<<<&==WT+;UCCDDD),,,-#GD2BE$J$JKKK)>>!'>>dk***
;C;;;<<<q   sss4   #C. #C. C. 7#C. C. /C. 	#C. .
C<;C<	emit_jsonboolc                   ddl m} ddlm} ddlm  |            }|d u}||                                nddi}| rNdd l}|fd|D             d}t          j	        
                    |                    |d	
          dz              dS g }|                    d           |                    d           |                    d|                    dd                      |r|                    d|                    d                      |                    d|                    d           d           |                    d|                    d                      |                    d          pg }	|	r]|                    dt          |	                      |	D ]4}
|                    d|
d         dd|
d         dd|
d                     5n|                    d            |                    d!          pg }|rB|                    d"t          |                      |D ]}|                    d|            |                    d#          pg }|r+|                    d$d%                    |                      t!                      }|r\|                    d&           |                    d'           |                    d(           |D ]}|                    d)|            |                    d&           |                    d*           |                    d+           |D ]}t#          |j                  } |          }d,d-d.d/                    |d0          }d%                    t'          |j                  d d1                   }t          |j                  d1k    r|d2t          |j                  d1z
   d3z  }|                    d4| d0|j        d5d6|d7d8|            |j        r|                    d9|j                    t          j	        
                    d                    |          dz              dS ):Nr   )get_serviceSERVERSdetect_statusenabledFc           
         g | ]@}|j         t          |j                  |j         t	          |j                             d AS ))	server_id
extensionsr   binary_status)rH   r   rI   r   _recipe_pkg_for).0srE   s     r&   
<listcomp>z_cmd_status.<locals>.<listcomp>i   s`         "#"&q|"4"4#$=%2]?1;3O3O%P%P	   r(   )serviceregistryr1   )indentr0   zLSP Servicez===========z  enabled:         z  wait_mode:       	wait_modez  wait_timeout:    wait_timeoutrM   z  install_strategy:install_strategyclientsz  active clients:  z    - rH   20sz state=state10sz root=workspace_rootz  active clients:  nonebrokenz  broken pairs:    disabled_serversz  disabled in cfg: z,  zBackend warningsz================z  ! zRegistered Serversz==================u   ✓   ·?)	installedmissingzmanual-only    u   , … (+)  24s [11s] z      )	agent.lsprA   agent.lsp.serversrC   agent.lsp.installrE   
get_statusr-   r:   stdoutr<   dumpsappendgetlenjoin_backend_warningsrK   rH   r   rI   r   )r>   rA   rC   svcservice_activeinfor-   payloadoutrU   crZ   bdisabledbackend_warningslinerM   pkgr   markerext_summaryrE   s                        @r&   r4   r4   \   s   %%%%%%))))))//////
+--C_N"3>>Y4FD     !  
 
 	
GA66=>>>q
CJJ}JJ}JJATXXi%?%?AABBB D

@+)>)>@@AAA

D.)A)ADDDEEE

G2D)E)EGGHHH((9%%+ 	2JJ;S\\;;<<<  

cQ{^ccc'
cccaP`Nacc   
 JJ0111(##)r 	)JJ:S[[::;;; ) )

<A<<((((88.//52 	DJJBTYYx-@-@BBCCC
 )** &

2

%&&&

%&&&$ 	& 	&DJJ}d}}%%%%JJrNNNJJ#$$$JJ#$$$ 1 1ak**s##
 
 #fc

	 	
 iiQ\ 2 22A2 677q|q  >c!,&7&7!&;>>>>K

HHH!+HHHVHHH;HH	
 	
 	
 = 	1JJ///000JTYYs^^d*+++1r(   r.   c           
        ddl m} ddlm} |D ]q}t	          |j                  } ||          }| r|dk    r*t          j                            |j        dd|ddd		                    |j
                   d
           rdS )Nr   rB   rD   r_   re   rf   rg   rh   ,r0   )rj   rC   rk   rE   rK   rH   r:   rm   r<   rr   rI   )r.   rC   rE   rM   r~   r   s         r&   r5   r5      s    ))))))////// 
 
ak**s## 	f33
{JJJ&JJJ0F0FJJJ	
 	
 	
 	
 1r(   rH   strc                z   ddl m}m}m} t	          |           } ||          }|dk    r$t
          j                            |  d           dS t
          j                            d|  d| d           t
          j                                          ||d          }|w|	                    |          }|r<|	                    d	          d
k    r#t
          j
                            |  d           n"t
          j
                            |  d           dS t
          j                            d| d           dS )Nr   try_installINSTALL_RECIPESrE   r_    already installed
zinstalling  (pkg=z) ...
autostrategymanualz<: this server requires a manual install. See documentation.
z: install failed (see logs).
   zinstalled: r0   )rk   r   r   rE   rK   r:   rm   r<   flushrp   r;   )rH   r   r   rE   r~   
pre_statusbin_pathrecipes           r&   r6   r6      sp   MMMMMMMMMM
)
$
$Cs##J[  
I;;;<<<qJ@9@@C@@@AAAJ{3''H $$S)) 	Kfjj,,88J ( ( (   
 J	IIIJJJqJ/8///0001r(   r/   c                r   ddl m} ddlm}m}m} d}|D ] }t          |j                  }|                    |          }|/|                    d          dk    r| sK ||          dk    r*t          j
                            d|j        dd	           t          j
                            d
|j         d| d           t          j
                                          ||d          }	|	r$t          j
                            d|	 d           t          j
                            d           d}"|S )Nr   rB   r   r   r   r_   rd   re   r   z  installing r   z) ... r   zok (z)
zFAILED
r   )rj   rC   rk   r   r   rE   rK   rH   rp   r:   rm   r<   r   )
r/   rC   r   r   rE   rcrM   r~   r   paths
             r&   r7   r7      sn   ))))))MMMMMMMMMM	
B  ak** $$S))>::j!!X--n-=,,JG!+GGGGHHH
GGGCGGGHHH
{3'' 	J-D---....JZ(((BBIr(   c                 d    ddl m}   |              t          j                            d           dS )Nr   shutdown_servicez7LSP service shut down. Next edit will respawn clients.
)ri   r   r:   rm   r<   r   s    r&   r8   r8      s?    ******JOPPP1r(   c                   ddl m}m} dd l}dd l}|                    |           }|pi                     d|           } |            |z  }|                                r1t          j        	                    t          |          dz              dS |                    |          }|r$t          j        	                    |dz              dS t          j        	                    |  d           dS )Nr   )r   hermes_lsp_bin_dirbinr0   z: not installed
r   )rk   r   r   osshutilrp   existsr:   rm   r<   r   r   r;   )	rH   r   r   r   _shutilr   bin_namestagedon_paths	            r&   r9   r9      s    EEEEEEEEIII  ++F"!!%33H!!H,F}} 
Vt+,,,qmmH%%G 
4(((qJ	4445551r(   c                <    ddddd}|                     | |           S )z?Map a registry ``server_id`` to its install-recipe package key.z@vue/language-serverz@astrojs/language-serverz!dockerfile-language-server-nodejsztypescript-language-server)zvue-language-serverzastro-language-serverzdockerfile-ls
typescript)rp   )rH   aliasess     r&   rK   rK     s2      6!;<2	 G ;;y),,,r(   r   c                     ddl } ddlm} g }|                     d          dup |            dz                                  }|r*|                     d          |                    d           |S )u  Return human-readable notes about LSP backend tools that are missing
    in a way that won't surface elsewhere.

    Some language servers ship as thin wrappers around an external CLI for
    actual diagnostics — they spawn cleanly but never emit any errors when
    the sidecar binary isn't on PATH.  bash-language-server / shellcheck
    is the load-bearing example.

    Returned strings are short, actionable, and include the install
    suggestion across common platforms.
    r   N)r   zbash-language-server
shellchecku   bash-language-server is installed but shellcheck is missing — diagnostics will be empty (apt: shellcheck, brew: shellcheck, scoop: shellcheck).)r   rk   r   r   r   ro   )r   r   notesbash_installeds       r&   rs   rs     s     444444E]]#9::$F 				 6	6>>@@   
'--55="	
 	
 	

 Lr(   )r   r   r   r   )r)   r*   r   r+   )r>   r?   r   r+   )r.   r?   r   r+   )rH   r   r   r+   )r/   r?   r   r+   )r   r+   )rH   r   r   r   )r   r   )__doc__
__future__r   argparser:   typingr   r'   r   r4   r5   r6   r7   r8   r9   rK   rs    r(   r&   <module>r      s    # " " " " "  



      -. -. -. -.`   ,R R R Rj      0   4      &- - - -     r(   