feat: v0.4.0 四阶段迭代 — 安全加固 + 工程基线 + 架构重构 + 双 Provider 扩展

P0 安全修复:
- API Key 加密存储(safeStorage 密钥链,版本化前缀,历史明文平滑兼容)
- 间接提示注入防护(SecurityScanHook 工具结果深扫描,网络工具脱敏/本地工具警示分级)
- error:report IPC 断链修复(渲染进程错误上报落 electron-log + 审计)
- abort 信号贯通工具层(run_command/dev-tools 子进程随会话中断终止)
- run_command 沙箱加固(cd 系统目录/敏感文件读取拦截 + chcp 前缀剥离防解析退化)
- .env 真实生效(dotenv 回退加载,应用内配置优先)

P1 工程基础:
- ESLint 9 flat config + 全部 34 条存量 warnings 清零(零容忍基线)
- 测试基线 118 用例 11 文件(token/文件防护/权限/沙箱/注入/命令/引擎/注册表/审计链/摘要分层)
- test:electron 双模式(ELECTRON_RUN_AS_NODE 跑 Electron ABI,SQLite 套件全执行)
- SessionRecorder 多会话隔离 + 9 种 TRACE 事件补全(含最终轮 iteration_end)
- Provider 故障转移(重试耗尽/不可重试一次性切换 fallback + 前端通知)
- MCP 真就绪(等待全部连接完成再广播 tools:ready)
- SLO/HealthChecker 真实接入(60s 巡检 + 托盘状态)
- CONFIG_DEFAULTS 单一来源(消除 SEED 双源漂移)

P2 架构升级:
- handlers.ts 1940 行拆分为 13 个 IPC 域模块(防重入注册 + 多窗口广播)
- AgentEngineManager 每会话独立引擎(LRU 30 + adapter 工厂隔离 abort 信号)
- TaskOrchestrator EngineProvider 改造 + abortByParent 联动中断 SubAgent
- 会话摘要分层上下文(session_summaries 滚动摘要 + 截断游标清理防因果污染)
- 消息编辑重发/重新生成(truncateAfter IPC + store 动作 + UI)
- Markdown 导出 / WebSearch 并行抓取(并发 3)/ 记忆 TF 缓存 / 版本构建期注入

