diff --git a/packages/web/src/App.tsx b/packages/web/src/App.tsx index 44c8e66..a5d544b 100644 --- a/packages/web/src/App.tsx +++ b/packages/web/src/App.tsx @@ -8,7 +8,6 @@ import { useState, useEffect, useCallback } from 'react'; import { Sidebar, FileBrowser, - ConfigPanel, CommandPanel, MCPPanel, HooksPanel, @@ -19,6 +18,7 @@ import { ThemeProvider, listSessions, createSession, + getWorkingDirectory, type Session, } from '@ai-assistant/ui'; import { ChatPage } from './pages/Chat'; @@ -27,7 +27,6 @@ export function App() { const [currentSessionId, setCurrentSessionId] = useState(null); const [isInitializing, setIsInitializing] = useState(true); const [showFileBrowser, setShowFileBrowser] = useState(false); - const [showConfig, setShowConfig] = useState(false); const [showCommands, setShowCommands] = useState(false); const [showMCP, setShowMCP] = useState(false); const [showHooks, setShowHooks] = useState(false); @@ -35,14 +34,26 @@ export function App() { const [showCheckpoints, setShowCheckpoints] = useState(false); const [showProviders, setShowProviders] = useState(false); const [sessionTitleUpdate, setSessionTitleUpdate] = useState<{ sessionId: string; name: string } | null>(null); + const [workingDirectory, setWorkingDirectory] = useState(''); - // 初始化:加载会话(只在首次启动时自动创建) + // 初始化:加载会话和工作目录 useEffect(() => { const HAS_SESSIONS_KEY = 'ai-assistant-has-sessions'; async function init() { try { - const { data: sessions } = await listSessions(); + // 并行获取会话和工作目录 + const [sessionsResult, workdirResult] = await Promise.all([ + listSessions(), + getWorkingDirectory().catch(() => null), + ]); + + const { data: sessions } = sessionsResult; + + // 设置工作目录 + if (workdirResult?.data?.workingDirectory) { + setWorkingDirectory(workdirResult.data.workingDirectory); + } if (sessions.length > 0) { // 有会话,选择最近的 @@ -130,13 +141,13 @@ export function App() { responsive showFileBrowser={showFileBrowser} onToggleFileBrowser={() => setShowFileBrowser(!showFileBrowser)} - onOpenConfig={() => setShowConfig(true)} onOpenCommands={() => setShowCommands(true)} onOpenMCP={() => setShowMCP(true)} onOpenHooks={() => setShowHooks(true)} onOpenAgents={() => setShowAgents(true)} onOpenCheckpoints={() => setShowCheckpoints(true)} onOpenProviders={() => setShowProviders(true)} + workingDirectory={workingDirectory} /> ) : (
@@ -182,9 +193,6 @@ export function App() { )}
- {/* 配置面板 */} - {showConfig && setShowConfig(false)} responsive />} - {/* 命令面板 */} {showCommands && setShowCommands(false)} responsive />} diff --git a/packages/web/src/pages/Chat.tsx b/packages/web/src/pages/Chat.tsx index 8470c24..7bd8346 100644 --- a/packages/web/src/pages/Chat.tsx +++ b/packages/web/src/pages/Chat.tsx @@ -3,7 +3,7 @@ */ import { useEffect, useRef } from 'react'; -import { WifiOff, MessageSquare, Settings, FolderOpen, Terminal, Plug, Zap, Bot, History, Server } from 'lucide-react'; +import { WifiOff, MessageSquare, FolderOpen, Terminal, Plug, Zap, Bot, History, Server, Folder } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; import { toast } from 'sonner'; import { @@ -23,13 +23,14 @@ interface ChatPageProps { // 工具栏按钮 showFileBrowser?: boolean; onToggleFileBrowser?: () => void; - onOpenConfig?: () => void; onOpenCommands?: () => void; onOpenMCP?: () => void; onOpenHooks?: () => void; onOpenAgents?: () => void; onOpenCheckpoints?: () => void; onOpenProviders?: () => void; + // Working Directory + workingDirectory?: string; } export function ChatPage({ @@ -39,13 +40,13 @@ export function ChatPage({ responsive = false, showFileBrowser, onToggleFileBrowser, - onOpenConfig, onOpenCommands, onOpenMCP, onOpenHooks, onOpenAgents, onOpenCheckpoints, onOpenProviders, + workingDirectory, }: ChatPageProps) { const { messages, @@ -152,8 +153,19 @@ export function ChatPage({
{/* Header */}
-

Chat

-
+
+

Chat

+ {/* Working Directory */} + {workingDirectory && ( +
+ + + {workingDirectory} + +
+ )} +
+
{/* 上下文使用情况 - 紧凑模式 */} {sessionId && ( {/* 工具栏按钮 */} - {(onOpenConfig || onToggleFileBrowser || onOpenCommands || onOpenMCP || onOpenHooks || onOpenAgents || onOpenCheckpoints || onOpenProviders) && ( + {(onToggleFileBrowser || onOpenCommands || onOpenMCP || onOpenHooks || onOpenAgents || onOpenCheckpoints || onOpenProviders) && (
{/* Checkpoints 按钮 */} {onOpenCheckpoints && ( @@ -248,19 +260,6 @@ export function ChatPage({ )} - {/* 配置按钮 */} - {onOpenConfig && ( - - - - )} - {/* 文件浏览器按钮 - 仅桌面端显示 */} {onToggleFileBrowser && (