
    PmjJ)                    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_whichs           3/home/thesage/.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 !    NNB    
 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)rF   r   rG   r   _recipe_pkg_for).0srC   s     r$   
<listcomp>z_cmd_status.<locals>.<listcomp>h   s`         "#"&q|"4"4#$=%2]?1;3O3O%P%P	   r&   )serviceregistryr/   )indentr.   zLSP Servicez===========z  enabled:         z  wait_mode:       	wait_modez  wait_timeout:    wait_timeoutrK   z  install_strategy:install_strategyclientsz  active clients:  z    - rF   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.serversrA   agent.lsp.installrC   
get_statusr+   r8   stdoutr:   dumpsappendgetlenjoin_backend_warningsrI   rF   r   rG   r   )r<   r?   rA   svcservice_activeinfor+   payloadoutrS   crX   bdisabledbackend_warningslinerK   pkgr   markerext_summaryrC   s                        @r$   r2   r2   [   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   r@   rB   r]   rc   rd   re   rf   ,r.   )rh   rA   ri   rC   rI   rF   r8   rk   r:   rp   rG   )r,   rA   rC   rK   r|   r   s         r$   r3   r3      s    ))))))////// 
 
ak**s## 	f33
{JJJ&JJJ0F0FJJJ	
 	
 	
 	
 1r&   rF   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_RECIPESrC   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.   )ri   r   r   rC   rI   r8   rk   r:   flushrn   r9   )rF   r   r   rC   r|   
pre_statusbin_pathrecipes           r$   r4   r4      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   r@   r   r   r   r]   rb   rc   r   z  installing r   z) ... r   zok (z)
zFAILED
r   )rh   rA   ri   r   r   rC   rI   rF   rn   r8   rk   r:   r   )
r-   rA   r   r   rC   rcrK   r|   r   paths
             r$   r5   r5      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.
)rg   r   r8   rk   r:   r   s    r$   r6   r6      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   )ri   r   r   rn   r8   rk   r:   r9   )rF   r   r   r   bin_nameresolveds         r$   r7   r7      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)rn   )rF   aliasess     r$   rI   rI     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).)shutilri   r   r   rm   )_shutilr   notesbash_installeds       r$   rq   rq     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)   )rF   r   r   r)   )r-   r=   r   r)   )r   r)   )rF   r   r   r   )r   r   )__doc__
__future__r   argparser8   r%   r   r2   r3   r4   r5   r6   r7   rI   rq    r&   r$   <module>r      s    # " " " " "  



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