""" restart_service tool — stop and restart the buggy server subprocess. After the agent has fixed the database state and patched worker.py, calling this tool triggers a clean restart. The environment then automatically runs the incident grader to check whether all three conditions are met. """ import logging from debug_env.server.schemas import ToolResult logger = logging.getLogger(__name__) def restart_service(workdir: str, service_manager, entrypoint: str) -> ToolResult: """ Restart the buggy server via *service_manager*. Args: workdir: Absolute path to the task working directory. service_manager: A :class:`~debug_env.server.services.ServiceManager` instance held in shared environment state. entrypoint: Server script filename, e.g. ``"buggy_server.py"``. Returns: :class:`ToolResult` with ``pass_rate=0.0`` and a status message. The *actual* reward-bearing result is supplied by the incident grader which runs immediately after in the ``step()`` handler. """ if service_manager is None: return ToolResult( pass_rate=0.0, logs="No service manager found. Is this an incident task?", success=False, ) try: new_port = service_manager.restart(workdir, entrypoint) logger.info("restart_service: new port=%s", new_port) return ToolResult( pass_rate=0.0, logs=f"Service restarted successfully. Now listening on port {new_port}.", success=True, ) except Exception as exc: logger.error("restart_service failed: %s", exc, exc_info=True) return ToolResult( pass_rate=0.0, logs=f"Service restart failed: {exc}", success=False, )