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

  1. Delete the versioned install dir `<ls_resources_dir>/svelte-lsp-<version>` (and its version file) so the next run reinstalls from scratch, then retry.
  2. 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.
  3. 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.
  4. Check npm connectivity: proxy/registry env vars (npm_config_registry, HTTPS_PROXY) and disk space/permissions on the resources directory.
  5. 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

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


AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29). Data as JSON: /api/errors/1407c8a52c1a6a69. Report an issue: GitHub.