diff --git a/server/src/services/heartbeat.ts b/server/src/services/heartbeat.ts index f9c205d6..6a5fa247 100644 --- a/server/src/services/heartbeat.ts +++ b/server/src/services/heartbeat.ts @@ -2517,6 +2517,10 @@ export function heartbeatService(db: Db) { await db.update(heartbeatRuns) .set({ lastOutputAt: lastOutputAtLatest, updatedAt: new Date() }) .where(eq(heartbeatRuns.id, runId)); + // Clear idle_warning if set — output resumed + await db.update(heartbeatRuns) + .set({ errorCode: null, error: null }) + .where(and(eq(heartbeatRuns.id, runId), eq(heartbeatRuns.errorCode, IDLE_WARNING_ERROR_CODE))); lastOutputAtTimer = setTimeout(() => { lastOutputAtFlushPending = false; lastOutputAtTimer = null; diff --git a/ui/src/components/LiveRunWidget.tsx b/ui/src/components/LiveRunWidget.tsx index 2af427c7..f97402bc 100644 --- a/ui/src/components/LiveRunWidget.tsx +++ b/ui/src/components/LiveRunWidget.tsx @@ -125,18 +125,13 @@ export function LiveRunWidget({ issueId, companyId }: LiveRunWidgetProps) { Idle )} - {run.lastOutputAt && isRunActive(run.status) && ( + {isRunActive(run.status) && run.lastOutputAt ? ( Last output {relativeTime(run.lastOutputAt)} - )} - {run.finishedAt && !isRunActive(run.status) && ( + ) : run.finishedAt ? ( {formatDateTime(run.finishedAt)} - )} - {!run.lastOutputAt && isRunActive(run.status) && ( - {formatDateTime(run.startedAt ?? run.createdAt)} - )} - {!run.finishedAt && !isRunActive(run.status) && !run.lastOutputAt && ( + ) : ( {formatDateTime(run.startedAt ?? run.createdAt)} )} diff --git a/ui/src/lib/status-colors.ts b/ui/src/lib/status-colors.ts index beee561a..4a2ac984 100644 --- a/ui/src/lib/status-colors.ts +++ b/ui/src/lib/status-colors.ts @@ -55,6 +55,7 @@ export const statusBadge: Record = { // Run statuses failed: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300", timed_out: "bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300", + idle_timeout: "bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300", succeeded: "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300", error: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300", terminated: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300",