From 304c6a9bc67c2116fbe45e081bafe45723e7ca6e Mon Sep 17 00:00:00 2001 From: Naiyuan Qing <145280634+NevilleQingNY@users.noreply.github.com> Date: Thu, 12 Feb 2026 16:25:48 +0800 Subject: [PATCH] fix(desktop): wait for channel status to settle before returning The listStates IPC handler now waits for any "starting" status to settle (max 3.5s) before returning, ensuring the UI always gets the final status (running/error) instead of the transient "starting" state. Also fixes unused variable lint warning in profile page. Co-Authored-By: Claude Opus 4.5 --- apps/desktop/src/main/ipc/channels.ts | 13 ++++++++++++- .../src/renderer/src/pages/agent/profile.tsx | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/main/ipc/channels.ts b/apps/desktop/src/main/ipc/channels.ts index 4c77d0e3..c16f293b 100644 --- a/apps/desktop/src/main/ipc/channels.ts +++ b/apps/desktop/src/main/ipc/channels.ts @@ -30,11 +30,22 @@ function maskToken(token: unknown): string | undefined { export function registerChannelsIpcHandlers(): void { /** * List all channel account states (running / stopped / error). + * Waits for any "starting" status to settle before returning. */ ipcMain.handle('channels:listStates', async () => { const hub = getCurrentHub() if (!hub) return [] - return hub.channelManager.listAccountStates() + + let states = hub.channelManager.listAccountStates() + + // Wait for "starting" status to settle (max 3.5s, since internal timeout is 3s) + const start = Date.now() + while (states.some(s => s.status === 'starting') && Date.now() - start < 3500) { + await new Promise(r => setTimeout(r, 100)) + states = hub.channelManager.listAccountStates() + } + + return states }) /** diff --git a/apps/desktop/src/renderer/src/pages/agent/profile.tsx b/apps/desktop/src/renderer/src/pages/agent/profile.tsx index 63211676..37ac4f66 100644 --- a/apps/desktop/src/renderer/src/pages/agent/profile.tsx +++ b/apps/desktop/src/renderer/src/pages/agent/profile.tsx @@ -26,7 +26,7 @@ export default function ProfilePage() { const { providers, current, setProvider, refresh, loading: providerLoading } = useProviderStore() const [profileLoading, setProfileLoading] = useState(true) - const [saving, setSaving] = useState(false) + const [_saving, setSaving] = useState(false) const [name, setName] = useState('') const [userContent, setUserContent] = useState('') const [hasChanges, setHasChanges] = useState(false)