Skip to content

Commit 47648d7

Browse files
Fix for bug 23829
1 parent 6e93105 commit 47648d7

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

src/frontend/src/components/content/PlanPanelLeft.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,29 @@ const PlanPanelLeft: React.FC<PlanPanelLefProps> = ({
6060
console.log("Loading plans, forceRefresh:", forceRefresh);
6161
setPlansLoading(true);
6262
setPlansError(null);
63-
const plansData = await apiService.getPlans(undefined, forceRefresh);
63+
const plansData = await apiService.getPlans(undefined, !forceRefresh); // Invert forceRefresh for useCache
6464
setPlans(plansData);
65+
66+
// Reset the reload flag after successful load
67+
if (forceRefresh && restReload) {
68+
console.log("Plans loaded successfully, resetting reload flag");
69+
restReload();
70+
}
6571
} catch (error) {
6672
console.log("Failed to load plans:", error);
6773
setPlansError(
6874
error instanceof Error ? error : new Error("Failed to load plans")
6975
);
76+
77+
// Reset the reload flag even on error to prevent infinite loops
78+
if (forceRefresh && restReload) {
79+
console.log("Plans load failed, resetting reload flag");
80+
restReload();
81+
}
7082
} finally {
7183
setPlansLoading(false);
7284
}
73-
}, []);
85+
}, [restReload]);
7486

7587

7688
// Fetch plans
@@ -85,7 +97,7 @@ const PlanPanelLeft: React.FC<PlanPanelLefProps> = ({
8597
useEffect(() => {
8698
console.log("Reload tasks changed:", reloadTasks);
8799
if (reloadTasks) {
88-
loadPlansData();
100+
loadPlansData(true); // Force refresh when reloadTasks is true
89101
}
90102
}, [loadPlansData, setUserInfo, reloadTasks]);
91103
useEffect(() => {

src/frontend/src/pages/PlanPage.tsx

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,19 +132,38 @@ const PlanPage: React.FC = () => {
132132
// Persist / forward to backend (fire-and-forget with logging)
133133
const agentMessageResponse = PlanDataService.createAgentMessageResponse(agentMessageData, planData, is_final, streaming_message);
134134
console.log('📤 Persisting agent message:', agentMessageResponse);
135-
void apiService.sendAgentMessage(agentMessageResponse)
135+
const sendPromise = apiService.sendAgentMessage(agentMessageResponse)
136136
.then(saved => {
137137
console.log('[agent_message][persisted]', {
138138
agent: agentMessageData.agent,
139139
type: agentMessageData.agent_type,
140140
ts: agentMessageData.timestamp
141141
});
142+
143+
// If this is a final message, refresh the task list after successful persistence
144+
if (is_final) {
145+
// Single refresh with a delay to ensure backend processing is complete
146+
setTimeout(() => {
147+
console.log('✅ Final message persisted, forcing task list refresh');
148+
setReloadLeftList(true);
149+
}, 1000);
150+
}
142151
})
143152
.catch(err => {
144153
console.warn('[agent_message][persist-failed]', err);
154+
// Even if persistence fails, still refresh the task list for final messages
155+
// The local plan data has been updated, so the UI should reflect that
156+
if (is_final) {
157+
setTimeout(() => {
158+
console.log('⚠️ Final message persistence failed, but still forcing task list refresh');
159+
setReloadLeftList(true);
160+
}, 1000);
161+
}
145162
});
146163

147-
}, []);
164+
return sendPromise;
165+
166+
}, [setReloadLeftList]);
148167

149168
const resetPlanVariables = useCallback(() => {
150169
setInput("");
@@ -335,20 +354,17 @@ const PlanPage: React.FC = () => {
335354
setPlanData({ ...planData });
336355
}
337356

357+
// Wait for the agent message to be processed and persisted
358+
// The processAgentMessage function will handle refreshing the task list
338359
processAgentMessage(agentMessageData, planData, is_final, streamingMessageBuffer);
339360

340-
setTimeout(() => {
341-
console.log('✅ Plan completed, refreshing left list');
342-
setReloadLeftList(true);
343-
}, 1000);
344-
345361
}
346362

347363

348364
});
349365

350366
return () => unsubscribe();
351-
}, [scrollToBottom, planData, processAgentMessage, streamingMessageBuffer, setSelectedTeam, setReloadLeftList]);
367+
}, [scrollToBottom, planData, processAgentMessage, streamingMessageBuffer, setSelectedTeam]);
352368

353369
//WebsocketMessageType.AGENT_MESSAGE
354370
useEffect(() => {

0 commit comments

Comments
 (0)