Skip to content

Commit 74cec74

Browse files
committed
update plan clarification behavior
1 parent 3927cb5 commit 74cec74

File tree

4 files changed

+81
-26
lines changed

4 files changed

+81
-26
lines changed

src/frontend_react/src/api/apiService.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -323,18 +323,14 @@ export class APIService {
323323
sessionId: string,
324324
approved: boolean,
325325
stepId?: string,
326-
humanFeedback?: string,
327-
updatedAction?: string
328326
): Promise<{ status: string }> {
329327
const response = await apiClient.post(
330328
API_ENDPOINTS.APPROVE_STEPS,
331329
{
332330
step_id: stepId,
333331
plan_id: planId,
334332
session_id: sessionId,
335-
approved,
336-
human_feedback: humanFeedback,
337-
updated_action: updatedAction
333+
approved
338334
}
339335
);
340336

src/frontend_react/src/components/content/PlanChat.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ const PlanChat: React.FC<PlanChatProps> = ({
2424

2525
const messagesContainerRef = useRef<HTMLDivElement>(null);
2626
const inputContainerRef = useRef<HTMLDivElement>(null);
27-
const sendMessage = async () => {
28-
};
27+
2928
const scrollToBottom = () => {
3029
};
3130
const clearChat = async () => {
@@ -91,12 +90,12 @@ const PlanChat: React.FC<PlanChatProps> = ({
9190
<ChatInput
9291
value={input}
9392
onChange={setInput}
94-
onEnter={sendMessage}
93+
onEnter={OnChatSubmit}
9594

9695
>
9796
<Button
9897
appearance="transparent"
99-
onClick={sendMessage}
98+
onClick={OnChatSubmit}
10099
icon={<Send />}
101100
disabled={planData.hasHumanClarificationRequest && (isTyping || !input.trim())}
102101
/>

src/frontend_react/src/pages/PlanPage.tsx

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,11 @@ import '../styles/PlanPage.css';
2222
import CoralShellColumn from '../coral/components/Layout/CoralShellColumn';
2323
import CoralShellRow from '../coral/components/Layout/CoralShellRow';
2424
import Content from '../coral/components/Content/Content';
25-
import PanelLeft from '../coral/components/Panels/PanelLeft';
26-
import PanelLeftToolbar from '../coral/components/Panels/PanelLeftToolbar';
27-
import TaskList from '../components/content/TaskList';
2825
import { NewTaskService } from '../services/NewTaskService';
2926
import { PlanDataService } from '../services/PlanDataService';
30-
import { PlanWithSteps, Task, AgentType, Step, ProcessedPlanData } from '@/models';
31-
import { apiService } from '@/api';
27+
import { Step, ProcessedPlanData } from '@/models';
3228
import PlanPanelLeft from '@/components/content/PlanPanelLeft';
3329
import ContentToolbar from '@/coral/components/Content/ContentToolbar';
34-
import Chat from '@/coral/modules/Chat';
35-
import TaskDetails from '@/components/content/TaskDetails';
3630
import PlanChat from '@/components/content/PlanChat';
3731
import PlanPanelRight from '@/components/content/PlanPanelRight';
3832

@@ -48,17 +42,7 @@ const PlanPage: React.FC = () => {
4842
const [planData, setPlanData] = useState<ProcessedPlanData | any>(null);
4943
const [loading, setLoading] = useState<boolean>(true);
5044
const [error, setError] = useState<Error | null>(null);
51-
const handleOnchatSubmit = useCallback(() => {
52-
NewTaskService.handleNewTaskFromHome();
53-
}, []);
5445

55-
const handleApproveStep = useCallback((step: Step) => {
56-
console.log('Approving step:', step);
57-
}, []);
58-
59-
const handleRejectStep = useCallback((step: Step) => {
60-
console.log('Rejecting step:', step);
61-
}, []);
6246
/**
6347
* Fetch plan data when component mounts or planId changes
6448
*/
@@ -80,6 +64,43 @@ const PlanPage: React.FC = () => {
8064
}
8165
}, [planId]);
8266

67+
// Accept chat input and submit clarification
68+
const handleOnchatSubmit = useCallback(
69+
async (chatInput: string) => {
70+
if (!planData?.plan) return;
71+
try {
72+
await PlanDataService.submitClarification(
73+
planData.plan.id, // plan_id
74+
planData.plan.session_id, // session_id
75+
chatInput // human_clarification
76+
);
77+
await loadPlanData();
78+
} catch (error) {
79+
console.error('Failed to submit clarification:', error);
80+
}
81+
},
82+
[planData, loadPlanData]
83+
);
84+
85+
// Move handlers here to fix dependency order
86+
const handleApproveStep = useCallback(async (step: Step) => {
87+
try {
88+
await PlanDataService.approveStep(step);
89+
await loadPlanData();
90+
} catch (error) {
91+
console.error('Failed to approve step:', error);
92+
}
93+
}, [loadPlanData]);
94+
95+
const handleRejectStep = useCallback(async (step: Step) => {
96+
try {
97+
await PlanDataService.rejectStep(step);
98+
await loadPlanData();
99+
} catch (error) {
100+
console.error('Failed to reject step:', error);
101+
}
102+
}, [loadPlanData]);
103+
83104
// Load plan data on mount and when planId changes
84105
useEffect(() => {
85106
loadPlanData();

src/frontend_react/src/services/PlanDataService.tsx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,43 @@ export class PlanDataService { /**
9090
static getPlanCompletionPercentage(plan: PlanWithSteps): number {
9191
return apiService.getPlanCompletionPercentage(plan);
9292
}
93+
94+
/**
95+
* Approve a plan step
96+
* @param step Step to approve
97+
* @returns Promise with API response
98+
*/
99+
static async approveStep(step: Step): Promise<{ status: string }> {
100+
return apiService.approveSteps(
101+
step.plan_id,
102+
step.session_id,
103+
true, // approved
104+
step.id
105+
);
106+
}
107+
108+
/**
109+
* Reject a plan step
110+
* @param step Step to reject
111+
* @returns Promise with API response
112+
*/
113+
static async rejectStep(step: Step): Promise<{ status: string }> {
114+
return apiService.approveSteps(
115+
step.plan_id,
116+
step.session_id,
117+
false, // not approved
118+
step.id
119+
);
120+
}
121+
122+
/**
123+
* Submit human clarification for a plan
124+
* @param planId Plan ID
125+
* @param sessionId Session ID
126+
* @param clarification Clarification text
127+
* @returns Promise with API response
128+
*/
129+
static async submitClarification(planId: string, sessionId: string, clarification: string) {
130+
return apiService.submitClarification(planId, sessionId, clarification);
131+
}
93132
}

0 commit comments

Comments
 (0)