diff --git a/core/scripts/webpanel/routers/api/v1/schema/server.py b/core/scripts/webpanel/routers/api/v1/schema/server.py index 49b1395..e5a2970 100644 --- a/core/scripts/webpanel/routers/api/v1/schema/server.py +++ b/core/scripts/webpanel/routers/api/v1/schema/server.py @@ -43,6 +43,7 @@ class ServerServicesStatusResponse(BaseModel): class VersionInfoResponse(BaseModel): current_version: str + core_version: Optional[str] = None class VersionCheckResponse(BaseModel): diff --git a/core/scripts/webpanel/routers/api/v1/server.py b/core/scripts/webpanel/routers/api/v1/server.py index 07b6b51..04b249b 100644 --- a/core/scripts/webpanel/routers/api/v1/server.py +++ b/core/scripts/webpanel/routers/api/v1/server.py @@ -182,13 +182,26 @@ def __parse_services_status(services_status: dict[str, bool]) -> ServerServicesS @router.get('/version', response_model=VersionInfoResponse) async def get_version_info(): - """Retrieves the current version of the panel.""" + """Retrieves the current version of the panel and Hysteria core.""" try: version_output = cli_api.show_version() - if version_output: - current_version = version_output.split(": ")[1].strip() - return VersionInfoResponse(current_version=current_version) - raise HTTPException(status_code=404, detail="Version information not found") + if not version_output: + raise HTTPException(status_code=404, detail="Version information not found") + + lines = version_output.strip().splitlines() + current_version = None + core_version = None + + for line in lines: + if "Panel Version:" in line: + current_version = line.split(": ")[1].strip() + elif "Hysteria2 Core Version:" in line: + core_version = line.split(": ")[1].strip() + + if current_version: + return VersionInfoResponse(current_version=current_version, core_version=core_version) + + raise HTTPException(status_code=404, detail="Panel version not found in output") except Exception as e: raise HTTPException(status_code=500, detail=str(e))