thzxx 58ef272061 fix: 修复桌面集成失效 + 清理死代码
- main.ts: window.__metonaBridge → window.metonaDesktop(与 preload.ts 对齐)
- 删除 DesktopBridge 接口和 __metonaBridge 类型(从未使用)
- 删除 extractDocument(定义了但无调用)
- 删除 logIPC(导出了但零引用)
- 删除 getMessagesContainer(导出了但无调用)
- SAFE_DATA_TYPES 去掉多余的 export
- vite.config.ts 移除未使用的 server 配置
2026-04-07 01:28:07 +08:00
2026-04-05 22:55:38 +08:00
2026-04-03 02:40:56 +00:00
2026-04-06 15:31:28 +08:00

🦙 Metona Ollama

基于 TypeScript + Electron 的 Ollama 桌面 AI 聊天客户端,专为 Windows 打造。

版本 平台 TypeScript Electron Vite 协议


功能特性

💬 对话

  • 流式对话 — ReadableStream 实时打字效果,支持强制停止
  • 多模型支持 — 自动加载 Ollama 已安装模型,一键切换
  • Think 推理 — 展开/收起的深度思考过程(需模型支持)
  • 多模态 — 图片上传,自动检测 Vision 模型能力
  • 文件分析 — 支持 50+ 种文本/代码格式,单文件 ≤500KB

🔧 Tool Calling — AI 本地文件操作(v3.0 新增)

AI 可以在对话中主动调用本地工具来完成任务,所有操作在用户可视化监督下执行:

工具 说明 安全级别
📄 read_file 读取文件内容(≤1MB,支持行范围) 自动
✏️ write_file 写入文件(自动创建父目录) 需确认
📁 list_directory 列出目录(支持递归、隐藏文件) 自动
🔍 search_files 按文件名/内容搜索(支持扩展名过滤) 自动
📂 create_directory 创建目录(递归创建) 需确认
🗑️ delete_file 删除文件/目录 需确认
💻 run_command 执行 Shell 命令(默认禁用) 需确认

Agent Loop:用户请求 → 模型返回 tool_calls → 客户端执行 → 回传结果 → 循环直到无工具调用,支持流式 + 并行调用 + 最大 10 轮保护。

