Commit Graph
510 Commits
Author SHA1 Message Date
thzxx 72565b3220 fix: 彻底修复 TDZ 错误和用户消息不显示问题
1. agent-engine.ts: onNewIteration 改用 prevToolCalls 传递上一轮工具调用,
   避免引用未声明的 toolCalls 导致 TDZ (Cannot access 'B' before initialization)
2. chat-area.ts: 新增 resetCurrentPlaceholder() 清理悬空 DOM 引用
3. input-area.ts: 错误处理器删除 placeholder 后清理 currentPlaceholder 引用,
   防止后续 updateLastAssistantMessage 操作已脱离 DOM 的旧节点
2026-04-22 09:40:38 +08:00
thzxx 9915b71da1 fix: Agent Loop 多轮迭代消息保存和 token 统计
- 修复 onDone 多轮迭代时更新旧消息而非创建新消息,导致 post-tool 回复丢失
- 修复 pre-tool 消息的 toolCalls 未保存(onNewIteration 未传递 toolCalls)
- 修复最后两条 AI 消息无 token 显示(统计附着到被覆盖的消息上)
- onNewIteration 回调增加 toolCalls 参数,保存消息时附带工具调用记录
- handleRetry 同步修复
2026-04-21 14:08:07 +08:00
thzxx dc3d6e4b69 fix: 修复第二条消息不显示和上传文件AI读取失败
Bug 1: renderMessages() 统计 .message 元素时把 loading placeholder 也计入,
导致第二条用户消息被跳过不渲染。改为 .message:not(.loading) 排除加载占位符。

Bug 2: Agent Loop system prompt 缺少文件内容感知规则,用户上传文件后让AI读取,
AI 调用 read_file 去工作空间找文件导致失败。在 TOOL_USAGE_GUIDE 新增规则 16,
明确告知模型上传文件内容已在对话消息中,无需调用 read_file 工具。
2026-04-21 11:29:33 +08:00
thzxx e5acf646c8 fix: 修复多迭代 Agent Loop 的两个UI bug
Bug 1: 正在思考占位符作为独立消息残留
- 根因: renderMessages() 将 loading placeholder 计入 existingCount,
  导致新保存的消息不被渲染,旧 placeholder 永远留在页面上
- 修复: onNewIteration 保存消息前先移除旧 placeholder

Bug 2: 只有最后一条AI消息显示 token 统计
- 根因: onNewIteration 保存中间消息时不附带 token/duration 统计,
  只有 onDone 对最后一条才添加 loopStats(总累计值)
- 修复: 追踪每轮迭代的 eval_count 增量和耗时,
  中间消息和最后消息均保存 per-iteration 统计,
  确保 updateTotalTokens 求和不重复计数
2026-04-21 09:05:07 +08:00
thzxx 2496e04685 fix: 修复用户消息不显示和思考气泡残留
renderMessages() 中 existingCount 使用 children.length 计算,
包含了 currentPlaceholder(正在思考...)元素,导致:
1. 新用户消息被误判为已渲染而跳过
2. 旧 placeholder 残留 DOM 变成独立消息气泡

修复:existingCount 改用 querySelectorAll('.message') 只计算实际消息元素
2026-04-20 21:00:42 +08:00
thzxx 6656f16d30 docs: 根据实际代码更新 README.md 和 docs 文件
README.md:
- Agent Loop: 最大15轮→默认85轮(可配置),移除10分钟超时
- 架构图: tool-handlers 25→21 工具
- 工作空间: 新增工具Tab说明,3个页签
- 记忆系统: 新增容量上限500条
- Heartbeat: 补充默认1小时间隔

docs/BUILD.md:
- 新增v5.1.6构建日志(含构建产物和踩坑记录)

docs/CHANGELOG.md:
- v5.1.6新增构建产物信息

