Files
metona-ollama-desktop/docs/CHANGELOG.md
T
Metona 14f3878b7c chore: version bump to 5.1.6
7 files synced: package.json, package-lock.json (x2), index.html, README.md, docs/DEVELOPMENT.md, docs/BUILD.md, docs/CHANGELOG.md
2026-04-20 18:22:04 +08:00

597 lines
36 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📋 更新日志
## 分支结构
**桌面版主线**`master`):
- `metona-ollama-desktop-v3.2.6``metona-ollama-desktop-v3.3.4``metona-ollama-desktop-v4.0.0``metona-ollama-desktop-v5.0.0``metona-ollama-desktop-v5.0.1``metona-ollama-desktop-v5.1.0``metona-ollama-desktop-v5.1.1``metona-ollama-desktop-v5.1.2``metona-ollama-desktop-v5.1.3``metona-ollama-desktop-v5.1.4``metona-ollama-desktop-v5.1.5``metona-ollama-desktop-v5.1.6`(当前发布分支)
**Web 版历史**已独立为 [metona-ollama-web](https://gitee.com/thzxx/metona-ollama-web) 仓库(v1.1.0 ~ v4.0.3)。
---
## 桌面版(Desktop
### Desktop v5.1.6 — 浏览器工具超时修复
- 🔧 **移除所有工具执行超时**
- tool-registry.ts:移除 `Promise.race` + `setTimeout` 25 秒/60 秒硬超时,所有工具直接 `await bridge.tool.execute()`,无超时限制
- browser.ts:移除 `executeJsWithTimeout` 包装,直接调用 `executeJavaScript`
- 用户控制生命周期,宁可等待也不中断
- 🔧 **browser 工具状态检查**
- 所有 browser 函数(evaluate/extract/click/type/scroll/screenshot)入口统一检查 `isBrowserOpen()`
- 浏览器关闭后返回明确错误 `"浏览器未打开,请先使用 browser_open 加载页面"`,不再自动重建空窗口
- 避免 browser_close 后 AI 继续调用 evaluate 浪费循环
- 📝 **版本号更新至 5.1.6**7 个文件同步更新)
### Desktop v5.1.5 — 第三方库替换 & 代码精简 & 联网日期修复
- ♻️ **Markdown 解析器替换:内联实现 → `marked` 库**
- 移除 `marked-config.ts` 中约 80 行正则解析器(仅支持基本 GFM)
- 接入 `marked` 库:完整 GFM 支持(表格、删除线、任务列表、自动链接等)
- 渲染后自动经 DOMPurify 净化,双重安全
- 链接/图片安全检查保留(阻止 javascript: / vbscript: / file: 等危险协议)
- ♻️ **HTML 净化器替换:内联实现 → `DOMPurify`**
- 移除 `sanitizer.ts` 中约 70 行 DOM 遍历净化器
- 接入 `DOMPurify`(业界标准 HTML 净化库)
- 保留原有的白名单标签/属性/URI 协议配置
- 移除不再需要的 `SAFE_URI_SCHEMES` 导出
- 🧹 **精简 crypto.ts:删除死代码**
- 移除 `sha256js()` 纯 JS SHA-256 回退实现(~60 行)
- 移除 `xorBytes()` 异或加密回退(~10 行)
- 移除 `SECURE` 标志及所有分支判断
- Electron 环境下 `crypto.subtle` 始终可用,回退代码从未执行
- 旧版 XOR 加密的 .metona 文件提供明确错误提示
- 🧹 **消除重复代码**
- `escapeHtml()` 在 5 个文件中重复定义 → 统一从 `utils.ts` 导入
- `formatSize()``workspace-panel.ts` 中重复定义 → 统一从 `utils.ts` 导入
- 消除文件:`log-service.ts``prompt-modal.ts``tool-confirm-modal.ts``workspace-panel.ts`
- 📝 **版本号更新至 5.1.5**7 个文件同步更新)
-**联网搜索强制注入真实系统日期**
- system prompt 开头动态注入 `new Date()` 获取的真实日期,AI 构造搜索查询前即可知晓当前时间
- web_search 返回结果头部强制附带 `[当前日期: ...]`,每次搜索都有日期锚点
- AGENT_SYSTEM_PROMPT + TOOL_USAGE_GUIDE 双重禁止 AI 使用知识库推断的日期
- 解决模型训练数据截止导致搜索查询使用旧年份(如"2025")的问题
-**推荐规则记忆新增规则 #13**
- 联网前确认当前日期,确保引用信息时效性准确
-**新建会话重置工作空间**
- 点击新建会话后自动清空工具卡片和终端输出,回到空闲状态
- 自动切回终端页签
### Desktop v5.1.4 — 工具卡片迁移 & 空闲状态优化 & 工作流修复
- ♻️ **工具卡片从聊天区域迁移到工作空间面板**
- 工作空间新增「🔧 工具」页签,专门展示工具调用卡片
- 工具执行时自动切换到工具页签
- `run_command` 执行时自动切换到终端页签
- AI 回复消息不再显示工具卡片,保持聊天区域简洁
- 工具页签支持清空、自动滚动、状态统计(共 N 个 ✅N ❌N)
-**终端空闲状态优化**
- 空闲时显示 ASCII 羊驼 Logo(珊瑚橙色调 + 呼吸光效动画)
- 展示当前工作空间目录信息
- 每 6 秒轮转一条使用小贴士(10 条随机,淡入淡出效果)
-**工具和文件页签空闲状态优化**
- 工具页签:8 个分类图标网格(文件/命令/搜索/浏览器/Git/记忆/技能/代理)
- 文件页签:大文件夹图标 + 当前目录路径 + 引导文案
-**历史会话工具调用展示**
- assistant 消息下方新增可折叠的工具调用摘要
- 默认收起,点击展开查看每个工具的参数和结果
- 🔧 **自动记忆优化**
- 禁止自动提取规则类型,规则只能用户手动添加
- 触发门槛提升:对话消息从 4/6 条提升到 10 条才触发
- 最大提取数从 5 条降到 3 条
- 提示词增加详细的"不要提取"负面清单
- 结果层双重过滤(即使模型返回 rule 也被拦截)
- 🔧 **工具页签自动切换协调性修复**
- `addToolCard` 消除双重渲染(switchToTab 内已含 renderPanel
- 终端忙碌时其他工具不再打断用户看命令输出
- `run_command` 结束后自动延迟切到工具页签
- `updateToolCard` 只在当前是工具页签时才刷新
- 🔧 **工作流完整性和协调性修复**
- 新一轮对话自动清理上轮工具卡片和终端输出
- 中止 Agent Loop 时保留已执行的工具记录(不再丢失)
- 切换历史会话时清理工作空间状态
- handleRetry 保存 think 内容(之前丢失)
- 中止流程统一:agent-engine 抛出 AbortError 由消费方处理(消除重复消息风险)
- 📝 **版本号更新至 5.1.4**7 个文件同步更新)
### Desktop v5.1.3 — 代码质量 & 架构优化 & 记忆数据治理
- 🔧 **修复 any 滥用**(类型安全)
- `(window as any).metonaDesktop``window.metonaDesktop`(已有类型声明)
- IndexedDB 迁移代码 `any[]``Record<string, unknown>[]`
- 回调函数 `: any` → 具体类型 `ChatSession | null`
- 全局函数 `(window as any).__toggleCron``WindowWithCron` 接口
- 消除 78 处 → 38 处(减少 51%)(保留 API 参数构造等合理场景)
- ♻️ **拆分 tool-handlers.ts**(架构优化)
- 1308 行单文件 → 4 个模块:
- `tool-handlers-shared.ts`:共享工具函数和类型
- `tool-handlers-fs.ts`15 个文件系统操作(591 行)
- `tool-handlers-system.ts`6 个系统网络操作(530 行)
- `tool-handlers-git.ts`1 个 Git 操作(226 行)
-`tool-handlers.ts` 改为纯 re-exportipc.ts 无需修改
-**记忆数据治理**(借鉴 Hermes Agent
- 记忆过期衰减:90 天未使用的记忆自动降低 importancerule 受保护)
- 清理评分新增 agePenalty:创建超 90 天扣分
- 向量存储错误日志增强:包含记忆 ID、内容摘要、嵌入模型、错误栈
- 去重增强:新增前缀匹配(前 50 字符相同视为重复)
- 📝 **版本号更新至 5.1.3**7 个文件同步更新)
### Desktop v5.1.2 — 预算警告 & Shadowing 防护 & 记忆容量管理
-**预算警告临时层**(借鉴 Hermes Agent
- Agent Loop 接近迭代上限时自动注入临时提示
- 剩余 ≤5 轮:WARNING 级别,提示模型准备收尾
- 剩余 ≤2 轮:CRITICAL 级别,要求模型立即给出最终答案
- 临时消息在 API 调用后自动清理,不影响对话历史
-**MCP Shadowing 防护**(借鉴 Hermes Agent
- MCP 工具注册时自动检测与内置工具重名
- 重名工具自动跳过,日志输出警告信息
- 防止外部 MCP Server 覆盖内置工具导致行为异常或绕过安全检查
-**记忆容量限制**(借鉴 Hermes Agent
- memories 表上限 500 条,超限时自动清理
- 清理策略:按综合评分排序,清理后 20%
- 评分公式:importance × 2 + useCount × 3 + recencyBonus7 天内使用过 +5
- rule 类型记忆受保护,不会被自动清理
- 📝 **版本号更新至 5.1.2**7 个文件同步更新)
### Desktop v5.1.1 — 搜索引擎替换 & 超时移除 & 日志导出
- 🔧 **搜索引擎:DuckDuckGo → Bing + 百度 + Google**
- 移除 DuckDuckGo 搜索引擎(国内不可达,每次浪费 8 秒超时)
- 首选 Bing 搜索,百度作为备用,Google 作为兜底
- 新增 `parseBaiduResults()``parseGoogleResults()` 解析函数
- 移除所有搜索引擎的超时限制
- 🔧 **移除全部超时限制**
- 移除 Agent Loop 全局 10 分钟总超时(`MAX_LOOP_TIME`
- 移除流式响应 2 分钟超时(`STREAM_TIMEOUT`
- 移除工具执行 30 秒超时(`TOOL_EXEC_TIMEOUT`
- 移除 web_fetch 30 秒超时
- 移除 download_file 60 秒超时
- 现在所有操作无超时限制,宁可等待也不中断
- 🔧 **Agent 最大轮数改为 85 轮(默认)**
- 从硬编码 15 轮改为从 state 读取,默认 85 轮
- 设置面板新增「Agent 最大轮数」配置项
- 启动时从数据库恢复设置值
-**执行日志导出**
- 日志面板新增「📥 导出」按钮
- 导出为带时间戳的 TXT 文件
- 支持原生保存对话框(桌面端)和浏览器下载(回退)
- 🔧 **改进 TOOL_USAGE_GUIDE**
- 新增规则 13:严禁猜测或编造 URL 路径,所有 URL 必须从搜索结果获取
- 新增规则 14:不要忽视来自知乎、CSDN 等中文来源的搜索结果
- 修复工具去重缓存 key 逻辑,失败工具不再被误杀
- 🔧 **esbuild 反引号兼容性修复**
- `agent-engine.ts` 多余反引号导致 esbuild 模板字面量解析错误
- 正则表达式中反引号改用 `String.fromCharCode(96)` 拼接
- `memory-manager.ts``marked-config.ts` 中类似正则改用 `new RegExp()` 构造器
- 关键教训:esbuild 0.21.5 对源码中反引号字符解析有兼容性问题
- 📝 **版本号更新至 5.1.1**7 个文件同步更新)
### Desktop v5.1.0 — Hermes 借鉴 & 记忆/Skill 系统增强
-**记忆 replace/remove 操作**(借鉴 Hermes Agent
- 新增 `memory_replace` 工具:子串匹配 old_text,替换为 new_content
- 新增 `memory_remove` 工具:子串匹配 old_text,删除对应记忆
- 两种目标:memoryAgent 笔记)和 user(用户画像)
- 唯一匹配约束:匹配多条时返回错误,要求更精确的子串
-**Skill 渐进式加载**(借鉴 Hermes Agent
- 新增 `skill_list` 工具(Level 0):返回技能名称、描述、成功率、工具链预览
- 新增 `skill_view` 工具(Level 1):返回完整工具链、参数提示、使用统计
- Agent 先看列表,需要时再加载详情,节省 token
-**记忆安全扫描**
- 记忆写入前自动检查 prompt injection 模式(ignore previous / you are now a 等)
- 检测敏感信息(SSH 私钥、API Key、信用卡号)
- 检测不可见 Unicode 字符
- 拦截时返回明确错误信息
- 🔧 **迭代预算可配置化**
- Agent Loop 最大轮数从硬编码 15 改为 state 读取(`maxTurns`,默认 15
- 用户可通过设置面板调整
- 🔧 **工具结果截断按工具配置**
- 新增 `TOOL_MAX_RESULT_SIZE` 常量,每个工具独立配置最大返回字符数
- web_fetch: 20000, web_search: 3000, read_file: 15000, run_command: 10000 等
- 🔧 **更新 AGENT_SYSTEM_PROMPT**
- 工具数量 34 → 38
- TOOL_USAGE_GUIDE 新增记忆管理和技能查看规则
- 📝 **版本号更新至 5.1.0**7 个文件同步更新)
### Desktop v5.0.1 — 搜索引擎优化 & Agent 去重修复
- 🔧 **修复 DuckDuckGo 搜索超时过长**
- 超时从 15 秒降至 8 秒(国内环境 DuckDuckGo 通常不可达,减少等待)
- 添加 Google 作为第三搜索引擎兜底(DuckDuckGo → Bing → Google
- 新增 `parseGoogleResults()` 解析函数
- 搜索 User-Agent 统一更新为 Chrome 131
- 🔧 **修复 web_fetch 无法抓取部分网站**
- User-Agent 从 `MetonaOllama/1.0` 改为 Chrome 131 UA(部分网站屏蔽非浏览器 UA)
- 超时从 15 秒增加至 30 秒(大页面加载更慢)
- 新增 `Accept``Accept-Language` 请求头
- 🔧 **修复 Agent Loop 跨轮去重误杀失败工具的重试**
- 原逻辑:连续两轮工具调用(工具名+参数)完全相同即终止
- 问题:上一轮 `web_fetch` 超时失败,下一轮同样调用是合理重试,却被当作重复终止
- 修复:仅对成功的工具调用做去重,失败的允许重试
- 新增 `prevLoopSuccessKeys` 替代 `prevLoopToolKeys`
- 🔧 **优化 TOOL_USAGE_GUIDE(新增 3 条规则)**
- 新增规则 2web_fetch 失败时直接用 web_search 摘要回答,不要反复重试同一 URL
- 新增规则 3:禁止抓取 SPA 页面(GitHub releases、npm 等),直接从搜索结果提取信息
- 新增规则 4:搜索查询要进化,不要重复相同的查询
- 🔧 **更新 AGENT_SYSTEM_PROMPT**
- 工具数量描述从 25 → 34
- 核心规则新增:web_search 结果中的 snippet 已包含关键信息,不要忽视
- 核心规则细化:同一 URL 连续失败 2 次后不要再尝试
- 多工具协同示例新增:web_fetch 失败时直接用搜索结果回答
- 📝 **版本号更新至 5.0.1**7 个文件同步更新)
- 📦 **构建产物**
- `Metona Ollama Setup 5.0.1.exe`82MB
- Gitee Release v5.0.1-desktopID: 620560
- Wine 9.0 已安装,npm 编译无错误,构建一次通过
### Desktop v5.0.0 — 浏览器控制 & MCP & 技能系统 & 全面重构
-**MCP (Model Context Protocol) 完整实现**
- 主进程 `mcp-manager.ts`JSON-RPC 2.0 over stdio 通信
- 支持 `initialize` 握手、`tools/list` 工具发现、`tools/call` 工具执行
- 7 个 IPC 通道:startServer / stopServer / stopAll / callTool / getTools / getStatuses / refreshTools
- 渲染端 `mcp-client.ts`:配置管理 + 服务器生命周期 + 工具定义获取 + 工具执行
- `tool-registry.ts` MCP 工具路由:`mcp_{server}_{tool}` 前缀识别
- 设置面板 MCP 服务器管理 UI(添加/启用/禁用/删除/状态显示)
- 启动时自动启动已启用的 MCP 服务器,退出时优雅清理
-**浏览器控制工具**8 个新工具)
- `browser_open` / `browser_screenshot` / `browser_evaluate` / `browser_extract`
- `browser_click` / `browser_type` / `browser_scroll` / `browser_close`
- AI 可交互式操作网页,支持截图、JS 执行、元素操作
- 主进程 `browser.ts`,隐藏 BrowserWindow 实现
- 全部 8 个函数新增 sendLog 执行日志
-**Cron 定时任务系统**
- `cron-manager.ts` 定时任务管理器
- 支持一次性/周期性任务调度
-**技能自动生成系统**
- 自动从成功工具调用链提取可复用技能
- `skills` 表持久化,支持关键词搜索和使用统计
- 下次同类任务自动匹配并注入技能上下文
-**用户画像自动推断**
- 从对话中自动检测用户技术栈(Python/TypeScript/Go/React 等 14 种)
- 用户画像注入 system promptAgent 行为更贴合用户习惯
-**人格模式**
- 多种预设人格模板,独立 system prompt + 温度设置
-**Heartbeat 主动检查**
- 后台定时检查 Ollama 连接状态、磁盘空间等
-**子代理委派**
- `spawn_task` 工具,主 Agent 可 spawn 独立子代理执行任务
- 独立上下文,超时保护,结果回传主 Agent
- 🔧 **工具并行执行优化**
- 同一批次内独立工具并行执行,跨批次串行
- 依赖检测:web_fetch 自动等待 web_search 结果
- 🔧 **长对话上下文管理**
- `context-manager.ts` 接入 Agent Loop
- 滑动窗口(20 条)+ 摘要压缩 + 按 num_ctx 裁剪
- Token 估算(中文 1.5 字/token,英文 4 字符/token
- 🔧 **记忆系统增强**
- rule/preference 类型始终注入,不依赖关键词匹配
- buildMemoryContext 区分三类记忆措辞
- 🔧 **全面编译修复**
- 修复 `useTools` 变量在声明前使用(TDZ 运行时 ReferenceError
- 修复 `browser.ts` loadURL 不支持的 timeout 参数
- 修复 `ipc.ts` browserScroll direction 类型断言
- 🔧 **CSS 变量补全**
- 补充 `--primary` / `--primary-bg` / `--bg-hover` 三个缺失变量
- 🧹 **全面代码清理**(删除 400+ 行死代码)
- 删除 `training-export.ts`(训练数据导出,零引用)
- 删除 `document-processor.ts`RAG 遗留)
- 清理 workspace.ts`execWorkspaceCommand`(重复实现)、`isProcessAlive``getActiveProcessCount``terminateWorkspaceCommand`
- 清理 sqlite.ts`deleteMessagesBySession``getSkill``closeDatabase`
- 清理 skill-manager.ts`getAllSkillsForUI``deleteSkillById``clearAllSkills`
- 清理 memory-manager.ts`getVectorSearchResults`
- 清理 tool-registry.ts`isToolEnabled`
- 清理 cron-manager.ts`clearAllTimers`
- 清理 workspace-panel.ts`setOnToolTerminated``setWorkspaceDirPath`
- 清理 mcp-manager.ts`isServerRunning`
- 移除 index.html 训练数据导出按钮及 settings-modal.ts 事件绑定
- 📊 **全链路执行日志**
- browser.ts:全部 8 个函数新增 sendLog(打开/截图/JS/提取/点击/输入/滚动/关闭)
- mcp-manager.tscallTool 新增工具调用/完成/失败日志
- 主进程日志覆盖:browser(20) + mcp(14) + tool-handlers(21) + workspace(11) + ipc(11)
- 📝 **版本号更新至 5.0.0**7 个文件同步更新)
### Desktop v4.0.0 — SQLite & ReAct Agent & 全新主题
- 📦 **数据库迁移:IndexedDB → SQLite (sql.js WASM)**
- 新增 `src/main/db/sqlite.ts`,使用 sql.js (WASM) 替代 IndexedDB
- 零原生依赖,无需 electron-rebuild,消除 ABI 版本不匹配问题
- 6 张表:sessions、messages、tool_calls、memoriesFTS5 全文搜索)、settings、traces
- WAL 模式 + NORMAL 同步,性能显著提升
- 支持全量导出/导入(JSON 格式)
- 🔧 **Agent Loop 升级为 ReAct 模式**
- Thought → Action → Observation → Reflection 循环
- 任务复杂度评估(简单/中等/复杂)
- 执行轨迹记录(traces 表),Agent 可观测性
- 最大 15 轮循环,10 分钟总超时保护
- 🧠 **记忆/会话管理工具**
- 新增 `memory_search``memory_add` 工具(AI 可主动管理记忆)
- 新增 `session_list``session_read` 工具(AI 可查阅历史会话)
- 记忆支持 FTS5 全文搜索 + 向量语义搜索
- 上下文管理服务(`context-manager.ts`
- 🎨 **UI 主题改版:暗色 → 暖色调亮色**
- 奶白背景 `#FAF7F2` + 珊瑚橙主色 `#E8734A`
- 圆润柔和设计:圆角 8-20px,柔和阴影
- 紫色辅助色(Think/推理),金色标签(Token 统计)
- 终端区域保留暖棕深色 `#2D2016` 保证代码可读性
- 字体升级:Inter + JetBrains Mono
- 窗口背景色、导出 HTML、theme-color 同步更新
- 🖥️ **工作空间改进**
- IPC 通信优化,workspace 命令通过独立进程管理
- AI 工具命令实时输出推送到工作空间终端
- 📝 **版本号更新至 4.0.0**
### Desktop v3.3.4 — Agent Loop 去重 & 记忆系统修复
- 🔧 **修复 Agent Loop 工具调用重复问题**
- 新增工具调用缓存机制(`toolResultCache`),相同工具+参数不再重复执行
- 新增同轮内重复检测:同一轮 tool_calls 中的重复调用自动跳过
- 新增跨轮次重复检测:连续两轮工具调用完全相同则自动终止循环
- TOOLS_USAGE_GUIDE 新增第 8 条"严禁重复调用"规则
- 🔧 **修复 web_fetch 内容截断**
- 默认 `max_chars` 从 10000 改为 0(不截断,返回完整内容)
- 仅当用户显式指定 `max_chars` 时才截断
- 🔧 **修复记忆系统 rule/preference 不生效**
- `searchMemoriesByKeyword`rule 和 preference 类型记忆始终注入,不再依赖关键词匹配
- 仅 fact 类型保留关键词检索逻辑
- `buildMemoryContext` 区分三类记忆的 system prompt 措辞:规则→"必须无条件执行"、偏好→"请遵循"、事实→"供参考"
- 🔧 **移除重复日志** — tool-registry.ts executeTool 中重复的 logToolStart 调用已移除
### Desktop v3.3.3 — 工具面板修复 & 搜索增强
- 🔧 **修复工具面板 badge 显示错误**
- 除 run_command 外所有工具的 badge 从"需确认"改为"自动"(与代码实际行为一致)
- 根因:CONFIRM_TOOLS 数组仅包含 run_command,但 HTML 硬编码了 10 个工具为 confirm
- 🔧 **修复 run_command 下拉框样式**
- 未选中项白字白底不可见,根因:内联样式引用了未定义的 CSS 变量 --bg-tertiary
- 改用 --bg-card 并为 option 元素添加显式暗色背景
- 🎨 **面板宽度优化**
- 工具面板:720px → 900px
- 历史记录:680px → 800px
- 设置面板:480px → 640px
- 帮助面板:600px → 760px
-**增强联网搜索与网页抓取联动**
- TOOL_USAGE_GUIDE 新增第 6 条:要求 AI 在 web_search 后必须用 web_fetch 抓取详情
- 新增第 7 条:明确 AI 在不确定、信息过时、需实时数据时应主动调用工具
- 典型场景→工具映射:查版本→web_search+web_fetch、查文件→read_file、查项目→git status
-**web_search 默认结果数提升**:5 → 15,给 AI 更多线索定位目标页面
### Desktop v3.3.2 — 联网搜索 & 工具权限优化
-**新增 web_search 联网搜索工具**(第 21 个工具)
- DuckDuckGo HTML 搜索优先,Bing 作为备用引擎
- 返回结构化结果:标题、URL、摘要
- 15 秒超时保护,最多 10 条结果
- 自动启用,无需用户确认(只读操作)
- 🔧 **工具执行权限优化**
- 除 run_command 外,所有 20 个工具改为自动执行无需确认
- run_command 新增三模式下拉框:自动/需确认/禁用
- 工具面板卡片 badge 实时联动模式状态
### Desktop v3.3.1 — Bug 修复 & 图标统一
- 🔧 **修复开启工具调用后图片无法传给 AI**
- `agent-engine.ts`:当用户仅上传图片无文字时,自动生成分析提示作为 content,确保图片数组正确注入 Ollama API
- `input-area.ts`:图片与文字合并为同一条消息,不再拆分为两条,修复 Agent Loop 构建历史时图片关联丢失
- 🔧 **修复记忆系统弹框自动记忆开关点击无响应**
- `memory-modal.ts`CSS 类名 `memory-toggle``toggle-label`,启用完整滑块样式和 `:checked` 状态切换
- 🎨 **统一应用图标为科技感羊驼**
- `assets/icons/llama.png` / `llama.ico`:替换为霓虹电路风格羊驼图标(深色背景 + 青色描边 + 电路纹理)
### Desktop v3.3.0 — 文档同步 & 帮助面板修正
- 📝 **文档全面更新**
- README.mdTool Calling 工具表从 7 个扩展至 20 个,新增 13 个工具说明
- README.md:移除已废弃的 RAG 知识库 section,更新为向量记忆说明
- README.md:项目结构同步实际文件(移除已删除的 rag.ts / kb-modal.ts / memory-panel.ts,新增 memory-modal.ts / tools-modal.ts / prompt-modal.ts / vector-memory.ts
- README.md:架构图更新,移除 RAG 引用
- README.md:记忆提取触发条件从 ≥3 条修正为 ≥6 条
- README.md:记忆类型表移除「事件」类型(v3.0 后已归并为 fact)
- README.md:技术栈从「NSIS + Portable」修正为「NSIS 安装包」
- docs/DEVELOPMENT.md:子系统引用从 rag.ts 更新为 vector-memory.ts
- docs/DEVELOPMENT.md:移除工作空间面板拖拽调整宽度的描述
- 🔧 **帮助面板修正**
- 工作空间终端描述从「多终端 Tab」改为「单一终端进程」
- 移除工作空间面板拖拽调整宽度的描述(当前固定 480px)
### Desktop v3.2.6 — 工作空间面板布局修复 & Token 统计样式优化
- 🔧 **修复工作空间面板与主内容区错位**
- workspace-panel 从 `position: fixed` 改为 flex 子元素,与日志面板布局模式一致
- 移除 `margin-right: 480px` hack 和 `--nav-height` CSS 变量,消除 JS/CSS 失步风险
- 移除 `updateNavHeight()` 函数及 resize 监听,减少不必要的 DOM 计算
- 🎨 **Token 统计颜色优化**
- Header token 统计区:琥珀色 (#FFD580) 图标 + 数值,含淡色背景和细边框
- 消息内 token 数:琥珀色高亮,耗时用主题蓝色,三种信息一目了然
### Desktop v3.2.5 — 工具路径修复 & 安全性增强 & 工作空间重构
- 🔧 **修复工具相对路径解析错误**
- 所有文件系统工具(`read_file` / `write_file` / `list_directory` / `search_files` / `create_directory` / `delete_file`)的相对路径此前用 `path.resolve()` 解析到进程当前工作目录,导致 AI 创建的文件实际写到了错误位置
- 新增 `resolvePath()` 辅助函数:相对路径统一基于 `getWorkspaceDir()`(工作空间目录)解析,绝对路径保持不变
- ♻️ **工作空间改为单一终端**
- 移除多 Tab 机制,工作空间面板简化为单个终端 + 文件浏览器
- 移除标签页栏、新建 Tab 按钮、Tab 切换逻辑
- 终端面板直接渲染 `#ws-terminal`,进程管理改用 `currentTermId` 单例模式
- 文件浏览器宽度固定 200px,终端区域自适应填充剩余空间
- 🔧 **修复 token 统计图标显示问题**
- Header 中 token 消耗图标从 Unicode 字符(🪙)改为纯 path SVG 内联
- 避免 text 元素在部分系统(如旧版 Windows)不显示的问题
- 🔧 **修复图片/文件读取 Latin1 错误**
- `atob()` 解码 Base64 时产生 Latin1 编码,导致中文文件名和中文内容乱码
- 图片上传改用 `readFileBase64` IPC 读取,渲染端用 `Uint8Array` + `TextDecoder` 替代 `atob()`
- 文件读取同样改用 base64 通道,避免 Latin1 编码丢失
- 🔧 **修复工作空间面板定位**
- 面板顶部对齐修正(从 90px 调整为 92px,匹配 header 高度)
- 修复中文乱码:Windows cmd 代码页切换 `chcp 65001` + 环境变量 `LANG/LC_ALL` 设为 UTF-8
- 修复快捷键冲突和帮助文档内容更新
- 📦 **构建产物**
- `Metona Ollama Setup 3.2.5.exe`78MB
- Gitee Release v3.2.5-desktopID: 601311
### Desktop v3.2.4 — AI 命令执行走工作空间终端 & Bug 修复
- 🔧 **AI 命令执行走工作空间终端**
- `run_command` 工具不再在主进程内部执行,改为通过工作空间终端实时执行并显示
- stdout/stderr 实时推送到工作空间终端面板,流式展示
- 用户可通过停止按钮终止卡住的命令,结果自动回传 AI
- 新增 `cmd:output` / `cmd:done` / `cmd:kill` IPC 通道
- 🖥️ **工作空间面板优化**
- 去掉用户手动命令输入,所有命令由 AI 执行
- 终端底部状态提示(等待/执行中)
- 修复面板顶部对齐(90px → 92px)
- 🔧 **设置面板修复**
- 修改 Ollama 服务地址后同步更新顶部导航连接状态和模型列表
- 📦 **构建产物**
- `Metona Ollama Setup 3.2.4.exe`
- Gitee Release v3.2.4-desktop
### Desktop v3.2.3 — 工作空间面板常驻显示 & Bug 修复
- 🖥️ **工作空间面板改为常驻显示**
- 类似执行日志面板,固定显示不可关闭,移除关闭按钮和 header 中的切换按钮
- 固定宽度 480px,移除拖拽调整宽度功能(`wsResizer``setupResizer()` 全部删除)
- `main-wrap` 始终带 `with-workspace` class,面板初始化即可见(`panelVisible = true`
- 删除 `togglePanel()` 函数及相关事件绑定
- 🔧 **Bug 修复**
- 修复 `tool-registry.ts` 使用 `logInfo` 但未导入导致 `run_command` 工具调用报 "logInfo is not defined" 异常
- 📦 **构建产物**
- `Metona Ollama Setup 3.2.3.exe`78MB
- Gitee Release v3.2.3-desktopID: 601248
### Desktop v3.2.2 — 工作空间深度集成 & 构建修复
- 🔧 **工作空间与 AI Tool Calling 深度集成**
- 工作空间命令行新增「执行」按钮,AI 建议的 `run_command` 工具调用可在工作空间终端中可视化执行
- 工具调用结果实时流式输出到工作空间终端面板,支持长时间运行命令
- 完善 IPC 通信链路:`preload.ts` 新增 workspace API 桥接、`ipc.ts` 新增对应 handler
- 📦 **构建流程修复与优化**
- 修复 `npm install` 时 Electron "socket hang up" 问题(需设置 `ELECTRON_MIRROR`
- 修复 electron-builder 构建时 winCodeSign 从 GitHub 下载 EOF 错误(使用 ghfast.top 代理)
- 修复 `restore-build-cache.sh` 因 npmmirror 缺包导致全部缓存跳过的问题
- 新增手动缓存下载方案:逐项下载 winCodeSign/NSIS/NSIS Resources 的完整命令
- `docs/BUILD.md` 故障排查表新增 3 条条目,附完整手动缓存命令
- 📝 **文档更新**
- 更新 README.md 最新版本说明和构建分支引用
- 更新 docs/CHANGELOG.md 版本分支结构
- 更新 docs/BUILD.md 构建日志(v3.2.2 记录 5 个问题及处理步骤)
### Desktop v3.2.1 — 日志统一 & 构建优化
- ♻️ **主进程日志接入执行日志面板**
- 清除 `ipc.ts` 4 处 `console.log/error`,新增 `sendLog()` 函数通过 IPC 推送到渲染进程
- 清除 `workspace.ts` 1 处 `console.log`,统一走 `sendLog()`
- `preload.ts` 新增 `onMainLog` 监听通道
- `main.ts` 监听 `main:log` 事件转发到 `addLog()`,全项目零 `console.log`
- 📦 **移除便携版**
- `package.json` 移除 `portable` 构建目标、`dist:portable` 脚本和 `portable` 配置块
- Gitee 清理 v1.0.0 ~ v3.1.1 旧版本便携版附件,释放仓库配额
- 🗑️ 删除 `docs/V3-TOOL-CALLING.md`
- 📝 更新 README.md(下载说明、常用命令、项目结构)和 docs/BUILD.md
### Desktop v3.2.0 — 工作空间面板 & 构建优化
- 🖥️ **工作空间面板**
- 右侧面板:命令行 Tab + 文件浏览器 Tab,宽度可拖拽调整
- 终端界面:实时流式输出、ANSI 颜色支持、多终端 Tab、无超时限制
- 文件浏览器:目录树、文件预览(带行号)、上级目录导航
- IPC 双向通信:`on/send` 模式实现流式推送,独立于 Agent Loop 超时体系
- 设置面板新增工作空间目录配置(默认 `userData/workspace`
- 窗口关闭时自动 SIGTERM 所有子进程,防止进程泄漏
- ♻️ **结构化日志系统**
- 渲染进程 58 处 `console.log/warn/error` 全部迁移至 `log-service.ts`
- 135 处结构化日志点覆盖全链路:初始化、连接、模型加载、工具调用、RAG 检索、记忆提取、流式响应、Agent Loop
- 日志级别分级(init/success/info/warn/error/debug),便于过滤排查
- 🖥️ **文件对话框全面原生化**
- 图片上传 → `bridge.dialog.openFile()`(原生文件选择器 + 图片类型过滤)
- 文件上传 → `bridge.dialog.openFile()`50+ 种文本/代码格式过滤)
- 知识库文档上传 → `bridge.dialog.openFile()`(文档格式过滤)
- 会话导入 → `bridge.dialog.openFile()`.metona 格式过滤)
- 会话导出 → `bridge.dialog.saveFile()`(替代浏览器 blob 下载)
- 聊天导出(Markdown/HTML/TXT`bridge.dialog.saveFile()`(替代浏览器 blob 下载)
- 🪙 **Token 消耗统计**
- Header 新增 🪙 图标 + 当前会话总 token 消耗实时显示
- `updateTotalTokens()` 在每轮对话完成后自动更新
- Agent Loop 和普通聊天均支持统计
- 🧹 **代码清理**
- 移除浏览器专用工具函数:`fileToBase64()``fileToText()``downloadFile()`
- 所有文件 I/O 统一走 Electron IPC 桥接(`bridge.fs.readFile` / `bridge.fs.writeFile`
- 清理废弃的 `DesktopBridge` 接口,统一使用 `MetonaDesktopAPI`
- 移除 `types.d.ts` 中废弃的 `DesktopBridge` 类型和 `__metonaBridge` 全局声明
- `fs.writeFile` 新增 `encoding` 参数支持(UTF-8 / base64
- 会话导出(.metona 加密备份)改用 base64 编码写入二进制文件
- 🔧 **编译修复**
- 修复 `vector-store.ts``colId` 变量重复声明导致编译失败
- 修复 `importSessions``result` 变量重复声明导致编译失败
- 修复 token 统计在 `eval_count=0` 时仍显示的显示问题
- 📦 **构建工具**
- 新增 `build-release.sh` — 一键构建脚本(自动安装 Wine + npm 依赖 + electron-builder
- 新增 `restore-build-cache.sh` — 构建资源本地缓存恢复(Electron 二进制等 145MB 资源)
- 更新 `docs/BUILD.md` — 新增快速构建 3 步指南、构建资源管理说明
- `.gitignore` 排除 build-resources 目录(本地缓存不进仓库)
- 📦 **构建优化**
- 移除便携版构建目标,后续仅提供 NSIS 安装包
- 清理 `package.json` 中 portable 相关配置
- 更新 `docs/BUILD.md` 构建指南
### Desktop v3.0.0 — Tool Calling & Agent 记忆
#### v3.0.0-patch2 — 稳定性修复
- 🔧 **Tool Calling IPC 卡死修复**
- `executeTool()` 新增 25 秒 IPC 硬超时,防止主进程无响应时无限挂起
- `agent-engine.ts``.catch` 捕获异常,防止 reject 逃逸
- 主进程 `tool:execute` 外层 try-catch,确保始终返回响应
- 全链路 console.log 便于 DevTools 排查
- 🔧 **Electron contextIsolation 兼容**
- 新增 `prompt-modal.ts` 自定义弹窗组件(替代原生 `window.prompt()` / `window.confirm()`
- 替换 memory-panel / kb-modal / settings-modal / history-modal 中全部 7 处原生调用
- 🔧 **日志面板改造**
- 默认常驻显示,移除关闭/清空/切换按钮
- 新增 earlyBuffer 缓冲机制,initLogPanel 前的日志不再丢失
- initLogPanel() 移至 init() 最先执行
- 确认为纯运行时日志,不持久化
- 🔧 **启动稳定性**
- init() 中防御性重置 IS_STREAMING / IS_HISTORY_VIEW / toolCallingEnabled 等状态
- catch 路径也重置关键状态并初始化日志面板
- 🔧 **新建会话修复** — 新建会话时强制中断正在进行的生成,恢复发送按钮
- 📝 对齐 Ollama 官方 Tool Calling JavaScript 文档
#### v3.0.0 — Tool Calling & Agent 记忆
- 🔧 **Tool Calling — AI 本地文件操作系统**
- 7 个工具:`read_file` / `write_file` / `list_directory` / `search_files` / `create_directory` / `delete_file` / `run_command`
- Agent Loop 引擎:流式多轮工具调用循环,支持并行调用(最大 10 轮)
- 安全模型:路径白名单/黑名单、命令过滤、用户确认对话框
- 工具调用可视化卡片(5 种状态:pending → running → success/error/denied
- 🧠 **Agent 记忆系统**
- 自动从对话中提取关键信息(事实/偏好/规则/事件)
- 关键词 + 标签 + 重要性加权检索,自动注入上下文
- IndexedDB 持久化,跨会话积累
- 可视化记忆管理面板(搜索/筛选/编辑/删除)
- 对话 ≥3 条消息后自动触发记忆提取
-**全功能协调运作** — 记忆检索 → RAG 检索 → Tool Calling 三层协作
- 🔧 Agent 预设系统移除,由记忆系统替代
- 📝 Tool Calling 技术开发文档(75KB
- 📝 Wine 安装步骤和构建日志
### Desktop v2.0.0 — TypeScript 重写
-**TypeScript + Vite + Electron 全面重构**
- 🏗️ 构建系统完善,模块化拆分
- 🖥️ 纯桌面版,专注 Electron 体验
- 📝 Windows 安装包构建指南
### Desktop v1.1.0 — UI 重塑
- 🎨 **Windows 11 Fluent Design 暗色主题** — Mica 毛玻璃材质
- 📐 知识库/历史弹框优化
- ✨ Think 按钮光效增强
- 🔧 修复知识库/历史弹框宽度、图片按钮禁用标识、Think hover 光效
- 📝 Windows 安装包构建指南,记录踩坑经验
### Desktop v1.0.0 — 桌面客户端诞生
- 🖥️ **Electron Windows 桌面客户端首版**
- 📦 NSIS 安装包 + 绿色便携版
- 🔧 隐藏窗口菜单栏
---