feat: resolver回退链接入platform_settings(三级回退/快照热刷新)
- app/platform/settings_store.py 新模块: lifespan 启动把 platform_settings 全表快照进进程内存(load_snapshot/get/refresh,workers=1 单进程纪律); PUT /api/platform/settings 提交后 refresh 热刷新,回退链即时生效 - config_views email/ai 两组改三级回退: 租户槽位 → 平台设置快照 (键名对齐平台设置页推荐键 ai.*/smtp.*)→ env settings(env 键名 不变做最终兜底);push 无平台推荐键保持两级;smtp.port 自由 KV 容错 归一(数字串转 int,脏值视同未设置落 env) - conftest autouse 复位快照(resolver 直调测试隔离);新增 test_platform_settings_fallback 六测(启动装载/三级链/端口容错/ push 不接线钉死/PUT 即时生效) - 平台设置页"仅存储"注记移除(CLAUDE.md 与前端页头同步改为已接线) - 回归: 后端 627 passed(621+6)/ 前端 vitest 156 / build 零错误 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -10,19 +10,11 @@
|
||||
'__SET__' → 输入框留空 + 占位符「已设置,输入新值覆盖」;不动不提交;
|
||||
「清除」按钮 = 显式清空意图(提交空串),可「恢复保持」撤销。
|
||||
|
||||
页头注记(CLAUDE.md Phase 3 取舍):resolver 的平台默认回退链尚未接入
|
||||
platform_settings——本页现阶段仅存储与展示,引擎不读取这些值。
|
||||
回退链已接线(Phase 4 Task 5A):ai.*/smtp.* 推荐键经后端内存快照接入
|
||||
resolver 的平台默认回退链(租户槽位 → 平台设置 → env),保存后即时生效。
|
||||
-->
|
||||
<template>
|
||||
<div class="settings-page">
|
||||
<ElAlert
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon
|
||||
title="平台默认值将在后续版本接入引擎回退链,当前本页仅存储与展示——引擎暂不读取这些值。"
|
||||
class="page-note"
|
||||
/>
|
||||
|
||||
<ElCard shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
* - 后端 app/platform/routes/config_routes.py 的 settings_router:
|
||||
* PlatformSetting 是**自由 KV 表**(key 1-64 字符,value 任意 JSON),
|
||||
* 本页的推荐键名集合(ai.api_key / ai.base_url / ai.model / smtp.*)
|
||||
* 是前端约定,不是后端 schema;
|
||||
* 是前端约定,不是后端 schema——但推荐键已接线后端 resolver 的平台
|
||||
* 默认回退链(Phase 4 Task 5A:租户槽位 → 平台设置 → env,保存后
|
||||
* 即时生效);
|
||||
* - 密钥判定镜像 _SETTING_SECRET_MARKERS:key 名不区分大小写含
|
||||
* key/password/secret 片段即视为密钥(子串匹配——'monkey' 也会命中,
|
||||
* 与后端行为一致是契约,不"修正");
|
||||
@@ -54,7 +56,7 @@ export interface SettingFieldMeta {
|
||||
kind?: 'int'
|
||||
}
|
||||
|
||||
/** 集团 AI 凭据(租户 ai 组空槽的回退源——回退链接线归后续版本) */
|
||||
/** 集团 AI 凭据(租户 ai 组空槽的回退源——Phase 4 Task 5A 已接线后端 resolver) */
|
||||
export const AI_SETTING_FIELDS: SettingFieldMeta[] = [
|
||||
{
|
||||
key: 'ai.api_key',
|
||||
@@ -74,7 +76,7 @@ export const AI_SETTING_FIELDS: SettingFieldMeta[] = [
|
||||
}
|
||||
]
|
||||
|
||||
/** 默认 SMTP(租户 email 组空槽的回退源——回退链接线归后续版本) */
|
||||
/** 默认 SMTP(租户 email 组空槽的回退源——Phase 4 Task 5A 已接线后端 resolver) */
|
||||
export const SMTP_SETTING_FIELDS: SettingFieldMeta[] = [
|
||||
{
|
||||
key: 'smtp.host',
|
||||
|
||||
Reference in New Issue
Block a user