docs/DEVELOPMENT.md:
- Agent Loop: 最大15轮→85轮,移除所有超时限制
2026-04-20 20:52:55 +08:00
thzxx 3938cc8770 docs: 更新帮助面板内容,对齐实际代码
- Tool Calling: 工具分类从7类调整为6类,最大轮数15→85,移除超时限制说明
- 搜索引擎: web_search描述从DuckDuckGo+Bing更新为Bing+百度+Google三引擎
- 记忆系统: 新增容量上限500条、安全扫描说明
- 布局说明: 工作空间从2个Tab更新为3个Tab(命令行/工具/文件)
- 新增章节: 技能自动生成、系统诊断
- Heartbeat: 补充默认间隔1小时
- 工具面板卡片: web_search描述同步更新
2026-04-20 20:29:30 +08:00
thzxx 875d04d1e1 fix: Agent Loop 多轮迭代消息互相覆盖 — 每轮创建独立消息气泡
问题:Agent Loop 多轮迭代(thought→action→observation→循环)时,每轮
onContent 回调都通过 updateLastAssistantMessage 替换同一个 placeholder
的 innerHTML,导致前一轮的回复内容被后一轮覆盖,只有最后一轮保留。

修复:
- agent-engine.ts: AgentCallbacks 新增 onNewIteration 回调,每轮迭代
  开始前通知 UI 层
- input-area.ts: sendMessageWithAgentLoop + handleRetry 添加
  onNewIteration 处理——保存当前轮内容为独立消息、重置状态、创建新
  placeholder。onDone 根据 agentModeIterations 判断是否需要重复保存
2026-04-20 20:07:47 +08:00
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 a8e4f5208c docs: 更新 CHANGELOG / DEVELOPMENT / BUILD 文档(v5.1.5 最新改动) 2026-04-20 10:42:33 +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 23d0d1d3a3 docs: 推荐规则记忆新增联网前确认当前日期规则 #13 2026-04-20 09:50:13 +08:00
thzxx 145a2ab411 docs: 更新策略为第三方库本地化,不再要求零外部依赖 2026-04-19 20:55:31 +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 419938c667 docs: README 新增推荐规则记忆区域(12 条 Agent 行为约束规则) 2026-04-19 20:50:44 +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 a13caaf1c5 docs: 更新 v5.1.4 CHANGELOG 和 BUILD 日志 2026-04-19 20:04:34 +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
thzxx b81bb4dd60 docs: 根据 v5.1.3 实际代码更新全部 docs 文件
- BUILD.md: checkout 分支 v5.1.1→v5.1.3,any 计数修正
- DEVELOPMENT.md: 目录结构更新(tool-handlers 拆分、新服务文件),
  工具数 25→38,数据库 6→7 表,新增 browser/mcp/skill/cron/sub-agent
- OPENCLAW-HERMES-ANALYSIS.md: 10 个路线图功能标记已实现状态,
  更新优先级表和待实施清单
- HERMES-AGENT-DEEP-STUDY.md: 对比表更新(记忆/工具/Agent Loop),
  P0-P2 改进清单标记实施状态
2026-04-19 18:52:23 +08:00
thzxx 4fac36b941 docs: 更新 v5.1.3 发布信息(下载文件名、分支结构链) 2026-04-19 18:47:54 +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 bea52bf1b7 docs: 根据项目实际代码更新 README.md 和更新日志
- README.md: web_search 描述从 DuckDuckGo + Bing 改为 Bing + 百度 + Google 三引擎
- CHANGELOG.md v5.1.1: 修正搜索引擎顺序(Bing 首选 → 百度备用 → Google 兜底)
- CHANGELOG.md v5.1.1: 新增 esbuild 反引号兼容性修复记录
- BUILD.md v5.1.1: 修正搜索引擎描述
2026-04-19 17:58:30 +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 09c3dc0d6f docs: 更新 README.md 补充 v5.1.0 新工具说明 2026-04-18 12:13:44 +08:00
thzxx 51a84bd0ad feat: v5.1.0 - 记忆replace/remove、Skill渐进式加载、安全扫描、预算可配置、工具截断配置 2026-04-18 12:09:27 +08:00
thzxx a3a523e2a8 docs: 新增 Hermes Agent 深度研究报告及 Metona 改进方案 2026-04-18 11:55:51 +08:00