Files
metona-ollama-desktop/README.md
T
2026-04-24 15:42:05 +08:00

178 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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_searchBing + 百度 + Google 三引擎), web_fetch |
| 浏览器控制 | 8 | browser_open, browser_screenshot, browser_evaluate, browser_extract, browser_click, browser_type, browser_scroll, browser_close |
| Git | 1 | gitinit/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 LoopReAct
记忆检索(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 |
| 第三方库 | markedMarkdown, DOMPurifyHTML 净化) |
| 打包 | 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 API53 个 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
```
## 推荐记忆规则
以下是使用 Metona Ollama Desktop 时推荐预先写入记忆系统的规则(rule 类型),可帮助 Agent 更高效、更安全地工作:
### 🔧 开发类规则
| 规则 | 说明 |
|------|------|
| `所有日志必须通过 log-service.ts 输出,禁止使用 console.log/error/warn` | 项目铁律,保持日志面板统一 |
| `新增第三方依赖优先 vendor 到 src/vendor/,避免 npm 运行时依赖` | 项目依赖管理策略,sql.js 除外 |
| `所有文件写入和命令执行必须经过 tool-security.ts 安全检查` | 安全底线,防止越权操作 |
| `TypeScript 严格模式,禁止滥用 any,类型定义集中在 types.d.ts` | 代码质量保障 |
| `文件名 kebab-case,类型 PascalCase,变量 camelCase,常量 UPPER_SNAKE_CASE` | 命名规范统一 |
### 🧠 效率类规则
| 规则 | 说明 |
|------|------|
| `联网搜索后必须用 web_fetch 抓取相关 URL 详情,不要只看摘要` | 搜索结果摘要信息有限,抓取原文才能给出准确回答 |
| `执行多步任务时优先使用子代理 spawn_task 分担,避免主会话上下文膨胀` | 保持主会话响应速度 |
| `复杂文件操作前先 list_directory 确认路径结构,再执行具体操作` | 防止路径错误导致意外 |
| `长对话中主动使用 session_list/session_read 回顾历史,避免重复工作` | 利用会话管理工具保持连贯性 |
### 🛡️ 安全类规则
| 规则 | 说明 |
|------|------|
| `禁止执行 rm -rf /、mkfs、dd、shutdown 等破坏性命令` | 硬性安全红线 |
| `写操作仅允许在用户工作目录下进行,系统目录只读` | 路径安全策略 |
| `记忆写入前自动扫描 prompt injection 和敏感信息,发现异常立即拒绝` | 记忆系统安全机制 |
| `MCP 工具注册时自动检测与内置工具重名,防止 Shadowing 攻击` | MCP 安全防护 |
### 💡 使用技巧
| 规则 | 说明 |
|------|------|
| `记忆系统上限 500 条,优先写入高价值信息,低价值内容会自动清理` | 合理利用记忆容量 |
| `rule 类型记忆始终注入上下文,适合放铁律和偏好;fact/preference 按需检索` | 区分记忆类型,提高注入效率 |
| `技能系统会从成功任务中自动学习,遇到重复任务时优先查看已有技能` | 利用技能系统减少重复推理 |
> 💡 **提示**:以上规则可通过 `memory_add` 工具写入,类型设为 `rule`,即可在每次对话中自动注入上下文。
## 许可证
MIT