@@ -196,6 +196,30 @@ When any subkey is enabled, model and tool spans get bounded, redacted
|
196 | 196 | - `openclaw.session.stuck_age_ms` (histogram, attrs: `openclaw.state`; emitted only for stale session bookkeeping with no active work) |
197 | 197 | - `openclaw.run.attempt` (counter, attrs: `openclaw.attempt`) |
198 | 198 | |
| 199 | +### Session liveness telemetry |
| 200 | + |
| 201 | +`diagnostics.stuckSessionWarnMs` is the no-progress age threshold for session |
| 202 | +liveness diagnostics. A `processing` session does not age toward this threshold |
| 203 | +while OpenClaw observes reply, tool, status, block, or ACP runtime progress. |
| 204 | +Typing keepalives are not counted as progress, so a silent model or harness can |
| 205 | +still be detected. |
| 206 | + |
| 207 | +OpenClaw classifies sessions by the work it can still observe: |
| 208 | + |
| 209 | +- `session.long_running`: active embedded work, model calls, or tool calls are |
| 210 | + still making progress. |
| 211 | +- `session.stalled`: active work exists, but the active run has not reported |
| 212 | + recent progress. |
| 213 | +- `session.stuck`: stale session bookkeeping with no active work. This is the |
| 214 | + only liveness classification that releases the affected session lane. |
| 215 | + |
| 216 | +Only `session.stuck` emits the `openclaw.session.stuck` counter, the |
| 217 | +`openclaw.session.stuck_age_ms` histogram, and the `openclaw.session.stuck` |
| 218 | +span. Repeated `session.stuck` diagnostics back off while the session remains |
| 219 | +unchanged, so dashboards should alert on sustained increases rather than every |
| 220 | +heartbeat tick. For the config knob and defaults, see |
| 221 | +[Configuration reference](/gateway/configuration-reference#diagnostics). |
| 222 | + |
199 | 223 | ### Harness lifecycle |
200 | 224 | |
201 | 225 | - `openclaw.harness.duration_ms` (histogram, attrs: `openclaw.harness.id`, `openclaw.harness.plugin`, `openclaw.outcome`, `openclaw.harness.phase` on errors) |
|