⚠️ 需要模型支持 Tool Calling(推荐 Qwen3、Llama 3.1+、Mistral

🧠 Agent 记忆系统(v3.0 新增)

AI 会自动从对话中学习并记住关键信息,跨会话持续积累,无需手动配置:

记忆类型

类型 说明 示例
📌 事实 关于用户的事实 "用户正在开发一个 Electron 应用"
⚙️ 偏好 用户的偏好习惯 "喜欢用中文回答,代码风格简洁"
📏 规则 应遵守的规则 "项目中使用 TypeScript 严格模式"
📝 事件 重要事件和结论 "已成功构建 Windows 安装包"

工作流程

会话结束 → LLM 自动提取关键信息 → 去重检测 → 存入 IndexedDB
                                              ↓
新消息发送 → 关键词+标签+重要性检索 → 注入 system prompt
                                              ↓
                               AI 基于记忆提供个性化回答

特性

  • 自动提取 — 对话 ≥6 条消息后自动触发,LLM 智能识别值得记住的信息
  • 智能检索 — 关键词 + 标签 + 重要性加权 + 使用频率 + 时间衰减
  • 持久化 — IndexedDB 独立存储,跨会话、跨浏览器重启保留
  • 可视化管理 — 记忆面板支持搜索、筛选、编辑、删除
  • 完全可控 — 设置中一键开关,不影响其他功能

📚 RAG 知识库

  • 文档上传 → 自动分块 → 向量化 → IndexedDB 持久化
  • 语义检索增强问答,支持多集合管理
  • IVF 索引优化(K-Means 聚类 + 倒排索引)
  • 需嵌入模型(如 nomic-embed-text

📦 数据

  • 历史记录 IndexedDB 持久化,支持搜索、分页
  • 导出格式:Markdown / HTML / TXT / .metona 加密备份
  • .metona 格式支持 AES-256-GCM 加密(HTTPS)或 XOR 混淆(HTTP

🖥️ 桌面原生

特性 说明
Fluent Design 主题 Windows 11 暗色风格,Mica 毛玻璃材质
执行日志面板 左侧面板实时显示应用运行日志(初始化、连接、模型加载、工具调用等),纯运行时不持久化,常驻显示不可关闭
系统托盘 最小化到托盘,双击恢复,右键菜单
原生菜单 文件 / 编辑 / 视图 / 窗口 / 帮助完整菜单
原生文件对话框 Windows 文件选择器替代浏览器 input
系统通知 Windows 原生通知中心推送
窗口管理 记忆窗口大小位置,支持置顶
单实例锁 防止重复启动
无 CORS 限制 直连本地 Ollama,无需配置 OLLAMA_ORIGINS

🏗️ 架构

v3.0 三大子系统协调运作:

用户输入消息
    │
    ├─→ ① Agent 记忆检索 → 注入 system prompt
    ├─→ ② RAG 知识库检索 → 追加到 system prompt
    ├─→ ③ Tool Calling 检查 → Agent Loop 或普通流式
    │
    ▼
  Ollama API(携带组合后的 system prompt + tools
    │
    ▼
  流式响应 → 渲染到聊天区域(含工具调用卡片)
    │
    ▼
  保存会话 → 自动提取记忆(≥6 条消息时触发)
┌─────────────────────────────────────────────────────────┐
│                    Electron 应用                         │
│  ┌───────────────────────────────────────────────────┐  │
│  │               渲染进程 (Renderer)                   │  │
│  │                                                   │  │
│  │  ┌─────────────┐  ┌──────────────┐  ┌─────────┐  │  │
│  │  │  chat-area  │  │ input-area   │  │ memory  │  │  │
│  │  │  消息渲染    │  │ 消息发送      │  │ panel   │  │  │
│  │  │  工具卡片    │  │ 记忆检索      │  │ 记忆管理 │  │  │
│  │  └──────┬──────┘  └──────┬───────┘  └────┬────┘  │  │
│  │         │               │               │        │  │
│  │  ┌──────┴───────────────┴───────────────┴──────┐  │  │
│  │  │              核心服务层                       │  │  │
│  │  │  agent-engine    memory-manager    rag       │  │  │
│  │  │  工具调用循环      记忆管理         知识检索   │  │  │
│  │  │  tool-registry   vector-store     doc-proc  │  │  │
│  │  └──────────────────────┬──────────────────────┘  │  │
│  │                         │                         │  │
│  │  ┌──────────────────────┴──────────────────────┐  │  │
│  │  │    ollama.ts (API)    chat-db.ts (存储)      │  │  │
│  │  └──────────────────────┬──────────────────────┘  │  │
│  └─────────────────────────┼─────────────────────────┘  │
│                            │ IPC                        │
│  ┌─────────────────────────┴─────────────────────────┐  │
│  │               主进程 (Main)                        │  │
│  │  main.ts  menu.ts  tray.ts  ipc.ts  preload.ts   │  │
│  │  tool-handlers.ts  tool-security.ts               │  │
│  └───────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘

📥 下载

Releases 页面下载:

文件 类型
Metona Ollama Setup 3.0.0.exe NSIS 安装包(可选目录、创建快捷方式)
MetonaOllama-Portable-3.0.0.exe 绿色便携版(免安装,双击即用)

⚠️ 未签名版本,首次运行 Windows 可能弹出安全警告,点击「仍要运行」即可。


🔨 从源码构建

环境要求

  • Node.js v22+
  • Windows 或 Linux(交叉编译需 Wine 9.0+

构建步骤

git clone https://gitee.com/thzxx/metona-ollama.git
cd metona-ollama
git checkout metona-ollama-desktop-v3

# 安装依赖(国内使用 npmmirror 加速)
npm config set registry https://registry.npmmirror.com
npm install

# 构建 TypeScript
npm run build

# 开发运行
npm start

# 构建 Windows 安装包
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist

💡 Linux 交叉编译需安装 Wineapt install wine,详细构建指南见 docs/BUILD.md

常用命令

npm run build:renderer   # 仅构建渲染进程(Vite
npm run build:main       # 仅构建主进程(tsc
npm run build            # 构建全部
npm start                # 构建并运行
npm run dist             # 构建 Windows 安装包(NSIS + Portable
npm run dist:nsis        # 仅 NSIS 安装包
npm run dist:portable    # 仅便携版

📁 项目结构

metona-ollama/
├── src/
│   ├── main/                              # Electron 主进程
│   │   ├── main.ts                        # 应用入口、窗口管理
│   │   ├── preload.ts                     # contextBridge 安全暴露
│   │   ├── menu.ts                        # 原生菜单
│   │   ├── tray.ts                        # 系统托盘
│   │   ├── ipc.ts                         # IPC(含 Tool Calling
│   │   ├── utils.ts                       # 工具函数
│   │   ├── tool-handlers.ts               # 🔧 7 个工具实现
│   │   └── tool-security.ts               # 🔧 路径/命令安全检查
│   └── renderer/                          # 渲染进程
│       ├── index.html                     # 入口 HTML
│       ├── main.ts                        # 入口(全系统初始化)
│       ├── types.d.ts                     # 完整类型定义
│       ├── api/
│       │   └── ollama.ts                  # Ollama REST API
│       ├── db/
│       │   └── chat-db.ts                 # IndexedDB v2(会话+记忆+向量)
│       ├── state/
│       │   └── state.ts                   # 响应式状态管理
│       ├── components/
│       │   ├── chat-area.ts               # 消息渲染、工具调用卡片
│       │   ├── input-area.ts              # 消息发送、记忆检索、自动提取
│       │   ├── memory-panel.ts            # 🧠 记忆管理面板
│       │   ├── tool-confirm-modal.ts      # 🔧 工具确认对话框
│       │   ├── kb-modal.ts                # RAG 知识库管理
│       │   ├── settings-modal.ts          # 设置面板
│       │   ├── history-modal.ts           # 历史记录
│       │   ├── header.ts                  # 顶部导航
│       │   ├── model-bar.ts               # 模型选择栏
│       │   ├── preset-bar.ts              # Agent 预设栏(兼容)
│       │   ├── toast.ts                   # 通知
│       │   └── lightbox.ts                # 图片预览
│       ├── services/
│       │   ├── memory-manager.ts          # 🧠 记忆管理核心
│       │   ├── agent-engine.ts            # 🔧 Agent Loop 引擎
│       │   ├── tool-registry.ts           # 🔧 工具注册调度
│       │   ├── rag.ts                     # RAG 检索管线
│       │   ├── vector-store.ts            # 向量存储 + IVF 索引
│       │   ├── document-processor.ts      # 文档分块
│       │   ├── preset-manager.ts          # 预设管理(兼容层)
│       │   └── crypto.ts                  # AES-256-GCM 加密
│       ├── utils/
│       │   ├── utils.ts                   # 工具函数
│       │   ├── sanitizer.ts               # HTML 净化器
│       │   └── marked-config.ts           # Markdown 渲染
│       └── styles/
│           └── style.css                  # Fluent Design 样式
├── assets/icons/                          # 图标资源
├── docs/
│   ├── BUILD.md                           # 构建指南
│   └── V3-TOOL-CALLING.md                # Tool Calling 设计文档
├── vite.config.ts                         # Vite 配置
├── tsconfig.json / tsconfig.main.json     # TypeScript 配置
├── package.json                           # 项目配置 + electron-builder
└── README.md

🔌 Ollama API 接口

接口 用途 调用位置
GET /api/tags 已安装模型列表 模型选择栏
GET /api/ps 运行中模型 设置面板
GET /api/version Ollama 版本 连接检测
POST /api/show 模型详情(能力检测) Think/Vision 检测
POST /api/chat 流式聊天(支持 tools 对话 / Agent Loop
POST /api/embed 生成嵌入向量 RAG 知识库

⚙️ 设置

设置 默认值 说明
Ollama 服务地址 http://127.0.0.1:11434 本地 Ollama 地址
系统提示词 关闭 自定义 AI 角色
上下文长度 24576 tokens num_ctx,越大记忆越长
温度 0.7 0=精确,2=创意
Think 模式 关闭 深度推理(需模型支持)
工具调用 关闭 AI 主动调用本地工具
命令执行 关闭 Shell 命令执行(高风险)
Agent 记忆 开启 自动学习+跨会话记忆

🛠️ 技术栈

  • TypeScript 5.7 — 严格类型,完整接口定义
  • Electron 33 — 桌面封装(Windows x64
  • Vite 5 — 渲染进程构建、HMR 热更新
  • IndexedDB — 异步持久化(会话 + 向量 + 记忆)
  • Fetch + ReadableStream — 流式 NDJSON 解析
  • CSS Variables — 暗色主题,毛玻璃效果
  • electron-builder — NSIS + Portable 打包
  • 零外部依赖 — Markdown 解析器、SHA-256、HTML 净化器全部内联实现

🔒 安全

应用安全

  • 内置 HTML 净化器(白名单标签 + 属性过滤 + URI 协议检查)
  • Markdown 链接仅允许 http: / https: / mailto: / tel:
  • 阻止 javascript: / vbscript: / data: 协议注入
  • contextIsolation + IPC 白名单 + 单实例锁

Tool Calling 安全

  • 路径黑名单:自动屏蔽 /etc, /sys, /proc, ~/.ssh, ~/.gnupg
  • 写操作白名单:仅允许用户目录下的写入
  • 命令黑名单rm -rf /, mkfs, dd, shutdown, 反弹 shell 检测等
  • 用户确认:写入/删除/命令执行必须用户确认
  • 安全提示词注入:自动向 system prompt 追加工具使用安全规则

记忆系统安全

  • 记忆提取仅基于对话内容,不读取文件系统
  • 记忆存储在本地 IndexedDB,不上传到任何服务器
  • 用户可随时查看、编辑、删除任意记忆条目
  • 支持一键关闭自动记忆功能

📋 更新日志

完整更新日志和项目发展历程请查看 docs/CHANGELOG.md

最新版本

v3.0.0-patch2 — 稳定性修复

  • 🔧 Tool Calling IPC 卡死修复(25 秒硬超时 + 多层保护)
  • 🔧 Electron contextIsolation 兼容(自定义 prompt/confirm 弹窗)
  • 🔧 日志面板默认常驻显示,启动日志不再丢失
  • 🔧 新建会话时强制中断生成并恢复发送按钮
  • 📝 对齐 Ollama 官方 Tool Calling 文档

v3.0.0 — Tool Calling & Agent 记忆系统

  • 🔧 7 个本地工具 + Agent Loop 引擎 + 安全模型
  • 🧠 自动记忆提取 + 跨会话持久化 + 可视化管理
  • 记忆检索 → RAG 检索 → Tool Calling 三层协作

📄 License

MIT

S
Description
Ollama GUI desktop client
Readme MIT
5.3 MiB
v0.16.12
Latest
2026-07-20 14:01:07 +08:00
Languages
TypeScript 86.1%
CSS 7.8%
HTML 6.1%