diff --git a/packages/desktop/src/pages/layout.tsx b/packages/desktop/src/pages/layout.tsx index 79470cf14..6cf7a2b0e 100644 --- a/packages/desktop/src/pages/layout.tsx +++ b/packages/desktop/src/pages/layout.tsx @@ -413,11 +413,11 @@ export default function Layout(props: ParentProps) { const updated = createMemo(() => DateTime.fromMillis(props.session.time.updated)) const notifications = createMemo(() => notification.session.unseen(props.session.id)) const hasError = createMemo(() => notifications().some((n) => n.type === "error")) - const isWorking = createMemo( - () => - props.session.id !== params.id && - globalSync.child(props.project.worktree)[0].session_status[props.session.id]?.type === "busy", - ) + const isWorking = createMemo(() => { + if (props.session.id === params.id) return false + const status = globalSync.child(props.project.worktree)[0].session_status[props.session.id] + return status?.type === "busy" || status?.type === "retry" + }) return ( <>
status()?.type !== "idle") + const retry = createMemo(() => { + const s = status() + if (s.type !== "retry") return + return s + }) + const [retrySeconds, setRetrySeconds] = createSignal(0) + + createEffect(() => { + const r = retry() + if (!r) { + setRetrySeconds(0) + return + } + + const updateSeconds = () => { + const next = r.next + if (next) setRetrySeconds(Math.max(0, Math.round((next - Date.now()) / 1000))) + } + updateSeconds() + + const timer = setInterval(updateSeconds, 1000) + onCleanup(() => clearInterval(timer)) + }) let scrollRef: HTMLDivElement | undefined const [state, setState] = createStore({ @@ -300,10 +323,12 @@ export function SessionTurn( {/* Trigger (sticky) */}
setState("stickyTriggerRef", el)} data-slot="session-turn-response-trigger">
{/* Response */} - + 0}>
{(assistantMessage) => {