fix: always fetch agent timeline on screen open
Previously, opening an agent screen would skip fetching timeline history if stream state already existed in the cache. This caused issues when: - Opening a running agent after reconnection - Returning to an agent with stale/incomplete cache Now we always fetch fresh timeline on open, ensuring: - Complete history is shown regardless of client state - Reconnection scenarios work correctly - Agent state is always up-to-date Uses a ref to track initialization per mount to prevent infinite loops. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -315,37 +315,38 @@ function AgentScreenContent({ serverId, agentId, onBack }: AgentScreenContentPro
|
|||||||
};
|
};
|
||||||
}, [resolvedAgentId, setFocusedAgentId]);
|
}, [resolvedAgentId, setFocusedAgentId]);
|
||||||
|
|
||||||
const hasStreamState = useSessionStore((state) =>
|
const isInitializing = resolvedAgentId ? isInitializingFromMap !== false : false;
|
||||||
resolvedAgentId ? state.sessions[serverId]?.agentStreamState?.has(resolvedAgentId) ?? false : false
|
|
||||||
);
|
|
||||||
|
|
||||||
const isInitializing = resolvedAgentId
|
// Track which agent we've already triggered initialization for
|
||||||
? isInitializingFromMap !== false
|
const initializedAgentRef = useRef<string | null>(null);
|
||||||
? isInitializingFromMap
|
|
||||||
: !hasStreamState
|
|
||||||
: false;
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!resolvedAgentId || !initializeAgent) {
|
if (!resolvedAgentId || !initializeAgent) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("[AgentScreen] initializeAgent effect", {
|
// Skip if already initializing
|
||||||
|
if (isInitializingFromMap === true) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip if we already triggered initialization for this agent
|
||||||
|
if (initializedAgentRef.current === resolvedAgentId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark this agent as initialized
|
||||||
|
initializedAgentRef.current = resolvedAgentId;
|
||||||
|
|
||||||
|
// Always fetch timeline when opening agent screen
|
||||||
|
// Server returns full snapshot, client replaces cache
|
||||||
|
// This ensures we always have complete history, even after reconnection
|
||||||
|
console.log("[AgentScreen] Fetching agent timeline", {
|
||||||
agentId: resolvedAgentId,
|
agentId: resolvedAgentId,
|
||||||
hasStreamState,
|
|
||||||
isInitializingFromMap,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isInitializingFromMap !== false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasStreamState) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
initializeAgent({ agentId: resolvedAgentId });
|
initializeAgent({ agentId: resolvedAgentId });
|
||||||
}, [resolvedAgentId, initializeAgent, isInitializingFromMap, hasStreamState]);
|
}, [resolvedAgentId, initializeAgent, isInitializingFromMap]);
|
||||||
|
|
||||||
const agentControls = useMemo(() => {
|
const agentControls = useMemo(() => {
|
||||||
if (!resolvedAgentId) return null;
|
if (!resolvedAgentId) return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user