桌面应用

桌面版是 Tauri 2 外壳:Rust 进程负责窗口、托盘与更新,同时把打包好的后端 sidecar 拉起来,前端跑在 WebView 里。

安装

渠道产物依赖
fatHetu_x.y.z_x64-setup.exe / .msi无(自带 .NET 运行时)
slimHetu.Slim._x.y.z_x64-setup.exe / .msi系统需安装 .NET 10 运行时
Linux.AppImage / .debAppImage 免安装
版本号(两处) tauri.conf.json Hetu.Api.csproj PR 合并 main 打 tag scripts/tag-release.ps1 触发 Release Build CI 构建 fat / slim × Windows / Linux 签名 + 更新清单(缺渠道即失败) GitHub Release 安装包 + .sig latest*.json(主源 + 3 镜像) 客户端更新 主源 → 3 个镜像回退 NSIS 安装钩子清理残留后端
发版到更新:CI 产出双渠道安装包与更新清单,客户端按「GitHub → 三个镜像」顺序取清单并校验签名。

自动更新

  • 清单来源顺序:GitHub 主源 → 三个加速镜像(ghproxy.net / gh-proxy.com / ghfast.top)。
  • 两个渠道各自独立的清单:latest.json(fat)与 latest-slim.json(slim),互不覆盖。
  • 安装包带签名,校验失败会拒绝安装;安装模式为 passive(进度可见、少交互)。
  • 导航栏版本号旁出现更新角标,点开可看本次更新内容。
安装包内置安装钩子:在覆盖文件前先结束可能残留的后端进程(taskkill /F /IM Hetu.Api.exe),避免 sqlite-vec\vec0.dll 被占用导致安装失败。

托盘与进程生命周期

行为说明
关闭窗口默认最小化到托盘,后端继续运行(后台任务不中断);可在设置 → 应用设置关闭该行为
退出托盘菜单「退出 Hetu」:结束后端子进程后退出
异常退出后端记住外壳进程号(HETU_PARENT_PID);检测到父进程消失会自行退出,不留孤儿进程占用端口
开发复用开发期若 HETU_API_DEV_PORT 指定的端口已有后端,外壳复用它而不重复启动

安装目录与数据目录

路径(Windows 示例)内容
<安装目录>\Hetu (Slim).exe外壳可执行文件(fat 渠道为 Hetu.exe)
<安装目录>\Hetu.Api.exe后端 sidecar(安装钩子会确保它没有在运行)
<安装目录>\wwwroot\前端静态资源(由后端提供)
<安装目录>\sqlite-vec\vec0.dllSQLite 向量扩展(被残留后端占用时会导致安装失败)
%LOCALAPPDATA%\Hetu\hetu.db数据库(+ -wal / -shm)
%LOCALAPPDATA%\Hetu\logs\日志

安装钩子

src-tauri/nsis-hooks.nsh 在复制文件前执行(NSIS_HOOK_PREINSTALL):

!macro NSIS_HOOK_PREINSTALL
  DetailPrint "Stopping leftover Hetu backend..."
  nsExec::Exec '"$SYSDIR\taskkill.exe" /F /IM Hetu.Api.exe /T'
  Pop $0
  Sleep 500
!macroend

工作树目录与自动清理

项默认 / 可选项
根目录仓库父目录下的 .hetu-worktrees/<仓库名>/<工作树名>
自定义设置 → 工作区:绝对路径,且不能位于仓库内部(会在保存时校验)
清理条件改动已合并(或远端分支已删除)+ 工作区干净 + 空闲超过阈值
清理间隔1 / 6 / 12 / 24 小时,或关闭自动清理
是否删分支默认只删工作树目录,分支保留;可改为连分支一起删
手动执行设置页有「立即清理」按钮,返回检查 / 删除 / 保留的统计

数据位置

外壳通过 HETU_DATA_DIR 告诉后端数据目录:Windows 上是 %LOCALAPPDATA%\Hetu(hetu.db + WAL、logs/);迁移机器时整体拷贝该目录即可。

自己打包

# 1) 先出后端 sidecar(fat / slim 二选一)
pwsh ./scripts/publish-backend.ps1 -Mode SelfContained      -Rid win-x64
pwsh ./scripts/publish-backend.ps1 -Mode FrameworkDependent -Rid win-x64

# 2) 再出安装包
cd shell/hetu-desktop
npm run tauri:build                                            # fat
npm run tauri:build -- --config src-tauri/tauri.slim.conf.json  # slim

sidecar 命名必须符合 Tauri 约定:binaries/Hetu.Api-<rust-target-triple>(.exe)。

排障

现象处理
安装报 Error opening file for writing有残留后端在占用文件:任务管理器结束所有 Hetu.Api.exe 后点重试;新版本安装包会自动处理
更新报 Could not fetch a valid release JSON清单没取到。用浏览器打开 releases/latest/download/latest.json(slim 是 latest-slim.json)确认可访问,再升级到最新版
窗口不见了点托盘图标唤回;仍在后台运行(后端未退出)