From 7d2079d7c13804766405af8044574bfc93a86897 Mon Sep 17 00:00:00 2001 From: soryu Date: Mon, 16 Feb 2026 15:45:42 +0000 Subject: Add PR button to directives --- .../src/components/directives/DirectiveDetail.tsx | 16 ++ makima/frontend/src/hooks/useDirectives.ts | 8 + makima/frontend/src/lib/api.ts | 6 + makima/frontend/src/routes/directives.tsx | 3 +- makima/src/orchestration/directive.rs | 173 +++++++++++++++++++++ makima/src/server/handlers/directives.rs | 82 ++++++++++ makima/src/server/mod.rs | 1 + makima/src/server/openapi.rs | 1 + 8 files changed, 289 insertions(+), 1 deletion(-) diff --git a/makima/frontend/src/components/directives/DirectiveDetail.tsx b/makima/frontend/src/components/directives/DirectiveDetail.tsx index 9305e20..c8da7a0 100644 --- a/makima/frontend/src/components/directives/DirectiveDetail.tsx +++ b/makima/frontend/src/components/directives/DirectiveDetail.tsx @@ -27,6 +27,7 @@ interface DirectiveDetailProps { onRefresh: () => void; onCleanupTasks: () => void; onPickUpOrders: () => Promise<{ message: string; orderCount: number; taskId: string | null } | null>; + onCreatePR: () => Promise; } export function DirectiveDetail({ @@ -43,12 +44,14 @@ export function DirectiveDetail({ onRefresh, onCleanupTasks, onPickUpOrders, + onCreatePR, }: DirectiveDetailProps) { const [editingGoal, setEditingGoal] = useState(false); const [goalText, setGoalText] = useState(directive.goal); const [visibleTaskIds, setVisibleTaskIds] = useState | null>(null); const [pickingUpOrders, setPickingUpOrders] = useState(false); const [pickUpResult, setPickUpResult] = useState(null); + const [creatingPR, setCreatingPR] = useState(false); // Sync goalText and reset editing state when directive changes useEffect(() => { @@ -333,6 +336,19 @@ export function DirectiveDetail({ Clean up tasks )} + {completedSteps > 0 && !directive.completionTaskId && ( + + )}