From 54e6732e3951708d41fb596005421e80317a7c6f Mon Sep 17 00:00:00 2001 From: Kayos Date: Fri, 15 May 2026 11:54:49 -0700 Subject: [PATCH] server: raise per-run timeout cap 1800s -> 7200s A max-effort whole-book audit pass (skald's prose audit over a 50k+-word story) runs past the old 30-minute ceiling. Raise the RunRequest/TurnRequest timeout_secs cap to 7200s so the slowest legitimate pass isn't stranded. --- clawdforge/server.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/clawdforge/server.py b/clawdforge/server.py index eaa876d..0f0b687 100644 --- a/clawdforge/server.py +++ b/clawdforge/server.py @@ -129,11 +129,12 @@ class RunRequest(BaseModel): # get the budget they deserve. effort: Literal["low", "medium", "high", "xhigh", "max"] | None = None files: list[str] | None = None - # Long-form prose-craft at --effort max can run 10–20 min wall clock, - # so the per-run cap is 1800s. Server still streams a per-process - # SIGTERM at the boundary; the caller's RunResult.duration_ms is - # honest about wall clock. - timeout_secs: int | None = Field(default=None, ge=5, le=1800) + # Long-form prose-craft at --effort max can run 10–20 min wall clock; + # a max-effort whole-book audit pass can run past an hour. The + # per-run cap is 7200s to cover the slowest case. Server still + # streams a per-process SIGTERM at the boundary; the caller's + # RunResult.duration_ms is honest about wall clock. + timeout_secs: int | None = Field(default=None, ge=5, le=7200) class TokenCreateRequest(BaseModel): @@ -153,7 +154,7 @@ class CreateSessionRequest(BaseModel): class TurnRequest(BaseModel): prompt: str = Field(min_length=1) files: list[str] | None = None - timeout_secs: int | None = Field(default=None, ge=5, le=1800) + timeout_secs: int | None = Field(default=None, ge=5, le=7200) # ---------- endpoints --------------------------------------------------------