数据与安全

数据主权是前提:单文件数据库、可整体搬迁、随时导出;无账号、无遥测。

数据目录

运行方式位置
桌面版(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 扩展。两种数据库功能一致,但数据不互通:切换后需要在新的库里重建笔记与索引。

向量存储

数据库方案维度
SQLitesqlite-vec 的 vec0 虚拟表(与元数据表通过 rowid 对应)由 Embedding:Dimensions 决定,默认 1536
PostgreSQLpgvector 列 + 索引同上

安全边界

项实现
API KeyASP.NET DataProtection 加密后落库(Windows 用 DPAPI 保护密钥),日志与接口响应不含明文
SSH 凭据同样加密存储
外发请求只发往你配置的模型供应商、主动启用的搜索 / MCP 服务;无遥测上报
Markdown 渲染经 DOMPurify 过滤,避免笔记内容注入脚本
命令执行受权限模式约束(计划 / 只读 / 询问 / 自动 / 绕过),高风险操作默认需要确认
分享链接只暴露单篇笔记的渲染结果,可随时停用,并记录访问次数
SQL 注入全部走 EF Core 参数化查询