oraios/serena · error · FileNotFoundError
executable not found at {executable_path}; npm install of sv
Error message
executable not found at {executable_path}; npm install of svelte-language-server@{package_version} did not produce the expected binary. What it means
The Svelte language server dependency installer runs `npm install` for svelte-language-server plus companion packages into a versioned directory, then verifies the expected binary exists at `<install_dir>/node_modules/.bin/svelte-language-server`. If npm exits without producing that binary (or the .cmd shim on Windows), this FileNotFoundError is raised because launching the LSP would fail anyway. It signals a silently failed or incomplete npm install rather than a crash during install.
Source
Thrown at src/solidlsp/language_servers/svelte_language_server.py:264
RuntimeDependency(
id="typescript-language-server",
description="TypeScript language server (companion)",
command=build_npm_install_command("typescript-language-server", typescript_language_server_version, npm_registry),
platform_id="any",
),
RuntimeDependency(
id="typescript-svelte-plugin",
description="TypeScript plugin for Svelte cross-file awareness",
command=build_npm_install_command("typescript-svelte-plugin", typescript_svelte_plugin_version, npm_registry),
platform_id="any",
),
]
RuntimeDependencyCollection(runtime_deps).install(install_dir)
with open(version_file, "w") as fv:
fv.write(expected_version)
if not os.path.exists(executable_path):
raise FileNotFoundError(
f"executable not found at {executable_path}; "
f"npm install of svelte-language-server@{package_version} did not produce the expected binary."
)
return executable_path
def _create_launch_command(self, core_path: str) -> list[str]:
# stdio suits SolidLSP's subprocess RPC; other hosts may use a different transport.
return [core_path, "--stdio"]
@override
def _create_dependency_provider(self) -> LanguageServerDependencyProvider:
ts_settings = self._solidlsp_settings.get_ls_specific_settings(LanguageServerId.TYPESCRIPT)
return self.DependencyProvider(self._custom_settings, self._ls_resources_dir, ts_settings)
def __init__(self, config: LanguageServerConfig, repo_path: str, solidlsp_settings: SolidLSPSettings):
resolved_root = os.path.abspath(repo_path)
super().__init__(
config,View on GitHub (pinned to 7fcbca7e62)
Solutions
- Delete the versioned install dir `<ls_resources_dir>/svelte-lsp-<version>` (and its version file) so the next run reinstalls from scratch, then retry.
- Run the underlying npm install manually (`npm install svelte-language-server@<version> typescript@<ts> typescript-language-server@<tls> typescript-svelte-plugin@<tsp> --prefix <install_dir>`) to see the real npm error.
- Verify the `svelte_language_server_version` setting matches a published release that ships a `bin` entry; fix typos or pin a known-good version like 0.18.0.
- Check npm connectivity: proxy/registry env vars (npm_config_registry, HTTPS_PROXY) and disk space/permissions on the resources directory.
- On Windows confirm the check path expectation (`svelte-language-server.cmd`) is produced; if npm skips .shim generation, reinstall with a working npm.
Example fix
// before (custom version that doesn't publish a binary)
settings = {"svelte_language_server_version": "0.18.1-beta.0"}
// after
settings = {"svelte_language_server_version": "0.18.0"}
# and clear the stale install:
# rm -rf ~/.codeium/.../svelte-lsp-0.18.0 Defensive patterns
Strategy: validation
Validate before calling
import os
exe = os.path.join(resources_dir, f"svelte-lsp-{version}", "node_modules", ".bin",
"svelte-language-server" + (".cmd" if os.name == "nt" else ""))
if not os.path.exists(exe):
# clean the versioned install dir before starting the LS
shutil.rmtree(os.path.join(resources_dir, f"svelte-lsp-{version}"), ignore_errors=True) Try / catch
try:
server = SolidLSP(SvelteConfig)
except FileNotFoundError as e:
if "svelte-language-server" in str(e):
shutil.rmtree(install_dir, ignore_errors=True)
server = retry_start() # forces clean reinstall
else:
raise Prevention
- Pin a published, stable svelte_language_server_version with a bin entry
- Ensure npm registry/proxy settings work in your environment before first run
- Don't hand-edit or truncate the version file inside svelte-lsp-<version>
- Check disk space and write permissions on the LS resources dir
- Run `npm install ... --prefix <install_dir>` once manually to validate the environment
When it happens
Trigger: Calling SolidLSP with LanguageServerId.SVELTE when the runtime dependency auto-install runs `RuntimeDependencyCollection(...).install(install_dir)` for svelte-language-server@<version> and the expected executable is still missing afterwards — e.g. npm failed silently, an empty/partial version file marked the install as current, a custom `svelte_language_server_version` setting points at a version whose binary name differs, or the custom npm registry returned an incomplete package.
Common situations: Custom npm registry or offline mirror lacking the package or its bin entry; corporate proxy stripping bin links; disk-full or permission-denied installs inside _ls_resources_dir; setting `svelte_language_server_version` in ls-specific settings to a typos or prerelease version; Windows where the `.cmd` shim was not generated; a stale version_file causing the code to skip reinstall of a corrupted install.
Related errors
- Download failed? Could not find ada_language_server executab
- AL Language Server executable not found at: {executable_path
- elm-language-server executable not found at {elm_ls_executab
- vscode-json-languageserver executable not found at {json_exe
- typescript-language-server executable not found at {tsserver
AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29).
Data as JSON: /api/errors/1407c8a52c1a6a69.
Report an issue: GitHub.