diff --git a/packages/desktop/src/main/pty-server.ts b/packages/desktop/src/main/pty-server.ts index 22697ce..7684106 100644 --- a/packages/desktop/src/main/pty-server.ts +++ b/packages/desktop/src/main/pty-server.ts @@ -1084,20 +1084,29 @@ export async function getMultiplexerSessions(): Promise { - const results: MultiplexerSessionInfo[] = [] - const { stdout } = await execAsync('herdr session list --json', { env: EXEC_ENV }) - const parsed = JSON.parse(stdout) + const [sessionResult, paneResult] = await Promise.all([ + execAsync('herdr session list --json', { env: EXEC_ENV }), + execAsync('herdr pane list', { env: EXEC_ENV }).catch(() => null), + ]) + + const parsed = JSON.parse(sessionResult.stdout) const sessions: Array<{ name: string; running: boolean; session_dir?: string }> = Array.isArray(parsed) ? parsed : parsed.sessions ?? [] - for (const s of sessions) { - if (!s.name || !SAFE_SESSION_NAME_RE.test(s.name)) continue - results.push({ - tool: 'herdr', - sessionName: s.name, - detail: s.running ? 'running' : 'stopped', - }) - } - return results + + let paneCwd: string | undefined + try { + if (paneResult) { + paneCwd = (JSON.parse(paneResult.stdout)?.result?.panes as Array<{ cwd?: string }> | undefined)?.[0]?.cwd + } + } catch { /* pane list parse failure — proceed without workingDirectory */ } + + const validSessions = sessions.filter((s) => s.name && SAFE_SESSION_NAME_RE.test(s.name)) + return validSessions.map((s) => ({ + tool: 'herdr' as const, + sessionName: s.name, + detail: s.running ? 'running' : 'stopped', + workingDirectory: validSessions.length === 1 ? paneCwd : undefined, + })) } const collectors: Record Promise> = {