
    `gj<              !         U d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZmZmZmZmZmZ ddlmZ  ej&                  d      Zi 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d d!d"d#d"i d$d"d%d"d&d'd(d'd)d*d+d*d,d*d-d*d.d*d/d*d0d1d2d1d3d4d5d4d6d4d7d8d9d:i d;d<d=d<d>d?d@d?dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdNdPdQdRdQdSdQdTdUdVdUi dWdXdYdZd[d\d]d^d_d`dad^dbd^dcdddedfdgdfdhdidjdidkdldmdndodndpdqdrdqdsdtdtdtduZdvedw<   e G dx dy             Ze G dz d{             Ze G d| d}             Zdd~ZddZdddZddZddZddZddZ ddZ!ddZ"da#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dZ.ddZ/ddZ0ddZ1ddZ2ddZ3ddZ4ddZ5ddZ6ddZ7ddZ8da9ddZ:ddZ;ddZ<ddZ=ddZ>ddZ?ddZ@ddZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZU edde>ed       edde?edd       edde?e6dì       edde?e7dƬ       edde?e8dɬ       edde@e d̬       eddeAe!dϬ       eddeCe"dҬ       eddeDe$dլ       eddeEe%dج       eddeFe&d۬       eddeGe'dެ       eddeHe(dᬼ       eddeIe)d䬼       eddeJe*d笼       edLdeKe+d鬼       eddeLe,d쬼       edldeMe-d       eddeNe.d񬼫       eddeOe/d       eddePe0d       ed\dd e1d       eddeQe2d       edJdeRe3d       ed deSe4d       eddeTe5d       edtdeUe;d      gZVded	<   dd
ZWddZXg dZYy(  u  Server registry — per-language LSP server definitions.

Each :class:`ServerDef` knows how to:

- match a file by extension (or basename for extensionless files like
  ``Dockerfile``),
- resolve a project root from a file path (often via
  :func:`agent.lsp.workspace.nearest_root`),
- assemble the spawn command (binary, args, env, cwd),
- compute LSP ``initializationOptions``.

Auto-installation is a separate concern handled by
:mod:`agent.lsp.install`.  This module describes WHAT to spawn; the
install module makes the binary appear on PATH if it isn't there.

The full set of servers ships with the package, but most are only
*invoked* when the user actually edits a file in that language.  This
keeps cold-start fast — we don't probe binaries until needed.
    )annotationsN)	dataclassfield)AnyCallableDictListOptionalSequenceTuplenearest_rootzagent.lsp.servers.pypython.pyi.ts
typescript.tsxtypescriptreact.js
javascript.jsxjavascriptreact.mjs.cjs.mts.cts.vuevue.sveltesvelte.astroastro.gogo.rsrustz.rbrubyz.rakez.gemspecz.ru.cc.h.cccpp.cpp.cxx.hh.hpp.hxxz.cscsharpz.csxz.fsfsharpz.fsiz.fsxz.swiftswift.javajava.ktkotlin.kts.yamlyaml.yml.jsonjsonz.jsoncjsonc.lualua.phpphp.prismaprisma.dartdart.mlocaml.mli.shshellscript.bash.zsh.tf	terraform.tfvarsz.texlatexz.bibbibtex.gleamgleam.cljclojure.cljsclojurescript.cljc.edn.nixnixz.typtypstz.typc.hshaskell.lhs.jljulia.exelixir.exs.zigzig.zon
dockerfile
powershell).dockerfile.ps1.psm1.psd1Dict[str, str]LANGUAGE_BY_EXTc                  v    e Zd ZU dZded<   ded<   ded<    ee      Zded	<    ee      Zd
ed<   dZ	ded<   y)	SpawnSpeca/  The result of resolving a server for a file.

    Returned by :meth:`ServerDef.resolve` when a server is applicable
    to a file.  ``None`` is returned instead when the server should
    be skipped (binary missing and auto-install disabled, project
    marker not found, exclude marker hit, etc.).
    z	List[str]commandstrworkspace_rootcwddefault_factoryrq   envzDict[str, Any]initialization_optionsFboolseed_diagnostics_on_first_pushN)
