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
Metona
3265b26fba
fix: remove all tool execution timeouts
...
- tool-registry.ts: remove 25s/60s IPC hard timeout on all tools
- browser.ts: remove executeJsWithTimeout wrapper, direct executeJavaScript
- No timeout on any tool — user controls lifecycle
2026-04-20 18:15:57 +08:00
Metona
9999e669d3
fix: browser tool IPC timeout — add executeJsWithTimeout + isBrowserOpen guard
...
- browser.ts: add executeJsWithTimeout() wrapping executeJavaScript with 10-15s timeout
(renderer 冻结时不再无限挂起导致 IPC 25s 超时)
- All browser functions (evaluate/extract/click/type/scroll/screenshot) check isBrowserOpen()
before execution, return clear error instead of auto-recreating empty browser window
- tool-registry.ts: browser tool IPC timeout increased from 25s to 60s
- Root cause: heavy pages (718+ links) can freeze Chromium renderer, executeJavaScript hangs
indefinitely; after browser_close, getAgentBrowser() auto-created blank window confusing agent
2026-04-20 18:10:58 +08:00
thzxx
fde63f73f1
fix: system prompt 开头注入真实系统日期,防止AI用知识库旧日期构造搜索查询
2026-04-20 10:34:36 +08:00
thzxx
d0ba265daa
fix: 修复模板字符串中反引号转义问题
2026-04-20 10:23:12 +08:00
thzxx
21557de02e
fix: 禁止AI使用知识库日期,强制依赖工具返回的真实日期
2026-04-20 10:19:53 +08:00
thzxx
6be27f4cfd
fix: 联网搜索强制注入当前日期(system prompt + 工具层双保险)
2026-04-20 10:17:34 +08:00
thzxx
eba0b4df5e
fix: 新建会话时重置工作空间到空闲状态并切回终端页签
2026-04-20 09:56:25 +08:00
thzxx
771a48f35d
refactor: vendor marked + dompurify 到项目内,实现零外部依赖
...
- marked (77行 ESM) + dompurify (1398行 ESM) 复制到 src/vendor/
- 包含 LICENSE 文件和类型声明(dompurify 类型去除 trusted-types 外部依赖)
- 移除 package.json 中 marked/dompurify/@types/dompurify 依赖
- 移除 electron-builder files 配置中的 node_modules 引用
- tsconfig.json include 新增 src/vendor/**/*.d.ts
2026-04-19 20:54:07 +08:00
thzxx
8805858b79
refactor: 第三方库替换 & 代码精简 — v5.1.5
...
- Markdown 解析器:内联正则 → marked 库(完整 GFM 支持)
- HTML 净化器:内联 DOM 遍历 → DOMPurify(业界标准)
- crypto.ts:删除 sha256js/xorBytes 死代码回退路径
- 消除 5 个文件中 escapeHtml/formatSize 重复定义
- 版本号升级至 5.1.5
2026-04-19 20:48:56 +08:00
thzxx
586cd33563
fix: 工具页签卡片标题白底问题 — 覆盖全局亮色样式
2026-04-19 20:20:20 +08:00
thzxx
d389581f37
fix: 空闲状态绝对定位居中,消除滚动条
2026-04-19 20:12:08 +08:00
thzxx
322a0abdd2
fix: 首次打开应用时渲染终端空闲状态
2026-04-19 20:10:30 +08:00
thzxx
01c17a66fc
fix: 工作流完整性和协调性修复
...
修复 6 个问题:
1. 新一轮对话清理上轮工具卡片和终端输出(避免越积越多)
2. 中止 Agent Loop 时保留已执行的工具记录(不再丢失)
3. 切换历史会话时清理工作空间状态
4. handleRetry 保存 think 内容(之前丢失)
5. 中止流程统一:agent-engine 抛出 AbortError 由消费方处理(消除重复消息风险)
6. 导出 clearToolCardsExternal/clearTerminalExternal 供外部调用
2026-04-19 19:48:46 +08:00
thzxx
f5fd851224
fix: 历史会话工具调用展示 — 可折叠工具卡片
2026-04-19 19:44:12 +08:00
thzxx
aa33f8845e
fix: 工具页签自动切换协调性修复
2026-04-19 19:40:41 +08:00
thzxx
6b1d790436
feat: 工具和文件页签空闲状态优化 — 图标网格 + 目录信息
2026-04-19 19:38:10 +08:00
thzxx
8973077abd
fix: 自动记忆优化 — 禁止自动提取规则、提高提取门槛与质量
2026-04-19 19:36:41 +08:00
thzxx
2134e1be38
feat: 终端空闲状态优化 — ASCII Logo + 工作空间信息 + 轮转贴士
2026-04-19 19:35:24 +08:00
thzxx
8d03f42611
fix: 移除 workspace-panel.ts 中重复的 escapeHtml 声明
2026-04-19 19:06:00 +08:00
thzxx
a79ce976f3
chore: 版本号更新至 5.1.4
2026-04-19 19:04:06 +08:00
thzxx
c7f2fe0c27
feat: 工具卡片从聊天区域迁移到工作空间面板
...
- 工作空间新增「🔧 工具」页签,专门展示工具调用卡片
- 工具执行时自动切换到工具页签
- run_command 执行时自动切换到终端页签
- AI 回复消息不再显示工具卡片,保持聊天区域简洁
- 工具页签支持清空、自动滚动、状态统计
2026-04-19 19:01:43 +08:00
Metona Build
69a28a8500
refactor: 修复 any 滥用 & 拆分 tool-handlers.ts & 记忆数据治理 (v5.1.3)
...
Fix 2 - 类型安全:
- (window as any).metonaDesktop → window.metonaDesktop
- any[] → Record<string, unknown>[]
- 回调 :any → ChatSession | null
- 78 处 → 38 处(减少 51%)
Fix 3 - 架构拆分:
- tool-handlers.ts (1308行) → 4 个模块:
- tool-handlers-shared.ts: 共享工具函数
- tool-handlers-fs.ts: 15 个文件系统操作
- tool-handlers-system.ts: 6 个系统网络操作
- tool-handlers-git.ts: 1 个 Git 操作
Fix 4 - 记忆数据治理:
- 90 天未使用自动降低 importance
- 清理评分新增 agePenalty
- 向量错误日志增强(记忆ID、内容摘要、模型、栈)
- 去重增强(前缀匹配)
2026-04-19 18:38:31 +08:00
Metona Build
212f14adf5
style: AI 回复中工具卡片移至文字上方,增加视觉层次
...
- 工具卡片渲染位置从文字下方移至文字上方
- 工具卡片与文字之间用虚线分隔,形成视觉层次
- 逻辑顺序:思考过程 → 工具执行 → 最终回答
2026-04-19 18:17:30 +08:00
Metona Build
71bd6e19ea
feat: 预算警告 & Shadowing 防护 & 记忆容量管理 (v5.1.2)
...
- 预算警告临时层:Agent Loop 剩余 ≤5 轮注入 WARNING,≤2 轮注入 CRITICAL
- MCP Shadowing 防护:MCP 工具注册时检测重名,自动跳过并警告
- 记忆容量限制:上限 500 条,超限自动清理低价值条目(rule 受保护)
- 版本号更新至 5.1.2
2026-04-19 18:10:26 +08:00
Metona Build
a8fe322b67
fix: 修复 esbuild 正则/模板字面量解析问题(反引号兼容性)
2026-04-19 17:52:57 +08:00
thzxx
f817abd5e1
chore: 清理死代码,retry handler 工具卡片渲染补全
...
- 移除 agent-engine.ts 中未使用的 logThink 导入
- 移除 settings-modal.ts 中未使用的 isVectorMemoryEnabled 导入
- 修复 retry handler 中 onToolCallStart/onToolCallResult/onToolCallError 空回调
2026-04-19 17:21:55 +08:00
thzxx
c60ee2b4ae
fix: 直播聊天时实时渲染工具调用卡片
...
- 新增 appendToolCallCardToPlaceholder: 工具开始执行时显示 running 卡片
- 新增 updateToolCallCardInPlaceholder: 工具完成后更新为 success/error 卡片
- 修复 onToolCallStart/onToolCallResult/onToolCallError 空回调问题
- 修复历史记录有工具卡片但直播聊天没有的不一致问题
2026-04-19 17:19:45 +08:00
thzxx
1f99d61a12
fix: 日志导出移至日志顶栏, 搜索引擎Bing优先
2026-04-19 17:10:42 +08:00
thzxx
e2cb87a060
fix: 搜索引擎DuckDuckGo→百度, 移除全部超时限制, 默认85轮可配置, 执行日志导出
...
- 搜索引擎从 DuckDuckGo 换成百度(Baidu),解决国内不可达问题
- 移除全部超时限制:Agent Loop、流式响应、工具执行、web_fetch、download_file
- Agent 最大轮数从 15 改为默认 85 轮,设置面板可配置
- 日志面板新增导出按钮,支持导出为 TXT 文件
- TOOL_USAGE_GUIDE 新增禁止猜 URL 和中文搜索结果利用规则
- 版本号更新至 5.1.1
2026-04-19 17:08:46 +08:00
thzxx
fc60d5f2e8
chore: 版本号更新至 5.1.1
2026-04-19 16:51:56 +08:00
thzxx
51a84bd0ad
feat: v5.1.0 - 记忆replace/remove、Skill渐进式加载、安全扫描、预算可配置、工具截断配置
2026-04-18 12:09:27 +08:00
thzxx
9d68a07b47
fix: 修复搜索引擎/DuckDuckGo超时/web_fetch UA/Agent去重误杀,优化搜索fallback指导,版本号更新至5.0.1
2026-04-18 11:44:48 +08:00
Metona Dev
8ffba1a857
fix: 全面审查修复 - 日志/死代码/工具卡片/技能描述
...
- sqlite.ts: 移除 console.warn,改用状态变量跟踪 FTS5 可用性
- tool-handlers.ts: download_file/append_file/edit_file 补充 sendLog 执行日志
- chat-area.ts: 工具卡片补齐 29 个工具的图标/名称/参数/结果渲染
- main.ts: 移除未使用的 stopAllMCPServers 导入
- skill-manager.ts: 修复 /** 注释语法错误,补充 browser*/spawn_task 工具描述
2026-04-18 10:47:38 +08:00
Metona Dev
a6d38ed9cb
fix: 工具面板/帮助面板同步更新 + 图片上传限制
...
- 工具面板: 20→29个工具,补齐 web_search/memory_*/session_*/spawn_task/browser_*
- 帮助面板: 工具数量21→29,新增人格模式/MCP/Cron/Heartbeat说明,补充/retry等命令
- 图片上传: preload透传完整options,ipc尊重multiple参数,图片选择器限制单文件
2026-04-18 10:42:58 +08:00
thzxx
3a33ebf949
fix: 补充执行日志 + 清理死代码
...
日志补充:
- browser.ts: 全部 8 个函数新增 sendLog (打开/截图/JS/提取/点击/输入/滚动/关闭)
- mcp-manager.ts: callTool 新增工具调用日志
死代码清理:
- skill-manager.ts: 删除 getAllSkillsForUI, deleteSkillById, clearAllSkills (39 行)
- memory-manager.ts: 删除 getVectorSearchResults (4 行)
- mcp-manager.ts: 删除 isServerRunning
2026-04-18 10:24:39 +08:00
thzxx
22a33ae241
feat: 实现 MCP (Model Context Protocol) 完整功能
...
主进程:
- 新增 mcp-manager.ts: JSON-RPC 2.0 over stdio 通信
- 服务器生命周期管理 (spawn/initialize/handshake/stop)
- tools/list 动态工具发现
- tools/call 工具执行 (30 秒超时)
- 消息分帧 (newline-delimited JSON)
- 优雅清理 (pending 请求超时 + SIGTERM)
IPC 通道 (7 个):
- mcp:startServer / mcp:stopServer / mcp:stopAll
- mcp:callTool / mcp:getTools / mcp:getStatuses / mcp:refreshTools
渲染端:
- mcp-client.ts 完整重写: 配置管理 + 服务器生命周期 + 工具定义获取 + 工具执行
- tool-registry.ts: MCP 工具路由 (mcp_ 前缀识别 → executeMCPTool)
- settings-modal.ts: MCP 服务器管理 UI (添加/启用/禁用/删除/状态显示)
- main.ts: 启动时自动启动已启用的 MCP 服务器
数据流:
settings.mcp_servers → startAllMCPServers → initialize → tools/list → getMCPToolDefinitions → Agent Loop → mcp_ 工具调用 → callTool → JSON-RPC → MCP Server
2026-04-18 10:14:33 +08:00
thzxx
d2468cd6fc
refactor: 全面清理死代码 — 删除 348 行无用代码
...
删除文件:
- training-export.ts: 训练数据导出(零引用,UI 已移除)
删除函数:
- workspace.ts: isProcessAlive, getActiveProcessCount, execWorkspaceCommand, terminateWorkspaceCommand
- sqlite.ts: deleteMessagesBySession, getSkill, closeDatabase
- tool-registry.ts: isToolEnabled
- cron-manager.ts: clearAllTimers
- workspace-panel.ts: setOnToolTerminated, setWorkspaceDirPath
删除 UI:
- index.html: 训练数据导出按钮及说明
- settings-modal.ts: 训练数据导出事件绑定
2026-04-18 10:08:01 +08:00
thzxx
6c9ffa5135
fix: 消除死代码 — context-manager 接入 + mcp-client 接线 + 删除 document-processor
...
- agent-engine.ts: 接入 context-manager buildContext(),长对话自动滑动窗口+摘要压缩+token 裁剪
- tool-registry.ts: 导入 mcp-client,getEnabledToolDefinitions() 合并 MCP 工具缓存
- main.ts: 启动时 refreshMCPTools() 注册已启用的 MCP 工具
- 删除 document-processor.ts(RAG 遗留,完全无引用)
2026-04-18 10:00:14 +08:00
thzxx
c6fc8b116c
fix: 全面测试修复 — useTools TDZ 错误 + CSS 变量缺失
...
- agent-engine.ts: 修复 useTools 在声明前使用导致运行时 ReferenceError
- style.css: 补充 --primary, --primary-bg, --bg-hover 三个缺失的 CSS 变量
2026-04-18 09:55:32 +08:00
thzxx
8ea7a056f3
fix: 修复 TypeScript 编译错误
...
- browser.ts: 移除 loadURL 不支持的 timeout 参数
- ipc.ts: 修正 browserScroll direction 参数类型断言
2026-04-18 09:42:41 +08:00
thzxx
17d684cbf5
chore: 版本号更新至 5.0.0
2026-04-18 09:35:17 +08:00
thzxx
889d34b484
feat: v5.0 全面进化 — 浏览器控制 + 训练数据导出 + Cron 定时任务
...
新增功能:
1. 🌐 浏览器控制(8 个工具)
- 主进程 browser.ts: 基于隐藏 BrowserWindow 的浏览器引擎
- browser_open: 加载 URL,返回标题和最终 URL
- browser_screenshot: 页面截图(base64 PNG)
- browser_evaluate: 执行任意 JS,支持 DOM 操作
- browser_extract: 提取页面文本 + 链接(最多 50 条)
- browser_click: CSS 选择器点击
- browser_type: 输入框文本输入
- browser_scroll: 上下滚动/顶部/底部
- browser_close: 关闭浏览器释放资源
- 应用退出时自动清理 (before-quit)
- 工具总数:34 个
2. 📚 训练数据导出
- training-export.ts: 从 traces + messages 提取 SFT 格式训练数据
- 输出 JSONL 格式(instruction/input/output/tools/observations/metadata)
- 设置面板一键导出,Electron 原生文件对话框选择保存位置
3. ⏰ Cron 定时任务
- cron-manager.ts: one-shot(指定时间)+ recurring(周期性)
- 任务配置持久化到 settings
- 设置面板添加/删除/启用/禁用
- 任务触发时自动填入聊天输入框 + toast 通知
- 应用启动时自动恢复所有已启用任务
新增文件:browser.ts, cron-manager.ts, training-export.ts
修改文件:ipc.ts, main.ts, settings-modal.ts, index.html, main.ts(渲染), tool-registry.ts
2026-04-18 09:29:29 +08:00
thzxx
374d86086e
feat: v4.3 生态扩展 — 诊断系统 + Heartbeat + 子代理 + MCP
...
新增功能:
1. 🩺 一键诊断系统
- 设置面板添加「一键诊断」按钮
- 检查项:Ollama 连接、模型可用性、模型能力(Tools/Vision/Think)、
SQLite 数据库、技能系统、应用版本信息
- 实时渲染诊断结果,✅ /⚠️ /❌ 状态标识
2. 💓 Heartbeat 后台检查
- 设置面板添加开关 + 间隔选择(10分/30分/1小时/2小时)
- 定时检查 Ollama 连接,异常时系统通知
- 配置持久化到 settings,启动时自动恢复
- startHeartbeat/stopHeartbeat/restoreHeartbeat 三件套
3. 🤖 子代理委派(spawn_task)
- 新增 spawn_task 工具(26 个工具)
- 子 Agent 独立运行(独立消息上下文,5 轮上限,2 分钟超时)
- 不支持工具调用,专注于文本推理任务
- 主 Agent 可传入附加上下文
- 结果返回主 Agent Loop
4. 🔌 MCP Client 框架
- mcp-client.ts: MCP 服务器配置管理(增删改查、启用禁用)
- 配置存储在 settings.mcp_servers
- 工具注册框架就绪,待主进程 MCP bridge 实现协议通信
新增文件:mcp-client.ts, sub-agent.ts
修改文件:settings-modal.ts, index.html, main.ts, tool-registry.ts
2026-04-18 09:25:40 +08:00
thzxx
f1625b4353
feat: v4.2 智能进化 — 技能自动生成 + 用户画像 + 人格模板
...
新增功能:
1. 技能自动生成系统 (Skill Loop)
- 新增 skills 表:id/name/description/trigger_keywords/tool_chain/success_count/fail_count
- skill-manager.ts: 从成功工具调用链自动提取可复用技能
- 关键词匹配 + 成功率加权的技能检索
- 匹配到的技能自动注入 system prompt(含工具链步骤和成功率)
- Agent Loop 结束后自动提取,开始前自动匹配注入
- DB/IPC/Preload 全链路支持
2. 用户画像模型
- 自动从对话中推断技术栈(14 种技术关键词检测)
- 画像存储在 settings.user_profile
- 自动注入 system prompt(技术栈/角色/风格)
- 随使用不断积累完善
3. 人格模板切换(6 种预设)
- 🤖 通用助手(默认,温度跟随设置)
- 💻 编程助手(温度 0.3,注重代码质量)
- ✍️ 写作助手(温度 0.8,注重文采流畅)
- 📊 数据分析(温度 0.2,注重精确逻辑)
- 🌐 翻译助手(温度 0.4,注重信达雅)
- 🔍 代码审查(温度 0.3,注重安全性能)
- 设置面板 3×2 网格按钮,点击切换 + 自动调整温度
修改文件:9 个已有 + 1 个新建(skill-manager.ts)
2026-04-18 09:22:25 +08:00
thzxx
d8f89ad097
feat: v4.1 会话增强 — /retry /undo /compress + 工具并行执行
...
新增功能:
- /retry:重试上一轮对话,删除最后的 AI 回复并重新触发 Agent Loop
- /undo:撤销最后的用户+AI 消息对
- /compress:用 LLM 摘要压缩中间对话,保留首尾上下文
- 工具并行执行:同一批次内互相独立的工具用 Promise.all 并行执行
技术细节:
- input-area.ts: 命令检测在 sendMessage() 入口处,/retry 支持普通聊天和 Agent Loop 两种模式
- chat-area.ts: 新增 clearMessagesDOM() 用于 undo/compress 后强制重建 DOM
- agent-engine.ts: 工具调用分批算法 — 根据 TOOLS_WITH_DATA_DEPS 集合检测依赖关系,
独立工具同批并行,有依赖的工具跨批串行
2026-04-18 09:15:10 +08:00
thzxx
137b8d86ef
fix: 彻底修复工具调用链断裂问题
...
问题根因:
1. 工具结果直接 JSON.stringify 生成臃肿 JSON(含 results 数组、formatted 长字符串等),
干扰模型理解,导致模型拿到搜索结果后不知道该继续调用 web_fetch
2. 模型返回空内容时,Agent Loop 直接终止,丢失了已有的工具调用上下文
3. 系统提示词对工具链式调用的约束力不足
修复方案:
- 新增 formatToolResultForModel():按工具类型精简结果,web_search 只保留 top 5,
web_fetch 截断 15K,移除冗余元数据字段
- 重写 AGENT_SYSTEM_PROMPT:明确要求工具链式调用(search→fetch→answer),
列出常见链式模式,强调「说了就要做」
- 重写 TOOL_USAGE_GUIDE:强化 web_search→web_fetch 强制链式规则
- 空响应处理:模型返回空内容时移除空消息、添加引导性提示、继续循环而非中断
- 记忆提取移到 Agent Loop 结束后,避免中途干扰
2026-04-18 08:40:52 +08:00
thzxx
93d7555a6f
fix: 去掉 ReAct 格式 prompt,恢复模型自然使用 API tool_calls
...
根因:REACT_SYSTEM_PROMPT 要求模型用 Thought/Action/Action Input
格式回复,导致模型用文本写工具调用而不是走 Ollama API 的
tool_calls 字段。v3.3.4 之前没有 ReAct prompt 时模型能正常调用。
改为简洁的 AGENT_SYSTEM_PROMPT,只描述工作方式和注意事项,
不规定输出格式,让模型自然使用 API function calling。
文本解析兜底保留作为安全网。
2026-04-18 08:24:02 +08:00
thzxx
4e158e8783
fix: 修复文本解析兜底正则不匹配模型实际输出格式
...
模型实际输出格式:
Action: write_file
Action Input: {"path": "测试.md", "content": ""}
原正则用 [\r\n]+ 强制要求换行,且 Action: 后的冒号和
Action Input: 的冒号处理冲突导致匹配失败。
改为 [\r\n\s]* 灵活匹配空白/换行。
2026-04-18 08:21:08 +08:00
thzxx
445695c6e1
feat: Agent Engine 文本解析兜底 — 支持不支持 function calling 的模型
...
当模型没有通过 Ollama API 的 tool_calls 字段返回工具调用,
而是在回复文本中写出 Action/Action Input 时(如 gemma4 系列),
自动从文本中提取工具调用,确保 ReAct Loop 正常执行。
支持的文本格式:
- **Action:** tool_name **Action Input:** {json}
- Action: tool_name Action Input: {json}
- 工具名白名单校验 + JSON 解析容错(单引号、尾逗号等)
2026-04-18 08:15:56 +08:00