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) => {