{"record":{"id":"df6360f636ab9ce8","repo":"oraios/serena","slug":"failed-to-start-the-language-server-for-language","errorCode":null,"errorMessage":"Failed to start the language server for language {self.ls_id.value}","messagePattern":"Failed to start the language server for language (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/serena/ls_manager.py","lineNumber":124,"sourceCode":"        :param factory: the factory for language server creation\n        :param project: the project for which the language servers are created\n        :return: the instance\n        \"\"\"\n\n        class StartLSThread(threading.Thread):\n            def __init__(self, ls_id: LanguageServerId):\n                super().__init__(target=self._start_language_server, name=\"StartLS:\" + ls_id.value)\n                self.ls_id = ls_id\n                self.language_server: SolidLanguageServer | None = None\n                self.exception: Exception | None = None\n\n            def _start_language_server(self) -> None:\n                try:\n                    with LogTime(f\"Language server startup (language={self.ls_id.value})\"):\n                        self.language_server = factory.create_language_server(self.ls_id)\n                        self.language_server.start()\n                        if not self.language_server.is_running():\n                            raise RuntimeError(f\"Failed to start the language server for language {self.ls_id.value}\")\n                except Exception as e:\n                    log.error(f\"Error starting language server for language {self.ls_id.value}: {e}\", exc_info=e)\n                    self.exception = e\n\n        # start language servers in parallel threads\n        threads = []\n        for language in languages:\n            thread = StartLSThread(language)\n            thread.start()\n            threads.append(thread)\n\n        # collect language servers and exceptions\n        language_servers: dict[LanguageServerId, SolidLanguageServer] = {}\n        exceptions: dict[LanguageServerId, Exception] = {}\n        for thread in threads:\n            thread.join()\n            if thread.exception is not None:\n                exceptions[thread.ls_id] = thread.exception","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/serena/ls_manager.py#L106-L142","documentation":"During parallel startup, a thread creates and starts the language server, then raises RuntimeError if language_server.is_running() is still false. The exception is captured in self.exception and logged; it surfaces aggregated via from_languages as LanguageServerManagerInitialisationError.","triggerScenarios":"factory.create_language_server(ls_id) succeeds and start() returns but the server process exits immediately — e.g. missing LSP binary on PATH, bad command-line configuration, port/pipe failure, or the server crashing on startup.","commonSituations":"language server executable not installed (e.g. pyright/typescript-language-server absent); wrong version pinned in config; insufficient permissions or broken node installation; server killed by resource limits.","solutions":["Check the server log output (log.error includes exc_info) for the underlying cause","Install/verify the language server binary, e.g. run 'pyright --version' or 'typescript-language-server --version'","Fix the language server command/options in the serena language config","Retry after fixing; the manager stops all servers and raises LanguageServerManagerInitialisationError, so the whole manager must be recreated"],"exampleFix":"// before\n# pyright not installed\nmanager = LanguageServerManager.from_languages([LanguageServerId.PYTHON], factory, project)\n// after\n# $ npm install -g pyright\nmanager = LanguageServerManager.from_languages([LanguageServerId.PYTHON], factory, project)","handlingStrategy":"try-catch","validationCode":"import shutil\nassert shutil.which(\"pyright\"), \"pyright binary not on PATH\"","typeGuard":null,"tryCatchPattern":"try:\n    manager = LanguageServerManager.from_languages(langs, factory, project)\nexcept LanguageServerManagerInitialisationError as e:\n    logger.error(\"LS startup failed: %s\", e)\n    # fix binary/config, then retry\n    manager = LanguageServerManager.from_languages(langs, factory, project)","preventionTips":["Pre-install all language server binaries and verify with --version","Pin compatible server versions in your environment","Inspect serena logs (exc_info included) for the root cause","Health-check the manager right after creation"],"tags":["language-server","startup-failure","process"],"backgroundTag":"language-server-failed-to-start","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}