__name__
__module____qualname____doc____annotations__r   dictr{   r|   r~        D/root/.hermes/venv/lib/python3.12/site-packages/agent/lsp/servers.pyrt   rt   o   sD     	H5C5-24-HNH+0"D0r   rt   c                  ^    e Zd ZU dZded<   ded<   ded<   ded	<   d
Zded<   dZded<   ddZy)	ServerDefa  Definition of one language server.

    The :func:`resolve_root` callable receives the absolute file path
    plus the workspace root (git worktree) and returns either the
    project-specific root for this server (e.g. the directory
    containing ``pyproject.toml``) or ``None`` to skip.

    The :func:`build_spawn` callable receives the resolved root and
    returns a :class:`SpawnSpec` (or ``None`` if the binary can't be
    found and auto-install isn't configured).
    rv   	server_idzTuple[str, ...]
extensionsz#Callable[[str, str], Optional[str]]resolve_rootz5Callable[[str, 'ServerContext'], Optional[SpawnSpec]]build_spawnFr}   seed_first_push descriptionc                4    t        |      }|| j                  v S )z2Return True iff this server handles ``file_path``.)_file_ext_or_basenamer   )self	file_pathexts      r   matcheszServerDef.matches   s    #I.doo%%r   N)r   rv   returnr}   )r   r   r   r   r   r   r   r   r   r   r   r   r      s9    
 N55FF!OT!K&r   r   c                  ~    e Zd ZU dZded<   dZded<    ee      Zded<    ee      Z	d	ed
<    ee      Z
ded<   y)ServerContexta  Context passed into :meth:`ServerDef.build_spawn`.

    Carries the user's auto-install policy, any user-overridden
    binary paths, and helpers the spawn builder needs.  All fields
    are optional; defaults yield "auto-install allowed, no overrides".
    rv   rw   autoinstall_strategyry   zDict[str, List[str]]binary_overrideszDict[str, Dict[str, str]]env_overrideszDict[str, Dict[str, Any]]init_overridesN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sK     "c"-24-H*H/4T/JM,J05d0KN-Kr   r   c                    t         j                  j                  |       }t         j                  j                  |      \  }}|r|j	                         S |S )u  Return the lower-cased extension OR full basename for extensionless files.

    Mirrors OpenCode's ``path.parse(file).ext || file`` — files like
    ``Dockerfile`` or ``Makefile`` match by basename, while normal
    files match by extension (``.py``, ``.ts``).
    )ospathbasenamesplitextlower)r   base_rootr   s       r   r   r      sD     77D!D!!$'JE3
yy{Kr   c                 H    | D ]  }t        j                  |      }|s|c S  y)z8Return the full path of the first command found on PATH.N)shutilwhich)namesnr   s      r   _whichr      s+     ||AK r   c                    t        | |||rt        j                  j                  |      nd      }|6|r4t        | ||rt        j                  j                  |      nd      }|y|S |xs |S )zCommon pattern: try ``nearest_root``, fall back to workspace root.

    Returns ``None`` if an exclude marker matches first (server gated off).
    N)excludesceiling)r   )r   r   r   dirname)r   	workspacemarkersr   foundrechecks         r   _root_or_workspacer      sv    
 .7	*T	E }
 2;BGGOOI.

 Ir   c           	     P   t        |d      xs t        dd      }|ddlm}  |d|j                        }|y t
        j                  j                  |      }|dv r^t
        j                  j                  t
        j                  j                  |      d      }t
        j                  j                  |      r|}i }t        |       }|rd|i|d<   d|j                  v r|j                  |j                  d          t        |dg| | |j                  j!                  di       |	      S )
Npyrightzpyright-langserverr   try_install>   pyright.exer   
pythonPathr   --stdioru   rw   rx   r{   r|   )_resolve_overrider   agent.lsp.installr   r   r   r   r   joinr   exists_detect_pythonr   updatert   r   get)rootctxbin_pathr   r   siblinginitpys           r   _spawn_pyrightr      s    i0 Fi5H 1y#*>*>?77H%D))'',,rwwx8:NO77>>'"HD 
	B	&+XC&&&C&&y129%!!)R0# r   c                   g }t         j                  j                  d      r"|j                  t         j                  d          |j	                  t         j
                  j                  | d      t         j
                  j                  | d      g       |D ]N  }dD ]G  }t         j
                  j                  ||      }t         j
                  j                  |      sC|c c S  P y )NVIRTUAL_ENVz.venvvenv)z