P3 能力扩展:
- OpenAI Adapter(o 系列推理模型 reasoning_effort/max_completion_tokens)
- Anthropic Adapter(原生 Messages API:tool_use 块/角色合并/thinking budget/图片 base64/SSE 事件机)
- 设置页/Onboarding 六 Provider 全链路接入
This commit is contained in:
2026-08-20 23:17:02 +08:00
parent b9f7ec5118
commit 2230bcec3f
90 changed files with 6581 additions and 2771 deletions
+46 -22
View File
@@ -10,7 +10,7 @@
</p>
<p align="center">
<img src="https://img.shields.io/badge/version-0.3.22-blue?style=flat-square" alt="Version" />
<img src="https://img.shields.io/badge/version-0.4.0-blue?style=flat-square" alt="Version" />
<img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="License" />
<img src="https://img.shields.io/badge/Electron-35-47848F?style=flat-square&logo=electron" alt="Electron" />
<img src="https://img.shields.io/badge/React-19-61DAFB?style=flat-square&logo=react" alt="React" />
@@ -29,7 +29,7 @@
---
<p align="center">
Metona 是一款<strong>基于 Electron 的本地优先 AI Agent 桌面应用</strong>,内置<strong> ReAct 状态机驱动</strong>的智能体循环引擎、<strong>30+ 内置工具</strong>、<strong>三层记忆系统</strong>、<strong>四层纵深安全防线</strong>与<strong>完整可观测性链路</strong>。支持种 LLM Provider,兼容 <strong>MCP 协议</strong>扩展,为开发者提供开箱即用的 AI 编程伙伴。
Metona 是一款<strong>基于 Electron 的本地优先 AI Agent 桌面应用</strong>,内置<strong> ReAct 状态机驱动</strong>的智能体循环引擎、<strong>26 个内置工具</strong>、<strong>三层记忆系统</strong>、<strong>四层纵深安全防线</strong>与<strong>完整可观测性链路</strong>。支持种 LLM ProviderDeepSeek / Agnes / MiMo / Ollama / OpenAI / Anthropic,兼容 <strong>MCP 协议</strong>扩展,为开发者提供开箱即用的 AI 编程伙伴。
</p>
---
@@ -63,14 +63,14 @@
<p>ReAct 八状态闭环、流式对话 (SSE/NDJSON)、Thinking 推理模式、死循环检测、上下文自动压缩、指数退避重试</p>
</td>
<td width="50%">
<h3>🔧 30+ 内置工具</h3>
<h3>🔧 26 个内置工具</h3>
<p>文件系统 · 代码搜索 · 网络搜索 · 浏览器自动化 · Git · Shell 命令 · HTTP 请求 · 记忆存储 · 任务管理</p>
</td>
</tr>
<tr>
<td>
<h3>🔌 多 Provider 支持</h3>
<p>DeepSeek V4 · Agnes AI 2.0 · Xiaomi MiMo 2.5 · Ollama 本地模型 — 一键切换,热重载适配器</p>
<h3>🔌 多 Provider 支持 + 故障转移</h3>
<p>DeepSeek V4 · Agnes AI 2.0 · Xiaomi MiMo 2.5 · Ollama · OpenAI · Anthropic — 一键切换,热重载适配器,主 Provider 失败自动切换备用</p>
</td>
<td>
<h3>🧩 三层记忆架构</h3>
@@ -141,9 +141,9 @@ cd metona-ai-desktop
# 2. 安装依赖
npm install
# 3. 配置 API Key
# 3. 配置 API Key(可选——推荐启动后在应用内「设置 → LLM 配置」可视化配置)
cp .env.example .env
# 编辑 .env,填入你的 LLM API Key
# 编辑 .env 预置密钥(应用内未配置时自动回退读取,见下方「环境变量」说明)
# 4. 启动开发模式
npm run dev
@@ -154,7 +154,7 @@ npm run build
### 配置 LLM Provider
`.env` 中填入密钥,或在应用内通过 **设置 → LLM 配置** 可视化配置:
在应用内通过 **设置 → LLM 配置** 可视化配置(推荐,密钥经操作系统密钥链加密存储);或在 `.env` 中预置密钥(应用内未配置对应字段时自动回退读取)
```env
# DeepSeek API (https://platform.deepseek.com)
@@ -169,6 +169,14 @@ AGNES_BASE_URL=https://apihub.agnes-ai.com/v1
MIMO_API_KEY=your-key-here
MIMO_BASE_URL=https://api.xiaomimimo.com/v1
# OpenAI (https://platform.openai.com)
OPENAI_API_KEY=sk-your-key-here
OPENAI_BASE_URL=https://api.openai.com/v1
# Anthropic (https://console.anthropic.com)
ANTHROPIC_API_KEY=sk-ant-your-key-here
ANTHROPIC_BASE_URL=https://api.anthropic.com
# Ollama (本地运行, 无需 API Key)
OLLAMA_BASE_URL=http://localhost:11434
```
@@ -237,7 +245,7 @@ Metona 的核心是一个 **ReAct (Reasoning + Acting)** 状态机驱动引擎
### 工具分类总览
Metona 内置 **30+ 工具**,按安全风险分为五个等级:
Metona 内置 **26 个工具**,按安全风险分为五个等级:
```
SAFE (无需确认) LOW (无需确认) MEDIUM (可配自动) HIGH (强制确认) CRITICAL (双人复核)
@@ -584,6 +592,8 @@ Metona 的 Agent 引擎采用分层架构,每层职责清晰:
### 环境变量 (`.env`)
主进程启动时通过 dotenv 自动加载。**应用内配置优先**:`.env` 中的值仅在应用内对应字段为空时作为回退默认值(适合预置团队默认 Provider,个人密钥仍建议在应用内配置以获得密钥链加密)。
```env
# ===========================================
# LLM API 密钥
@@ -601,11 +611,16 @@ AGNES_BASE_URL=https://apihub.agnes-ai.com/v1
MIMO_API_KEY=your-key
MIMO_BASE_URL=https://api.xiaomimimo.com/v1
# OpenAI (https://platform.openai.com)
OPENAI_API_KEY=sk-your-key
OPENAI_BASE_URL=https://api.openai.com/v1
# Anthropic (https://console.anthropic.com)
ANTHROPIC_API_KEY=sk-ant-your-key
ANTHROPIC_BASE_URL=https://api.anthropic.com
# Ollama (本地运行)
OLLAMA_BASE_URL=http://localhost:11434
# 应用标题
VITE_APP_TITLE=MetonaAI Desktop
```
### 应用配置 (`app_config` 表)
@@ -642,23 +657,29 @@ MetonaAI-Desktop/
├── 📂 electron/ # Electron 主进程 (~60+ 文件)
│ ├── 📄 main.ts # 应用入口
│ ├── 📄 preload.ts # contextBridge 安全桥接 (15 个 API)
│ ├── 📂 ipc/
│ │ ── 📄 handlers.ts # IPC 通道处理 (50+ 通道)
│ ├── 📂 services/ # 业务服务层 (9 个 Service)
│ ├── 📂 ipc/ # IPC 域模块 (P2 拆分, 50+ 通道)
│ │ ── 📄 index.ts # 统一注册入口
│ ├── 📄 agent.ts # Agent 消息/中断/常驻事件管道
│ │ ├── 📄 sessions.ts # 会话 CRUD
│ │ ├── 📄 config.ts # 配置读写 (共享副作用)
│ │ ├── 📄 tools.ts # 工具列表/确认
│ │ └── 📄 ... (mcp/memory/tasks/data/workspace/app)
│ ├── 📂 services/ # 业务服务层 (12 个 Service)
│ │ ├── 📄 agent-engine-manager.service.ts # 每会话独立引擎管理 (P2)
│ │ ├── 📄 audit.service.ts # 审计日志 (链式哈希防篡改)
│ │ ├── 📄 config.service.ts # 配置管理 (全局+工作空间分层)
│ │ ├── 📄 database.service.ts # SQLite 数据库 (WAL 模式, 9 张表)
│ │ ├── 📄 global-config.service.ts # 机器级全局配置 (JSON 文件)
│ │ ├── 📄 database.service.ts # SQLite 数据库 (WAL 模式, 10 张表)
│ │ ├── 📄 global-config.service.ts # 机器级全局配置 (JSON, 敏感项加密)
│ │ ├── 📄 mcp-manager.service.ts # MCP Server 生命周期管理
│ │ ├── 📄 session-recorder.service.ts# 会话 JSONL 录制
│ │ ├── 📄 session-recorder.service.ts# 会话 JSONL 录制 (9 种事件, 多会话)
│ │ ├── 📄 session-summary.service.ts # 会话滚动摘要 (分层上下文, P2)
│ │ ├── 📄 session.service.ts # 会话 CRUD
│ │ ├── 📄 tray-manager.service.ts # 系统托盘 (4 状态)
│ │ ├── 📄 update.service.ts # 自动更新
│ │ ├── 📄 window-manager.service.ts # 窗口管理 + 全局快捷键
│ │ └── 📄 workspace.service.ts # 工作空间 (SOUL.md + MEMORY.md)
│ ├── 📂 harness/ # Agent 智能体核心引擎
│ │ ├── 📂 agent-loop/ # ReAct 状态机
│ │ │ ├── 📄 engine.ts # 循环引擎 (8 状态, 1293 行)
│ │ │ ├── 📄 engine.ts # 循环引擎 (8 状态, 重试+故障转移)
│ │ │ └── 📄 types.ts # 状态枚举 · 终止原因 · 配置类型
│ │ ├── 📂 adapters/ # LLM Provider 适配器
│ │ │ ├── 📄 base-adapter.ts # 抽象基类 (fetchWithTimeout)
@@ -666,10 +687,12 @@ MetonaAI-Desktop/
│ │ │ ├── 📄 agnes-ai.adapter.ts # Agnes AI 2.0 (SSE, 多模态)
│ │ │ ├── 📄 mimo.adapter.ts # MiMo 2.5 (SSE, 1M ctx)
│ │ │ ├── 📄 ollama.adapter.ts # Ollama (NDJSON, 600 行)
│ │ │ ├── 📄 openai.adapter.ts # OpenAI (o 系列推理模型, P3)
│ │ │ ├── 📄 anthropic.adapter.ts # Anthropic Messages API (P3)
│ │ │ └── 📂 shared/ # 共享: OpenAI 格式 · SSE 解析
│ │ ├── 📂 tools/ # 工具系统
│ │ │ ├── 📄 registry.ts # 工具注册 · PolicyEngine · 超时管理
│ │ │ └── 📂 built-in/ # 30+ 内置工具实现
│ │ │ └── 📂 built-in/ # 26 个内置工具实现
│ │ │ ├── 📄 filesystem.ts # 文件系统 (7 tools)
│ │ │ ├── 📄 file-editor.ts # 精准编辑
│ │ │ ├── 📄 file-guard.ts # 路径安全共享工具
@@ -820,7 +843,8 @@ npm run lint:fix # ESLint 自动修复
npm run format # Prettier 格式化
# ─── 测试 ─────────────────────────────────
npm test # 运行单元测试 (Vitest)
npm test # 运行单元测试 (Vitest, 系统 Node — audit 套件因 better-sqlite3 ABI 自动跳过)
npm run test:electron # 运行全量单元测试 (Electron Node ABI, 113 用例全执行, 含 SQLite 审计链哈希)
npm run test:watch # 测试监听模式
npm run test:e2e # E2E 测试 (Playwright)