diff --git a/src/app/chat/[id]/page.tsx b/src/app/chat/[id]/page.tsx index 55acf81..9e11413 100644 --- a/src/app/chat/[id]/page.tsx +++ b/src/app/chat/[id]/page.tsx @@ -9,11 +9,13 @@ import { ChatInput } from '@/components/features/ChatInput'; import { MessageBubble } from '@/components/features/MessageBubble'; import { ChatHeaderInfo } from '@/components/features/ChatHeader'; import { SaveToNoteModal } from '@/components/features/SaveToNoteModal'; +import { PromptOptimizer } from '@/components/features/PromptOptimizer'; import { cn } from '@/lib/utils'; import { useConversation, useConversations } from '@/hooks/useConversations'; import { useStreamChat, type ChatMessage } from '@/hooks/useStreamChat'; import { useModels, useTools, useSettings } from '@/hooks/useSettings'; import { useAuth } from '@/providers/AuthProvider'; +import { usePromptOptimizer } from '@/providers/PromptOptimizerProvider'; import type { UploadFile } from '@/types/file-upload'; interface PageProps { @@ -26,6 +28,7 @@ export default function ChatPage({ params }: PageProps) { const searchParams = useSearchParams(); const initialMessage = searchParams.get('message'); const { user } = useAuth(); + const { setOptimizedPrompt } = usePromptOptimizer(); const [sidebarOpen, setSidebarOpen] = useState(true); const messagesEndRef = useRef(null); @@ -614,6 +617,9 @@ export default function ChatPage({ params }: PageProps) { initialContent={noteContent} conversationId={chatId} /> + + {/* 提示词优化工具浮动按钮 */} + ); } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index d0a291a..a6a739c 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,6 +2,7 @@ import type { Metadata } from "next"; import "./globals.css"; import { SettingsProvider } from "@/components/providers/SettingsProvider"; import { AuthProvider } from "@/providers/AuthProvider"; +import { PromptOptimizerProvider } from "@/providers/PromptOptimizerProvider"; import { Toaster } from "@/components/ui/Toast"; export const metadata: Metadata = { @@ -22,8 +23,10 @@ export default function RootLayout({ - {children} - + + {children} + + diff --git a/src/components/features/ChatInput.tsx b/src/components/features/ChatInput.tsx index db4a80f..6c5e6b5 100644 --- a/src/components/features/ChatInput.tsx +++ b/src/components/features/ChatInput.tsx @@ -1,12 +1,13 @@ 'use client'; -import { useState, useRef } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { Paperclip, ArrowUp, Upload } from 'lucide-react'; import { ModelSelector } from './ModelSelector'; import { ToolsDropdown } from './ToolsDropdown'; import { FilePreviewList } from './FilePreviewList'; import { Tooltip } from '@/components/ui/Tooltip'; import { useFileUpload } from '@/hooks/useFileUpload'; +import { usePromptOptimizer } from '@/providers/PromptOptimizerProvider'; import { cn } from '@/lib/utils'; import type { Model, Tool } from '@/types'; import type { UploadFile } from '@/types/file-upload'; @@ -37,6 +38,17 @@ export function ChatInput({ const [message, setMessage] = useState(''); const fileInputRef = useRef(null); + // 使用提示词优化 Hook + const { consumeOptimizedPrompt } = usePromptOptimizer(); + + // 监听优化后的提示词并填入输入框 + useEffect(() => { + const prompt = consumeOptimizedPrompt(); + if (prompt) { + setMessage(prompt); + } + }, [consumeOptimizedPrompt]); + // 使用文件上传 Hook const { files, diff --git a/src/components/layout/AppLayout.tsx b/src/components/layout/AppLayout.tsx index 293d552..d1765c9 100644 --- a/src/components/layout/AppLayout.tsx +++ b/src/components/layout/AppLayout.tsx @@ -2,6 +2,8 @@ import { useState, type ReactNode } from 'react'; import { Sidebar, SidebarToggle } from '@/components/layout/Sidebar'; +import { PromptOptimizer } from '@/components/features/PromptOptimizer'; +import { usePromptOptimizer } from '@/providers/PromptOptimizerProvider'; import { cn } from '@/lib/utils'; interface AppLayoutProps { @@ -12,6 +14,7 @@ interface AppLayoutProps { export function AppLayout({ children, showHeader = true, headerContent }: AppLayoutProps) { const [sidebarOpen, setSidebarOpen] = useState(true); + const { setOptimizedPrompt } = usePromptOptimizer(); return (
@@ -41,6 +44,9 @@ export function AppLayout({ children, showHeader = true, headerContent }: AppLay {children}
+ + {/* 提示词优化工具浮动按钮 */} + ); }