bin/pythonzbin/python3zScripts/python.exe)r   environr   appendextendr   r   r   )r   
candidatesvsubps        r   r   r     s    J	zz~~m$"**]34rww||D'2BGGLLv4NOP F 	CQ$Aww~~a 	
 r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |dg| | |j                  j                  di       |j                  j                  di       d      S )Nr   ztypescript-language-serverr   r   r   T)ru   rw   rx   r{   r|   r~   	r   r   r   r   r   rt   r   r   r   r   r   r   r   s       r   _spawn_typescriptr     s     l3[v>Z7[H1;S=Q=QR9%!!,3"1155lBG'+ r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |g| | |j                  j                  di       |j                  j                  di             S )Ngoplsr   r   r   r   r   s       r   _spawn_goplsr   &  s     g.A&/H1w(<(<=
!!'2."1155grB r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |g| | |j                  j                  di       |j                  j                  di             S )Nrust-analyzerr   r   r   r   r   s       r   _spawn_rust_analyzerr   6  s     o6Q&:QH10D0DE
!!/26"1155orJ r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |ddg| | |j                  j                  di       |j                  j                  di             S )Nclangdr   r   z--background-indexz--clang-tidyr   r   r   s       r   _spawn_clangdr   F  s     h/C6(3CH1x)=)=>/@!!(B/"1155hC r   Fc           
     L   t        |d      xs t        d      }|ddlm}  |d|j                        }|y t
        s"t        d      dat        j                  d       t        |dg| | |j                  j                  di       |j                  j                  di             S )	Nbash-language-serverr   r   
shellcheckTu   bash-language-server: shellcheck not found on PATH — diagnostics will be empty until shellcheck is installed (apt: shellcheck, brew: shellcheck, scoop: shellcheck).startr   )r   r   r   r   r   _BASH_SHELLCHECK_WARNEDloggerwarningrt   r   r   r   r   s       r   _spawn_bash_lsr   Y  s     &<=_H^A_H15s7K7KL #vl';'C"&F	

 7#!!"8"="11556LbQ r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |dg| | |j                  j                  di       |j                  j                  di             S )Nyaml-language-serverr   r   r   r   r   r   s       r   _spawn_yaml_lsr   u  s     &<=_H^A_H15s7K7KL9%!!"8"="11556LbQ r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |g| | |j                  j                  di       |j                  j                  di             S )Nlua-language-serverr   r   r   r   r   s       r   _spawn_lua_lsr     s     &;<]G\@]H14c6J6JK
!!"7<"11556KRP r   c           	     *   t        |d      xs t        d      }|ddlm}  |d|j                        }|y dddii}|j                  |j                  j                  di              t        |dg| | |j                  j                  di       |      S )	Nintelephenser   r   	telemetryenabledFr   r   )
r   r   r   r   r   r   r   r   rt   r   )r   r   r   r   r   s        r   _spawn_intelephenser     s     n5O9OH1~s/C/CD)U+,DKK""&&~r:;9%!!."5# r   c           
         t        |d      xs t        d      }|y t        |g| | |j                  j	                  di       |j
                  j	                  di             S )N	ocaml-lspocamllspr   r   r   rt   r   r   r   r   r   r   s      r   _spawn_ocamllspr     se     k2HfZ6HH
