Commit Graph
342 Commits
Author SHA1 Message Date
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
thzxx 95153e9171 fix: 修复打包后应用无法启动(sql.js WASM 不含 FTS5 模块)
根因分析:
- sql.js 默认 WASM 构建不包含 FTS5 全文搜索扩展
- initDatabase() 中 CREATE VIRTUAL TABLE USING fts5 直接抛异常
- app.whenReady() 链没有 .catch(),错误被静默吞掉
- 结果:进程启动但窗口永远不显示(用户看到双击没反应)

修复内容:
1. main.ts: 添加 app.whenReady().catch() 错误处理,失败时弹出错误对话框
2. main.ts: 添加全局 uncaughtException/unhandledRejection 处理,写入 startup-error.log
3. sqlite.ts: FTS5 虚拟表创建改为可选,缺失时自动降级为 LIKE 搜索
4. sqlite.ts: 所有 FTS5 同步操作(save/delete/clear)加 _hasFTS5 守卫
2026-04-18 07:42:54 +08:00
thzxx 4518929a4c fix: 修复 sql.js 未包含在 app.asar(files 排除顺序问题) 2026-04-17 20:44:21 +08:00
thzxx d98f1ff754 fix: 修复打包后 sql.js 未包含在 app.asar 导致启动报错
electron-builder 的 files 配置中 !node_modules/**/* 排除了所有
node_modules,但 sql.js 作为运行时依赖必须被打包。在排除规则前
显式包含 node_modules/sql.js/**/* 即可。
2026-04-17 17:44:41 +08:00
thzxx ea55264b5a fix: 修复 TypeScript 编译错误(sql.js 类型声明 + Row 转换) 2026-04-17 17:27:13 +08:00
thzxx 1b66ee5f19 docs: 更新 README 和 docs 中数据库描述为 sql.js (WASM) 2026-04-17 16:29:48 +08:00
thzxx 16266ebdde refactor: 数据库层从 better-sqlite3 迁移到 sql.js (WASM)
- 替换原生依赖 better-sqlite3 为纯 WASM 的 sql.js,消除 Electron ABI 版本不匹配问题
- 新增 sql.js 兼容层:runExec/queryOne/queryAll/runPragma/runTransaction
- initDatabase() 改为异步(WASM 加载需要)
- 每次写操作后自动 persist() 到磁盘
- electron-builder 配置:extraResources 打包 sql-wasm.wasm
- 移除 @electron/rebuild 依赖和 postinstall 脚本
- 设置 npmRebuild: false(不再需要原生模块重编译)
2026-04-17 16:26:53 +08:00
thzxx ba03b31677 feat: 重新设计应用图标,匹配暖色调珊瑚橙主题
- 羊驼面部更精致:比例优化、腮红渐变、瞳孔虹膜质感
- 新增 AI 星光元素(右耳上方),暗示 AI Tool Calling 能力
- 底部保留 </> 代码符号装饰
- 色彩严格匹配项目暖色调主题(#FAF7F2 背景 + #E8734A 珊瑚橙)
- 同步更新 llama.ico / llama.png / icon-new 全套图标
2026-04-17 15:13:59 +08:00
thzxx 69087f2854 fix: 添加 @electron/rebuild 解决 better-sqlite3 原生模块 ABI 不匹配问题
- 添加 @electron/rebuild 到 devDependencies
- 添加 postinstall 脚本自动为 Electron 重新编译原生模块
- electron-builder 配置添加 npmRebuild + buildDependenciesFromSource
2026-04-17 15:03:10 +08:00
Metona CI 3c65d69744 feat: 重新设计应用图标,匹配暖色调主题(奶白+珊瑚橙) 2026-04-17 14:54:21 +08:00
thzxx 24a5475a7f docs: 重构 README.md & 更新 docs 文件适配 v4.0.0
- README.md: 全面重写,反映实际项目状态(25工具、SQLite、ReAct、暖色主题)
- DEVELOPMENT.md: 更新技术栈(SQLite替代IndexedDB)、架构(ReAct)、工具数、UI规范
- CHANGELOG.md: v4.0.0条目补充UI主题改版说明
- BUILD.md: 新增v4.0.0构建日志
2026-04-17 13:59:44 +08:00
thzxx 5ea958e5c1 style: UI 主题改版 — 暗色→暖色调亮色主题
- 奶白背景 (#FAF7F2) + 珊瑚橙主色 (#E8734A)
- 圆润柔和设计: radius 8-20px, 柔和阴影
- 紫色辅助色 (Think/推理), 金色标签 (Token)
- 终端区域保留深色 (#2D2016 暖棕) 保证可读性
- 窗口背景色、导出 HTML、theme-color 同步更新
- 字体升级: Inter + JetBrains Mono
2026-04-17 13:52:55 +08:00
thzxx b4c7da87b7 chore: 版本号更新至 4.0.0 2026-04-17 13:44:41 +08:00
thzxx 26cbac71fe feat: v4.0.0 大版本升级 - SQLite3 + ReAct Agent
- P0: 存储层 IndexedDB → SQLite3 (better-sqlite3),7张表 + FTS5全文搜索
- P1: Agent Engine 升级为 ReAct 模式(思考→行动→观察→反思)
- P2: 新增 4 个工具(memory_search, memory_add, session_list, session_read)
- P3: 上下文管理器(滑动窗口 + 摘要压缩 + 记忆注入)
- P4: UI 改版(ReAct 执行面板样式 + 思考过程卡片)
- P5: IndexedDB → SQLite 数据迁移支持
- MAX_LOOPS 10→15, MAX_LOOP_TIME 5min→10min, 错误自动重试 2 次
2026-04-17 12:35:42 +08:00
thzxx 5fb36a93e6 docs: 根据 v3.3.4 实际代码更新 README 和开发规范
- README.md: Agent Loop 说明补充去重机制
- README.md: 记忆类型表增加检索方式列(规则/偏好始终注入)
- README.md: 记忆工作流程更新(规则/偏好始终注入 + 事实关键词检索)
- README.md: web_fetch 补充默认返回完整内容说明
- docs/DEVELOPMENT.md: Tool Calling 流程补充去重机制
- docs/DEVELOPMENT.md: 联网搜索联动补充 web_fetch 不截断说明
2026-04-17 10:44:56 +08:00
thzxx 1771b1e326 bump: 版本号更新至 3.3.4
- package.json: 3.3.3 → 3.3.4
- src/renderer/index.html: 版本显示 v3.3.4
- README.md: badge、下载链接、构建分支引用
- docs/CHANGELOG.md: 版本链 + v3.3.4 更新日志
- docs/BUILD.md: 构建分支引用 + v3.3.4 构建日志
- docs/DEVELOPMENT.md: 版本号
2026-04-17 10:38:21 +08:00
thzxx bc0025161e fix: 修复记忆系统rule/preference不生效的问题
- searchMemoriesByKeyword: rule和preference类型始终注入,不再依赖关键词匹配
- 只有fact类型保留关键词匹配逻辑
- buildMemoryContext: 区分三类记忆的system prompt措辞
  - rule: 【必须严格遵守的规则】无条件执行
  - preference: 【用户偏好】请遵循
  - fact: 【参考信息】无关可忽略
2026-04-17 10:33:44 +08:00
thzxx 5ee23387c0 fix: 修复Agent Loop工具调用重复问题,移除web_fetch截断
- 新增工具调用缓存机制,避免重复调用相同工具+参数
- 新增同轮内重复检测和跨轮次重复检测,连续两轮相同调用自动终止循环
- TOOLS_USAGE_GUIDE 新增第8条严禁重复调用规则
- web_fetch 默认不截断(max_chars=0),返回完整内容
- 移除 tool-registry.ts executeTool 中重复的 logToolStart 调用
2026-04-17 10:28:12 +08:00
Metona d53fe047e5 docs: 更新 README.md 和 DEVELOPMENT.md 以反映 v3.3.3 实际变更
- README.md: Tool Calling 标题更新为「AI 自主工具调用(21 个工具)」
- DEVELOPMENT.md:
  - 5.2 Tool Calling 流程:标注 run_command 为唯一需确认工具
  - 新增 5.3 联网搜索与网页抓取联动说明
  - 原 5.3 工作空间重编号为 5.4
2026-04-17 09:15:45 +08:00
Metona c2e821f39a chore: 补充 docs 目录版本号更新
- docs/DEVELOPMENT.md: 3.3.2 → 3.3.3
- docs/BUILD.md: 构建分支名更新 + 新增 v3.3.3 构建日志
- docs/CHANGELOG.md: 版本链追加 v3.3.3 + 新增 v3.3.3 更新日志
2026-04-17 09:10:01 +08:00
Metona 9850bbf094 chore: 版本号 3.3.2 → 3.3.3 2026-04-17 09:05:38 +08:00
Metona dd7349338b feat: 增强 AI 主动调用工具的 prompt 指导
新增第 7 条「主动使用工具」规则:
- 明确告知 AI 在不确定、信息过时、需要实时数据时应主动调用工具
- 列举典型场景与对应工具的映射关系
- 强调宁可多调一次工具,也不要给出过时或编造的信息
2026-04-17 09:03:54 +08:00
Metona 0ea9c6fc9f feat: web_search 默认结果数 8 → 15 2026-04-17 09:02:08 +08:00
Metona fdb0e96561 feat: 增强联网搜索与网页抓取的联动
1. TOOL_USAGE_GUIDE 新增第 6 条:联网搜索联动规则
   - 要求 AI 在 web_search 后必须选择相关 URL 调用 web_fetch 抓取详情
   - 明确告知搜索摘要往往不完整,必须抓取原文才能给出准确答案
2. web_search 默认结果数从 5 提升到 8,给 AI 更多线索定位目标页面
2026-04-17 09:00:08 +08:00
Metona a2cff73fd7 style: 加宽帮助面板 600px → 760px 2026-04-17 08:57:03 +08:00
Metona 47747bf913 style: 加宽工具面板、历史记录、设置面板
- 工具面板:720px → 900px
- 历史记录:680px → 800px
- 设置面板:默认 480px → 640px(新增专属样式)
2026-04-17 08:55:34 +08:00
Metona 76981e4206 fix: 工具面板 badge 显示与下拉框样式
1. 修复工具面板中除 run_command 外所有工具的 badge 错误显示为需确认,实际应为自动
   - 根因:CONFIRM_TOOLS 数组仅包含 run_command,但 HTML 硬编码了多个工具为 confirm
   - 涉及工具:write_file, create_directory, delete_file, move_file, copy_file, append_file, edit_file, download_file, replace_in_files, compress
2. 修复 run_command 执行模式下拉框未选中项白字白底不可见
   - 根因:内联样式引用了未定义的 CSS 变量 --bg-tertiary,option 元素无暗色背景
   - 改用 --bg-card 并为 option 元素添加显式暗色背景
2026-04-17 08:53:26 +08:00
thzxx b2c3e6eb84 docs: 同步更新 README/DEVELOPMENT/BUILD 文档与实际代码一致 2026-04-16 20:02:35 +08:00
thzxx a18b04a890 chore: 版本号更新至 3.3.2 2026-04-16 19:50:44 +08:00
thzxx c62fd4c7fd feat: run_command 改为下拉框设置自动/需确认/禁用三种模式
- 替换原有开关为下拉选择框(selectRunCommandMode)
- 新增 setRunCommandMode() 动态控制确认行为
- 需确认模式:弹窗确认后执行
- 自动模式:直接执行,无需确认
- 禁用模式:工具不可用
- 新增 .tool-card-badge.disabled 样式
- 状态从 runCommandEnabled(bool) 迁移为 runCommandMode(string)
2026-04-16 19:39:11 +08:00
thzxx fe0daf7075 chore: 除 run_command 外所有工具改为自动执行无需确认 2026-04-16 19:32:03 +08:00
thzxx 5de4cfbabb feat: 添加 web_search 联网搜索工具 (21个工具)
- 新增 web_search 工具:AI 可主动联网搜索获取实时信息
- 搜索引擎:DuckDuckGo 优先,Bing 作为备用
- 返回结构化结果:标题、URL、摘要
- 自动启用,无需用户确认(只读操作)
- 更新 README 工具列表和计数
2026-04-16 19:29:15 +08:00
Metona Dev eb275516f3 docs: 根据项目实际同步 README.md 和 docs 2026-04-16 14:03:34 +08:00
Metona Dev 405040c1be chore: 版本号更新至 3.3.1 2026-04-16 13:54:16 +08:00
Metona Dev b6c51393f8 fix: 修复图片传输 + 记忆开关 + 统一图标
1. fix: 开启工具调用后图片无法传给AI
   - agent-engine.ts: images 为空文字时自动生成分析提示
   - input-area.ts: 图片+文字合并为单条消息,避免历史消息中图片丢失

2. fix: 记忆弹框自动记忆开关点击无响应
   - memory-modal.ts: CSS 类名 memory-toggle → toggle-label,启用完整滑块样式

3. chore: 统一应用图标为科技感羊驼
   - llama.png / llama.ico: 霓虹电路风格羊驼图标
2026-04-16 13:50:29 +08:00
thzxx d810fb84c0 docs: 更新 README.md AI 聊天客户端 → AI Agent客户端 2026-04-16 10:53:00 +08:00
thzxx 2b8f53bc81 fix: resolve TS2339 error in ipc.ts - cast result.error to String 2026-04-16 10:46:56 +08:00
thzxx 25ffd22639 docs: 全面同步文档与实际代码
README.md:
- Tool Calling 工具表扩展至 20 个(原 7 个)
- 移除已废弃的 RAG 知识库 section,更新为向量记忆说明
- 项目结构同步实际文件(移除 rag.ts/kb-modal.ts/memory-panel.ts,新增 memory-modal.ts 等)
- 架构图更新,移除 RAG 引用
- 记忆提取触发条件 ≥3 → ≥6
- 记忆类型表移除「事件」类型
- 技术栈 NSIS+Portable → NSIS
- 工作空间面板描述修正(固定 480px,单一终端进程)

docs/DEVELOPMENT.md:
- 子系统引用 rag.ts → vector-memory.ts
- 移除拖拽调整宽度描述

docs/CHANGELOG.md:
- v3.3.0 条目补充完整变更说明
2026-04-16 10:37:43 +08:00
thzxx f58be52e98 fix: 修正帮助面板描述与实际功能不一致
- 工作空间终端从「多终端 Tab」改为「单一终端进程」
- 移除工作空间面板拖拽调整宽度的描述(当前固定 480px)
2026-04-16 10:28:58 +08:00
thzxx 9f0c5ae7b5 chore: 版本号更新至 3.3.0 2026-04-16 10:19:51 +08:00
OpenClaw Agent 7c22405386 feat: 全面补充工具执行日志
- IPC 分发层:所有工具执行后自动记录成功/失败日志
- 新增 summarizeResult 函数:为每个工具生成可读的结果摘要
- move_file/copy_file/web_fetch:新增操作前后的详细日志
- 日志面板实时显示:工具名 + 结果摘要 + 错误详情
示例:
  🔧 tool:execute move_file → 📦 move_file 完成
  🔧 web_fetch ✓ → 200 | 5432 chars
  🔧 edit_file ✗ → 未找到要替换的文本
2026-04-16 10:09:09 +08:00
OpenClaw Agent 5085f59e17 fix: 全面检查修复
- 修复 init() catch 路径缺少组件初始化(memory-modal、tools-modal、help-modal、tool-confirm、workspace)
- logRAG 日志标签从 'RAG:' 更新为 '向量:'
- 确认所有 KB/RAG/episode 引用已清除
- 确认 20 个工具定义/IPC分发/处理函数完全匹配
- 确认记忆系统3类型(fact/preference/rule)全链路一致
- 确认快捷键无冲突
2026-04-16 10:02:39 +08:00
OpenClaw Agent 80158cb5bf feat: git 工具升级为全操作支持(16 个子操作)
git 工具支持的操作:
- status: 查看状态(分支/修改/暂存/未追踪/删除/重命名)
- log: 提交历史
- diff: 差异查看(支持 staged)
- add: 暂存文件
- commit: 提交
- push/pull: 推送/拉取
- branch: 列出/创建/删除分支
- checkout: 切换分支
- merge: 合并分支
- stash: 暂存更改
- remote: 查看/添加远程仓库
- clone: 克隆仓库
- init: 初始化仓库
- reset: 重置
- tag: 标签管理

全部自动执行,无需用户确认
2026-04-16 09:55:33 +08:00
OpenClaw Agent 396100335a feat: 工具扩展至 20 个,新增 8 个实用工具
新增工具:
- get_file_info: 获取文件详细元数据(自动)
- tree: 树形目录结构展示(自动)
- download_file: URL 下载文件到本地(需确认)
- diff_files: 两个文件对比差异(自动)
- replace_in_files: glob 批量查找替换(需确认)
- read_multiple_files: 批量读取多个文件(自动)
- git_status: Git 仓库状态查看(自动)
- compress: 创建/解压 zip/tar.gz(需确认)
2026-04-16 09:50:52 +08:00
OpenClaw Agent 8901f841da refactor: 设置面板移除工具相关,全部移入工具面板
- 设置面板不再包含 Tool Calling 和命令执行配置
- 工具面板新增 Tool Calling 主开关
- Tool Calling 和 run_command 状态完全由工具面板管理
- 清理 settings-modal.ts 中的工具相关代码
2026-04-16 09:46:18 +08:00
OpenClaw Agent 5a3b88f232 feat: 工具列表独立为工具面板模态框
- Header 新增 🔧 工具按钮,点击打开工具面板
- 新增 tools-modal.ts 组件
- 工具面板以卡片网格展示全部 12 个工具
- 每个工具显示名称、描述、自动/需确认标签
- run_command 开关内嵌在工具卡片中
- 设置面板简化为「查看全部工具」按钮
- 设置面板保留 run_command 开关同步
2026-04-16 09:42:26 +08:00
OpenClaw Agent 4099b5180f feat: 工具调用扩展,新增 5 个实用工具(共 12 个)
新增工具:
- move_file: 移动/重命名文件(需确认)
- copy_file: 复制文件/目录(需确认)
- web_fetch: 抓取网页内容,自动提取文本(自动)
- append_file: 追加内容到文件末尾(需确认)
- edit_file: 文件内查找替换,支持全部替换(需确认)

同步更新:
- 主进程 IPC 分发
- 工具安全检查(路径白名单)
- 设置面板工具列表 UI
- 帮助文档工具说明
2026-04-16 09:38:52 +08:00