fix(gateway): Handle non-JSON cron responses

Add JSON parsing guards and path fallback for cron endpoints so\ncron list errors expose gateway text and retry /cron/jobs.\n\nCo-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Abhimanyu Saharan
2026-02-04 15:40:37 +05:30
parent b36f755470
commit 4979991de6

View File

@@ -67,7 +67,13 @@ async def _http_request(method: str, path: str, payload: dict[str, Any] | None =
)
if not response.content:
return None
try:
return response.json()
except ValueError as exc:
preview = response.text.strip()[:200] or "<empty>"
raise OpenClawGatewayError(
f"Non-JSON response from gateway: {preview}"
) from exc
except OpenClawGatewayError:
raise
except Exception as exc: # pragma: no cover - transport errors
@@ -183,13 +189,22 @@ async def ensure_session(session_key: str, label: str | None = None) -> Any:
async def list_cron_jobs() -> Any:
try:
return await _http_request("GET", "/api/v1/cron/jobs")
except OpenClawGatewayError:
return await _http_request("GET", "/cron/jobs")
async def upsert_cron_job(job: dict[str, Any]) -> Any:
try:
return await _http_request("POST", "/api/v1/cron/jobs", payload=job)
except OpenClawGatewayError:
return await _http_request("POST", "/cron/jobs", payload=job)
async def delete_cron_job(name: str) -> Any:
safe_name = quote(name, safe="")
try:
return await _http_request("DELETE", f"/api/v1/cron/jobs/{safe_name}")
except OpenClawGatewayError:
return await _http_request("DELETE", f"/cron/jobs/{safe_name}")