!!+r2"1155k2F r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |dg| | |j                  j                  di       |j                  j                  di             S )Ndockerfile-lszdocker-langserverr   r   z!dockerfile-language-server-nodejsr   r   r   r   s       r   _spawn_dockerfile_lsr     s     o6U&AT:UH1BCDXDXY9%!!/26"1155orJ r   c           	         t        |d      xs t        d      }|y ddddi}|j                  |j                  j	                  di              t        |dg| | |j                  j	                  di       |      S )Nterraform-lsexperimentalFeaturesT)prefillRequiredFieldsvalidateOnSaveserver   )r   r   r   r   r   rt   r   )r   r   r   r   s       r   _spawn_terraform_lsr    s     n5O9OH%)"!
D 	KK""&&~r:;7#!!."5# r   c           
         t        |d      xs t        d      }|y t        |ddg| | |j                  j	                  di       |j
                  j	                  di             S )NrH   language-server--lspr   r   r   s      r   _spawn_dartr	    sj     f-?H,g6!!&"-"1155fbA r   c           
         t        |d      xs t        dd      }|y t        |dg| | |j                  j	                  di       |j
                  j	                  di             S )Nhaskell-language-serverzhaskell-language-server-wrapperr  r   r   r   s      r   _spawn_haskell_lsr    sw     &?@ F)+DEH 7#!!";R@"11556OQST r   c           
         t        |d      xs t        d      }|y t        |ddddg| | |j                  j	                  di       |j
                  j	                  di             S )Nrd   z--startup-file=noz--history-file=noz-ez!using LanguageServer; runserver()r   r   r   s      r   _spawn_juliar    su     g.A&/H/
 !!'2."1155grB r   c           
         t        |d      xs t        d      }|y t        |dg| | |j                  j	                  di       |j
                  j	                  di             S )Nclojure-lsplistenr   r   r   s      r   _spawn_clojure_lspr    sh     m4M}8MH8$!!-4"1155mRH r   c           
         t        |d      xs t        d      }|y t        |g| | |j                  j	                  di       |j
                  j	                  di             S )Nnixdr   r   r   s      r   _spawn_nixdr    sd     f-?H
!!&"-"1155fbA r   c           
         t        |d      xs t        d      }|y t        |g| | |j                  j	                  di       |j
                  j	                  di             S )Nzlsr   r   r   s      r   
_spawn_zlsr  !  sd     e,=uH
!!%,"1155eR@ r   c           
         t        |d      xs t        d      }|y t        |dg| | |j                  j	                  di       |j
                  j	                  di             S )NrV   lspr   r   r   s      r   _spawn_gleamr  .  sg     g.A&/H5!!!'2."1155grB r   c           
         t        |d      xs t        dd      }|y t        |g| | |j                  j	                  di       |j
                  j	                  di             S )N	elixir-lszlanguage_server.shr   r   r   s      r   _spawn_elixir_lsr  ;  sh     k2_f[J^6_H
!!+r2"1155k2F r   c           
         t        |d      xs t        d      }|y t        |dg| | |j                  j	                  di       |j
                  j	                  di             S )NrF   r  r   r   r   s      r   _spawn_prismar   H  si     h/C6(3CH,-!!(B/"1155hC r   c           
         t        |d      xs t        d      }|y t        |g| | |j                  j	                  di       |j
                  j	                  di             S )Nkotlin-language-serverr   r   r   s      r   _spawn_kotlin_lsr#  U  sq     &>? 6 DH 
!!":B?"11556NPRS r   c           
         t        |d      xs t        d      }|y t        |g| | |j                  j	                  di       |j
                  j	                  di             S )Njdtlsr   r   r   s      r   _spawn_jdtlsr&  d  sf     !g.A&/H
!!'2."1155grB r   c           
         t        |d      xs t        d      }|ddlm}  |d|j                        }|y t        |dg| | |j                  j                  di       |j                  j                  di             S )Nvue-language-serverr   r   z@vue/language-serverr   r   r   r   s       r   
