feat(copilot): complete runtime provider configuration

This commit is contained in:
2026-07-13 14:57:28 +08:00
parent 6b42853c0b
commit 0a69d80f7c
17 changed files with 1163 additions and 319 deletions
@@ -14,7 +14,7 @@
3. LLM Provider、Base URL、API Key 属于**平台级配置**,对整套 GoChat 安装生效。
4. 功能开关、功能模型、回复风格属于**账户级配置**,只影响当前 Account。
5. Assistant 的提示词、Guardrails、Response Guidelines、知识文档和 Inbox 绑定继续在 Assistant 页面管理,不塞入 Copilot 配置页。
6. API Key 使用基于现有 JWT Secret 派生密钥的 AES-256-GCM 加密后落库;接口只返回掩码,日志禁止记录,页面不提供查看明文能力。
6. API Key 以明文写入 `installation_configs.value`;接口只返回配置状态和掩码,日志禁止记录 Key 或 Authorization Header,页面不提供查看明文能力。
7. Copilot 在系统中全局永久启用,不提供总开关,也不允许通过环境变量、配置文件或页面关闭。
8. Copilot Provider 参数只从数据库读取,不定义任何 Copilot/Captain 环境变量。
9. 除 Embedding 维度变化外,配置保存后应运行时生效,不要求重启服务。
@@ -182,12 +182,13 @@ Assistant 自身的 Temperature、Guardrails、Response Guidelines 优先级高
| InstallationConfig Name | 内容 |
|---|---|
| `COPILOT_PROVIDER_CONFIG` | 不含密钥的 JSON 配置 |
| `COPILOT_API_KEY` | AES-256-GCM 加密后的 API Key |
| `COPILOT_CHAT_API_KEY` | Chat Provider API Key 明文 |
| `COPILOT_EMBEDDING_API_KEY` | 独立 Embedding Provider API Key 明文;复用 Chat 凭据时为空 |
### 8.2 API Key 处理要求
- Copilot API Key 使用 AES-256-GCM 加密后写入 `installation_configs.value`加密密钥由现有 JWT Secret 派生
- 更换 JWT Secret 前必须先重新保存 Copilot API Key,否则旧密文将无法解密
- Copilot API Key 直接以明文写入 `installation_configs.value`不做 AES-256-GCM 或其他应用层加密
- 数据库、备份和运维访问权限承担密钥保护责任;密钥不得进入普通配置导出、日志或错误响应
- API 响应只返回:`configured: true/false``masked_value: "sk-****abcd"`
- 更新请求中省略 `api_key` 表示保留原值;`clear_api_key: true` 才允许清除。
- 错误日志、审计日志、连接测试响应均不得包含 Key、Authorization Header 或完整请求体。