fix: 修复大数据导致应用崩溃 + 图片上传冗余工具调用 + 预存类型错误

## 崩溃修复 (renderer OOM)
view_image 返回的 base64 dataUrl(~6.7MB/张)经 dataUrl 白名单跳过截断后,
在 IPC/store/DOM 链路被反复放大,累积撑爆渲染进程堆导致 OOM 崩溃退出。
- 新增 src/lib/tool-result-display.ts: toDisplayResult() 在显示边界剥离 dataUrl
- ToolResultBlock/TraceStep 渲染前套用,store 原始 result 不变(LLM 看图链路完整)
- data:export 剥离 dataUrl/preview + 每会话 2000 条消息上限 + truncated 标记

## 图片上传修复
用户上传图片并告知 AI 后,AI 仍调 view_image 去磁盘读取。
根因: 附件提示 "do NOT search in workspace" 与 view_image "Read an image file"
语义冲突,AI 认为"读取"≠"搜索"。强化提示明确禁止调用 view_image/read_file 读取已上传图片。

## 预存类型修复
- ConfirmationDialog: MUI v9 移除 disableEscapeKeyDown 顶层 prop,迁移到 onClose reason 拦截
- ContextMenu/Sidebar: TokenUsage 对象字面量补齐 lastInputTokens/lastCompressedSaved

## 依赖升级
- @metona-team/metona-toast 0.1.2 → 0.2.1 (TypeScript 重构,修复 0.1.2 版本号打包 bug)

## 其他
- 删除仓库根目录误生成的 nul 垃圾文件
- bump version to 0.3.22
This commit is contained in:
2026-07-25 19:35:33 +08:00
parent 4e52b24817
commit b9f7ec5118
10 changed files with 171 additions and 32 deletions
+7 -4
View File
@@ -311,7 +311,6 @@ export function ConfirmationDialog(): React.JSX.Element | null {
}}
maxWidth="md"
fullWidth
disableEscapeKeyDown={confirmAutoExecute}
slotProps={{
paper: {
sx: { bgcolor: 'background.paper' },
@@ -588,13 +587,17 @@ export function ConfirmationDialog(): React.JSX.Element | null {
</Dialog>
{/* #40 修复: autoExecute 二次确认 Dialog — 避免误点击导致永久自动执行 */}
{/* 审查修复: disableEscapeKeyDown + onKeyDown stopPropagation 防止 ESC 事件穿透到外层 Dialog */}
{/* 审查修复: MUI v9 移除了 disableEscapeKeyDown 顶层 prop,改为在 onClose 中按 reason 拦截 escapeKeyDown
onKeyDown stopPropagation 阻止 ESC 事件穿透到外层 Dialog */}
<Dialog
open={confirmAutoExecute}
onClose={() => setConfirmAutoExecute(false)}
onClose={(_, reason) => {
// 禁用 ESC 关闭(仅允许点击遮罩/按钮关闭),与原 disableEscapeKeyDown 行为一致
if (reason === 'escapeKeyDown') return;
setConfirmAutoExecute(false);
}}
maxWidth="xs"
fullWidth
disableEscapeKeyDown
onKeyDown={(e) => e.stopPropagation()}
>
<DialogTitle sx={{ fontSize: 14 }}></DialogTitle>