_spawn_vuer)  t  s     &;< AH 15s7K7KL9%!!"7<"11556KRP r   c           
         t        |d      xs t        dd      }|ddlm}  |d|j                        }|y t        |dg| | |j                  j                  di       |j                  j                  di             S )Nsvelte-language-serversvelteserverr   r   r   r   r   r   s       r   _spawn_svelter-    s     &>? 60DH 179M9MN9%!!":B?"11556NPRS r   c           
         t        |d      xs t        dd      }|ddlm}  |d|j                        }|y t        |dg| | |j                  j                  di       |j                  j                  di             S )Nastro-language-serverzastro-lsr   r   z@astrojs/language-serverr   r   r   r   s       r   _spawn_astror0    s     &=> &+CH 193;O;OP9%!!"92>"11556MrR r   c                   g }| j                   j                  d      }|r|d   r|j                  |d          | j                  j                  di       }t	        |t
              r.|j                  d      r|j                  t        |d                t        j                  j                  d      }|r|j                  |       t        j                  j                  d      xs= t        j                  j                  t        j                  j                  d      d      }|j                  t        j                  j                  |dd	             |D ]  }|st        j                  j                  |d	d
      }t        j                  j                  |      r|c S t        j                  j                  |d
      }t        j                  j                  |      st        j                  j                  |      c S  y)u  Locate the PowerShellEditorServices module bundle directory.

    PSES ships as a GitHub release zip (not an npm/go/pip package), so
    there's no auto-install recipe — the user downloads it and points us
    at the extracted bundle.  Resolution order:

    1. ``command`` override in config (``lsp.servers.powershell.command``) —
       the FIRST element is treated as the bundle path when it's a
       directory.  This is the documented config knob.
    2. ``init_overrides["powershell"]["bundlePath"]``.
    3. ``PSES_BUNDLE_PATH`` env var.
    4. ``<HERMES_HOME>/lsp/PowerShellEditorServices`` staging dir (where a
       user-run unzip would naturally land).

    Returns the bundle directory containing ``PowerShellEditorServices/``,
    or ``None`` when it can't be found.
    rl   r   
bundlePathPSES_BUNDLE_PATHHERMES_HOME~.hermesr  PowerShellEditorServicesStart-EditorServices.ps1N)r   r   r   r   
isinstancer   rv   r   r   r   r   
expanduserisfiler   )	r   r   overrider   env_pathhomecandstart_scriptinners	            r   _find_pses_bundlerB    s   $ J##''5HHQK(1+&!!,3D$$((<"8#d<012zz~~01H(#::>>-( BGGLL
3-D bggll40JKL )ww||,.H
 77>>,'KT#=>77>>% 77??4(() r   c                   t        dd      }|yt        |      }|t        sdat        j	                  d       yt
        j                  j                  |dd      }t
        j                  j                  t               dt        j                          d	      }t
        j                  j                  t               d
      }d| d| d| d| d	}t        |dddddd|g| | |j                  j                  di       |j                  j                  di       j                         D 	ci c]  \  }}	|dk7  r||	 c}	}      S c c}	}w )uZ  Spawn PowerShellEditorServices over stdio.

    Unlike the single-binary servers, PSES is a PowerShell module driven
    by a bootstrap script.  We need both a PowerShell host (``pwsh`` for
    PowerShell 7+, or Windows ``powershell``) and the PSES module bundle.
    The bundle is manual-install (release zip) — see ``_find_pses_bundle``.
    pwshrl   NTa1  powershell: pwsh found but the PowerShellEditorServices bundle is missing. Download the release zip from https://github.com/PowerShell/PowerShellEditorServices/releases, extract it, and either set lsp.servers.powershell.command to the bundle path or unzip it to <HERMES_HOME>/lsp/PowerShellEditorServices.r7  r8  zpses-session-r>   zpses.logz& 'z' -BundledModulesPath 'z' -LogPath 'z' -SessionDetailsPath 'z|' -FeatureFlags @() -AdditionalModules @() -HostName Hermes -HostProfileId hermes -HostVersion 1.0.0 -Stdio -LogLevel Normalz-NoLogoz
-NoProfilez-NonInteractivez-ExecutionPolicyBypassz-Commandr2  r   )r   rB  _PSES_BUNDLE_WARNEDr   r   r   r   r   hermes_lsp_session_dirgetpidrt   r   r   r   items)
r   r   rD  bundler@  session_pathlog_pathrA  kr   s
             r   _spawn_powershell_esrN    sm    &,'D|s#F~""&NN> 77<<*,FL 77<< M"))+e"DL ww||24jAH
