凭据金库(Vault)
凭据金库是 Sigil 的核心。所有 Token、密码、私钥都在这里集中托管,明文不出本机。
设计目标
- 明文不进文件系统:写入瞬间就交给 OS 密钥环
- 明文不进 UI:录入后再也看不到原始值
- 明文不进日志:所有日志路径都经过脱敏
- 明文不进网络:除非是你主动调用的能力执行所需
凭据类型
| 类型 | 适用平台 | 必填字段 | 特殊校验 |
|---|---|---|---|
github_token | GitHub | Token | 前缀 ghp_ / github_pat_ |
gitee_token | Gitee | Token | 长度校验 |
gitcode_token | GitCode | Token | 长度校验 |
db_conn | PostgreSQL / MySQL / SQLite | 主机 / 端口 / 用户 / 密码 / 库名 | 尝试只读连接 |
http_api | 任意 HTTP 服务 | 基地址 / Header 名 / Key | URL 格式 |
ssh_key | 远程服务器 | 私钥内容 / 路径 / 密码(可选) | OpenSSH 格式 |
generic_password | 通用密码 | 密码 | 强度提醒 |
custom | 自定义结构 | JSON | JSON Schema 校验(可选) |
每种类型都有对应的 能力体系 默认绑定,比如 github_token 会自动被 git_query / git_mutate / http_request(针对 api.github.com)使用。
存储结构
┌─────────────────────────────────────────────┐
│ Vault 一条记录 │
├─────────────────────────────────────────────┤
│ id uuid │
│ name "github-personal" │
│ type "github_token" │
│ tags ["dev", "readonly"] │
│ ciphertext_ref "sigil_cred_xxxxx" ─────┐ │
│ created_at 2026-05-29T10:00:00Z │ │
│ updated_at 2026-05-29T10:00:00Z │ │
│ last_used_at 2026-05-29T10:32:11Z │ │
│ expires_at 2026-06-28T10:00:00Z │ │
│ scope_policy {whitelist: [...]} │ │
└──────────────────────────────────────────┼──┘
↓
OS 密钥环(Windows 凭据管理器)
┌─────────────────────────────┐
│ Service: com.agilefr.sigil │
│ Account: sigil_cred_xxxxx │
│ Secret: AES-256-GCM 密文 │
└─────────────────────────────┘SQLite 里只有元数据 + 一个指向密钥环条目的引用。即使 SQLite 文件被人复制走,也得不到明文(密钥环密文 + AES 主密钥都不在文件系统里)。
使用控制(Scope Policy)
每条凭据可以配置"哪些能力可以用我":
全部能力(默认)
最宽松。任何能力调用时都可能命中这条凭据。适合个人开发、信任 AI 客户端的场景。
白名单
只允许指定能力使用。最常用:
github-personal(只读 Token)
├ ✅ git_query 允许:拉分支/提交/tag
├ ✅ http_request 允许:调用 GitHub REST API
└ ❌ 其他能力 禁止黑名单
允许大部分能力,禁止个别。典型场景:
prod-db-admin(生产数据库管理员)
├ ❌ db_execute 禁止:防止 AI 误改生产数据
└ ✅ 其他能力 允许(含 db_query 只读)Scope Policy 在每次能力调用前由 Sigil 强制校验。客户端无法绕过——它根本不知道有没有这道闸门。
标签策略
标签是组织凭据的轻量工具。建议双维度:
- 环境:
prod/staging/dev/local - 身份:
personal/work/client-xxx
搜索框(Vault 列表顶部)支持按"名称 + 标签"模糊匹配。当凭据超过 30 个时,标签的价值开始显现。
生命周期管理
| 事件 | Sigil 行为 |
|---|---|
| 距过期 7 天 | 首页右上角铃铛提醒 |
| 距过期 1 天 | 红色高亮 + 列表置顶 |
| 已过期 | 默认禁用(仍可手动延期) |
| 过期 30 天 | 建议删除提示 |
| 90 天未使用 | 标记为"可能闲置" |
Sigil 不会自动轮换 Token——每家服务商的 Token 生成 API 都不一样,自动化需要单独适配。Sigil 的定位是提醒 + 协助,由你手动到源头重置。
批量导入
设置 → 数据导入 支持从以下来源批量导入:
| 来源 | 说明 |
|---|---|
GitHub CLI (gh auth) | 扫描 ~/.config/gh/hosts.yml |
.env 文件 | 解析 KEY=value 行,预览后用户挑选 |
Sigil 备份文件(.sigil-backup) | 跨机器迁移 |
导入过程:
- 解析候选 Token 列表(不立即落库)
- 用户在 UI 里勾选要导入的项 + 重命名 + 调整标签
- 确认后批量加密落库
源文件(如 .env)不会被 Sigil 修改或删除。
删除是不可逆的
删除一条凭据时:
- 清除 OS 密钥环中对应密文
- 清除 SQLite 元数据
- 不进回收站
如果这条凭据正在被某些能力配置引用(比如自定义 HTTP 模板默认用它),删除时会先提示并要求重新关联。
没有"找回"机制——这是设计。需要的话,用 导出 提前备份。
备份与迁移
导出
设置 → 数据导出:
- 选择凭据范围(全部 / 按标签 / 按类型)
- 输入主密码(用户自定义,不和 OS 密钥环挂钩)
- 生成
.sigil-backup文件(PBKDF2 + AES-256-GCM 包裹)
主密码不在备份文件里,需要你单独记住。
导入
新机器装好 Sigil → 设置 → 数据导入 → 选 .sigil-backup → 输入主密码 → 凭据进金库。
跨平台
备份文件格式是与 OS 无关的——Windows 上导出的文件可以在 macOS 上导入(当 macOS 版本上线后)。
