From 8ce0966987a0de46d64307c02f729a290f2f3cf3 Mon Sep 17 00:00:00 2001
From: Adam <2363879+adamdotdevin@users.noreply.github.com>
Date: Mon, 15 Dec 2025 10:13:29 -0600
Subject: wip(desktop): progress

---
 packages/desktop/src/context/notification.tsx | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

(limited to 'packages/desktop/src/context/notification.tsx')

diff --git a/packages/desktop/src/context/notification.tsx b/packages/desktop/src/context/notification.tsx
index 705551944..9843066ea 100644
--- a/packages/desktop/src/context/notification.tsx
+++ b/packages/desktop/src/context/notification.tsx
@@ -2,6 +2,8 @@ import { createStore } from "solid-js/store"
 import { createSimpleContext } from "@opencode-ai/ui/context"
 import { makePersisted } from "@solid-primitives/storage"
 import { useGlobalSDK } from "./global-sdk"
+import { useGlobalSync } from "./global-sync"
+import { Binary } from "@opencode-ai/util/binary"
 import { EventSessionError } from "@opencode-ai/sdk/v2"
 import { makeAudioPlayer } from "@solid-primitives/audio"
 import idleSound from "@opencode-ai/ui/audio/staplebops-01.aac"
@@ -32,6 +34,7 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
     const idlePlayer = makeAudioPlayer(idleSound)
     const errorPlayer = makeAudioPlayer(errorSound)
     const globalSDK = useGlobalSDK()
+    const globalSync = useGlobalSync()
 
     const [store, setStore] = makePersisted(
       createStore({
@@ -57,22 +60,32 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
       }
       switch (event.type) {
         case "session.idle": {
+          const sessionID = event.properties.sessionID
+          const [syncStore] = globalSync.child(directory)
+          const match = Binary.search(syncStore.session, sessionID, (s) => s.id)
+          const isChild = match.found && syncStore.session[match.index].parentID
+          if (isChild) break
           idlePlayer.play()
-          const session = event.properties.sessionID
           setStore("list", store.list.length, {
             ...base,
             type: "turn-complete",
-            session,
+            session: sessionID,
           })
           break
         }
         case "session.error": {
+          const sessionID = event.properties.sessionID
+          if (sessionID) {
+            const [syncStore] = globalSync.child(directory)
+            const match = Binary.search(syncStore.session, sessionID, (s) => s.id)
+            const isChild = match.found && syncStore.session[match.index].parentID
+            if (isChild) break
+          }
           errorPlayer.play()
-          const session = event.properties.sessionID ?? "global"
           setStore("list", store.list.length, {
             ...base,
             type: "error",
-            session,
+            session: sessionID ?? "global",
             error: "error" in event.properties ? event.properties.error : undefined,
           })
           break
-- 
cgit v1.2.3

