diff --git a/apps/server/src/routes/backlog-plan/routes/apply.ts b/apps/server/src/routes/backlog-plan/routes/apply.ts index 71dc3bd9..09ec6696 100644 --- a/apps/server/src/routes/backlog-plan/routes/apply.ts +++ b/apps/server/src/routes/backlog-plan/routes/apply.ts @@ -12,9 +12,10 @@ const featureLoader = new FeatureLoader(); export function createApplyHandler() { return async (req: Request, res: Response): Promise => { try { - const { projectPath, plan } = req.body as { + const { projectPath, plan, branchName } = req.body as { projectPath: string; plan: BacklogPlanResult; + branchName?: string; }; if (!projectPath) { @@ -82,6 +83,7 @@ export function createApplyHandler() { dependencies: change.feature.dependencies, priority: change.feature.priority, status: 'backlog', + branchName, }); appliedChanges.push(`added:${newFeature.id}`); diff --git a/apps/ui/src/components/views/board-view.tsx b/apps/ui/src/components/views/board-view.tsx index b24e7bc4..028e55e3 100644 --- a/apps/ui/src/components/views/board-view.tsx +++ b/apps/ui/src/components/views/board-view.tsx @@ -1449,6 +1449,7 @@ export function BoardView() { setPendingPlanResult={setPendingBacklogPlan} isGeneratingPlan={isGeneratingPlan} setIsGeneratingPlan={setIsGeneratingPlan} + currentBranch={selectedWorktreeBranch} /> {/* Plan Approval Dialog */} diff --git a/apps/ui/src/components/views/board-view/dialogs/backlog-plan-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/backlog-plan-dialog.tsx index 3579a48b..ee78f153 100644 --- a/apps/ui/src/components/views/board-view/dialogs/backlog-plan-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/backlog-plan-dialog.tsx @@ -63,6 +63,8 @@ interface BacklogPlanDialogProps { setPendingPlanResult: (result: BacklogPlanResult | null) => void; isGeneratingPlan: boolean; setIsGeneratingPlan: (generating: boolean) => void; + // Branch to use for created features (defaults to main if not provided) + currentBranch?: string; } type DialogMode = 'input' | 'review' | 'applying'; @@ -76,6 +78,7 @@ export function BacklogPlanDialog({ setPendingPlanResult, isGeneratingPlan, setIsGeneratingPlan, + currentBranch, }: BacklogPlanDialogProps) { const [mode, setMode] = useState('input'); const [prompt, setPrompt] = useState(''); @@ -167,7 +170,7 @@ export function BacklogPlanDialog({ }) || [], }; - const result = await api.backlogPlan.apply(projectPath, filteredPlanResult); + const result = await api.backlogPlan.apply(projectPath, filteredPlanResult, currentBranch); if (result.success) { toast.success(`Applied ${result.appliedChanges?.length || 0} changes`); setPendingPlanResult(null); @@ -184,6 +187,7 @@ export function BacklogPlanDialog({ setPendingPlanResult, onPlanApplied, onClose, + currentBranch, ]); const handleDiscard = useCallback(() => { diff --git a/apps/ui/src/lib/electron.ts b/apps/ui/src/lib/electron.ts index e709f9c4..29c8aa2e 100644 --- a/apps/ui/src/lib/electron.ts +++ b/apps/ui/src/lib/electron.ts @@ -651,7 +651,8 @@ export interface ElectronAPI { removedDependencies: string[]; addedDependencies: string[]; }>; - } + }, + branchName?: string ) => Promise<{ success: boolean; appliedChanges?: string[]; error?: string }>; onEvent: (callback: (data: unknown) => void) => () => void; }; diff --git a/apps/ui/src/lib/http-api-client.ts b/apps/ui/src/lib/http-api-client.ts index 5ffb6639..d3b71a74 100644 --- a/apps/ui/src/lib/http-api-client.ts +++ b/apps/ui/src/lib/http-api-client.ts @@ -2202,9 +2202,10 @@ export class HttpApiClient implements ElectronAPI { removedDependencies: string[]; addedDependencies: string[]; }>; - } + }, + branchName?: string ): Promise<{ success: boolean; appliedChanges?: string[]; error?: string }> => - this.post('/api/backlog-plan/apply', { projectPath, plan }), + this.post('/api/backlog-plan/apply', { projectPath, plan, branchName }), onEvent: (callback: (data: unknown) => void): (() => void) => { return this.subscribeToEvent('backlog-plan:event', callback as EventCallback);