handoff
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import type { DragEvent } from 'react';
|
||||
import { toast } from 'sonner';
|
||||
import { api } from '@/api/client';
|
||||
import type { WorkspacePane } from '@/api/types';
|
||||
import { setActivePaneInfo, clearActivePane } from '@/hooks/useActivePane';
|
||||
|
||||
@@ -302,11 +303,19 @@ export function useWorkspacePanes(sessionId: string): UseWorkspacePanesResult {
|
||||
}
|
||||
return prev;
|
||||
}
|
||||
// v1.10.8c: with per-pane tmux sessions, an unkilled session leaks until
|
||||
// the next `tmux kill-server`. Fire-and-forget /kill on terminal removal.
|
||||
// The endpoint is idempotent (404 on missing session) so a strict-mode
|
||||
// double-invoke of the updater is safe.
|
||||
const removed = prev[idx];
|
||||
if (removed?.kind === 'terminal') {
|
||||
api.terminals.kill(sessionId, removed.id).catch(() => { /* non-fatal */ });
|
||||
}
|
||||
const next = prev.filter((_, i) => i !== idx);
|
||||
setActivePaneIdx((ai) => Math.min(ai, next.length - 1));
|
||||
return next;
|
||||
});
|
||||
}, []);
|
||||
}, [sessionId]);
|
||||
|
||||
// Replaces a single empty default pane with a chat pane. Used by the initial
|
||||
// chat fetch to land on the most-recent open chat if no saved pane state.
|
||||
|
||||
Reference in New Issue
Block a user