/** 降级级别(四级梯队,从轻到重) */ export type DegradationLevel = 'full' | 'rules-only' | 'minimal' | 'safe-stop'; /** 降级触发器(三类可检测故障) */ export type DegradationTrigger = 'llm-unavailable' | 'audit-timeout' | 'daemon-crash'; /** 级别顺序(单一事实源——状态机转移、能力映射、过滤都从这派生) */ export declare const LEVEL_ORDER: readonly DegradationLevel[]; /** minimal 级保留的核心安全规则编号区间(A1-A11,对齐 changelog「只跑 A1-A11」) */ export declare const CORE_RULE_MIN = 1; export declare const CORE_RULE_MAX = 11; /** 单个降级事件的记录 */ export interface DegradationRecord { /** 降级前级别 */ from: DegradationLevel; /** 降级后级别 */ to: DegradationLevel; /** 触发器(recover 时为 null) */ trigger: DegradationTrigger | null; /** 降级原因(人类可读) */ reason: string; /** 事件时间(ISO 8601 UTC) */ ts: string; /** 在 `from` 级别持续了多久才发生本次转移(毫秒) */ durationMs: number; /** 转移方向:degrade=降级 / recover=恢复 */ direction: 'degrade' | 'recover'; } /** 某一级别的能力画像(调用方据此决定跑什么) */ export interface LevelCapability { level: DegradationLevel; /** 是否跑 LLM 审计 */ llmAudit: boolean; /** 是否跑 git-diff 规则 */ diffRules: boolean; /** 是否只跑核心安全规则(A1-A11) */ coreOnly: boolean; /** 是否安全停止(不跑任何审计,保数据不破坏) */ stops: boolean; } /** 获取某级别的能力画像 */ export declare function getCapability(level: DegradationLevel): LevelCapability; /** * 按级别过滤规则(minimal 只保留 A1-A11;safe-stop 清空)。 * full / rules-only 不过滤(全量跑 git-diff 规则)。 * @param rules 规则数组(需带 number 字段) * @param level 当前降级级别 */ export declare function filterRulesForLevel(rules: T[], level: DegradationLevel): T[]; /** * 检测 LLM 不可用——匹配常见网络/鉴权/服务故障特征。 * @param err LLM 调用抛出的错误(或错误消息字符串) */ export declare function isLlmUnavailable(err: unknown): boolean; /** * 检测审计引擎超时——错误指明超时,或耗时超过阈值。 * @param err runRules 抛出的错误(可选) * @param elapsedMs 实际耗时(可选,与 timeoutMs 比较) * @param timeoutMs 超时阈值(默认 30s) */ export declare function isAuditTimeout(err: unknown, elapsedMs?: number, timeoutMs?: number): boolean; /** * 检测 daemon 崩溃——health 缺失 / status=stopped / 心跳停滞。 * @param health daemon 健康对象(可为 null = daemon 从未运行) * @param staleThresholdMs 心跳停滞阈值(默认 10min,与 daemon-health 对齐) */ export declare function isDaemonCrash(health: { status?: string; lastHeartbeat?: string; } | null, staleThresholdMs?: number): boolean; /** DegradationManager 构造选项 */ export interface DegradationManagerOptions { /** 审计日志的 agentId(缺省 'sofagent') */ agentId?: string; /** 审计日志的 sessionId(缺省 'degradation') */ sessionId?: string; /** 数据目录覆盖(测试隔离用,透传 emitDecision dataDir) */ dataDir?: string; /** 时间源注入(测试用,缺省 Date.now) */ now?: () => number; } /** * 分级降级状态机——管理当前降级级别 + 降级历史 + 审计留痕。 * * 用法: * const dm = new DegradationManager({ dataDir }); * if (isLlmUnavailable(err)) dm.degrade('llm-unavailable'); * const cap = getCapability(dm.getLevel()); // 按能力画像跑审计 * * 线程安全:单进程内同步调用,无并发问题;跨进程请各自实例化。 */ export declare class DegradationManager { private level; private enteredAt; private readonly history; private readonly opts; private readonly nowFn; constructor(opts?: DegradationManagerOptions); /** 当前降级级别 */ getLevel(): DegradationLevel; /** 当前级别已持续多久(毫秒) */ getCurrentLevelDuration(): number; /** 降级历史(时间升序) */ getHistory(): DegradationRecord[]; /** 是否已处于安全停止(最重降级,无法再降) */ isSafeStopped(): boolean; /** * 降级一级(full→rules-only→minimal→safe-stop)。 * 已在 safe-stop 时返回 null(无法再降)。 * @param trigger 触发器 * @param reason 自定义原因(缺省用触发器默认文案) * @returns 降级记录;无法降级时 null */ degrade(trigger: DegradationTrigger, reason?: string): DegradationRecord | null; /** * 直接降级到指定级别(只允许向下,跨级也一步到位)。 * 目标不比当前级别更重时返回 null。 */ degradeTo(target: DegradationLevel, trigger: DegradationTrigger, reason?: string): DegradationRecord | null; /** * 恢复一级(safe-stop→minimal→rules-only→full)。 * 已在 full 时返回 null。恢复同样写审计日志(direction=recover)。 */ recover(reason?: string): DegradationRecord | null; /** 状态机转移(私有唯一入口——保证历史 + 审计 + 级别原子更新) */ private transition; /** * 每次降级/恢复写审计日志(kind=FALLBACK_DEGRADE)。 * ⚠️ 绝不抛错——降级是韧性兜底,审计写失败不能反过来压垮主流程。 */ private writeAuditLog; } //# sourceMappingURL=degradation.d.ts.map