Просмотр исходного кода

feat: add selectedTextIndex state and update request body to include selected text and position

Yuki Takei 9 месяцев назад
Родитель
Сommit
4682f986d7

+ 10 - 5
apps/app/src/features/openai/client/services/editor-assistant/use-editor-assistant.tsx

@@ -128,6 +128,7 @@ export const useEditorAssistant: UseEditorAssistant = () => {
   const [detectedDiff, setDetectedDiff] = useState<DetectedDiff>();
   const [detectedDiff, setDetectedDiff] = useState<DetectedDiff>();
   const [selectedAiAssistant, setSelectedAiAssistant] = useState<AiAssistantHasId>();
   const [selectedAiAssistant, setSelectedAiAssistant] = useState<AiAssistantHasId>();
   const [selectedText, setSelectedText] = useState<string>();
   const [selectedText, setSelectedText] = useState<string>();
+  const [selectedTextIndex, setSelectedTextIndex] = useState<number>();
   const [isGeneratingEditorText, setIsGeneratingEditorText] = useState<boolean>(false);
   const [isGeneratingEditorText, setIsGeneratingEditorText] = useState<boolean>(false);
   const [partialContentInfo, setPartialContentInfo] = useState<{
   const [partialContentInfo, setPartialContentInfo] = useState<{
     startIndex: number;
     startIndex: number;
@@ -193,12 +194,15 @@ export const useEditorAssistant: UseEditorAssistant = () => {
       threadId,
       threadId,
       aiAssistantId: selectedAiAssistant?._id,
       aiAssistantId: selectedAiAssistant?._id,
       userMessage: formData.input,
       userMessage: formData.input,
-      selectedText,
       pageBody: pageBodyContext.content,
       pageBody: pageBodyContext.content,
       ...(pageBodyContext.isPartial && {
       ...(pageBodyContext.isPartial && {
         isPageBodyPartial: pageBodyContext.isPartial,
         isPageBodyPartial: pageBodyContext.isPartial,
         partialPageBodyStartIndex: pageBodyContext.startIndex,
         partialPageBodyStartIndex: pageBodyContext.startIndex,
       }),
       }),
+      ...(selectedText != null && selectedText.length > 0 && {
+        selectedText,
+        selectedPosition: selectedTextIndex,
+      }),
     } satisfies EditRequestBody;
     } satisfies EditRequestBody;
 
 
     const response = await fetch('/_api/v3/openai/edit', {
     const response = await fetch('/_api/v3/openai/edit', {
@@ -208,7 +212,7 @@ export const useEditorAssistant: UseEditorAssistant = () => {
     });
     });
 
 
     return response;
     return response;
-  }, [codeMirrorEditor, mutateIsEnableUnifiedMergeView, selectedText]);
+  }, [codeMirrorEditor, mutateIsEnableUnifiedMergeView, selectedAiAssistant?._id, selectedText, selectedTextIndex]);
 
 
 
 
   // Enhanced processMessage with client engine support (保持)
   // Enhanced processMessage with client engine support (保持)
@@ -299,6 +303,7 @@ export const useEditorAssistant: UseEditorAssistant = () => {
 
 
   const selectTextHandler = useCallback(({ selectedText, selectedTextIndex, selectedTextFirstLineNumber }) => {
   const selectTextHandler = useCallback(({ selectedText, selectedTextIndex, selectedTextFirstLineNumber }) => {
     setSelectedText(selectedText);
     setSelectedText(selectedText);
+    setSelectedTextIndex(selectedTextIndex);
     lineRef.current = selectedTextFirstLineNumber;
     lineRef.current = selectedTextFirstLineNumber;
   }, []);
   }, []);
 
 
@@ -314,12 +319,11 @@ export const useEditorAssistant: UseEditorAssistant = () => {
         pendingDetectedDiff.forEach((detectedDiff) => {
         pendingDetectedDiff.forEach((detectedDiff) => {
           if (detectedDiff.data.diff) {
           if (detectedDiff.data.diff) {
             const { search, replace, startLine } = detectedDiff.data.diff;
             const { search, replace, startLine } = detectedDiff.data.diff;
-
-            // 新しい検索・置換処理
+            // New search and replace processing
             const success = performSearchReplace(yText, search, replace, startLine);
             const success = performSearchReplace(yText, search, replace, startLine);
 
 
             if (!success) {
             if (!success) {
-              // フォールバック: 既存の動作
+              // Fallback: existing behavior
               if (isTextSelected) {
               if (isTextSelected) {
                 insertTextAtLine(yText, lineRef.current, replace);
                 insertTextAtLine(yText, lineRef.current, replace);
                 lineRef.current += 1;
                 lineRef.current += 1;
@@ -350,6 +354,7 @@ export const useEditorAssistant: UseEditorAssistant = () => {
   useEffect(() => {
   useEffect(() => {
     if (detectedDiff?.filter(detectedDiff => detectedDiff.applied === false).length === 0) {
     if (detectedDiff?.filter(detectedDiff => detectedDiff.applied === false).length === 0) {
       setSelectedText(undefined);
       setSelectedText(undefined);
+      setSelectedTextIndex(undefined);
       setDetectedDiff(undefined);
       setDetectedDiff(undefined);
       lineRef.current = 0;
       lineRef.current = 0;
     }
     }

+ 3 - 3
apps/app/src/features/openai/server/routes/edit/index.ts

@@ -122,12 +122,12 @@ ${args.isPageBodyPartial && args.partialPageBodyStartIndex != null
     : ''
     : ''
 }
 }
 
 
-${args.selectedText != null
-    ? `## selectedText: \n\n\`\`\`markdown\n${args.selectedText}\n\`\`\``
+${args.selectedText != null && args.selectedText.length > 0
+    ? `## selectedText: <selected_text>${args.selectedText}\n</selected_text>`
     : ''
     : ''
 }
 }
 
 
-${args.selectedPosition != null
+${args.selectedText != null && args.selectedPosition != null
     ? `- **selectedPosition**: ${args.selectedPosition}`
     ? `- **selectedPosition**: ${args.selectedPosition}`
     : ''
     : ''
 }
 }