Refresh session files panel on open

This commit is contained in:
武阳
2026-05-08 17:34:40 +08:00
parent 0bbba2b936
commit 1af0a6f0ea
2 changed files with 47 additions and 4 deletions
@@ -42,6 +42,7 @@ type ActivityContextValue = {
mode: "activity" | "files";
selectedId: string | null;
sessionId: string | null;
filesRefreshToken: number;
openItem: (id: string) => void;
openFiles: (sessionId?: string | null) => void;
close: () => void;
@@ -54,6 +55,7 @@ export function ActivityProvider({ children }: { children: ReactNode }) {
const [mode, setMode] = useState<"activity" | "files">("activity");
const [selectedId, setSelectedId] = useState<string | null>(null);
const [sessionId, setSessionId] = useState<string | null>(null);
const [filesRefreshToken, setFilesRefreshToken] = useState(0);
const openItem = useCallback((id: string) => {
setMode("activity");
setSelectedId(id);
@@ -67,6 +69,7 @@ export function ActivityProvider({ children }: { children: ReactNode }) {
? window.localStorage.getItem("claw.activeSessionId")
: null),
);
setFilesRefreshToken((value) => value + 1);
setOpen(true);
}, []);
const close = useCallback(() => setOpen(false), []);
@@ -76,11 +79,21 @@ export function ActivityProvider({ children }: { children: ReactNode }) {
mode,
selectedId,
sessionId,
filesRefreshToken,
openItem,
openFiles,
close,
}),
[open, mode, selectedId, sessionId, openItem, openFiles, close],
[
open,
mode,
selectedId,
sessionId,
filesRefreshToken,
openItem,
openFiles,
close,
],
);
return (
@@ -112,8 +125,15 @@ type ActivityItem = {
};
export function ActivityPanel() {
const { open, mode, selectedId, sessionId, openItem, close } =
useActivityPanel();
const {
open,
mode,
selectedId,
sessionId,
filesRefreshToken,
openItem,
close,
} = useActivityPanel();
const messages = useAuiState((s) => s.thread.messages);
const items = useMemo(() => collectActivityItems(messages), [messages]);
const selectedMessageId = selectedId ? activityMessageId(selectedId) : null;
@@ -137,7 +157,13 @@ export function ActivityPanel() {
if (!open) return null;
if (mode === "files") {
return <SessionFilesPanel sessionId={sessionId} onClose={close} />;
return (
<SessionFilesPanel
key={`${sessionId ?? "active"}:${filesRefreshToken}`}
sessionId={sessionId}
onClose={close}
/>
);
}
return (
@@ -245,8 +271,17 @@ function SessionFilesPanel({
}
}
loadFiles();
const handleRefresh = () => {
loadFiles();
};
window.addEventListener("claw-sessions-changed", handleRefresh);
window.addEventListener("claw-session-files-changed", handleRefresh);
window.addEventListener("focus", handleRefresh);
return () => {
cancelled = true;
window.removeEventListener("claw-sessions-changed", handleRefresh);
window.removeEventListener("claw-session-files-changed", handleRefresh);
window.removeEventListener("focus", handleRefresh);
};
}, [sessionId]);