Add diff review flow dialog
This commit is contained in:
@@ -16,6 +16,7 @@ import { useSnippetsStore } from '@/stores/useSnippetsStore';
|
||||
import { appendInlineComments } from '@/lib/messages/inlineComments';
|
||||
import { renderMagicPrompt } from '@/lib/magicPrompts';
|
||||
import { startReviewFlow } from '@/lib/reviewFlow';
|
||||
import { ReviewFlowDialog, type ReviewFlowExecution } from '@/components/session/ReviewFlowDialog';
|
||||
import { AttachedFilesList, AttachedVSCodeFileChips, ActiveEditorFileSuggestion } from './FileAttachment';
|
||||
import ToolOutputDialog from './message/ToolOutputDialog';
|
||||
import type { ToolPopupContent } from './message/types';
|
||||
@@ -1014,6 +1015,8 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
|
||||
const projects = useProjectsStore((state) => state.projects);
|
||||
const activeProjectId = useProjectsStore((state) => state.activeProjectId);
|
||||
const setActiveProjectIdOnly = useProjectsStore((state) => state.setActiveProjectIdOnly);
|
||||
const [reviewDialogOpen, setReviewDialogOpen] = React.useState(false);
|
||||
const [reviewFlowSubmitting, setReviewFlowSubmitting] = React.useState(false);
|
||||
|
||||
const currentProviderId = useConfigStore((state) => state.currentProviderId);
|
||||
const currentModelId = useConfigStore((state) => state.currentModelId);
|
||||
@@ -1062,6 +1065,35 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
|
||||
setImagePreviewOpen(open);
|
||||
}, [setImagePreviewOpen]);
|
||||
|
||||
const handleStartReviewFlow = React.useCallback(async (execution: ReviewFlowExecution) => {
|
||||
if (!currentSessionId) return;
|
||||
const directory = useSessionUIStore.getState().getDirectoryForSession(currentSessionId) || currentDirectory || '';
|
||||
if (!directory) {
|
||||
toast.error(t('diffView.reviewDialog.toast.noSessionDirectory'));
|
||||
return;
|
||||
}
|
||||
|
||||
setReviewFlowSubmitting(true);
|
||||
try {
|
||||
await startReviewFlow({
|
||||
originalSessionID: currentSessionId,
|
||||
directory,
|
||||
providerID: execution.providerID,
|
||||
modelID: execution.modelID,
|
||||
agent: execution.agent || undefined,
|
||||
variant: execution.variant || undefined,
|
||||
generateHandoff: execution.generateHandoff,
|
||||
returnAfterHandoffRequest: execution.generateHandoff,
|
||||
});
|
||||
setReviewDialogOpen(false);
|
||||
} catch (error) {
|
||||
console.error('[review-flow] failed to start review flow', error);
|
||||
toast.error(error instanceof Error ? error.message : t('diffView.reviewDialog.toast.startFailed'));
|
||||
} finally {
|
||||
setReviewFlowSubmitting(false);
|
||||
}
|
||||
}, [currentSessionId, currentDirectory, t]);
|
||||
|
||||
const isDesktopExpanded = isExpandedInput && !isMobile;
|
||||
const chatInputRadius = 'var(--radius-xl)';
|
||||
const useCompactChatPlaceholder = isMobile || isNarrowComposer;
|
||||
@@ -1940,24 +1972,7 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
|
||||
return;
|
||||
}
|
||||
else if (commandName === 'handoff-review' && currentSessionId && !isMobile && !isVSCodeRuntime()) {
|
||||
try {
|
||||
const directory = useSessionUIStore.getState().getDirectoryForSession(currentSessionId) || currentDirectory || '';
|
||||
if (!directory) {
|
||||
throw new Error('Session directory is unavailable');
|
||||
}
|
||||
await startReviewFlow({
|
||||
originalSessionID: currentSessionId,
|
||||
directory,
|
||||
providerID: providerIdToSend,
|
||||
modelID: modelIdToSend,
|
||||
agent: agentNameToSend,
|
||||
variant: variantToSend,
|
||||
agentMentionName,
|
||||
});
|
||||
scrollToBottom?.();
|
||||
} catch (error) {
|
||||
console.error('[review-flow] failed to start review flow', error);
|
||||
}
|
||||
setReviewDialogOpen(true);
|
||||
return;
|
||||
}
|
||||
else if (commandName === 'plan-feature' && (currentSessionId || newSessionDraftOpen)) {
|
||||
@@ -4502,6 +4517,13 @@ const ChatInputComponent: React.FC<ChatInputProps> = ({ onOpenSettings, scrollTo
|
||||
setLinkedIssue(null);
|
||||
}}
|
||||
/>
|
||||
<ReviewFlowDialog
|
||||
open={reviewDialogOpen}
|
||||
onOpenChange={setReviewDialogOpen}
|
||||
projectDirectory={currentSessionDirectoryForSync ?? currentDirectory ?? null}
|
||||
submitting={reviewFlowSubmitting}
|
||||
onConfirm={handleStartReviewFlow}
|
||||
/>
|
||||
<ToolOutputDialog
|
||||
popup={attachmentPreview}
|
||||
onOpenChange={handleAttachmentPreviewOpenChange}
|
||||
|
||||
Reference in New Issue
Block a user