数据与安全
数据主权是前提:单文件数据库、可整体搬迁、随时导出;无账号、无遥测。
数据目录
| 运行方式 | 位置 |
| 桌面版(Windows) | %LOCALAPPDATA%\Hetu |
| 源码运行 | HETU_DATA_DIR 指定;未设置时为工作目录下 hetu.db |
| 数据库文件 | hetu.db(+ -wal / -shm) |
| 日志 | logs/,Serilog 按天滚动,保留 7 天 |
| SQLite 向量扩展 | sqlite-vec/vec0.dll(Linux/macOS 为 vec0.so),连接打开时自动加载 |
备份与迁移
- 设置 → 数据与备份:导出全部笔记为 Markdown 压缩包;备份与恢复数据库文件。
- 跨机器迁移:退出应用后整体拷贝数据目录(含 WAL 文件)。
运行中用文件级拷贝备份,可能丢掉尚未 checkpoint 的 WAL 内容。稳妥做法:在应用内退出后拷贝,或用内置备份功能。
环境变量与配置键
| 名称 | 作用 |
HETU_DATA_DIR | 数据目录(数据库与日志);桌面版由外壳注入 |
HETU_PARENT_PID | 外壳进程号;后端据此检测父进程消失并自行退出 |
HETU_API_DEV_PORT | 开发模式下复用已存在的后端端口 |
DatabaseProvider(appsettings) | Sqlite(默认)/ Postgresql |
ConnectionStrings:DefaultConnection | 连接字符串;SQLite 默认 Data Source=hetu.db |
Embedding:Dimensions | 向量维度(默认 1536),必须与 Embedding 模型一致 |
WorktreeConfig(数据库设置项) | 工作树根目录 |
WorktreeCleanupConfig | 自动清理:间隔、空闲阈值、是否删除分支 |
CloseToTray | 关闭窗口是否最小化到托盘 |
切换到 PostgreSQL
export DatabaseProvider=Postgresql
export ConnectionStrings__DefaultConnection="Host=localhost;Database=hetu;Username=postgres;******"
dotnet ef database update \
--project src/Hetu.Infrastructure.PostgresMigrations \
--startup-project src/Hetu.Api
PostgreSQL 需 16+ 并启用 pgvector 扩展。两种数据库功能一致,但数据不互通:切换后需要在新的库里重建笔记与索引。
向量存储
| 数据库 | 方案 | 维度 |
| SQLite | sqlite-vec 的 vec0 虚拟表(与元数据表通过 rowid 对应) | 由 Embedding:Dimensions 决定,默认 1536 |
| PostgreSQL | pgvector 列 + 索引 | 同上 |
安全边界
| 项 | 实现 |
| API Key | ASP.NET DataProtection 加密后落库(Windows 用 DPAPI 保护密钥),日志与接口响应不含明文 |
| SSH 凭据 | 同样加密存储 |
| 外发请求 | 只发往你配置的模型供应商、主动启用的搜索 / MCP 服务;无遥测上报 |
| Markdown 渲染 | 经 DOMPurify 过滤,避免笔记内容注入脚本 |
| 命令执行 | 受权限模式约束(计划 / 只读 / 询问 / 自动 / 绕过),高风险操作默认需要确认 |
| 分享链接 | 只暴露单篇笔记的渲染结果,可随时停用,并记录访问次数 |
| SQL 注入 | 全部走 EF Core 参数化查询 |