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:
thzxx
2026-04-19 18:52:23 +08:00
parent 4fac36b941
commit b81bb4dd60
4 changed files with 159 additions and 300 deletions
+2 -2
View File
@@ -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.32026-04-19 — metona-ollama-desktop 仓库
- 🔧 修复 any 滥用:78 处 → 约 15 处,类型安全提升
- 🔧 修复 any 滥用:78 处 → 38 处(减少 51%),保留 API 参数构造等合理场景
- ♻️ 拆分 tool-handlers.ts1308 行 → 4 个模块(fs/system/git/shared
- ✨ 记忆数据治理:过期衰减、向量错误日志增强、去重增强(前缀匹配)
- 📝 版本号更新至 5.1.3
+22 -8
View File
@@ -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-export4 个子模块)
│ ├── 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.ts25 工具)
① Agent 系统 → agent-engine.ts + tool-registry.ts38 工具 + MCP 动态
② 记忆系统 → memory-manager.ts + vector-memory.ts
③ 向量存储 → vector-store.tsIVF 索引)
④ 工作空间 → workspace.ts (主进程) + workspace-panel.ts (渲染进程)
⑤ 数据层 → db/sqlite.tsSQLite, 6 张表, FTS5
⑤ 数据层 → db/sqlite.tsSQLite, 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 → 执行
---
+40 -38
View File
@@ -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_charsv5.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 | SQLitememories 表 + 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 / removev5.1.0 |
| 会话搜索 | session_searchFTS5 + 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 实际代码更新实施状态)*
+95 -252
View File
@@ -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 天未使用自动降低 importancev5.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. MCPModel Context Protocol)生态对接 🔵 P3
### 6. MCPModel Context Protocol)生态对接 ✅ 已实现 v5.0.0
**OpenClaw + Hermes**
均支持 MCP 协议,可连接外部工具和 IDECursor、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
🔜 诊断系统 doctorHermes
🔜 Skill 渐进式加载(Hermes
🔜 训练数据导出(Hermes
最终形态 = 会学习的桌面 Agent
= Metona 的原生桌面体验
@@ -471,4 +314,4 @@ Metona 的独特价值:
---
*最后更新:2026-04-18*
*最后更新:2026-04-19(根据 v5.1.3 实际代码更新实施状态)*