136 lines
6.1 KiB
Markdown
136 lines
6.1 KiB
Markdown
# 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) |
|
||
|
||
## 快速开始
|
||
|
||
```bash
|
||
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 安装包
|
||
|
||
```bash
|
||
# 环境: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
|