agentHealth.tsx: - Drop the "Disabled" label and isHeartbeatEnabled helper. Server-side heartbeat scheduling is driven by agent.state (active/running = armed), not by the legacy runtimeConfig.enabled flag, so surfacing "Disabled" for agents with a stale flag on disk was misleading. - Replace the elapsed > heartbeatTimeoutMs check with elapsed > 2× effective interval (with a 60s floor). heartbeatTimeoutMs is the per-run work budget, not a between-tick freshness window; using it made any agent configured with a multi-minute+ interval show Unresponsive the moment it got more than 60s old. The effective interval resolver now falls back to the server-side 1h default, so agents never configured via the dropdown and agents with an explicit interval get consistent treatment, differing only by scheduled cadence. AgentDetailView.tsx: - Remove Stop buttons from active/paused/running/error (mirrors the earlier AgentsView cleanup — Pause/Resume/Retry cover reversible transitions, Delete stays on idle/terminated for teardown). - Add a "Next Heartbeat" info row alongside "Last Heartbeat" for ticking agents (active/running), computed as lastHeartbeatAt + effective interval. Tests rewritten to cover the new semantics; dropped 14 obsolete cases that were pinned to the old heartbeatTimeoutMs-based check and the "Disabled" branch. 42 agentHealth tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.1 KiB
6.1 KiB