
    `gjX)                    t    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y)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.
    )annotationsNc                $   | j                  ddd      }|j                  d      }|j                  dd	      }|j                  d
dd       |j                  dd	      }|j                  ddd       |j                  dd	      }|j                  dd	       |j                  dd	      }|j                  ddd       |j                  dd	      }|j                  dd	      }|j                  dd	       |j                  t               y )!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)	
subparsersparsersub
sub_statussub_listsub_installsub_install_allsub_restart	sub_whichs	            @/root/.hermes/venv/lib/python3.12/site-packages/agent/lsp/cli.pyregister_subparserr#      sJ   ""2/	 # F 

]

3C/HIJ,H   ~~f+L~MHD   ..1J.KKX,MNnnD % O   G !  ..B ! K
 w-MNI8+6
_-    c                   t        | dd      xs 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                  j                  d| d       y# t        $ r Y y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)argsr   s     r"   r   r   E   s    
$t
,
8C(?wtVU;<<&=WT+;UCDD),,-#GD2BE$JKK)>!'>dkk**

3C5;< s4   C C 	C #C >C C '#C 	CCc                L   ddl m} ddlm} ddlm}  |       }|d u}||j                         nddi}| rdd l}||D cg c]I  }|j                  t        |j                        |j                   |t        |j                              dK c}d}	t        j                  j                  |j!                  |	d	
      dz          yg }
|
j#                  d       |
j#                  d       |
j#                  d|j%                  dd              |re|
j#                  d|j%                  d              |
j#                  d|j%                  d       d       |
j#                  d|j%                  d              |j%                  d      xs g }|rJ|
j#                  dt'        |              |D ]'  }|
j#                  d|d   dd|d   dd|d           ) n|
j#                  d        |j%                  d!      xs g }|r8|
j#                  d"t'        |              |D ]  }|
j#                  d|         |j%                  d#      xs g }|r#|
j#                  d$d%j)                  |              t+               }|rN|
j#                  d&       |
j#                  d'       |
j#                  d(       |D ]  }|
j#                  d)|         |
j#                  d&       |
j#                  d*       |
j#                  d+       |D ]  }t        |j                        } ||      }d,d-d.d/j%                  |d0      }d%j)                  t        |j                        d d1       }t'        |j                        d1kD  r|d2t'        |j                        d1z
   d3z  }|
j#                  d4| d0|j                  d5d6|d7d8|        |j                  s|
j#                  d9|j                           t        j                  j                  dj)                  |
      dz          yc c}w ):Nr   )get_serviceSERVERSdetect_statusenabledF)	server_id
extensionsr   binary_status)serviceregistryr*   )indentr)   zLSP Servicez===========z  enabled:         z  wait_mode:       	wait_modez  wait_timeout:    wait_timeoutsz  install_strategy:install_strategyclientsz  active clients:  z    - r?   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.lspr9   agent.lsp.serversr;   agent.lsp.installr=   
get_statusr&   r?   r   r@   r   _recipe_pkg_forr3   stdoutr5   dumpsappendgetlenjoin_backend_warnings)	emit_jsonr9   r;   r=   svcservice_activeinfor&   rG   payloadoutrI   crN   bdisabledbackend_warningslinepkgr
   markerext_summarys                         r"   r-   r-   [   s   %)/
-C_N"3>>Y4FD !  "#"&q||"4#$==%2?1;;3O%P	
 	

GA6=>
CJJ}JJ}JJ$TXXi%?$@AB

(+)>(?@A

(.)A(B!DE

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

Q{^C0'
37GvaP`NaMbc
 JJ01(#)rJJ,S[M:; )

VA3<()88./52JJ,TYYx-@,ABC
 )*

2

%&

%&$ 	&DJJdV}%	&JJrNJJ#$JJ#$ 1akk*s#
 #fc
	 	
 iiQ\\ 22A 67q||q Xc!,,&7!&;%<A>>K

!++c*"VCL;-H	
 ==JJ/01  JJTYYs^d*+Ks   AP!c           
        ddl m} ddlm} |D ]t  }t	        |j
                        } ||      }| r|dk7  r(t        j                  j                  |j
                  dd|ddd	j                  |j                         d
       v y)Nr   r:   r<   rS   rY   rZ   r[   r\   ,r)   )r^   r;   r_   r=   ra   r?   r3   rb   r5   rg   r@   )r'   r;   r=   rG   rt   r
   s         r"   r.   r.      s    )/ 
akk*s#f3

{{3r&R0F/GrJ	

 r$   c                L   ddl m}m}m} t	        |       } ||      }|dk(  r#t
        j                  j                  |  d       yt
        j                  j                  d|  d| d       t
        j                  j                           ||d      }|m|j                  |      }|r7|j                  d	      d
k(  r#t
        j                  j                  |  d       yt
        j                  j                  |  d       yt
        j                  j                  d| d       y)Nr   try_installINSTALL_RECIPESr=   rS    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)   )r_   r{   r|   r=   ra   r3   rb   r5   flushre   r4   )r?   r{   r|   r=   rt   
pre_statusbin_pathrecipes           r"   r/   r/      s
   MM
)
$Cs#J[ 

I;&:;<JJ{9+VC5@AJJ3'H $$S)fjj,8JJ+ ' (  JJ	{*HIJJJ{8*B/0r$   c                l   ddl m} ddlm}m}m} d}|D ]  }t        |j                        }|j                  |      }|-|j                  d      dk(  r| sD ||      dk(  r/t        j                  j                  d|j                  dd	       ~t        j                  j                  d
|j                   d| d       t        j                  j                           ||d      }	|	r$t        j                  j                  d|	 d       t        j                  j                  d       d} |S )Nr   r:   rz   r   r   rS   rX   rY   r}   z  installing r~   z) ... r   zok (z)
zFAILED
r   )r^   r;   r_   r{   r|   r=   ra   r?   re   r3   rb   r5   r   )
r(   r;   r{   r|   r=   rcrG   rt   r   paths
             r"   r0   r0      s   )MM	
B akk* $$S)>::j!X-n,JJr!++c!22FGH

=VC5GH

3'JJtD6-.JJZ(B#$ Ir$   c                 \    ddl m}   |         t        j                  j	                  d       y)Nr   shutdown_servicez7LSP service shut down. Next edit will respawn clients.
)r]   r   r3   rb   r5   r   s    r"   r1   r1      s!    *JJOPr$   c                    ddl m}m} |j                  |       }|xs i j                  d|       } ||      }|r#t        j
                  j                  |dz          yt        j                  j                  |  d       y)Nr   )r|   _existing_binarybinr)   z: not installed
r   )r_   r|   r   re   r3   rb   r5   r4   )r?   r|   r   r   bin_nameresolveds         r"   r2   r2      sn    C  +F"!!%3H)H

D)JJ	{"345r$   c                4    ddddd}|j                  | |       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)re   )r?   aliasess     r"   ra   ra     s*      6!;<2	G ;;y),,r$   c                 z    ddl } ddlm} g } |d      du}|r"| j                  d      |j	                  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).)shutilr_   r   r   rd   )_shutilr   notesbash_installeds       r"   rh   rh     sH     2E%&<=TIN'--5="	

 Lr$   )r   zargparse._SubParsersActionreturnNone)r7   zargparse.Namespacer   int)ri   boolr   r   )r'   r   r   r   )r?   strr   r   )r(   r   r   r   )r   r   )r?   r   r   r   )r   r   )__doc__
__future__r   argparser3   r#   r   r-   r.   r/   r0   r1   r2   ra   rh    r$   r"   <module>r      sJ    #  
-.`,Rj04
-r$   