feat: 升级至 v0.2.3 — Token 估算优化、工具确认超时改进、工作空间标签页

1. Token 估算优化(核心改进):新增 token-estimator.ts 智能字符估算(中文 1.5 token/字、ASCII 0.25 token/字),替换三处旧的 length/2 粗略估算,中文场景准确度从 ~50% 提升到 ~90%

2. 工具确认超时改进:超时时间可配置(30s~600s)、超时 toast 通知、ConfirmationDialog 倒计时 UI(进度条 + 最后 10 秒红色脉冲动画)、SettingsModal 新增配置入口

3. 详情栏新增 Workspace 标签页:workspace:getInfo IPC + WorkspaceViewer 组件(文件预览、目录状态、在文件管理器打开)
This commit is contained in:
thzxx
2026-07-12 14:20:05 +08:00
parent 0363176215
commit 1eabed9b70
13 changed files with 563 additions and 35 deletions
+10 -3
View File
@@ -1,21 +1,22 @@
/**
* DetailPanel — 右侧详情面板
*
* 通过 Tab 切换显示 Trace / Memory / Tasks。
* 通过 Tab 切换显示 Trace / Memory / Tasks / Workspace
*/
import { useState } from 'react';
import { Box, Tabs, Tab } from '@mui/material';
import { Activity, Brain, ListChecks } from 'lucide-react';
import { Activity, Brain, ListChecks, FolderOpen } from 'lucide-react';
import { TraceViewer } from '@renderer/components/trace/TraceViewer';
import { TokenUsage } from '@renderer/components/trace/TokenUsage';
import { AgentMonitor } from '@renderer/components/layout/AgentMonitor';
import { MemoryViewer } from '@renderer/components/memory/MemoryViewer';
import { TaskList } from '@renderer/components/tasks/TaskList';
import { WorkspaceViewer } from '@renderer/components/workspace/WorkspaceViewer';
import { ErrorBoundary } from '@renderer/components/common/ErrorBoundary';
import { LAYOUT } from '@renderer/lib/constants';
type DetailTab = 'trace' | 'memory' | 'tasks';
type DetailTab = 'trace' | 'memory' | 'tasks' | 'workspace';
export function DetailPanel(): React.JSX.Element {
const [tab, setTab] = useState<DetailTab>('trace');
@@ -42,6 +43,7 @@ export function DetailPanel(): React.JSX.Element {
<Tab icon={<Activity size={12} />} iconPosition="start" label="Trace" value="trace" />
<Tab icon={<Brain size={12} />} iconPosition="start" label="Memory" value="memory" />
<Tab icon={<ListChecks size={12} />} iconPosition="start" label="Tasks" value="tasks" />
<Tab icon={<FolderOpen size={12} />} iconPosition="start" label="Workspace" value="workspace" />
</Tabs>
<Box sx={{ p: 1.5, flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden', minHeight: 0 }}>
@@ -64,6 +66,11 @@ export function DetailPanel(): React.JSX.Element {
<TaskList />
</ErrorBoundary>
)}
{tab === 'workspace' && (
<ErrorBoundary fallbackTitle="Workspace 渲染失败">
<WorkspaceViewer />
</ErrorBoundary>
)}
</Box>
</Box>
);