Files
metona-ollama-desktop/docs/BUILD.md
T
thzxx 8805858b79 refactor: 第三方库替换 & 代码精简 — v5.1.5
- Markdown 解析器:内联正则 → marked 库(完整 GFM 支持)
- HTML 净化器:内联 DOM 遍历 → DOMPurify(业界标准)
- crypto.ts:删除 sha256js/xorBytes 死代码回退路径
- 消除 5 个文件中 escapeHtml/formatSize 重复定义
- 版本号升级至 5.1.5
2026-04-19 20:48:56 +08:00

366 lines
17 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.
# Windows 安装包构建指南
## 环境要求
- Ubuntu 24.04 (amd64)
- Node.js v22+
- Wine 9.0+(用于 electron-builder 交叉编译)
- i386 架构已启用(`dpkg --add-architecture i386`
- p7zip-full(解压构建资源)
## 快速构建(3 步)
```bash
# 1. 克隆并安装依赖
git clone https://gitee.com/thzxx/metona-ollama-desktop.git
cd metona-ollama-desktop
git checkout metona-ollama-desktop-v5.1.5
npm config set registry https://registry.npmmirror.com
npm install
# 2. 恢复构建缓存(首次从镜像下载,后续使用本地缓存)
bash restore-build-cache.sh
# 3. 构建
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
```
产出文件在 `release/` 目录。
## 构建资源管理
构建需要以下资源(共 ~145MB),通过 `restore-build-cache.sh` 自动管理:
| 资源 | 大小 | 来源 |
|------|------|------|
| Electron v33.4.11 win32-x64 | 110MB | npmmirror |
| NSIS 3.0.4.1 | 7.8MB | GitHub (ghfast.top 代理) |
| NSIS Resources 3.4.1 | 3.0MB | GitHub (ghfast.top 代理) |
| winCodeSign 2.6.0 | 24MB | GitHub (ghfast.top 代理) |
**工作原理**
- 首次运行:从镜像下载 → 自动缓存到 `build-resources/``~/.cache/`
- 后续运行:从 `build-resources/` 复制到 `~/.cache/`(秒级完成)
- `build-resources/``.gitignore` 中,不进 gitElectron 二进制 110MB 超 git 限制)
**自定义镜像**
```bash
GITHUB_PROXY=https://gh-proxy.com/ bash restore-build-cache.sh
```
## 详细步骤
### 1. 安装 Wine
```bash
dpkg --add-architecture i386
apt-get update
apt-get install -y wine wine32 p7zip-full
```
### 2. 安装 npm 依赖
```bash
npm config set registry https://registry.npmmirror.com
npm install
```
### 3. 恢复构建缓存
```bash
bash restore-build-cache.sh
```
首次会从镜像下载约 145MB 资源,后续构建只需秒级恢复。
### 4. 构建 Windows 安装包
```bash
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
```
## 常用命令
```bash
npm start # 开发运行
npm run pack # 仅构建目录(不打包)
npm run dist:nsis # 仅 NSIS 安装包
npm run dist # NSIS 安装包
```
## 构建产物
| 文件 | 说明 |
|------|------|
| `release/Metona Ollama Setup X.X.X.exe` | NSIS 安装包(可选目录、创建快捷方式) |
> v3.2.0 起不再提供绿色便携版,仅保留 NSIS 安装包。
## 发布到 Gitee
### 创建 Release
```bash
TOKEN="your_access_token"
curl -X POST "https://gitee.com/api/v5/repos/thzxx/metona-ollama/releases?access_token=$TOKEN" \
-H "Content-Type: application/json" \
-d '{"tag_name":"v3.2.0","name":"v3.2.0","body":"Release notes","target_commitish":"refactor/modular-architecture"}'
```
### 上传附件
```bash
TOKEN="your_access_token"
RELEASE_ID="600564"
curl -X POST "https://gitee.com/api/v5/repos/thzxx/metona-ollama/releases/$RELEASE_ID/attach_files?access_token=$TOKEN" \
-H "Content-Type: multipart/form-data" -F "file=@release/Metona Ollama Setup 3.2.0.exe"
```
## 故障排查
| 问题 | 解决方案 |
|------|----------|
| apt 源超时(mirrors.cloud.aliyuncs.com 不可达) | `sed -i 's\|mirrors.cloud.aliyuncs.com\|archive.ubuntu.com\|g' /etc/apt/sources.list && apt-get update` |
| npm install 卡住无输出 | 终止后重试 `npm install --prefer-offline`,通常首次已装大部分包,二次秒完成 |
| npmmirror 缺少 Electron 包(restore-build-cache.sh 失败,NoSuchKey | npmmirror 可能未同步特定版本。跳过缓存脚本,直接 `npm run dist`electron-builder 会自动从 npmmirror 下载(`ELECTRON_MIRROR` 环境变量生效) |
| electron-builder 报错 "wine is required" | Wine 是签名步骤的硬依赖,必须安装:`dpkg --add-architecture i386 && apt-get update && apt-get install -y wine wine32` |
| apt 源 i386 架构下载失败 | 先确保主源可用(切 archive.ubuntu.com),再 `apt-get update`,最后装 wine |
| Electron 下载超时 | 设 `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/` 或直接用 `npm run dist`electron-builder 自动处理) |
| NSIS/winCodeSign 下载超时 | `GITHUB_PROXY=https://gh-proxy.com/ bash restore-build-cache.sh` |
| winCodeSign 下载 EOF 错误(github.com 连接中断) | 手动下载并缓存(见下方) |
| npm install 时 Electron "socket hang up" | 设置 `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/` 后重试 |
| restore-build-cache.sh 因 Electron 失败导致后续缓存全部跳过 | 跳过脚本,手动下载缺失资源(见下方) |
| "symbol already declared" | 检查 TS 文件中的重复 `const`/`let` 声明 |
### 手动下载构建缓存(逐项修复)
`restore-build-cache.sh` 部分失败时,可手动下载缺失资源:
```bash
GITHUB_PROXY="https://ghfast.top/"
GITHUB_ORIG="https://github.com/electron-userland/electron-builder-binaries/releases/download"
CACHE="$HOME/.cache/electron-builder"
# winCodeSign(构建签名步骤硬依赖)
mkdir -p "$CACHE/winCodeSign"
wget -O "/tmp/winCodeSign-2.6.0.7z" \
"${GITHUB_PROXY}${GITHUB_ORIG}/winCodeSign-2.6.0/winCodeSign-2.6.0.7z"
cd "$CACHE/winCodeSign" && 7z x -y "/tmp/winCodeSign-2.6.0.7z" -o"winCodeSign-2.6.0"
# NSIS
mkdir -p "$CACHE/nsis"
wget -O "/tmp/nsis-3.0.4.1.7z" \
"${GITHUB_PROXY}${GITHUB_ORIG}/nsis-3.0.4.1/nsis-3.0.4.1.7z"
cd "$CACHE/nsis" && 7z x -y "/tmp/nsis-3.0.4.1.7z" -o"nsis-3.0.4.1"
# NSIS Resources
wget -O "/tmp/nsis-resources-3.4.1.7z" \
"${GITHUB_PROXY}${GITHUB_ORIG}/nsis-resources-3.4.1/nsis-resources-3.4.1.7z"
cd "$CACHE/nsis" && 7z x -y "/tmp/nsis-resources-3.4.1.7z" -o"nsis-resources-3.4.1"
# 清理临时文件
rm -f /tmp/winCodeSign-2.6.0.7z /tmp/nsis-3.0.4.1.7z /tmp/nsis-resources-3.4.1.7z
```
> Electron 无需手动下载——设置 `ELECTRON_MIRROR` 后 electron-builder 会自动处理。
### ⚠️ 已知问题:npmmirror 与 restore-build-cache.sh 兼容性
`restore-build-cache.sh` 第一步从 npmmirror 下载 Electron zip 时可能遇到 **NoSuchKey** 错误,因为 npmmirror 未同步该版本。此时脚本会因 `set -e` 直接退出,后续 NSIS/winCodeSign 缓存也不会恢复。
**推荐做法**:跳过 `restore-build-cache.sh`,直接执行:
```bash
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
```
electron-builder 会自动处理所有依赖下载(Electron、NSIS、winCodeSign),虽然首次较慢(~5分钟),但无需手动管理缓存。
## 构建日志
### v5.1.52026-04-19 — metona-ollama-desktop 仓库
- ♻️ 工具卡片从聊天区域迁移到工作空间面板(新增「🔧 工具」页签)
- 工具执行自动切换工具页签,run_command 自动切换终端页签
- ✨ 终端空闲状态优化(ASCII Logo + 工作空间信息 + 轮转贴士)
- ✨ 工具和文件页签空闲状态优化(图标网格 + 目录引导)
- ✨ 历史会话工具调用展示(可折叠工具卡片)
- 🔧 自动记忆优化(禁止自动提取规则、提高提取门槛与质量)
- 🔧 工具页签自动切换协调性修复
- 🔧 工作流完整性和协调性修复(清理旧状态、中止保留记录、retry 保存 think
- 📝 版本号更新至 5.1.5
-`Metona Ollama Setup 5.1.5.exe`82MB
- ✅ Gitee Release v5.1.5-desktopID: 622607
- 构建一次通过,无需代码修复
### v5.1.32026-04-19 — metona-ollama-desktop 仓库
- 🔧 修复 any 滥用:78 处 → 38 处(减少 51%),保留 API 参数构造等合理场景
- ♻️ 拆分 tool-handlers.ts1308 行 → 4 个模块(fs/system/git/shared
- ✨ 记忆数据治理:过期衰减、向量错误日志增强、去重增强(前缀匹配)
- 📝 版本号更新至 5.1.3
### v5.1.22026-04-19 — metona-ollama-desktop 仓库
- ✨ 预算警告临时层:Agent Loop 接近迭代上限时注入临时提示,≤5 轮时 warning,≤2 轮时 critical
- ✨ Shadowing 防护:MCP 工具注册时检测与内置工具重名,自动跳过并日志警告
- ✨ 记忆容量限制:上限 500 条,超限时自动清理低价值条目(按 importance + useCount + 近期使用综合评分,rule 类型受保护)
- 📝 版本号更新至 5.1.2
### v5.1.12026-04-19 — metona-ollama-desktop 仓库
- 🔧 搜索引擎:DuckDuckGo → Bing + 百度 + Google(三引擎),解决国内不可达问题
- 🔧 移除全部超时限制:Agent Loop、流式响应、工具执行、web_fetch、download_file
- 🔧 Agent 最大轮数默认 85 轮,设置面板可配置
- ✨ 执行日志导出功能(日志面板新增导出按钮)
- 🔧 TOOL_USAGE_GUIDE 新增禁止猜 URL 和中文搜索结果利用规则
- 📝 版本号更新至 5.1.1
### v5.1.02026-04-18 — metona-ollama-desktop 仓库
- ✨ 新增 4 个工具:memory_replace、memory_remove、skill_list、skill_view(总数 38 个)
- ✨ 记忆安全扫描(prompt injection / 敏感信息 / 不可见字符检测)
- 🔧 Agent Loop 迭代预算可配置化(maxTurns
- 🔧 工具结果截断按工具独立配置
- 📝 版本号更新至 5.1.0
### v5.0.12026-04-18 — metona-ollama-desktop 仓库
- 🔧 修复 DuckDuckGo 搜索超时过长(15s → 8s),添加 Google 作为第三搜索引擎兜底
- 🔧 修复 web_fetch User-AgentMetonaOllama/1.0 → Chrome UA),增加超时至 30 秒
- 🔧 修复 Agent Loop 跨轮去重误杀失败工具的重试(仅对成功的调用去重,失败的允许重试)
- 🔧 优化 TOOL_USAGE_GUIDE:新增搜索 fallback 规则(fetch 失败时直接用搜索结果回答)、禁止抓取 SPA 页面、搜索查询进化指导
- 🔧 更新 AGENT_SYSTEM_PROMPT:工具数 25 → 34,新增 fetch 失败 fallback 规则
- 📝 版本号更新至 5.0.1package.json / package-lock.json / index.html / README.md / CHANGELOG.md / BUILD.md / DEVELOPMENT.md
-`Metona Ollama Setup 5.0.1.exe`82MB
- ✅ Gitee Release v5.0.1-desktopID: 620560
- Wine 9.0 已安装,npm 编译无错误,构建一次通过
### v5.0.02026-04-18 — metona-ollama-desktop 仓库
- ✨ 新增 8 个浏览器控制工具(browser_open/screenshot/evaluate/extract/click/type/scroll/close
- ✨ 新增 Cron 定时任务系统(cron-manager.ts
- ✨ 新增技能自动生成系统(skills 表 + 自动提取 + 关键词搜索)
- ✨ 新增用户画像自动推断(技术栈检测 + system prompt 注入)
- ✨ 新增人格模式(多预设模板)
- ✨ 新增 Heartbeat 主动检查机制
- ✨ 新增子代理委派工具(spawn_task)
- 🔧 工具并行执行优化(批次调度 + 依赖检测)
- 🔧 记忆系统增强(rule/preference 始终注入)
- 📝 版本号更新至 5.0.0package.json / package-lock.json / index.html / README.md / CHANGELOG.md / BUILD.md / DEVELOPMENT.md
### v4.0.02026-04-17 — metona-ollama-desktop 仓库
- 📦 SQLite (sql.js WASM) 替代 IndexedDB6 张表 + FTS5 全文搜索(零原生依赖)
- 🔧 Agent Loop 升级为 ReAct 模式(15 轮,10 分钟超时,执行轨迹记录)
- 🧠 新增 4 个记忆/会话管理工具(memory_search, memory_add, session_list, session_read
- 🎨 UI 主题改版:暗色 Fluent → 暖色调亮色(奶白 + 珊瑚橙)
- ✨ 新增 context-manager.ts 上下文管理服务
- 📝 版本号更新至 4.0.0package.json / package-lock.json / index.html / README.md / CHANGELOG.md / BUILD.md / DEVELOPMENT.md
### v3.3.42026-04-17 — metona-ollama-desktop 仓库
- 🔧 修复 Agent Loop 工具调用重复问题(缓存 + 同轮/跨轮去重 + 自动终止)
- 🔧 修复 web_fetch 默认截断 10000 字符(改为默认不截断)
- 🔧 修复记忆系统 rule/preference 类型不生效(改为始终注入,不依赖关键词匹配)
- 🔧 修复 buildMemoryContext 三类记忆措辞无区分(规则→强制、偏好→建议、事实→参考)
- 🔧 移除 tool-registry.ts executeTool 中重复的 logToolStart 调用
- 📝 版本号更新至 3.3.4
### v3.3.32026-04-17 — metona-ollama-desktop 仓库
- 🔧 修复工具面板中除 run_command 外所有工具错误显示为"需确认"
- 🔧 修复 run_command 执行模式下拉框未选中项白字白底不可见
- 🎨 加宽工具面板、历史记录、设置面板、帮助面板
- ✨ 增强联网搜索与网页抓取联动(TOOL_USAGE_GUIDE 新增规则)
- ✨ 增强 AI 主动调用工具的 prompt 指导(新增第 7 条规则)
- ✨ web_search 默认结果数 5 → 15
- 📝 版本号更新至 3.3.3
### v3.3.22026-04-16 — metona-ollama-desktop 仓库
- ✨ 新增 web_search 联网搜索工具(DuckDuckGo + Bing 双引擎,21 个工具)
- 🔧 除 run_command 外所有工具改为自动执行无需确认
- 🔧 run_command 改为下拉框设置:自动/需确认/禁用三种模式
- 📝 版本号更新至 3.3.2package.json / index.html / README.md / CHANGELOG.md / BUILD.md
- 📝 同步更新 README.md 安全说明、DEVELOPMENT.md 开发规范、index.html 帮助面板
### v3.3.12026-04-16 — metona-ollama-desktop 仓库
- 🔧 修复开启工具调用后图片无法传给 AIagent-engine.ts + input-area.ts
- 🔧 修复记忆系统弹框自动记忆开关点击无响应(memory-modal.ts CSS 类名修正)
- 🎨 统一应用图标为科技感羊驼(llama.png / llama.ico
- 📝 版本号更新至 3.3.1package.json / index.html / README.md / CHANGELOG.md / BUILD.md
### v3.2.62026-04-15 — metona-ollama-desktop 仓库
-`Metona Ollama Setup 3.2.6.exe`78MB
- ✅ Gitee Release v3.2.6-desktopID: 604992
- 🔧 工作空间面板从 position:fixed 改为 flex 子元素,修复与主内容区错位
- 🎨 Token 统计颜色优化(琥珀色图标+数值,消息内 token 高亮)
- ⚠️ 构建问题及处理:
1. `restore-build-cache.sh` npmmirror NoSuchKey → 跳过,electron-builder 自动下载
2. nsis-resources-3.4.1 GitHub 下载 EOF → 使用 ghfast.top 代理手动下载缓存
3. 无编译错误,手动缓存后构建一次通过
### v3.2.52026-04-14 — metona-ollama-desktop 仓库
-`Metona Ollama Setup 3.2.5.exe`78MB
- ✅ Gitee Release v3.2.5-desktopID: 601311
- 🔧 工具相对路径修复、工作空间单一终端重构、token SVG 图标、base64 编码修复
- ⚠️ 构建问题及处理:
1. apt 源 `mirrors.cloud.aliyuncs.com` 不可达 → 切换 `archive.ubuntu.com`
2. `restore-build-cache.sh` npmmirror NoSuchKey → 跳过,electron-builder 自动下载
3. 无编译错误,构建一次通过
### v3.2.42026-04-08 — metona-ollama-desktop 仓库
- 🔧 AI 命令执行走工作空间终端,实时流式显示
- 🔧 设置面板修改地址后同步更新顶部导航连接状态
- ✅ 分支 `metona-ollama-desktop-v3.2.4` 已创建并推送
### v3.2.32026-04-08 — metona-ollama-desktop 仓库
- ✅ 工作空间面板改为常驻显示,固定宽度 480px
- ✅ 修复 tool-registry.ts 缺少 logInfo 导入导致 run_command 异常
- ✅ Gitee Release v3.2.3-desktop(仓库 thzxx/metona-ollama-desktop
- ✅ 分支 `metona-ollama-desktop-v3.2.3` 已创建并推送
### v3.2.22026-04-08 — metona-ollama-desktop 仓库
-`Metona Ollama Setup 3.2.2.exe`78MB
- ✅ Gitee Release v3.2.2-desktopID: 600992,仓库 thzxx/metona-ollama-desktop
- ✅ 分支 `metona-ollama-desktop-v3.2.2` 已创建并推送
- ⚠️ 构建问题及处理:
1. apt 源 `mirrors.cloud.aliyuncs.com` 不可达 → 切换 `archive.ubuntu.com`
2. npm install 时 Electron socket hang up → 设 `ELECTRON_MIRROR` 重试成功
3. restore-build-cache.sh 第一步失败(npmmirror NoSuchKey)→ 跳过脚本
4. electron-builder 直接构建时 winCodeSign 从 GitHub 下载 EOF → 使用 ghfast.top 代理手动下载缓存
5. 手动缓存 NSIS 和 NSIS Resources 后重新构建成功
### v3.2.12026-04-07 — metona-ollama-desktop 仓库
-`Metona Ollama Setup 3.2.1.exe`78MB
- ✅ Gitee Release v3.2.1-desktopID: 600984,仓库 thzxx/metona-ollama-desktop
- ♻️ 移除便携版构建,仅保留 NSIS 安装包
### v3.2.02026-04-07 — metona-ollama-desktop 仓库
-`Metona Ollama Setup 3.2.0.exe`78MB
-`MetonaOllama-Portable-3.2.0.exe`78MB
- ✅ Gitee Release v3.2.0-desktopID: 600739,仓库 thzxx/metona-ollama-desktop
- ⚠️ 构建中遇到问题:npmmirror 缺 electron zip、npm install 卡顿、需安装 Wine。详见上方故障排查。
### v3.0.02026-04-06
-`Metona Ollama Setup 3.0.0.exe`78MB
-`MetonaOllama-Portable-3.0.0.exe`78MB
- ✅ Gitee Release v3.0.0ID: 600370
## 提速清单
| 环节 | 默认 → 加速 | 效果 |
|------|------------|------|
| apt 源 | aliyuncs → archive.ubuntu.com | 稳定 |
| npm | npmjs → npmmirror | ~17s |
| Electron | github → npmmirror | ~3s |
| NSIS/winCodeSign | github → ghfast + 本地缓存 | 秒级 |