9f38d35b1e6c0594ee2402c084c0316e5d05261d
compressWithLLM() 调用时引用的 abortController 变量在 while 循环内才定义, 但自动压缩逻辑在 while 循环之前执行,导致运行时 ReferenceError。 修复方式:使用 state 中已有的 AbortController 或创建新的实例。
Metona Ollama Desktop
本地 Ollama AI 桌面客户端 — TypeScript + Electron
简介
Metona Ollama Desktop 是一个基于 Ollama 的本地 AI 桌面客户端,支持 Tool Calling、记忆系统、浏览器控制、MCP 协议等能力。数据不离开本机,零配置启动。
特性
- 🤖 ReAct Agent Loop — Thought → Action → Observation → Reflection 循环,默认最大 85 轮
- 🔧 38 个内置工具 — 文件系统/命令执行/联网搜索/浏览器/Git/记忆/技能/会话/子代理
- 🧠 智能记忆系统 — 三类记忆(fact/preference/rule)+ FTS5 全文搜索 + 向量语义搜索 + 安全扫描
- 🌐 MCP 协议 — JSON-RPC 2.0 over stdio,动态工具发现与执行,Shadowing 防护
- 🔍 三引擎联网搜索 — Bing + 百度 + Google
- 🖥️ 工作空间面板 — 终端(实时流式输出)+ 文件浏览器一体化
- 🎨 暖色调 UI — 奶白 #FAF7F2 + 珊瑚橙 #E8734A,长时间使用不疲劳
工具列表
| 分类 | 数量 | 工具 |
|---|---|---|
| 文件系统 | 17 | read_file, write_file, list_directory, search_files, create_directory, delete_file, move_file, copy_file, append_file, edit_file, get_file_info, tree, download_file, diff_files, replace_in_files, read_multiple_files, compress |
| 命令执行 | 1 | run_command(实时流式输出,工作空间终端集成) |
| 联网搜索 | 2 | web_search(Bing + 百度 + Google 三引擎), web_fetch |
| 浏览器控制 | 8 | browser_open, browser_screenshot, browser_evaluate, browser_extract, browser_click, browser_type, browser_scroll, browser_close |
| Git | 1 | git(init/clone/add/commit/push/pull/diff/log/status/branch/checkout/merge/stash/reset/tag/remote) |
| 记忆管理 | 4 | memory_search, memory_add, memory_replace, memory_remove |
| 技能系统 | 2 | skill_list, skill_view(渐进式加载) |
| 会话管理 | 2 | session_list, session_read |
| 子代理 | 1 | spawn_task(独立上下文 + 超时保护) |
架构
用户消息 → Agent Loop(ReAct)
↓
记忆检索(FTS5 + 向量搜索)→ 上下文注入
↓
Ollama API(流式响应)
↓
工具调用(38 内置 + MCP 动态)
↓
观察结果 → 反思 → 循环/最终回答
数据层
- SQLite (sql.js WASM):7 张表(sessions, messages, tool_calls, memories, settings, traces, skills)
- FTS5 全文搜索:memories 表支持全文检索
- WAL 模式 + NORMAL 同步:零原生依赖,无需 electron-rebuild
记忆系统
- 三类记忆:fact(事实)、preference(偏好)、rule(规则,始终注入)
- 安全扫描:写入前检测 prompt injection、敏感信息泄露、不可见 Unicode 字符
- 容量管理:上限 500 条,超限自动清理低价值条目(rule 类型受保护)
- 过期衰减:90 天未使用的记忆自动降低 importance
技术栈
| 层级 | 技术 |
|---|---|
| 语言 | TypeScript (strict mode) |
| 桌面框架 | Electron 33+ |
| 构建 | Vite(渲染进程)+ tsc(主进程) |
| 数据库 | sql.js (WASM) + FTS5 |
| 第三方库 | marked(Markdown), DOMPurify(HTML 净化) |
| 打包 | electron-builder (NSIS) |
快速开始
git clone https://gitee.com/thzxx/metona-ollama-desktop.git
cd metona-ollama-desktop
git checkout desktop-v1-stable-release
npm config set registry https://registry.npmmirror.com
npm install
npm start
构建 Windows 安装包
# 环境:Ubuntu 24.04 + Node.js v22 + Wine 9.0+
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
产出:release/Metona Ollama Setup v1-stable-release.exe(82MB)
项目结构
src/
├── main/ # Electron 主进程
│ ├── main.ts # 入口、窗口管理
│ ├── preload.ts # contextBridge API(53 个 invoke + 2 个 send)
│ ├── ipc.ts # IPC 处理器
│ ├── browser.ts # 浏览器控制(8 个工具)
│ ├── mcp-manager.ts # MCP 协议管理(JSON-RPC 2.0 over stdio)
│ ├── tool-handlers-fs.ts # 文件系统工具(15 个)
│ ├── tool-handlers-system.ts # 系统网络工具(6 个)
│ ├── tool-handlers-git.ts # Git 工具
│ ├── tool-handlers-shared.ts # 共享工具函数
│ ├── tool-security.ts # 路径/命令安全检查
│ └── db/sqlite.ts # SQLite 数据库层(7 张表 + FTS5)
├── renderer/ # 渲染进程
│ ├── main.ts # 入口、全局初始化
│ ├── services/
│ │ ├── agent-engine.ts # ReAct Agent Loop 引擎
│ │ ├── tool-registry.ts # 工具注册与调度(38 个内置 + MCP 动态)
│ │ ├── memory-manager.ts # 记忆管理核心
│ │ ├── vector-memory.ts # 记忆向量索引(IVF)
│ │ ├── vector-store.ts # 向量存储
│ │ ├── context-manager.ts # 上下文窗口管理
│ │ ├── skill-manager.ts # 技能自动生成
│ │ ├── sub-agent.ts # 子代理委派
│ │ ├── mcp-client.ts # MCP 渲染端客户端
│ │ ├── log-service.ts # 结构化日志
│ │ └── crypto.ts # AES-256-GCM 加密
│ ├── components/ # UI 组件(14 个)
│ ├── utils/
│ │ ├── utils.ts # 工具函数
│ │ ├── sanitizer.ts # HTML 净化器
│ │ └── marked-config.ts # Markdown 渲染
│ ├── state/state.ts # 响应式状态管理
│ ├── db/chat-db.ts # SQLite 渲染端接口
│ ├── styles/style.css # 暖色调亮色主题
│ └── index.html # 入口 HTML
└── vendor/ # 第三方库(marked, DOMPurify)
许可证
MIT