diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index e224736cf..9d724a6c0 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "2416bc668cb6f6305afa634c9da779e2481821de", - "syncedAt": "2026-05-03T17:10:06.205Z" + "sha": "9a224739164b9476e046018a35a0b9d05327a9dc", + "syncedAt": "2026-05-03T17:14:35.936Z" } diff --git a/docs/concepts/agent-loop.md b/docs/concepts/agent-loop.md index a81a0ba3a..9c6584f4d 100644 --- a/docs/concepts/agent-loop.md +++ b/docs/concepts/agent-loop.md @@ -165,7 +165,7 @@ surfaces, while Codex native hooks remain a separate lower-level Codex mechanism - `agent.wait` default: 30s (just the wait). `timeoutMs` param overrides. - Agent runtime: `agents.defaults.timeoutSeconds` default 172800s (48 hours); enforced in `runEmbeddedPiAgent` abort timer. - Cron runtime: isolated agent-turn `timeoutSeconds` is owned by cron. The scheduler starts that timer when execution begins, aborts the underlying run at the configured deadline, then runs bounded cleanup before recording the timeout so a stale child session cannot keep the lane stuck. -- Session liveness diagnostics: with diagnostics enabled, `diagnostics.stuckSessionWarnMs` classifies long `processing` sessions that have no observed reply, tool, status, block, or ACP progress. Active embedded runs, model calls, and tool calls report as `session.long_running`; active work with no recent progress reports as `session.stalled`; `session.stuck` is reserved for stale session bookkeeping with no active work, and only that path releases the affected session lane so queued startup work can drain. Repeated `session.stuck` diagnostics back off while the session remains unchanged. +- Session liveness diagnostics: with diagnostics enabled, `diagnostics.stuckSessionWarnMs` classifies long `processing` sessions that have no observed reply, tool, status, block, or ACP progress. Active embedded runs, model calls, and tool calls report as `session.long_running`; active work with no recent progress reports as `session.stalled`; `session.stuck` is reserved for stale session bookkeeping with no active work. Stale session bookkeeping releases the affected session lane immediately; stalled embedded runs are abort-drained only after an extended no-progress window (at least 10 minutes and 5x the warning threshold) so queued work can resume without cutting off merely slow runs. Repeated `session.stuck` diagnostics back off while the session remains unchanged. - Model idle timeout: OpenClaw aborts a model request when no response chunks arrive before the idle window. `models.providers..timeoutSeconds` extends this idle watchdog for slow local/self-hosted providers; otherwise OpenClaw uses `agents.defaults.timeoutSeconds` when configured, capped at 120s by default. Cron-triggered runs with no explicit model or agent timeout disable the idle watchdog and rely on the cron outer timeout. - Provider HTTP request timeout: `models.providers..timeoutSeconds` applies to that provider's model HTTP fetches, including connect, headers, body, SDK request timeout, total guarded-fetch abort handling, and model stream idle watchdog. Use this for slow local/self-hosted providers such as Ollama before raising the whole agent runtime timeout. diff --git a/docs/gateway/opentelemetry.md b/docs/gateway/opentelemetry.md index f98874725..758cbf2cb 100644 --- a/docs/gateway/opentelemetry.md +++ b/docs/gateway/opentelemetry.md @@ -215,9 +215,11 @@ OpenClaw classifies sessions by the work it can still observe: - `session.long_running`: active embedded work, model calls, or tool calls are still making progress. - `session.stalled`: active work exists, but the active run has not reported - recent progress. -- `session.stuck`: stale session bookkeeping with no active work. This is the - only liveness classification that releases the affected session lane. + recent progress. Stalled embedded runs stay observe-only at first, then + abort-drain after at least 10 minutes and 5x `diagnostics.stuckSessionWarnMs` + with no progress so queued turns behind the lane can resume. +- `session.stuck`: stale session bookkeeping with no active work. This releases + the affected session lane immediately. Only `session.stuck` emits the `openclaw.session.stuck` counter, the `openclaw.session.stuck_age_ms` histogram, and the `openclaw.session.stuck`