From a47df023f55999d437483fd469a00760667e4fbf Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Fri, 31 Jul 2026 16:03:01 +0200 Subject: [PATCH] Report language server status in GetCurrentConfigTool result Resolves #1782 --- CHANGELOG.md | 1 + src/serena/agent.py | 2 ++ src/serena/project.py | 13 +++++++++++++ 3 files changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ee9de6f..b409e3e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ Status of the `main` branch. Changes prior to the next official version change w * Tools: - `find_symbol`: Change tool description to improve tool search results in clients that load tools dynamically + - `get_current_config`: Result now includes language server status #1782 * Language Servers: - Allow language server priorities to be configured in `serena_config.yml` (for auto-detection during diff --git a/src/serena/agent.py b/src/serena/agent.py index 5107b572..1eba5bd0 100644 --- a/src/serena/agent.py +++ b/src/serena/agent.py @@ -1356,6 +1356,8 @@ class SerenaAgent: if self._active_project and self._active_project.project_config.language_backend is not None: result_str += " (project override)" result_str += f" (global default: {self.serena_config.language_backend.value})\n" + if self._language_backend.is_lsp() and self._active_project: + result_str += f"Language server status: {self._active_project.get_language_server_manager_status()}\n" result_str += "Available projects:\n" + "\n".join(list(self.serena_config.project_names)) + "\n" result_str += f"Active context: {self._context.name}\n" diff --git a/src/serena/project.py b/src/serena/project.py index a66bb352..c92a213b 100644 --- a/src/serena/project.py +++ b/src/serena/project.py @@ -504,6 +504,19 @@ class Project(ToStringMixin): self._language_server_manager_init_error = e raise + def get_language_server_manager_status(self) -> str: + """ + :return: a status string describing the state of the language server manager; if its initialisation resulted in an + error, the error message is included in the status string + """ + if self.language_server_manager is None: + if self._language_server_manager_init_error is not None: + return f"error ({self._language_server_manager_init_error})" + else: + return "not initialized" + else: + return "ready" + def get_language_server_manager_or_raise(self) -> LanguageServerManager: if self.language_server_manager is None: msg = TextBuilder("The language server manager is not initialized, indicating a problem during project initialisation.")