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 改进清单标记实施状态
This commit is contained in:
+2
-2
@@ -14,7 +14,7 @@
|
||||
# 1. 克隆并安装依赖
|
||||
git clone https://gitee.com/thzxx/metona-ollama-desktop.git
|
||||
cd metona-ollama-desktop
|
||||
git checkout metona-ollama-desktop-v5.1.1
|
||||
git checkout metona-ollama-desktop-v5.1.3
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
npm install
|
||||
|
||||
@@ -178,7 +178,7 @@ electron-builder 会自动处理所有依赖下载(Electron、NSIS、winCodeSi
|
||||
|
||||
### v5.1.3(2026-04-19) — metona-ollama-desktop 仓库
|
||||
|
||||
- 🔧 修复 any 滥用:78 处 → 约 15 处,类型安全提升
|
||||
- 🔧 修复 any 滥用:78 处 → 38 处(减少 51%),保留 API 参数构造等合理场景
|
||||
- ♻️ 拆分 tool-handlers.ts:1308 行 → 4 个模块(fs/system/git/shared)
|
||||
- ✨ 记忆数据治理:过期衰减、向量错误日志增强、去重增强(前缀匹配)
|
||||
- 📝 版本号更新至 5.1.3
|
||||
|
||||
+22
-8
@@ -31,27 +31,37 @@ src/
|
||||
│ ├── preload.ts # contextBridge API 暴露
|
||||
│ ├── ipc.ts # IPC 处理器(invoke/handle + on/send)
|
||||
│ ├── workspace.ts # 子进程管理、流式输出
|
||||
│ ├── tool-handlers.ts # Tool Calling 25 个工具实现
|
||||
│ ├── tool-handlers.ts # Tool Calling re-export(4 个子模块)
|
||||
│ ├── tool-handlers-fs.ts # 15 个文件系统工具
|
||||
│ ├── tool-handlers-system.ts # 6 个系统网络工具
|
||||
│ ├── tool-handlers-git.ts # 1 个 Git 工具
|
||||
│ ├── tool-handlers-shared.ts # 共享工具函数和类型
|
||||
│ ├── tool-security.ts # 路径/命令安全检查
|
||||
│ ├── browser.ts # 浏览器控制(8 个工具)
|
||||
│ ├── mcp-manager.ts # MCP 协议通信管理
|
||||
│ ├── menu.ts # 原生菜单
|
||||
│ ├── tray.ts # 系统托盘
|
||||
│ ├── utils.ts # 工具函数
|
||||
│ └── db/
|
||||
│ └── sqlite.ts # SQLite 数据库层(6 张表 + FTS5)
|
||||
│ └── sqlite.ts # SQLite 数据库层(7 张表 + FTS5)
|
||||
├── renderer/ # 渲染进程
|
||||
│ ├── main.ts # 入口、全局初始化
|
||||
│ ├── types.d.ts # 完整类型定义
|
||||
│ ├── index.html # 入口 HTML
|
||||
│ ├── api/
|
||||
│ │ └── ollama.ts # Ollama REST API 客户端
|
||||
│ ├── components/ # 13 个 UI 组件
|
||||
│ ├── components/ # 14 个 UI 组件
|
||||
│ ├── services/
|
||||
│ │ ├── agent-engine.ts # ReAct Agent Loop 引擎
|
||||
│ │ ├── tool-registry.ts # 工具注册与调度(25 个工具定义)
|
||||
│ │ ├── tool-registry.ts # 工具注册与调度(38 个内置工具 + MCP 动态)
|
||||
│ │ ├── memory-manager.ts # 记忆管理核心
|
||||
│ │ ├── vector-memory.ts # 记忆向量索引(IVF)
|
||||
│ │ ├── vector-store.ts # 向量存储 + IVF 索引
|
||||
│ │ ├── context-manager.ts # 上下文窗口管理
|
||||
│ │ ├── skill-manager.ts # 技能自动生成(Level 0)
|
||||
│ │ ├── sub-agent.ts # 子代理委派
|
||||
│ │ ├── cron-manager.ts # 定时任务
|
||||
│ │ ├── mcp-client.ts # MCP 渲染端客户端
|
||||
│ │ ├── document-processor.ts # 文档分块
|
||||
│ │ ├── log-service.ts # 结构化日志
|
||||
│ │ └── crypto.ts # AES-256-GCM 加密
|
||||
@@ -61,6 +71,8 @@ src/
|
||||
│ │ └── marked-config.ts # Markdown 渲染
|
||||
│ ├── state/
|
||||
│ │ └── state.ts # 响应式状态管理
|
||||
│ └── db/
|
||||
│ └── chat-db.ts # SQLite 渲染端数据库接口
|
||||
│ └── styles/
|
||||
│ └── style.css # 暖色调亮色主题
|
||||
└── ...
|
||||
@@ -142,11 +154,11 @@ import {
|
||||
### 5.1 四大子系统
|
||||
|
||||
```
|
||||
① Agent 系统 → agent-engine.ts + tool-registry.ts(25 工具)
|
||||
① Agent 系统 → agent-engine.ts + tool-registry.ts(38 工具 + MCP 动态)
|
||||
② 记忆系统 → memory-manager.ts + vector-memory.ts
|
||||
③ 向量存储 → vector-store.ts(IVF 索引)
|
||||
④ 工作空间 → workspace.ts (主进程) + workspace-panel.ts (渲染进程)
|
||||
⑤ 数据层 → db/sqlite.ts(SQLite, 6 张表, FTS5)
|
||||
⑤ 数据层 → db/sqlite.ts(SQLite, 7 张表, FTS5)
|
||||
```
|
||||
|
||||
### 5.2 ReAct Agent Loop
|
||||
@@ -164,16 +176,17 @@ import {
|
||||
|
||||
### 5.3 SQLite 数据库
|
||||
|
||||
6 张表,WAL 模式 + NORMAL 同步:
|
||||
7 张表,WAL 模式 + NORMAL 同步:
|
||||
|
||||
| 表 | 用途 | 关键特性 |
|
||||
|---|---|---|
|
||||
| `sessions` | 会话 | parent_id 父子关系 |
|
||||
| `messages` | 消息 | 外键级联删除,thinking/tool_calls |
|
||||
| `tool_calls` | 工具调用记录 | 按会话+工具名索引 |
|
||||
| `memories` | Agent 记忆 | FTS5 全文搜索,向量嵌入 |
|
||||
| `memories` | Agent 记忆 | FTS5 全文搜索,向量嵌入,容量 500 上限 |
|
||||
| `settings` | 设置 | JSON 序列化 |
|
||||
| `traces` | ReAct 执行轨迹 | Agent 可观测性 |
|
||||
| `skills` | 自动生成的可复用技能 | 成功/失败次数、平均时长 |
|
||||
|
||||
### 5.4 联网搜索联动
|
||||
|
||||
@@ -186,6 +199,7 @@ import {
|
||||
- AI 通过 `run_command` 工具执行命令,命令在工作空间终端实时显示
|
||||
- 执行路径:tool-registry.ts → bridge.workspace.execTool() → IPC → handleRunCommand() → spawn
|
||||
- stdout/stderr 通过 `cmd:output` 实时推送到渲染进程终端面板
|
||||
- 执行路径(浏览器工具):tool-registry.ts → bridge.callTool('browser_xxx') → IPC → browser.ts → 执行
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
| API 模式 | 3 种(chat_completions / codex_responses / anthropic_messages) | 1 种(Ollama chat) |
|
||||
| 工具执行 | 单工具主线程,多工具 ThreadPoolExecutor 并行 | 同一批次 Promise.all 并行 |
|
||||
| 中断机制 | 后景线程 + interrupt event | AbortController |
|
||||
| 迭代预算 | 90 轮(可配置) | 15 轮(硬编码) |
|
||||
| 迭代预算 | 90 轮(可配置) | ✅ 默认 85 轮,设置面板可配(v5.1.1) |
|
||||
| 上下文压缩 | context_compressor.py 摘要中间轮次 | context-manager.ts 滑动窗口 |
|
||||
| Prompt 缓存 | Anthropic prompt caching 支持 | 无 |
|
||||
| 消息交替 | 严格 user→assistant 交替 | Ollama 自动处理 |
|
||||
@@ -83,18 +83,18 @@ class ToolRegistry:
|
||||
| 维度 | Hermes | Metona |
|
||||
|------|--------|------|
|
||||
| 注册方式 | 每个文件 import 时自动 register() | 集中式 getToolDefinitions() |
|
||||
| 工具数量 | 47 个 + 19 个 toolset | 34 个内置 |
|
||||
| 工具数量 | 47 个 + 19 个 toolset | 38 个内置 + MCP 动态注册 |
|
||||
| Toolset | 工具分组,可按组启用/禁用 | 无分组,全部启用 |
|
||||
| Shadowing 防护 | MCP 不能覆盖内置工具 | 无此机制 |
|
||||
| Shadowing 防护 | MCP 不能覆盖内置工具 | ✅ 已实现(v5.1.2) |
|
||||
| 工具发现 | AST 扫描自动发现 | 手动导入 |
|
||||
| 结果截断 | max_result_size_chars 每工具可配 | web_fetch 统一 15000 字符 |
|
||||
| 结果截断 | max_result_size_chars 每工具可配 | ✅ 按工具独立配置(v5.1.0) |
|
||||
| 安全审批 | tools/approval.py 危险命令检测 + 用户确认 | tool-security.ts 路径/命令检查 |
|
||||
|
||||
### Metona 可借鉴
|
||||
|
||||
1. **Toolset 分组**:将 34 个工具分为文件系统/系统网络/记忆会话/浏览器/MCP 等组,用户可按组启用/禁用
|
||||
2. **结果截断按工具配置**:不同工具设置不同的 max_result_size_chars
|
||||
3. **Shadowing 防护**:MCP 工具注册时检查是否与内置工具重名
|
||||
1. ✅ **结果截断按工具配置**:不同工具设置不同的 max_result_size_chars(v5.1.0 已实现)
|
||||
2. ✅ **Shadowing 防护**:MCP 工具注册时检查是否与内置工具重名(v5.1.2 已实现)
|
||||
3. ❌ **Toolset 分组**:将 38 个工具分为文件系统/系统网络/记忆会话/浏览器/MCP 等组,用户可按组启用/禁用
|
||||
|
||||
---
|
||||
|
||||
@@ -105,21 +105,21 @@ class ToolRegistry:
|
||||
| 维度 | Hermes | Metona |
|
||||
|------|--------|--------|
|
||||
| 存储方式 | 2 个 Markdown 文件(MEMORY.md + USER.md) | SQLite(memories 表 + FTS5) |
|
||||
| 容量限制 | MEMORY.md 2200 字符,USER.md 1375 字符 | 无限制 |
|
||||
| 容量限制 | MEMORY.md 2200 字符,USER.md 1375 字符 | ✅ 上限 500 条,超限自动清理(v5.1.2) |
|
||||
| 注入方式 | 会话开始时冻结快照注入 system prompt | 每次用户消息时检索注入 |
|
||||
| 管理方式 | Agent 通过 memory tool 自主管理 | Agent 通过 memory_search/memory_add 工具 |
|
||||
| 操作 | add / replace / remove(子串匹配) | search / add |
|
||||
| 操作 | add / replace / remove(子串匹配) | ✅ search / add / replace / remove(v5.1.0) |
|
||||
| 会话搜索 | session_search(FTS5 + Gemini 摘要) | session_read(原始内容) |
|
||||
| 外部提供者 | 8 个插件(Honcho / Mem0 / OpenViking 等) | 无 |
|
||||
| 安全扫描 | 注入检测 + 凭证外泄检测 | 无 |
|
||||
| 安全扫描 | 注入检测 + 凭证外泄检测 | ✅ prompt injection / 敏感信息 / 不可见字符检测(v5.1.0) |
|
||||
|
||||
### Metona 可借鉴
|
||||
|
||||
1. **记忆容量限制**:给 memories 表加容量限制(如 2200 字符),超限时 Agent 自动合并旧条目
|
||||
2. **冻结快照模式**:会话开始时一次性注入记忆,不随对话变化(保护 LLM cache)
|
||||
3. **replace/remove 操作**:记忆工具支持修改和删除,不只能添加
|
||||
4. **安全扫描**:记忆条目写入前检查 prompt injection / 凭证外泄模式
|
||||
5. **记忆区分层**:MEMORY.md(环境/工作流)vs USER.md(用户画像)清晰分离
|
||||
1. ✅ **记忆容量限制**:上限 500 条,超限自动清理低价值条目(v5.1.2 已实现)
|
||||
2. ✅ **replace/remove 操作**:记忆工具支持修改和删除(v5.1.0 已实现)
|
||||
3. ✅ **安全扫描**:记忆条目写入前检查 prompt injection / 凭证外泄模式(v5.1.0 已实现)
|
||||
4. ❌ **冻结快照模式**:会话开始时一次性注入记忆,不随对话变化(保护 LLM cache)
|
||||
5. ❌ **记忆区分层**:MEMORY.md(环境/工作流)vs USER.md(用户画像)清晰分离
|
||||
|
||||
---
|
||||
|
||||
@@ -210,32 +210,32 @@ prompt_builder.py 组装顺序:
|
||||
|
||||
按优先级排序,基于 Metona 现状和投入产出比:
|
||||
|
||||
### P0 — 立即实施
|
||||
### P0 — 已实施
|
||||
|
||||
| 改进 | 来源 | 复杂度 | 改动文件 |
|
||||
|------|------|--------|----------|
|
||||
| 迭代预算可配置 | Hermes Agent Loop | 低 | agent-engine.ts |
|
||||
| 记忆 replace/remove 操作 | Hermes Memory | 中 | memory-manager.ts + tool-registry.ts |
|
||||
| 记忆安全扫描 | Hermes Memory | 低 | memory-manager.ts |
|
||||
| 工具结果截断按工具配置 | Hermes Tool Registry | 低 | tool-registry.ts |
|
||||
| 改进 | 来源 | 复杂度 | 改动文件 | 状态 |
|
||||
|------|------|--------|----------|------|
|
||||
| 迭代预算可配置 | Hermes Agent Loop | 低 | agent-engine.ts | ✅ v5.1.1(默认 85 轮,设置面板可配) |
|
||||
| 记忆 replace/remove 操作 | Hermes Memory | 中 | memory-manager.ts + tool-registry.ts | ✅ v5.1.0 |
|
||||
| 记忆安全扫描 | Hermes Memory | 低 | memory-manager.ts | ✅ v5.1.0 |
|
||||
| 工具结果截断按工具配置 | Hermes Tool Registry | 低 | tool-registry.ts | ✅ v5.1.0 |
|
||||
|
||||
### P1 — 近期实施
|
||||
|
||||
| 改进 | 来源 | 复杂度 | 改动文件 |
|
||||
|------|------|--------|----------|
|
||||
| Skill 渐进式加载 | Hermes Skills | 中 | skill-manager.ts + agent-engine.ts |
|
||||
| Skill patch 更新 | Hermes Skills | 中 | skill-manager.ts + tool-registry.ts |
|
||||
| Toolset 分组管理 | Hermes Toolset | 中 | tool-registry.ts + settings-modal.ts |
|
||||
| LLM 摘要压缩 | Hermes Context | 高 | context-manager.ts + agent-engine.ts |
|
||||
| 改进 | 来源 | 复杂度 | 改动文件 | 状态 |
|
||||
|------|------|--------|----------|------|
|
||||
| Skill 渐进式加载 | Hermes Skills | 中 | skill-manager.ts + agent-engine.ts | ❌ 当前 Level 0,全文注入 |
|
||||
| Skill patch 更新 | Hermes Skills | 中 | skill-manager.ts + tool-registry.ts | ❌ 仅 create |
|
||||
| Toolset 分组管理 | Hermes Toolset | 中 | tool-registry.ts + settings-modal.ts | ❌ 未实现 |
|
||||
| LLM 摘要压缩 | Hermes Context | 高 | context-manager.ts + agent-engine.ts | ❌ 未实现(仍用滑动窗口) |
|
||||
|
||||
### P2 — 中期规划
|
||||
|
||||
| 改进 | 来源 | 复杂度 |
|
||||
|------|------|--------|
|
||||
| Skill 条件激活 | Hermes Skills | 中 |
|
||||
| Session 谱系跟踪 | Hermes Session | 中 |
|
||||
| 预算警告临时层 | Hermes Prompt | 低 |
|
||||
| Shadowing 防护 | Hermes Registry | 低 |
|
||||
| 改进 | 来源 | 复杂度 | 状态 |
|
||||
|------|------|--------|------|
|
||||
| Skill 条件激活 | Hermes Skills | 中 | ❌ 未实现 |
|
||||
| Session 谱系跟踪 | Hermes Session | 中 | ❌ 未实现 |
|
||||
| 预算警告临时层 | Hermes Prompt | 低 | ✅ v5.1.2(≤5 轮 warning,≤2 轮 critical) |
|
||||
| Shadowing 防护 | Hermes Registry | 低 | ✅ v5.1.2(MCP 工具注册时自动检测重名) |
|
||||
|
||||
---
|
||||
|
||||
@@ -254,9 +254,11 @@ Metona = 本地 Electron 桌面 Agent
|
||||
✅ 系统托盘 + 原生文件对话框
|
||||
✅ 工作空间面板(终端 + 文件浏览器)
|
||||
✅ 暖色调 UI
|
||||
❌ 技能系统较原始
|
||||
❌ 记忆无容量管理
|
||||
❌ 上下文管理粗糙
|
||||
✅ MCP 协议支持(v5.0.0)
|
||||
✅ 技能自动生成(v5.1.0)
|
||||
✅ 记忆容量管理 + 安全扫描(v5.1.0 / v5.1.2)
|
||||
❌ 技能渐进式加载(Level 0,全文注入)
|
||||
❌ 上下文管理粗糙(滑动窗口,无 LLM 压缩)
|
||||
|
||||
互补方向:
|
||||
Metona 吸收 Hermes 的学习进化能力
|
||||
@@ -265,4 +267,4 @@ Metona = 本地 Electron 桌面 Agent
|
||||
|
||||
---
|
||||
|
||||
*最后更新:2026-04-18*
|
||||
*最后更新:2026-04-19(根据 v5.1.3 实际代码更新实施状态)*
|
||||
|
||||
@@ -43,7 +43,7 @@ Metona 进化方向:
|
||||
|
||||
## 二、从 Hermes Agent 吸收
|
||||
|
||||
### 1. 技能自动生成(Skill Learning Loop)🔴 P0
|
||||
### 1. 技能自动生成(Skill Learning Loop) ✅ 已实现 v5.1.0
|
||||
|
||||
**Hermes 做法**
|
||||
|
||||
@@ -55,43 +55,12 @@ Metona 进化方向:
|
||||
|
||||
下次遇到类似任务时直接复用已有技能,跳过重新推理。多次使用中持续优化技能实现。
|
||||
|
||||
**Metona 现状**
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
有 ReAct 执行轨迹记录(`traces` 表),但仅用于回溯查看,没有自动提炼为可复用技能。
|
||||
`skills` 表 + `skill-manager.ts` 自动提取 + `skill_list` / `skill_view` 工具(Level 0 渐进式)。
|
||||
Agent Loop 结束后从 traces 提取成功工具链,下次自动匹配复用。
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 在 `traces` 表基础上,Agent Loop 结束后自动分析执行轨迹
|
||||
2. 提取成功的工具调用序列 → 保存为 `skills` 表
|
||||
3. 下次新会话检索匹配的 skill → 优先复用
|
||||
4. 技能质量随使用次数迭代优化
|
||||
|
||||
```
|
||||
新表结构:
|
||||
skills:
|
||||
id TEXT PRIMARY KEY
|
||||
name TEXT -- 技能名称
|
||||
description TEXT -- 技能描述
|
||||
trigger_pattern TEXT -- 触发条件(关键词/意图模式)
|
||||
tool_chain TEXT -- 工具调用链(JSON 数组)
|
||||
success_count INTEGER -- 成功次数
|
||||
fail_count INTEGER -- 失败次数
|
||||
avg_duration INTEGER -- 平均执行时长(ms)
|
||||
created_at INTEGER
|
||||
updated_at INTEGER
|
||||
last_used_at INTEGER
|
||||
```
|
||||
|
||||
Agent Loop 新增流程:
|
||||
|
||||
```
|
||||
任务完成 → 分析 traces → 提取工具链模式 → 判断是否可复用
|
||||
→ 新技能?→ 创建 skill 记录
|
||||
→ 匹配已有技能?→ 更新成功率、优化参数
|
||||
→ 下次同类任务 → 优先使用 skill → 跳过推理直接执行
|
||||
```
|
||||
|
||||
### 2. 分层记忆 + 用户画像模型 🟡 P1
|
||||
### 2. 分层记忆 + 用户画像模型 ✅ 已实现 v5.0.0
|
||||
|
||||
**Hermes 做法**
|
||||
|
||||
@@ -99,37 +68,16 @@ Agent Loop 新增流程:
|
||||
- `user.md`:用户画像(角色、领域经验、编码风格、偏好)
|
||||
- 构建一个「关于用户的深层模型」,跨会话持续积累
|
||||
|
||||
**Metona 现状**
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
有 fact/preference/rule 三类记忆 + FTS5 搜索 + 向量语义搜索。但没有独立的用户画像系统,不理解「用户是谁」。
|
||||
- fact/preference/rule 三类记忆 + FTS5 搜索 + 向量语义搜索
|
||||
- 用户画像自动推断:检测 14 种技术栈,自动注入 system prompt
|
||||
- `memory_replace` / `memory_remove` 支持修改和删除(v5.1.0)
|
||||
- 记忆写入前安全扫描(prompt injection / 敏感信息检测)(v5.1.0)
|
||||
- 记忆容量管理:上限 500 条,超限自动清理低价值条目(v5.1.2)
|
||||
- 记忆过期衰减:90 天未使用自动降低 importance(v5.1.3)
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 新增 `user_profiles` 表或独立的 `user.md` 文件
|
||||
2. 自动推断用户画像:
|
||||
- 技术栈偏好(Python/TypeScript/Go...)
|
||||
- 编码风格(verbose/compact、type hints/any)
|
||||
- 常用工具链
|
||||
- 工作时间段
|
||||
- 对错误的容忍度
|
||||
3. 记忆注入时区分层级:
|
||||
- 画像 → 决策上下文(决定 Agent 的行为风格)
|
||||
- 偏好 → 行为引导(决定具体操作方式)
|
||||
- 事实 → 参考信息(决定知识引用)
|
||||
|
||||
```
|
||||
user_profiles 表:
|
||||
id TEXT PRIMARY KEY
|
||||
role TEXT -- 角色(后端工程师/全栈/数据科学家...)
|
||||
tech_stack TEXT -- 技术栈(JSON 数组)
|
||||
code_style TEXT -- 编码风格描述
|
||||
experience TEXT -- 经验描述
|
||||
work_hours TEXT -- 工作时间段
|
||||
error_tolerance TEXT -- 错误容忍度(high/medium/low)
|
||||
updated_at INTEGER
|
||||
```
|
||||
|
||||
### 3. 执行轨迹导出 → 自训练数据 🔵 P3
|
||||
### 3. 执行轨迹导出 → 自训练数据 🔵 P3(未实现)
|
||||
|
||||
**Hermes 做法**
|
||||
|
||||
@@ -162,147 +110,76 @@ user_profiles 表:
|
||||
|
||||
## 三、从 OpenClaw 吸收
|
||||
|
||||
### 4. Heartbeat 主动检查机制 🟢 P2
|
||||
### 4. Heartbeat 主动检查机制 ✅ 已实现 v5.0.0
|
||||
|
||||
**OpenClaw 做法**
|
||||
|
||||
Agent 定期(默认 30 分钟)主动检查邮箱、日历、通知等,有事才通知用户,没事保持安静(`HEARTBEAT_OK`)。支持在 `HEARTBEAT.md` 中配置检查项。
|
||||
|
||||
**Metona 现状**
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
纯被动模式,用户不说话就不动。
|
||||
后台 heartbeat 定时器,检查 Ollama 连接状态等,通过 Electron Notification API 推送通知。
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 新增后台 heartbeat 定时器(可配置间隔,默认关闭)
|
||||
2. 可配置检查项:
|
||||
- Ollama 服务连接状态
|
||||
- 磁盘空间(workspace 目录)
|
||||
- 新模型可用性(对比 `ollama list` 和本地列表)
|
||||
- 长时间未保存的会话
|
||||
3. 有异常时通过 Electron Notification API 推送系统通知
|
||||
4. 检查结果写入 `heartbeat-state.json` 避免重复告警
|
||||
|
||||
### 5. Cron 定时任务 🔵 P4
|
||||
### 5. Cron 定时任务 ✅ 已实现 v5.0.0
|
||||
|
||||
**OpenClaw 做法**
|
||||
|
||||
支持两种调度:
|
||||
- `at`:一次性定时(ISO-8601 时间戳)
|
||||
- `cron`:周期性调度(cron 表达式 + 时区)
|
||||
支持 `at`(一次性)和 `cron`(周期性)两种调度,systemEvent(注入文本)和 agentTurn(隔离执行)两种任务类型。
|
||||
|
||||
任务类型:
|
||||
- `systemEvent`:注入文本到主会话
|
||||
- `agentTurn`:在隔离会话中执行 Agent 任务
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
**Metona 现状**
|
||||
`cron-manager.ts` 已集成,支持一次性 / 周期性任务调度,任务结果显示在聊天区域。
|
||||
|
||||
无定时任务功能。
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 集成轻量级调度器(`cron` npm 包或 `setInterval`)
|
||||
2. 预设任务模板:
|
||||
- 每日对话摘要(自动总结当天对话)
|
||||
- 定期备份(导出会话为 JSON)
|
||||
- 旧会话清理(超过 N 天的归档)
|
||||
- Ollama 模型更新检查
|
||||
3. 任务结果直接显示在聊天区域或工作空间面板
|
||||
|
||||
### 6. MCP(Model Context Protocol)生态对接 🔵 P3
|
||||
### 6. MCP(Model Context Protocol)生态对接 ✅ 已实现 v5.0.0
|
||||
|
||||
**OpenClaw + Hermes**
|
||||
|
||||
均支持 MCP 协议,可连接外部工具和 IDE(Cursor、VS Code、Claude Desktop)。工具从硬编码 → 动态发现。
|
||||
|
||||
**Metona 现状**
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
25 个内置工具硬编码在 `tool-registry.ts`,无法扩展外部工具。
|
||||
- `mcp-manager.ts`(主进程)+ `mcp-client.ts`(渲染进程)
|
||||
- JSON-RPC 2.0 over stdio 通信
|
||||
- 7 个 IPC 通道(startServer / stopServer / stopAll / callTool / getTools / getStatuses / refreshTools)
|
||||
- Shadowing 防护:MCP 工具注册时自动检测与内置工具重名(v5.1.2)
|
||||
- 设置面板管理:添加 / 启用 / 禁用 / 删除
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 实现 MCP Client(连接外部 MCP Server)
|
||||
2. 工具注册表重构:
|
||||
- 内置工具(现有 25 个)
|
||||
- MCP 工具(通过配置文件或 UI 添加)
|
||||
3. 用户可自行添加 MCP 工具,如:
|
||||
- 数据库查询 MCP Server
|
||||
- 外部 API 调用 MCP Server
|
||||
- 专用硬件控制 MCP Server
|
||||
4. 设置面板新增「MCP 工具管理」页面
|
||||
|
||||
### 7. 浏览器控制(Browser Automation) 🔵 P3
|
||||
### 7. 浏览器控制(Browser Automation) ✅ 已实现 v5.0.0
|
||||
|
||||
**OpenClaw**
|
||||
|
||||
内置 Playwright 浏览器自动化,支持截图、表单填写、页面交互。
|
||||
|
||||
**Hermes**
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
「全网页与浏览器控制」,真正的网页浏览能力。
|
||||
`browser.ts`(主进程)提供 8 个浏览器工具:browser_open / browser_screenshot / browser_evaluate / browser_extract / browser_click / browser_type / browser_scroll / browser_close。
|
||||
|
||||
**Metona 现状**
|
||||
|
||||
只有 `web_fetch`(HTTP 抓取纯文本)和 `web_search`(搜索引擎),无法交互式操作网页。
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 集成 Playwright 或 Puppeteer 作为新工具
|
||||
2. 新增工具集:
|
||||
- `browser_open`:打开 URL
|
||||
- `browser_click`:点击元素
|
||||
- `browser_type`:输入文本
|
||||
- `browser_screenshot`:截图
|
||||
- `browser_extract`:提取页面数据
|
||||
3. 在工作空间面板显示浏览器实时预览
|
||||
4. 注意:会增加应用体积约 200MB(Chromium 二进制),可设为可选组件
|
||||
|
||||
### 8. 子代理委派(Sub-Agent Delegation) 🔵 P3
|
||||
### 8. 子代理委派(Sub-Agent Delegation) ✅ 已实现 v5.0.0
|
||||
|
||||
**OpenClaw**
|
||||
|
||||
`sessions_spawn` 生成独立子会话,支持 `run`(一次性)和 `session`(持久化)两种模式。子 Agent 完成后自动汇报。
|
||||
`sessions_spawn` 生成独立子会话,支持 `run`(一次性)和 `session`(持久化)两种模式。
|
||||
|
||||
**Hermes**
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
生成独立子代理处理并行工作流,零上下文成本。
|
||||
|
||||
**Metona 现状**
|
||||
|
||||
单 Agent Loop,串行执行,最多 15 轮。
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 主 Agent 识别可并行任务后 spawn 子 Agent
|
||||
2. 子 Agent 独立执行(独立消息上下文)
|
||||
3. 完成后汇报结果给主 Agent
|
||||
4. 在聊天区域以可折叠卡片展示子 Agent 进度
|
||||
5. 实现方式:复用当前 Agent Loop,但起始消息不同
|
||||
`sub-agent.ts` + `spawn_task` 工具,主 Agent 可委派独立子任务执行。
|
||||
|
||||
---
|
||||
|
||||
## 四、从两者共同吸收(通用最佳实践)
|
||||
|
||||
### 9. 会话管理增强 🟡 P1
|
||||
### 9. 会话管理增强 ✅ 部分实现 v5.0.0
|
||||
|
||||
| 功能 | OpenClaw | Hermes | Metona 现状 | 改进方案 |
|
||||
|------|----------|--------|------------|----------|
|
||||
| `/new` `/reset` | ✅ | ✅ | ✅ 已有 | — |
|
||||
| `/retry` 重试 | ✅ | ✅ | ❌ | 回退到上一轮消息,重新生成 |
|
||||
| `/undo` 撤销 | ✅ | ✅ | ❌ | 删除最后一条用户/AI 消息对 |
|
||||
| `/compress` 压缩 | ✅ | ✅ | ❌ | LLM 摘要长对话,压缩上下文 |
|
||||
| `/usage` 统计 | ✅ | ✅ | ⚠️ 部分 | 按日/周/月 token 消耗统计 |
|
||||
| `/model` 切换 | ✅ | ✅ | ⚠️ 下拉框 | 输入框快速切换,支持模糊搜索 |
|
||||
| 功能 | OpenClaw | Hermes | Metona 现状 |
|
||||
|------|----------|--------|------------|
|
||||
| `/new` `/reset` | ✅ | ✅ | ✅ 已有 |
|
||||
| `/retry` 重试 | ✅ | ✅ | ✅ 已实现 |
|
||||
| `/undo` 撤销 | ✅ | ✅ | ✅ 已实现 |
|
||||
| `/compress` 压缩 | ✅ | ✅ | ❌ 未实现(上下文压缩) |
|
||||
| `/usage` 统计 | ✅ | ✅ | ⚠️ 部分(日志面板有) |
|
||||
| `/model` 切换 | ✅ | ✅ | ⚠️ 下拉框 |
|
||||
|
||||
**`/retry` 实现方案**:
|
||||
|
||||
```typescript
|
||||
// 从 messages 数组中找到最后一个 user 消息的位置
|
||||
// 删除该位置之后的所有消息(assistant 回复 + 可能的 tool 调用)
|
||||
// 用相同的 user 消息重新发起 Agent Loop
|
||||
```
|
||||
|
||||
**`/compress` 实现方案**:
|
||||
**`/compress` 实现方案**(未实现):
|
||||
|
||||
```typescript
|
||||
// 将 messages 中间部分(保留首尾各 2 条)用 LLM 做摘要
|
||||
@@ -310,7 +187,7 @@ Agent 定期(默认 30 分钟)主动检查邮箱、日历、通知等,有
|
||||
// 大幅减少 token 消耗,保留关键上下文
|
||||
```
|
||||
|
||||
### 10. 诊断系统(Doctor) 🟢 P2
|
||||
### 10. 诊断系统(Doctor) 🟢 P2(未实现)
|
||||
|
||||
**Hermes 做法**
|
||||
|
||||
@@ -335,7 +212,7 @@ Agent 定期(默认 30 分钟)主动检查邮箱、日历、通知等,有
|
||||
| 工具权限 | 安全配置是否合理 |
|
||||
| 版本信息 | Metona 版本、Electron 版本、Node 版本 |
|
||||
|
||||
### 11. 人格/模式切换 🟢 P2
|
||||
### 11. 人格/模式切换 ✅ 已实现 v5.0.0
|
||||
|
||||
**OpenClaw**
|
||||
|
||||
@@ -345,50 +222,22 @@ Agent 定期(默认 30 分钟)主动检查邮箱、日历、通知等,有
|
||||
|
||||
`/personality [name]` 切换不同人格模式。
|
||||
|
||||
**Metona 现状**
|
||||
**Metona 现状** ✅ 已实现
|
||||
|
||||
只有 system prompt 自定义设置。
|
||||
多种预设人格模板(编程助手/写作助手/数据分析师等),每种有独立 system prompt + 温度设置,设置面板快速切换。
|
||||
|
||||
**改进方案**
|
||||
|
||||
1. 预设多个人格模板:
|
||||
|
||||
| 人格 | 说明 | 温度 | 工具集 |
|
||||
|------|------|------|--------|
|
||||
| 编程助手 | 严谨、注重代码质量 | 0.3 | 文件操作 + Git + 命令 |
|
||||
| 写作助手 | 流畅、有文采 | 0.8 | 文件操作 + 网络搜索 |
|
||||
| 数据分析师 | 精确、数据驱动 | 0.2 | 文件操作 + 命令 |
|
||||
| 翻译 | 准确、信达雅 | 0.4 | 文件操作 |
|
||||
| 通用助手 | 平衡 | 0.7 | 全部 |
|
||||
|
||||
2. 每个人格有独立的 system prompt + 工具集 + 温度设置
|
||||
3. 在 Header 或 Model Bar 快速切换
|
||||
4. 用户可创建自定义人格
|
||||
|
||||
### 12. 响应速度优化 ⚡
|
||||
### 12. 响应速度优化 ⚡ 部分实现
|
||||
|
||||
**Hermes 核心优势**
|
||||
|
||||
比 OpenClaw 响应更快,社区反馈明显。
|
||||
|
||||
**Metona 可优化方向**
|
||||
**Metona 已优化方向**
|
||||
|
||||
1. **模型预热**:切换模型后发送空请求保持 `keep_alive`,减少首次推理延迟
|
||||
2. **工具并行执行**:当前多个工具串行执行,互相独立的工具可并行
|
||||
```typescript
|
||||
// 改进前:串行
|
||||
for (const call of toolCalls) {
|
||||
await executeTool(call);
|
||||
}
|
||||
|
||||
// 改进后:检测依赖关系,并行执行独立工具
|
||||
const independentCalls = toolCalls.filter(/* 无依赖 */);
|
||||
const dependentCalls = toolCalls.filter(/* 有依赖 */);
|
||||
await Promise.all(independentCalls.map(c => executeTool(c)));
|
||||
for (const c of dependentCalls) await executeTool(c);
|
||||
```
|
||||
3. **上下文智能管理**:超过 `num_ctx` 时自动摘要而非截断,保留更多信息
|
||||
4. **工具结果预处理**:在格式化前预计算,减少序列化开销
|
||||
1. ✅ **工具并行执行**:独立工具通过 `Promise.all` 并行执行(v5.0.0)
|
||||
2. ❌ **模型预热**:切换模型后发送空请求保持 `keep_alive`
|
||||
3. ❌ **上下文智能管理**:超过 `num_ctx` 时自动摘要而非截断
|
||||
4. ❌ **工具结果预处理**:在格式化前预计算,减少序列化开销
|
||||
|
||||
---
|
||||
|
||||
@@ -396,50 +245,31 @@ Agent 定期(默认 30 分钟)主动检查邮箱、日历、通知等,有
|
||||
|
||||
### 按投入产出比排序
|
||||
|
||||
| 优先级 | 功能 | 复杂度 | 用户价值 | 来源 |
|
||||
|--------|------|--------|----------|------|
|
||||
| 🔴 P0 | 技能自动生成(Skill Loop) | 高 | ⭐⭐⭐⭐⭐ | Hermes |
|
||||
| 🔴 P0 | `/retry` `/undo` 会话操作 | 低 | ⭐⭐⭐⭐⭐ | 共同 |
|
||||
| 🟡 P1 | 用户画像模型 | 中 | ⭐⭐⭐⭐ | Hermes |
|
||||
| 🟡 P1 | 上下文压缩 (`/compress`) | 中 | ⭐⭐⭐⭐ | 共同 |
|
||||
| 🟡 P1 | 工具并行执行优化 | 中 | ⭐⭐⭐⭐ | 共同 |
|
||||
| 🟢 P2 | Heartbeat 主动检查 | 低 | ⭐⭐⭐ | OpenClaw |
|
||||
| 🟢 P2 | 人格模板切换 | 低 | ⭐⭐⭐ | 共同 |
|
||||
| 🟢 P2 | 诊断系统 (`doctor`) | 低 | ⭐⭐⭐ | Hermes |
|
||||
| 🔵 P3 | MCP 生态对接 | 高 | ⭐⭐⭐⭐ | 共同 |
|
||||
| 🔵 P3 | 浏览器控制 | 高 | ⭐⭐⭐ | 共同 |
|
||||
| 🔵 P3 | 子代理委派 | 高 | ⭐⭐⭐ | 共同 |
|
||||
| 🔵 P3 | 训练数据导出 | 中 | ⭐⭐ | Hermes |
|
||||
| ⚪ P4 | Cron 定时任务 | 中 | ⭐⭐ | OpenClaw |
|
||||
| 优先级 | 功能 | 复杂度 | 用户价值 | 来源 | 状态 |
|
||||
|--------|------|--------|----------|------|------|
|
||||
| 🔴 P0 | 技能自动生成(Skill Loop) | 高 | ⭐⭐⭐⭐⭐ | Hermes | ✅ v5.1.0 |
|
||||
| 🔴 P0 | `/retry` `/undo` 会话操作 | 低 | ⭐⭐⭐⭐⭐ | 共同 | ✅ v5.0.0 |
|
||||
| 🟡 P1 | 用户画像模型 | 中 | ⭐⭐⭐⭐ | Hermes | ✅ v5.0.0 |
|
||||
| 🟡 P1 | 上下文压缩 (`/compress`) | 中 | ⭐⭐⭐⭐ | 共同 | ❌ 未实现 |
|
||||
| 🟡 P1 | 工具并行执行优化 | 中 | ⭐⭐⭐⭐ | 共同 | ✅ v5.0.0 |
|
||||
| 🟢 P2 | Heartbeat 主动检查 | 低 | ⭐⭐⭐ | OpenClaw | ✅ v5.0.0 |
|
||||
| 🟢 P2 | 人格模板切换 | 低 | ⭐⭐⭐ | 共同 | ✅ v5.0.0 |
|
||||
| 🟢 P2 | 诊断系统 (`doctor`) | 低 | ⭐⭐⭐ | Hermes | ❌ 未实现 |
|
||||
| 🔵 P3 | MCP 生态对接 | 高 | ⭐⭐⭐⭐ | 共同 | ✅ v5.0.0 |
|
||||
| 🔵 P3 | 浏览器控制 | 高 | ⭐⭐⭐ | 共同 | ✅ v5.0.0 |
|
||||
| 🔵 P3 | 子代理委派 | 高 | ⭐⭐⭐ | 共同 | ✅ v5.0.0 |
|
||||
| 🔵 P3 | 训练数据导出 | 中 | ⭐⭐ | Hermes | ❌ 未实现 |
|
||||
| ⚪ P4 | Cron 定时任务 | 中 | ⭐⭐ | OpenClaw | ✅ v5.0.0 |
|
||||
|
||||
### 建议实施路线
|
||||
### 待实施功能
|
||||
|
||||
**v4.1 — 会话增强(快速见效)**
|
||||
|
||||
- `/retry` 重试上一轮
|
||||
- `/undo` 撤销最后消息
|
||||
- `/compress` 上下文压缩
|
||||
- 工具并行执行优化
|
||||
|
||||
**v4.2 — 智能进化(核心差异化)**
|
||||
|
||||
- 技能自动生成系统(Skill Loop)
|
||||
- 用户画像模型
|
||||
- 人格模板切换
|
||||
|
||||
**v4.3 — 生态扩展(长期建设)**
|
||||
|
||||
- MCP Client 支持
|
||||
- Heartbeat 主动检查
|
||||
- 诊断系统
|
||||
- 子代理委派
|
||||
|
||||
**v5.0 — 全面进化**
|
||||
|
||||
- 浏览器控制
|
||||
- 训练数据导出
|
||||
- Cron 定时任务
|
||||
- 多实例隔离
|
||||
| 功能 | 复杂度 | 说明 |
|
||||
|------|--------|------|
|
||||
| `/compress` 上下文压缩 | 中 | LLM 摘要中间轮次,而非简单滑动窗口 |
|
||||
| 诊断系统 (`doctor`) | 低 | 设置面板一键检查连接/模型/权限/磁盘 |
|
||||
| 训练数据导出 | 中 | traces → SFT 格式导出 |
|
||||
| Skill 渐进式加载 | 中 | Level 0→1→2,先返回名称+描述,需要时再加载全文 |
|
||||
| Session 谱系跟踪 | 中 | 压缩后创建子 session,保留 parent_id |
|
||||
|
||||
---
|
||||
|
||||
@@ -457,11 +287,24 @@ Metona 的独特价值:
|
||||
✅ 暖色调 UI(非暗色主题,长时间使用不疲劳)
|
||||
✅ 全离线运行(数据不离开本机)
|
||||
|
||||
已吸收(v5.0.0 ~ v5.1.3):
|
||||
✅ 技能自动生成(Hermes) — v5.1.0
|
||||
✅ 用户画像模型(Hermes) — v5.0.0
|
||||
✅ /retry /undo 会话操作(共同) — v5.0.0
|
||||
✅ MCP 生态对接(共同) — v5.0.0
|
||||
✅ 浏览器控制(共同) — v5.0.0
|
||||
✅ Heartbeat 主动检查(OpenClaw) — v5.0.0
|
||||
✅ Cron 定时任务(OpenClaw) — v5.0.0
|
||||
✅ 子代理委派(共同) — v5.0.0
|
||||
✅ 记忆容量管理 + 安全扫描(Hermes) — v5.1.2 / v5.1.0
|
||||
✅ Shadowing 防护(Hermes) — v5.1.2
|
||||
✅ 预算警告临时层(Hermes) — v5.1.2
|
||||
|
||||
待吸收:
|
||||
🔜 技能自动生成(Hermes)
|
||||
🔜 用户画像模型(Hermes)
|
||||
🔜 会话管理增强(共同)
|
||||
🔜 MCP 生态对接(共同)
|
||||
🔜 /compress 上下文压缩(Hermes Context)
|
||||
🔜 诊断系统 doctor(Hermes)
|
||||
🔜 Skill 渐进式加载(Hermes)
|
||||
🔜 训练数据导出(Hermes)
|
||||
|
||||
最终形态 = 会学习的桌面 Agent
|
||||
= Metona 的原生桌面体验
|
||||
@@ -471,4 +314,4 @@ Metona 的独特价值:
|
||||
|
||||
---
|
||||
|
||||
*最后更新:2026-04-18*
|
||||
*最后更新:2026-04-19(根据 v5.1.3 实际代码更新实施状态)*
|
||||
|
||||
Reference in New Issue
Block a user