Files
cmshoppe/docs/tasks/T-600.md
T

39 lines
2.0 KiB
Markdown

---
id: T-600
title: AI工场 BYOK Key 本地 DPAPI 存储与设置 UI
phase: 8
deps: [T-599]
status: TODO
created: 2026-07-11
---
## 问题 / 背景
自定义 OpenAI Key 属于高敏感信息。既不能写进 `data/config.json` 明文,也不能沿用旧 `data/config/ai_models.json` 的普通 direct 模型清单给用户暴露。Windows 桌面版需要用当前用户/设备绑定的本地加密保存,并且 UI 只允许录入、替换、清除和测试,不回显明文。
## 方案
- 新增 BYOK secret 存储模块,Windows 使用 DPAPI 保护 Key;非 Windows 开发环境可用测试替身,但正式打包只面向 Windows。
- 存储文件放 `data/config/byok_secrets.json` 或同级专用文件,必须 gitignore;文件复制到另一 Windows 用户/设备不能直接解密。
- ⑤设置或 AI工场设置区新增“自定义模型”配置入口,但默认仍是 cmhub 托管;只有用户显式选择自定义才显示 OpenAI Key 输入、替换、清除、测试连接。
- UI 只显示掩码和保存状态;保存/替换时弹中文提示“密钥仅本机加密保存,模型费用由服务商收取”。
- 所有日志、状态栏、弹窗、run_logs 和本地诊断日志都不得包含 Key、Key 片段、完整请求头或 DPAPI 原始密文。
## 验收要点
- 保存、加载、替换、清除、错误密文、跨用户不可解密均有纯逻辑测试或可控平台测试。
- UI 不回显明文;离开未保存确认与现有 T-531 设置脏状态兼容。
- 未配置 Key 时自定义来源不可提交任务,提示用户先配置;cmhub 托管来源不受影响。
- 打包校验确认不会把本地 Key 文件打进 release。
- 运行 ruff、compileall、unittest、`git diff --check`。
## 边界(不改什么)
- 不实现 submit/poll 生图,不调用 OpenAI,不改 cmhub 托管默认来源。
- 不把 Key 存 SQLite 普通字段,不支持云同步 Key。
- 不支持用户填写任意 Provider URL。
## 执行记录
(完成后记录存储文件、DPAPI 兼容性和 GUI 验证。)