Files
Cyrene_v2/frontend/web/src/admin/modules/backthinkUrgency.ts
T
AskaEth 34cef95e17 feat(gateway): 配置只读事实面 + 后台思考行「档位/穿透」(契约 v0.68)
- 新增 GET /api/v1/admin/config-facts:记忆整理 7 键 + 安静时段 2 键的**进程生效值** + 声明默认值(反射读 default 标签,不读 .env)
- 面板:记忆整理卡 + 安静时段卡(Miuix 只读),文案按新语义「只服务主动搭话,不静默回复」
- 后台思考行加 urgency(**只能是下限**,存档不可分 high/critical)+ quietHoursBypassed(与既有 bypassed 是两件事)
- 红线实测:往响应里塞 JWT ⇒ TestAdminConfigFacts_NeverLeaksSecretValues 打红(连断言消息都把整个响应打出来了)
- 前端:configFacts 24 checks / ConfigFactsCards 29 / BackthinkUrgencyTags 19 全过
- 契约 v0.68(纯增量:B12 新端点 + B8 两字段 + §4.10 形状与语义 + §7.4-17 下限限定)
2026-10-05 13:54:56 +08:00

63 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { BackthinkItem } from "../../lib/types";
/**
* 后台思考行「紧急度 / 穿透安静时段」标记的**纯逻辑**(契约 v0.68 §4.10(b))。
*
* 后端 `urgency` 的语义是**存档可证的档位下限**(`warning` = 至少 high 档,可能更
* 高),不是精确档位;而窗口之外的轮次存档里没有档位,键**缺席**。因此本层:
* - 缺席 ⇒ 显示「档位未知」(**不是**「例常」——把未知画成事实就是这次要避免的坑);
* - 未知取值 ⇒ 原样显示后端给的词,不猜一个更好听的;
* - `quietHoursBypassed` 只在 true 时渲染「穿透安静时段」。
*/
export type UrgencyTagTone = "ok" | "warn" | "err" | "neutral" | "accent";
export interface UrgencyTag {
label: string;
tone: UrgencyTagTone;
/** 悬停说明(为什么是这个档位 / 为什么未知),给人看的口径。 */
hint: string;
}
/** 档位未知时的标签(键缺席 = 后端没有这个事实)。 */
export const URGENCY_UNKNOWN_LABEL = "档位未知";
/** 穿透安静时段的标签。 */
export const QUIET_HOURS_BYPASS_LABEL = "穿透安静时段";
/** urgencyTag 把后端 `urgency` 映射成标签;键缺席时给「档位未知」。 */
export function urgencyTag(item: Pick<BackthinkItem, "urgency">): UrgencyTag {
const level = item.urgency;
switch (level) {
case "routine":
return { label: "例常", tone: "neutral", hint: "安静时段内被扣下的轮次:档位低于 high,不穿透" };
case "warning":
return {
label: "紧急(≥ 高)",
tone: "warn",
hint: "安静时段内仍被放行 ⇒ 档位至少 high;记录里无法区分 high 与 critical,故显示下限",
};
case "critical":
return { label: "紧急·安全域", tone: "err", hint: "安全域事件(可穿透工作/忙碌与安静时段)" };
case undefined:
case "":
return {
label: URGENCY_UNKNOWN_LABEL,
tone: "neutral",
hint: "这一轮的档位在存档里不可证(轮次不在安静时段窗口内,记录不保存档位)——不是「例常」",
};
default:
return { label: level, tone: "neutral", hint: "后端给了本面板不认识的档位,原样显示" };
}
}
/** quietHoursBypassTag 只在后端确实标记了穿透时返回标签。 */
export function quietHoursBypassTag(item: Pick<BackthinkItem, "quietHoursBypassed">): UrgencyTag | null {
if (item.quietHoursBypassed !== true) return null;
return {
label: QUIET_HOURS_BYPASS_LABEL,
tone: "accent",
hint: "这一轮落在安静时段窗口内、但仍被放行发出(档位 ≥ high)",
};
}