l^   &x (J   ,~ ."	# 
 	
 !!,3 **..|R@FFH 
1L  qD 
  
s   )Ec                 2   t         j                  j                  d      xs= t         j                  j	                  t         j                  j                  d      d      } t         j                  j	                  | dd      }t        j                  |d       |S )z?Return (and create) the dir for PSES session/log scratch files.r4  r5  r6  r  psesT)exist_ok)r   r   r   r   r   r:  makedirs)r>  ds     r   rG  rG    sg    ::>>-( BGGLL
3-D 	T5&)AKKD!Hr   c                    | j                   j                  |      }|r,|d   r't        j                  j	                  |d         r|d   S y)z%User can pin a binary path in config.r   N)r   r   r   r   r   )r   r   r<  s      r   r   r   '  sA    ##''	2HHQKBGGNN8A;$?{r   c                     t        | |g d      S )N)zpyproject.tomlzsetup.pyz	setup.cfgzrequirements.txtPipfilezpyrightconfig.jsonr   r   r   s     r   _root_pythonrY  4  s    h r   c                (    t        | |g dddg      S )N)zpackage-lock.jsonz	bun.lockbzbun.lockzpnpm-lock.yamlz	yarn.lockzpackage.jsonztsconfig.jsonz	deno.jsonz
deno.jsonc)r   rW  rX  s     r   _root_typescriptr[  <  s$    	
 |, r   c                     t        | |g d      S )N)zgo.workzgo.modzgo.sumrW  rX  s     r   _root_gor]  M  s    ' r   c                     t        | |ddg      S )Nz
Cargo.tomlz
Cargo.lockrW  rX  s     r   
_root_rustr_  U  s    i\<4PQQr   c                    t        | |dg      S )NGemfilerW  rX  s     r   
_root_rubyrb  Y  s    iYK@@r   c                     t        | |g d      S )N)zcompile_commands.jsonzcompile_flags.txtz.clangdrW  rX  s     r   _root_clangdrd  ]  s    A r   c                    |S Nr   rX  s     r   
_root_bashrg  e      r   c                    |S rf  r   rX  s     r   
_root_yamlrj  i  rh  r   c                     t        | |g d      S )N)z.luarc.jsonz.luarc.jsoncz.luacheckrcz.stylua.tomlzstylua.tomlzselene.tomlz
selene.ymlrW  rX  s     r   	_root_luarl  m  s    r r   c                     t        | |g d      S )N)zcomposer.jsonzcomposer.lockz.php-versionrW  rX  s     r   	_root_phprn  u  s    i4fggr   c                     t        | |g d      S )N)zdune-projectzdune-workspacez.merlinopamrW  rX  s     r   _root_ocamlrq  y  s    i4ijjr   c                    |S rf  r   rX  s     r   _root_dockerrs  }  rh  r   c                     t        | |ddg      S )Nz.terraform.lock.hclzterraform.tfstaterW  rX  s     r   _root_terraformru    s    i5JL_4`aar   c                     t        | |ddg      S )Nzpubspec.yamlzanalysis_options.yamlrW  rX  s     r   
_root_dartrw    s    i^E\4]^^r   c                     t        | |g d      S )N)z
stack.yamlzcabal.projectzhie.yamlrW  rX  s     r   _root_haskellry    s    i4_``r   c                     t        | |ddg      S )NzProject.tomlzManifest.tomlrW  rX  s     r   _root_juliar{    s    i^_4UVVr   c                     t        | |g d      S )N)zdeps.ednzproject.cljzshadow-cljs.ednzbb.ednz
build.bootrW  rX  s     r   _root_clojurer}    s    9d r   c                (    t        | dg      }|xs |S )Nz	flake.nixr   )r   r   r   s      r   	_root_nixr    s    [M2EIr   c                    t        | |dg      S )Nz	build.zigrW  rX  s     r   	_root_zigr    s    i[MBBr   c                     t        | |ddg      S )Nzmix.exszmix.lockrW  rX  s     r   _root_elixirr    s    iY
4KLLr   c                     t        | |ddg      S )Nzschema.prismazprisma/schema.prismarW  rX  s     r   _root_prismar    s    90FG r   c                     t        | |g d      S )N)settings.gradlezsettings.gradle.ktsbuild.gradlebuild.gradle.ktspom.xmlrW  rX  s     r   _root_kotlinr    s    a r   c                     t        | |g d      S )N)r  r  r  z.projectz
.classpathr  rW  rX  s     r   
_root_javar    s    d r   c                    t        | |dg      S )NzPSScriptAnalyzerSettings.psd1rW  rX  s     r   _root_powershellr    s    
 	() r   r   )r   r   u   Python — Microsoft pyright)r   r   r   r   r   )r   r   r   r   r   r   r   r   Tu4   JavaScript/TypeScript — typescript-language-server)r   r   r   r   r   r   r(  )r   u   Vue.js — @vue/language-serverr+  )r    u!   Svelte — svelte-language-serverr/  )r"   u"   Astro — @astrojs/language-serverr   )r$   u   Go — goplsr   )r&   u   Rust — rust-analyzerr   )r)   r.   r,   r/   r+   r0   r1   r2   u   C/C++ — clangdr   )rL   rN   rO   z.kshu   Bash — bash-language-serverr   )r;   r=   u   YAML — yaml-language-serverr   )rA   u   Lua — lua-language-serverr   )rC   u   PHP — intelephenser   )rI   rK   u   OCaml — ocaml-lspr   )rm   
Dockerfileu0   Dockerfile — dockerfile-language-server-nodejsr   )rP   rR   u   Terraform — terraform-ls)rG   u!   Dart — built-in language serverr  )r`   rb   u#   Haskell — haskell-language-server)rc   u   Julia — LanguageServer.jlr  )rW   rY   r[   r\   u   Clojure — clojure-lspr  )r]   u   Nix — nixdr  )rh   rj   u   Zig — zls)rU   c                    t        | |dg      S )Nz
gleam.tomlrW  )fpwss     r   <lambda>r  c  s    $6r2~$N r   u"   Gleam — built-in language serverr  )re   rg   u   Elixir — elixir-ls)rE   u#   Prisma — built-in language serverr"  )r8   r:   u!   Kotlin — kotlin-language-serverr%  )r6   u$   Java — Eclipse JDT Language Server)rn   ro   rp   u7   PowerShell — PowerShellEditorServices (manual bundle)zList[ServerDef]SERVERSc                D    t         D ]  }|j                  |       s|c S  y)z>Return the registry entry that handles ``file_path``, or None.N)r  r   )r   srvs     r   find_server_for_filer    s'     ;;y!J r   c                D    t        |       }t        j                  |d      S )z:Return the LSP languageId to send in didOpen for ``path``.	plaintext)r   rr   r   )r   r   s     r   language_id_forr    s    

