
    jX)                    v    d Z ddlmZ ddlZddl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
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	            2/home/ubuntu/.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   E   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)rG   r   rH   r   _recipe_pkg_for).0srD   s     r%   
<listcomp>z_cmd_status.<locals>.<listcomp>h   s`         "#"&q|"4"4#$=%2]?1;3O3O%P%P	   r'   )serviceregistryr0   )indentr/   zLSP Servicez===========z  enabled:         z  wait_mode:       	wait_modez  wait_timeout:    wait_timeoutrL   z  install_strategy:install_strategyclientsz  active clients:  z    - rG   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.lspr@   agent.lsp.serversrB   agent.lsp.installrD   
get_statusr,   r9   stdoutr;   dumpsappendgetlenjoin_backend_warningsrJ   rG   r   rH   r   )r=   r@   rB   svcservice_activeinfor,   payloadoutrT   crY   bdisabledbackend_warningslinerL   pkgr   markerext_summaryrD   s                        @r%   r3   r3   [   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   rA   rC   r^   rd   re   rf   rg   ,r/   )ri   rB   rj   rD   rJ   rG   r9   rl   r;   rq   rH   )r-   rB   rD   rL   r}   r   s         r%   r4   r4      s    ))))))////// 
 
ak**s## 	f33
{JJJ&JJJ0F0FJJJ	
 	
 	
 	
 1r'   rG   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_RECIPESrD   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: r/   )rj   r   r   rD   rJ   r9   rl   r;   flushro   r:   )rG   r   r   rD   r}   
pre_statusbin_pathrecipes           r%   r5   r5      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   rA   r   r   r   r^   rc   rd   r   z  installing r   z) ... r   zok (z)
zFAILED
r   )ri   rB   rj   r   r   rD   rJ   rG   ro   r9   rl   r;   r   )
r.   rB   r   r   rD   rcrL   r}   r   paths
             r%   r6   r6      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.
)rh   r   r9   rl   r;   r   s    r%   r7   r7      s?    ******JOPPP1r'   c                   ddl m}m} |                    |           }|pi                     d|           } ||          }|r$t          j                            |dz              dS t          j                            |  d           dS )Nr   )r   _existing_binarybinr/   z: not installed
r   )rj   r   r   ro   r9   rl   r;   r:   )rG   r   r   r   bin_nameresolveds         r%   r8   r8      s    CCCCCCCC  ++F"!!%33H))H 
D)))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)ro   )rG   aliasess     r%   rJ   rJ     s2      6!;<2	 G ;;y),,,r'   r   c                     ddl } ddlm} g } |d          du}|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).)shutilrj   r   r   rn   )_shutilr   notesbash_installeds       r%   rr   rr     sx     222222E%%&<==TIN 
'--55="	
 	
 	

 Lr'   )r   r   r   r   )r(   r)   r   r*   )r=   r>   r   r*   )r-   r>   r   r*   )rG   r   r   r*   )r.   r>   r   r*   )r   r*   )rG   r   r   r   )r   r   )__doc__
__future__r   argparser9   r&   r   r3   r4   r5   r6   r7   r8   rJ   rr    r'   r%   <module>r      s    # " " " " "  



-. -. -. -.`   ,R R R Rj      0   4   
 
 
 
- - - -     r'   