From 2a25bd7e9f8091184df721be2c9bfc8716d0410e Mon Sep 17 00:00:00 2001 From: Cameron Pfiffer Date: Fri, 5 Dec 2025 17:26:17 -0800 Subject: [PATCH] feat: Auto-load last selected project and agent - Save selected project/agent IDs to localStorage - Auto-select on mount if they still exist - Validate project/agent exists before auto-selecting - Show console logs for auto-selection debugging --- .../Chat/Menus/ProjectAgentSelector.tsx | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/client/src/components/Chat/Menus/ProjectAgentSelector.tsx b/client/src/components/Chat/Menus/ProjectAgentSelector.tsx index 5109a63b..7327eb11 100644 --- a/client/src/components/Chat/Menus/ProjectAgentSelector.tsx +++ b/client/src/components/Chat/Menus/ProjectAgentSelector.tsx @@ -64,6 +64,10 @@ export default function ProjectAgentSelector() { setProjectSearch(''); setSelectedAgent(null); // Reset agent when project changes setProject(project.id); + + // Save to localStorage for auto-loading next time + localStorage.setItem('letta_last_project_id', project.id); + localStorage.setItem('letta_last_project_name', project.name); }; // Handle agent selection @@ -73,8 +77,53 @@ export default function ProjectAgentSelector() { setIsAgentOpen(false); setAgentSearch(''); selectLettaAgent(agent); + + // Save to localStorage for auto-loading next time + localStorage.setItem('letta_last_agent_id', agent.id); + localStorage.setItem('letta_last_agent_name', agent.name); }; + // Auto-load last selected project and agent from localStorage + useEffect(() => { + // Only run once on mount when projects are loaded + if (!projects.length || selectedProject) { + return; + } + + const lastProjectId = localStorage.getItem('letta_last_project_id'); + const lastAgentId = localStorage.getItem('letta_last_agent_id'); + + if (lastProjectId) { + const project = projects.find((p) => p.id === lastProjectId); + if (project) { + console.log('[ProjectAgentSelector] Auto-selecting last project:', project.name); + setSelectedProject(project); + setProject(project.id); + + // If we have a last agent ID, we'll select it once agents are loaded + // This happens in the next effect below + } + } + }, [projects, selectedProject, setProject]); + + // Auto-select last agent once agents are loaded for the project + useEffect(() => { + // Only run when agents are loaded and we have a selected project + if (!agents.length || selectedAgent || !selectedProject) { + return; + } + + const lastAgentId = localStorage.getItem('letta_last_agent_id'); + if (lastAgentId) { + const agent = agents.find((a) => a.id === lastAgentId); + if (agent) { + console.log('[ProjectAgentSelector] Auto-selecting last agent:', agent.name); + setSelectedAgent(agent); + selectLettaAgent(agent); + } + } + }, [agents, selectedAgent, selectedProject, selectLettaAgent]); + // Focus search input when project dropdown opens useEffect(() => { if (isProjectOpen && projectSearchInputRef.current) { -- 2.51.2