%CsK00r   )r   r   rt   r  r  r  rr   )r   rv   r   rv   )r   rv   r   Optional[str])r   )
r   rv   r   rv   r   Sequence[str]r   r  r   r  )r   rv   r   r   r   zOptional[SpawnSpec])r   rv   r   r  )r   r   r   r  )r   rv   )r   r   r   rv   r   r  )r   rv   r   rv   r   r  )r   rv   r   rv   r   rv   )r   rv   r   zOptional[ServerDef])Zr   
__future__r   loggingr   r   dataclassesr   r   typingr   r   r   r	   r
   r   r   agent.lsp.workspacer   	getLoggerr   rr   r   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r   r#  r&  r)  r-  r0  rF  rB  rN  rG  r   rY  r[  r]  r_  rb  rd  rg  rj  rl  rn  rq  rs  ru  rw  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  __all__r   r   r   <module>r     st  & #  	  ( G G G ,			.	/
I#	8I#
HI# 
<I# 	I#
 
<I# I# LI# LI# LI# LI# EI# xI# gI# 
4I# 
6I#  
6!I#" V#I#$ %I#& 
6'I#( 	#)I#* 	#+I#, 
5-I#. E/I#0 E1I#2 
53I#4 E5I#6 E7I#8 
89I#: H;I#< 
8=I#> H?I#@ HAI#B gCI#D VEI#F 
8GI#H HII#J VKI#L FMI#N VOI#P gQI#R ESI#T EUI#V xWI#X VYI#Z 
7[I#\ G]I#^ 
=_I#` ]aI#b McI#d 
;eI#f {gI#h GiI#j HkI#l gmI#n IoI#p _qI#r YsI#t IuI#v EwI#x GyI#z W{I#| 
9}I#~ II#@ 
7AI#B 
8CI#D HEI#F EGI#H EII#J  QI# IX 1 1 1" & & &4 L L L(@@
"      8  $
 (
&





 $$$  -`=@"RAhkb_aW
CM	$ "!"2 Q%%J '%5 *%!7 )% 8  " !(, M!!& (3"3 ($"3 '!1  '* " #) !0!(F  %$'0 7 +""%9   1 5"&- " #! N 8 "!$* !!9 *"!$7  : -%(Mq D1r   