紫影233
5f9acebad1
fix: 记忆去重时明确告知 AI「已存在,不要再重复添加」
...
之前 addEntry 检测到重复后静默返回已有条目(success),AI 误以为又成功保存了
新条目,于是继续循环调用。现在改为抛出 DuplicateEntryError,tool handler
捕获后返回 {success:true, duplicate:true, message:'已跳过...不要再重复添加'},
明确告诉 AI 任务已完成。
也处理了内存面板的手动添加场景,友好提示用户。
2026-06-24 15:31:58 +08:00
紫影233
e39820d19e
fix: memory add 不传 type 时默认 fact — 代码兜底替代 schema 约束
...
Gemma 4 等模型的 function calling 对复杂 schema 不稳定,即使 type 在 required
数组中也会偶发遗漏。改为代码层面兜底:type 缺失时默认 'fact',确保 add 操作
始终成功。同时将 type 从 required 中移除,减少 schema 复杂度。
2026-06-24 15:28:55 +08:00
紫影233
d3a28822b3
fix: memory 工具 required 数组添加 type — 解决模型持续不传 type 参数问题
...
Ollama function calling 依赖 JSON Schema 的 required 数组判断参数必要性,
type 不在 required 中导致模型认为它是可选的,即使 error 提示了也不传。
将其加入 required 数组后,模型将被强制要求每次调用都提供 type 参数。
2026-06-24 15:10:58 +08:00
紫影233
e119ffbcf6
fix: memory 工具 description 增强 — 每种 action 给出完整 JSON 示例 + 参数标注 REQUIRED
...
- description 中为 search/add/replace/remove/read_all 提供完整 JSON 格式示例
- 参数 description 加 [action REQUIRED] 前缀标注依赖性
- 错误提示改为含示例 JSON 的完整格式,帮助模型快速修正
2026-06-24 14:55:46 +08:00
紫影233
0903d740da
v0.13.0: 记忆系统重构 — MEMORY.md 文件化 + 路径保护 + 自动提取优化
...
核心变更:
- 删除 SQLite memories 表 + FTS5 + IVF 向量存储引擎 (~1300行)
- 4 个记忆工具合并为 1 个 memory 工具 (5 action)
- 记忆存储改为工作空间 MEMORY.md 单文件,严格格式校验
- 路径保护: checkPathAllowed 拦截所有工具,仅 memory 专用 IPC 通道可访问
- 应用启动/工作空间切换时自动校验并初始化 MEMORY.md(格式错误自动备份重建)
- 自动记忆提取重建: 对话结束时触发,多层质量过滤(内容/泛化/去重/安全/importance门槛)
- 工具总数: 42→40,UI 全面更新(帮助面板、工具面板、设置面板、README)
- 版本号更新: 0.12.11 → 0.13.0
2026-06-24 14:49:09 +08:00
紫影233
dcaf5982fc
fix: Plan Mode确认弹窗按钮左偏,补回flex占位符
2026-06-24 12:29:14 +08:00
紫影233
c7aa5df81c
v0.12.11: Plan Mode 格式标准化 + 图片附件感知 + 弹窗UI优化
...
feat: Plan Mode 强制输出格式模板(任务分析/执行计划/预期结果)
feat: 支持无需工具步骤,纯分析推理任务不再强制工具调用
feat: 反幻觉铁律新增3条(已上传附件不查找、read_file不能看图、Plan不规划查找步骤)
fix: 上传图片后消息文本明确提示AI图片已随消息提供
fix: Plan Mode确认弹窗UI优化(步骤卡片样式/宽度/滚动)
style: extractPlanSteps 双策略解析,兼容多种模型输出格式
2026-06-24 11:40:18 +08:00
紫影233
d7275b08e8
v0.12.10: 修复工作空间目录设置不生效 + 版本号更新
...
fix: 工作空间目录设置三处断链修复
- ipc.ts: setDir 时持久化到 SQLite,启动时自动恢复
- settings-modal.ts: 设置成功后通知 workspace-panel 刷新
- workspace-panel.ts: 监听目录变更事件,立即重载文件列表
chore: 版本号 0.12.9 → 0.12.10
2026-06-24 10:58:49 +08:00
紫影233
042e00e4a6
v0.12.3: 全面审计修复 + 稳定性加固 + 文档更新
...
P0 安全/稳定性修复 (6项):
- sqlite persist 改用临时文件+rename,I/O错误日志
- IPC fs 处理器加入 checkPathAllowed 路径验证
- handleCompress 命令注入修复 + 跨平台 (powershell/tar/zip/unzip)
- browser 全页截图简化,使用 capturePage full rect
- workspace 竞态条件修复
- editFile 5MB 大小限制
P1 安全/稳定性修复 (7项):
- 大小写不敏感搜索: query 同步转换小写
- web_fetch 无 content-length 时流式读取+10MB限制防OOM
- Windows SIGTERM 改用 taskkill /PID /T /F 强制终止
- startsWith 路径检查 Windows 大小写不敏感
- 安全黑名单扩展: 33个目录路径 + 30条危险命令 (Linux+Windows)
- plan_track stepIndex 改用 typeof === 'number' 精确检查
- MCP 前缀改用双下划线分隔 mcp_{server}__{tool} 防歧义
P2 代码质量修复 (8项):
- 修复 EXECUTING→THINKING 死循环Bug (转换表缺失)
- COMPRESSING 硬上限绕过时同步 _loopState 全局状态
- Abort 路径补齐 onDone 回调, 防止UI状态残留
- 幻觉检测从4条扩展到16条规则, 覆盖全部工具类别
- 移除 getTokenEfficiency 死代码
- 跨平台路径清理 (replace(/[\/]+$/, ''))
- 动态 import 加 try/catch, 失败自动批准不阻断
- #modelSelect 加 null 守卫, 防止运行时崩溃
文档 & UI 更新:
- README.md: 版本号/特性表/架构图/安全机制/工具清单全面刷新
- 帮助面板: 新增 Plan Mode、抗幻觉&稳定性章节, Agent Loop补8状态机
- 工具面板: plan_track卡片 + plan-mode徽章样式, 标题更新为42+1
- 工作空间面板宽度: 480px → 400px
- 源码注释移除所有版本标签, 仅保留4处必要位置
- 版本号 0.12.2 → 0.12.3
2026-06-23 17:06:43 +08:00
thzxx
b12837433b
fix: 版本号改为合法 semver 1.0.0,修复 electron-builder 校验
2026-04-28 15:02:34 +08:00
thzxx
4a7b84c9a2
fix: 调整搜索结果来源引导,优先官方文档而非知乎
2026-04-28 14:46:43 +08:00
thzxx
a742d3a5a5
docs: rewrite README with bilingual CN/EN, icons, and verified features
2026-04-25 09:23:33 +08:00
thzxx
200fc51e01
docs: remove references to deleted analysis docs
2026-04-25 08:47:37 +08:00
thzxx
14ba190864
docs: remove OpenClaw/Hermes analysis docs
2026-04-25 08:47:27 +08:00
thzxx
75549ebfa7
docs: 添加推荐规则记忆(面向用户使用)
2026-04-25 08:44:30 +08:00
thzxx
f3f81b135d
Reapply "docs: 添加推荐记忆规则到 README"
...
This reverts commit 5e5145cb17 .
2026-04-24 15:42:05 +08:00
thzxx
5e5145cb17
Revert "docs: 添加推荐记忆规则到 README"
...
This reverts commit cf40b8674d .
2026-04-24 15:41:03 +08:00
thzxx
cf40b8674d
docs: 添加推荐记忆规则到 README
2026-04-24 15:39:25 +08:00
thzxx
2118ad727f
refactor: use typed window.metonaDesktop in chat-db.ts
...
Replaced remaining '(window as any).metonaDesktop' with properly typed
'window.metonaDesktop' in chat-db.ts for consistency with the rest of
the codebase.
2026-04-24 14:04:31 +08:00
thzxx
9cb6c243a7
refactor: use typed window.metonaDesktop instead of (window as any)
...
Replaced all '(window as any).metonaDesktop' with the properly typed
'window.metonaDesktop' across mcp-client.ts, skill-manager.ts,
agent-engine.ts, and log-service.ts. The MetonaDesktopAPI type is
already declared in types.d.ts, so the 'as any' cast was unnecessary
and bypassed type checking.
2026-04-24 14:03:34 +08:00
thzxx
0065ded925
fix: replace 'any' type with ChatDB for state.get(KEYS.DB)
...
The DB state variable in agent-engine.ts was typed as 'any', bypassing
type checking for getSetting() calls. Replaced with proper ChatDB type
import and null-safe typing.
2026-04-24 14:02:56 +08:00
thzxx
dbeba20286
fix(security): add path validation to git tool handler
...
handleGit was missing checkPathAllowed validation on the working
directory (cwd), allowing git operations to execute in any directory
bypassing the security policy. Added validation for:
- The cwd used by all git operations
- The clone destination directory (write permission check)
2026-04-24 13:58:19 +08:00
thzxx
15b4895351
fix: replace 'as any' with proper type assertion for git tool args
...
The git tool handler in ipc.ts was using 'args as any' to bypass type
checking. Replaced with the explicit typed params interface matching
handleGit's signature to maintain type safety.
2026-04-24 13:56:30 +08:00
thzxx
e4dc7f945f
fix: correct search_files result field name in formatToolResultForModel
...
The search_files tool handler returns results in a 'results' field
(containing per-file match arrays), but formatToolResultForModel was
referencing 'result.matches' which is undefined. This caused the model
to never see actual search file results, breaking the search → read
tool chain workflow.
2026-04-24 13:55:53 +08:00
thzxx
74f5e384b5
fix: import missing logSuccess in agent-engine.ts
...
logSuccess was used on line 509 for auto-compress completion logging
but was never imported from log-service.ts, causing a runtime
ReferenceError when context auto-compression triggers.
2026-04-24 13:55:33 +08:00
thzxx
fdbdc4007c
fix: 修复 Token 仪表盘 — 添加缺失的 renderGlobalChart + 修复概览卡片布局
...
- 添加 renderGlobalChart 函数(按会话渲染全局柱状图)
- 移除 td-stat-row 嵌套 div,卡片直接放入 tdOverview grid
- 修复全局统计持续报错 renderGlobalChart is not defined
- 修复 5 个统计卡片挤在 1/4 宽度的布局问题
2026-04-24 13:50:02 +08:00
thzxx
5cbb71cf50
fix: Token趋势图2秒刷新丢失滚动位置
2026-04-23 17:23:56 +08:00
thzxx
118af9dd9a
fix: Token趋势图柱子不显示 — 柱子容器高度塌缩修复
2026-04-23 17:22:41 +08:00
thzxx
aa9bfa01f7
fix: Token趋势图数值区分输入/输出颜色
2026-04-23 17:19:53 +08:00
thzxx
4070f85214
fix: 普通聊天流式模式未捕获 prompt_eval_count 导致趋势图无法区分输入/输出 token
2026-04-23 17:04:20 +08:00
thzxx
d3c38977bc
fix: AI消息时间戳显示、工具调用卡片恢复
...
1. 修复AI回复消息不显示时间戳的问题:updateLastAssistantMessage 新增 timestamp 参数
2. 恢复工具调用卡片显示(工具名称+参数,不显示执行结果):updateLastAssistantMessage 新增 toolCalls 参数
3. 根因:流式消息通过 updateLastAssistantMessage 更新 DOM,但该函数未渲染时间戳和工具卡片,
而 renderMessages 因 placeholder 已被计数而跳过 appendMessageDOM
2026-04-23 16:50:06 +08:00
thzxx
bbd408f326
fix: 工具卡片错误信息显示、清理死代码
...
1. 工具调用失败时显示错误原因(之前只有状态标签没有具体错误)
2. 删除 formatFileSize 死代码(仅在已移除的结果渲染中使用)
3. 清理 updateLastAssistantMessage 未使用的 stats 参数
2026-04-23 16:19:53 +08:00
thzxx
21b9a14824
fix: Token统计准确性修复 + 仪表盘增强
...
1. 修复eval_count只记最后一轮的bug:改为每轮累加
2. 新增prompt_eval_count(输入token)统计
3. 修复total_duration使用Ollama实际推理时间而非墙钟时间
4. 数据库messages表新增prompt_eval_count列(含兼容迁移)
5. 仪表盘显示输入/输出token分项统计
6. 柱状图堆叠显示输入(紫色)+输出(橙色)比例
7. 明细表格新增输入/输出/合计三列
2026-04-23 16:11:17 +08:00
thzxx
e96b2a840e
feat: 新增Token实时监控仪表盘
2026-04-23 16:00:13 +08:00
thzxx
684b2f773b
feat: 工具卡片精简、移除token统计、消息时间显示
...
1. 聊天消息工具卡片只显示工具名+调用内容,不显示执行结果(工作空间工具页签已有完整结果)
2. 移除所有token统计相关代码:顶栏统计、消息内token/耗时显示、历史记录中的token显示
3. 每条消息显示具体时间(年月日 时分秒),formatTime 已含秒数
2026-04-23 15:42:15 +08:00
thzxx
7ed75415a3
fix: 工具卡片状态更新后即时刷新消息渲染
...
updateMessageToolRecord 更新 state 后缺少 renderMessages() 调用,
导致消息中的工具卡片状态不会实时更新(始终显示 running)。
添加 renderMessages() 调用,确保工具执行完成后消息中的卡片
立即显示正确状态(✅ /❌ )。
2026-04-23 12:36:32 +08:00
thzxx
4d03c35ea9
fix: 工作空间面板底栏与消息输入区底栏对齐
...
.workspace-panel 显式设置 height:100vh,与 .main-wrap 一致,
确保两者 flex 子元素等高,底栏(ws-term-toolbar 与 input-area)
自然对齐。
2026-04-23 11:55:21 +08:00
thzxx
4caa230c47
fix: 会话消息中工具卡片始终显示 ✅ 0 ❌ 0且永远转圈执行中
...
根因:onNewIteration 保存工具记录时 status='running'、result=null,
工具执行完成后只更新了工作空间面板,未更新消息中的记录。
修复:
1. 新增 updateMessageToolRecord() 函数,从后往前查找消息中
running 状态的同名工具记录并更新为最终状态
2. onToolCallResult/onToolCallError 回调中同步更新消息记录
3. onDone 多迭代模式下,最终消息也包含 toolRecords
2026-04-23 11:52:53 +08:00
thzxx
f46edc308a
fix: 工具页签底栏统计文字颜色不可见(白底白字)
...
.ws-tools-hint 从 rgba(245,240,232,0.4) 改为 var(--text-tertiary),
与终端页签底栏 .ws-term-hint 保持一致。
2026-04-23 11:51:03 +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
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
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
thzxx
db16640385
docs: 重构 README.md + 更新 CHANGELOG.md v5.0.0
...
README.md 重构:
- 工具数量 25 → 34 + MCP 动态工具,完整列出所有工具
- 新增 MCP 章节(协议说明、功能特性、使用方式)
- 新增技能自动生成、用户画像、人格模式章节
- 架构图更新 v4.0 → v5.0(五大子系统)
- 项目结构更新(新增 browser.ts/mcp-manager.ts/cron-manager.ts/skill-manager.ts/sub-agent.ts/mcp-client.ts,删除已移除的 document-processor.ts)
- 精简安全/构建/下载章节
CHANGELOG.md v5.0.0 完善:
- 新增 MCP 完整实现条目(主进程/IPC/渲染端/工具路由/UI/启动集成/清理)
- 新增上下文管理接入条目
- 新增编译修复条目(useTools TDZ / loadURL timeout / browserScroll 类型)
- 新增 CSS 变量补全条目
- 新增全面代码清理条目(400+ 行 / 12 类死代码)
- 新增全链路执行日志条目
2026-04-18 10:30:08 +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
b2951d8cd0
docs: 添加 OpenClaw & Hermes Agent 对比分析及 Metona 改进路线图
2026-04-18 09:10:06 +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
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
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
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
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
thzxx
a67995166c
merge: develop into master
2026-04-08 13:34:20 +08:00
thzxx
03a396c730
fix: handleRunCommand 补全执行日志(安全检查、执行开始、完成、异常、终止)
2026-04-08 13:33:50 +08:00
thzxx
b087761d65
docs: 更新 DEVELOPMENT.md 5.3 工作空间与 AI 集成流程
2026-04-08 13:32:03 +08:00
thzxx
4c0f91dd41
docs: 开发规范合并到 DEVELOPMENT.md,删除多余的 CONVENTIONS.md
...
- DEVELOPMENT.md 新增版本号更新文件清单
- DEVELOPMENT.md 新增更新日志规范(只写 CHANGELOG.md)
- DEVELOPMENT.md 新增分支提交规则(不多分支推送)
- 删除重复的 docs/CONVENTIONS.md
2026-04-08 13:30:43 +08:00
thzxx
c8e14b8478
docs: 新增 docs/CONVENTIONS.md 开发规范
2026-04-08 13:27:51 +08:00
thzxx
060a5cc8d4
docs: README.md 移除历史版本记录,更新日志统一到 docs/CHANGELOG.md
2026-04-08 13:27:11 +08:00
thzxx
f0bad05494
chore: 版本号更新至 3.2.4
...
- package.json version 3.2.4
- README.md 版本徽章、下载说明、构建分支
- docs/CHANGELOG.md 新增 v3.2.4 版本说明,版本链补全 v3.2.3
- docs/BUILD.md 新增 v3.2.4 构建日志,构建分支引用
- src/renderer/index.html 应用标题版本号
2026-04-08 13:26:14 +08:00
thzxx
01b1b0e9c5
fix: 设置面板修改地址后同步更新顶部导航连接状态
2026-04-08 13:22:39 +08:00
thzxx
83fe7ba4ce
fix: 清理 TOOL_USAGE_GUIDE 中引用已删除字段的规则
2026-04-08 13:16:34 +08:00
thzxx
0431ed56c0
refactor: 命令执行走工作空间终端,AI 不再直接执行
...
流程改为:AI 提出命令 → 用户确认 → 工作空间终端执行(实时显示)→ 结果反馈 AI → AI 回复
- handleRunCommand 直接 spawn 子进程,stdout/stderr 实时通过 cmd:output 推送
- 进程结束后通过 cmd:done 通知渲染进程
- 停止按钮通过 cmd:kill 终止进程
- 清理 workspace.ts 中不再需要的 execWorkspaceCommand 工具集成代码
- 去掉 workspace:execTool/killTool,改为 cmd:output/cmd:done/cmd:kill
2026-04-08 13:12:18 +08:00
thzxx
d5e5f5f58a
feat: AI 命令执行实时流式推送到工作空间终端
...
- execWorkspaceCommand 新增 onOutput 回调,stdout/stderr 实时推送
- ipc.ts workspace:execTool 实时转发输出 + 发送 toolDone 完成通知
- 渲染进程 appendToolStreamOutput 流式显示,handleToolDone 显示退出状态
- 去掉 tool-handlers.ts 中的一次性完整输出推送
- 完整流程:用户确认 → 实时输出 → 完成通知 → AI 回复结果
2026-04-08 13:06:57 +08:00
thzxx
d150b53116
refactor: 工作空间去掉手动命令输入,终止时自动反馈 AI
...
- 移除工作空间终端的命令输入框和执行按钮
- 用户只能通过终止按钮中断卡住的 AI 命令
- 终止后自动通过 killTool IPC 终止进程,结果自动回传 AI
- 新增 workspace:killTool IPC 和 terminateCurrentToolCommand
- 新增终端底部状态提示(等待/执行中)
- 修复工作空间面板顶部对齐(90px → 92px)
2026-04-08 12:57:48 +08:00
thzxx
f9ad682f01
fix: AI Tool Calling run_command 输出同步到工作空间终端面板
...
- handleRunCommand 改用 execWorkspaceCommand 替代 Node exec()
- 执行完成后通过 workspace:toolOutput IPC 事件推送命令和输出
- 渲染进程监听 onToolOutput,在活跃终端显示 AI 命令及结果
- 清理 tool-handlers.ts 中不再需要的 child_process 导入
2026-04-08 12:47:36 +08:00
thzxx
d5f4112d97
fix: AI Tool Calling run_command 输出同步到工作空间终端面板
...
- handleRunCommand 改用 execWorkspaceCommand 替代 Node exec()
- 执行完成后通过 workspace:toolOutput IPC 事件推送命令和输出
- 渲染进程监听 onToolOutput,在活跃终端显示 AI 命令及结果
- 清理 tool-handlers.ts 中不再需要的 child_process 导入
2026-04-08 12:47:28 +08:00
thzxx
5800aaedd2
docs: 更新 BUILD.md,修正仓库地址并添加 v3.2.3 构建日志
2026-04-08 12:40:43 +08:00
thzxx
75a45de5f2
docs: 更新 BUILD.md,修正仓库地址并添加 v3.2.3 构建日志
2026-04-08 12:40:35 +08:00
thzxx
b9710b71e1
docs: 更新 README 和 CHANGELOG,添加 v3.2.3 版本说明
2026-04-08 12:33:22 +08:00
thzxx
e663878da0
fix: 修复 tool-registry.ts 缺少 logInfo 导入导致 run_command 工具调用异常
2026-04-08 12:26:43 +08:00
thzxx
f9eca2e524
v3.2.3: 工作空间面板改为常驻显示,固定宽度480px,不可关闭不可拖拽
2026-04-08 12:22:37 +08:00
thzxx
6a74b8b0d2
docs: 更新 README 和 CHANGELOG,添加 v3.2.2 版本说明
2026-04-08 12:14:50 +08:00
thzxx
38f12ab1d8
docs: 更新构建指南,补充 v3.2.2 构建问题排查与手动缓存方案
2026-04-08 12:11:50 +08:00
thzxx
d9e9416d35
feat: 工作空间与 AI Tool Calling 深度集成
...
核心变更:
- 新增 execWorkspaceCommand() 无超时进程执行(workspace.ts)
- 新增 workspace:execTool IPC 通道(无超时,5MB 输出上限)
- run_command 工具改用 workspace IPC,移除 30s 超时限制
- run_command 默认启用(需用户确认),AI 上下文注入工作空间目录
- Agent Loop 工具执行:run_command 无超时,其他工具保持 30s
- Agent 系统提示词新增工作空间规则(userTerminated/truncated 反馈)
UI 修复:
- Header z-index 提升至 50,Model Bar 提升至 40,Input Area 提升至 30
- 工作空间面板 top 调整为 90px(header + model-bar),不再遮挡菜单
- Input Area 增加 position: relative 确保 z-index 生效
其他:
- 新增 docs/DEVELOPMENT.md 开发规范文档
- 设置面板 run_command 开关文案优化,默认值改为 true
2026-04-07 22:24:58 +08:00