diff --git a/src/serena/cli.py b/src/serena/cli.py index b1c5475f..bc4af3e6 100644 --- a/src/serena/cli.py +++ b/src/serena/cli.py @@ -18,7 +18,7 @@ from tqdm import tqdm from serena.agent import SerenaAgent from serena.config.context_mode import SerenaAgentContext, SerenaAgentMode -from serena.config.serena_config import ProjectConfig, SerenaConfig, SerenaPaths +from serena.config.serena_config import LanguageBackend, ProjectConfig, SerenaConfig, SerenaPaths from serena.constants import ( DEFAULT_CONTEXT, DEFAULT_MODES, @@ -154,6 +154,12 @@ class TopLevelCommands(AutoRegisteringGroup): show_default=True, help="Built-in mode names or paths to custom mode YAMLs.", ) + @click.option( + "--language-backend", + type=click.Choice([lb.value for lb in LanguageBackend]), + default=None, + help="Override the configured language backend.", + ) @click.option( "--transport", type=click.Choice(["stdio", "sse", "streamable-http"]), @@ -193,6 +199,7 @@ class TopLevelCommands(AutoRegisteringGroup): project_from_cwd: bool | None, context: str, modes: tuple[str, ...], + language_backend: str | None, transport: Literal["stdio", "sse", "streamable-http"], host: str, port: int, @@ -235,6 +242,7 @@ class TopLevelCommands(AutoRegisteringGroup): host=host, port=port, modes=modes, + language_backend=LanguageBackend.from_str(language_backend) if language_backend else None, enable_web_dashboard=enable_web_dashboard, enable_gui_log_window=enable_gui_log_window, log_level=log_level, diff --git a/src/serena/mcp.py b/src/serena/mcp.py index 24c9bd38..f4e6646f 100644 --- a/src/serena/mcp.py +++ b/src/serena/mcp.py @@ -23,6 +23,7 @@ from serena.agent import ( SerenaConfig, ) from serena.config.context_mode import SerenaAgentContext, SerenaAgentMode +from serena.config.serena_config import LanguageBackend from serena.constants import DEFAULT_CONTEXT, DEFAULT_MODES, SERENA_LOG_FORMAT from serena.tools import Tool from serena.util.exception import show_fatal_exception_safe @@ -251,6 +252,7 @@ class SerenaMCPFactory: host: str = "0.0.0.0", port: int = 8000, modes: Sequence[str] = DEFAULT_MODES, + language_backend: LanguageBackend | None = None, enable_web_dashboard: bool | None = None, enable_gui_log_window: bool | None = None, log_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] | None = None, @@ -263,6 +265,7 @@ class SerenaMCPFactory: :param host: The host to bind to :param port: The port to bind to :param modes: List of mode names or paths to mode files + :param language_backend: the language backend to use, overriding the configuration setting. :param enable_web_dashboard: Whether to enable the web dashboard. If not specified, will take the value from the serena configuration. :param enable_gui_log_window: Whether to enable the GUI log window. It currently does not work on macOS, and setting this to True will be ignored then. If not specified, will take the value from the serena configuration. @@ -286,6 +289,8 @@ class SerenaMCPFactory: config.trace_lsp_communication = trace_lsp_communication if tool_timeout is not None: config.tool_timeout = tool_timeout + if language_backend is not None: + config.language_backend = language_backend modes_instances = [SerenaAgentMode.load(mode) for mode in modes] self._instantiate_agent(config, modes_instances)