Repository navigation
feat(config): YAML 配置面整体迁移至 Dashboard Config 页(config.db + 热切换 + 密钥加密) - #288
Merged
Merged
Conversation
新增 $CODING_PROXY_HOME/config.db(sqlite3 0600、secure_delete、per-section revision 乐观并发)作为唯一配置存储:config.default.yaml 退化为随包基线,存储仅保存与默认 diff 后的最小覆盖,未触碰 section 跟随包升级。密钥按稳定路径独立存表并以 Fernet 加密(master.key 0600 / CODING_PROXY_MASTER_KEY 覆写 + key_check canary,key 不匹配绝不重生成),HTTP/CLI 统一只写不读;vendor 目标地址变更自动清空关联密钥,HTTP 写入含 ${ 的字面量与控制字符一律拒绝。resolver 提供 defaults ⊕ overrides ⊕ secrets → $tmpl 展开 → ProxyConfig 的纯解析;importer 实现旧 YAML 一次性导入(等价门:新旧 loader 产物全等,不过则不建库、legacy 只读运行),源文件不改名、marker 记 sha256、漂移拒启;首启整份复制行为移除,所有 ~/.coding-proxy 字面量路径统一由 proxy_home() 推导。
🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
config path/export/import/set/reset/set-secret/token 覆盖 bootstrap 字段修改与密钥三态管理;start 经 boot() 完成一次性导入与漂移检查并打印带 admin token 的 Dashboard 链接;usage --db 修复为真正覆盖 database.path(此前被误当配置路径传入 load_config);auth 子命令读取新解析路径,auto-login 行为保持不变。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
SecurityMiddleware 双 L 防护(L1 全局跨站/Origin 拦截、L2 Host 白名单 + 本机 IP + allowed_hosts),/api/config* 强制 X-Coding-Proxy-Admin(常量时间比较)且只写不读、422 永不回显输入、响应 no-store;uvicorn proxy_headers=False 防 XFF 伪造 loopback;/docs /redoc 关闭;流式与非流式异常日志收敛为类型+帧栈(杜绝密钥经 SSE/日志外泄)。GenerationManager 实现无停机热切换:preflight 构建 → lifespan 独立 task → 原子切换 → 旧代排空 600s 后关闭,in-flight 覆盖流式/断连,reauth 跨代交接;启动失败回退 degraded 模式(/v1 503、Config 页可修复并在线恢复);create_app 移除 legacy YAML 回退。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
8 个 section pills + 9 供应商子页 + 全字段表单(英文 label 1/12 宽 + ⓘ 中文说明同行、固定 px 列宽 token、密钥三态控件)、单一 Save 汇总与确认框(运行时影响/将清空密钥)、409/422/423 定位到字段、dirty 跟踪与 beforeunload;admin token 经 #admin= fragment 解锁仅存 localStorage;静态资源内容 hash 缓存、Chart.js SRI + CSP,CDN 不可达时页签仍可用;修复图表 tooltip 与 vendor 名两处 XSS 汇点。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
conftest 全局隔离(HOME/CODING_PROXY_HOME/CWD 指向 tmp + audit hook 守护真实 ~/.coding-proxy);覆盖 store/加密/三态/最小化不动点/导入等价矩阵(含历史全量拷贝、legacy flat、alias、¥ 定价、NATIVE_* env)/CLI/安全 guard 矩阵/API 脱敏/generation swap/degraded/registry 覆盖门/前端 DOM harness;既有 test_config_init 重写为不再复制语义。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
config-reference(SSOT:解析与存储、密钥、一次性导入)重写并以 A 档四件套图(dataflow/showcase,双主题 SVG)替换 mermaid 块;quickstart/cli-reference/dashboard(含 Config 页章节与实操截图)/api-reference(§11 配置端点)/monitoring/user-guide/README 及 zh-CN 镜像/framework/knowledge-map 同步;CHANGELOG 新增 [Unreleased];issue.md 迁移为索引表 + I-xxx 双层结构并登记 I-001;.gitignore 收敛 .archify/。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
服务端:目标地址清空规则收紧为「新目标 ≠ 包内默认端点才清空」(reset/改回默认保留密钥,兑现 Reset 不丢密钥承诺);HTTP 写 vendors 内联密钥字段由静默剥离改为 422;CLI set 拒绝 legacy flat/alias 死配置;list 形态 session_policies 归一为 dict 落库(消除 Config 页死区);-c 显式路径缺失 fail-fast 不再固化空 marker;cwd config.yaml 与 home 无关 YAML 分别纳入写入前置拦截与导入源过滤;ensure_home/create_private_file 的 OSError 映射为 StoreAccessError 并补齐三处调用方降级捕获;no-op 热切换判定改用 pin 后 prepared 配置(bootstrap 漂移后空保存不再整代换代);logging.file 空串真正禁用文件日志。 前端:predictClearedSecrets 与服务端规则三方对齐(recorded / 新建覆盖物化 / empty 记录 / 默认端点豁免均不误报);list 排序展开态随条目平移;409 定向重载失败链路修正(提示如实、重试限定范围、401 不叠 fatal 视图)。 文档:config-reference/api-reference/cli-reference/quickstart/user-guide/vendors/testing/issue.md/CHANGELOG 同步以上语义(含 strict 拒启精确口径、allowed_hosts 与 logging.file 字段行、secrets 载荷 recorded/default_env、Archify 链接锚点修复、issue.md 双层结构与完成日期回填)。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
GITHUB_ACTIONS 环境变量会让 typer 强制输出彩色 rich 帮助信息, --port 被拆成带转义的分片,先剥离 ANSI 转义再断言。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
变更摘要
将
config.default.yaml及用户 YAML 承载的全部配置迁移至 Dashboard Config 页(/dashboard?tab=config)在线管理,YAML 不再是运行时配置来源。~/.coding-proxy/config.db(sqlite3、0600、secure_delete、per-section revision 乐观并发)为唯一配置存储;config.default.yaml退化为随包发布的默认值基线,存储只保存与默认 diff 后的最小覆盖,未改动的部分跟随版本升级(消除旧版首启整份复制导致的默认值冻结)。start自动一次性导入现有 YAML(-c路径或~/.coding-proxy/config.yaml),导入前跑等价门校验(新旧加载产物ProxyConfig全等,含 ¥ 币种),不过则不建库、本次按旧 YAML 只读运行;源文件不改名不改写,marker 记 sha256,此后漂移拒启;./config.yaml不自动导入。master.key0600 或CODING_PROXY_MASTER_KEY覆写 + key-check canary);API 只写不读(Stored / Env / Empty 三态 + 尾 4 位提示);vendor 目标地址(base_url/token_url)变更自动清空关联密钥;HTTP 写入含${的字面量与控制字符一律拒绝;校验错误永不回显输入值。/v1/*503,Config 页可修复并在线恢复)。~/.coding-proxy/admin_token0600,X-Coding-Proxy-Admin头 + 常量时间比较);全局跨站(Sec-Fetch-Site/Origin)拦截 + Host 白名单(loopback + 本机 IP +server.allowed_hosts);uvicorn proxy_headers=False防 XFF 伪造;/docs/redoc关闭;非 Dashboard 响应加 sandbox CSP + nosniff;修复 Dashboard 两处存量 XSS 汇点;流式/非流式异常日志收敛为类型 + 帧栈(杜绝密钥经错误响应或日志外泄)。coding-proxy config path/export/import/set/reset/set-secret/token;bootstrap 字段(server.host/port/allowed_hosts、logging.*、database.*、auth.token_store_path)仅 CLI 可改(UI 只读);顺带修复usage --db被误当配置路径的问题。#admin=fragment 一次性解锁;Chart.js SRI + CSP,CDN 不可达时页签仍可用。动机
原有 YAML 配置链路存在四类结构性问题:默认值多写漂移、首启整份复制把存量用户冻结在旧默认、管理 API 无鉴权(跨站 CSRF / 同机进程可滥用)、密钥明文散落在 YAML 与
${VAR}展开结果中(见 docs/.agents/issue.md I-001)。验证结果
NATIVE_*env、-c路径)/CLI/安全 guard 矩阵/API 脱敏/generation swap/degraded/registry 覆盖门/前端 DOM harness 等测试。/api/status顺序变化无需重启)→ 422 行内报错 → 跨站 403、Sec-Fetch-Site: none(真实地址栏输入)放行。start自动导入并打印提示;用户现有 3392 实例(v0.5.2)不受影响。风险点
cryptography(pyca,官方 PyPI);master.key丢失后已存密钥需重新录入(有明确错误指引,绝不静默重生成)。config set修改 bootstrap 字段后需重启生效。🤖 Generated with Claude Code