import { type DecisionKind, type DecisionCategory, type DecisionLogEntry, type DecisionWhy, type LoopPhase } from './decision-schema'; export type { DecisionLogEntry, DecisionWhy, RouteReason } from './decision-schema'; /** * 决策写入入参——schema 未含的运行时输入定义在此并导出。 * why 接受纯 string(写入时归一化为 {text})。 */ export interface EmitDecisionInput { agentId: string; sessionId: string; kind: DecisionKind; moment: LoopPhase; why: DecisionWhy | string; /** * 判断时刻分类(v1.3.6 交付⑮ · 可选)。 * route/select/skip/retry/escalate——与 kind 正交的「选择动作」维度。 * 不传则老语义(只记关键决策类型,无判断时刻分类)。 */ category?: DecisionCategory; specRef?: string; artifactRef?: string; /** 决策引擎标识(缺省 'sofagent-audit') */ engine?: string; /** 触发证据链(字符串数组,可空)—— v1.3.3 新增 * * kind=EVOLUTION 时必附(运行时不强制 schema 校验,但建议调用方传入)。 * 格式:字符串数组,每项为一条证据描述。非数组值将被拒绝。 */ evidence?: string[]; } /** schema 校验失败(kind/moment 非法、必填缺失)——不写文件 */ export declare class DecisionSchemaError extends Error { constructor(message: string); } /** 写入失败(atomicAppendSync 抛错)——向上传播,绝不静默丢弃 */ export declare class DecisionWriteError extends Error { constructor(message: string, cause?: unknown); } /** * 追加一条决策记录到 decision-log.jsonl(受控写唯一入口)。 * * 签名顺序(逐字对齐 appendHistory): * 1. prevHash:读末行 → sha256(JSON.stringify(lastRecordForHash) + '|' + fingerprint).slice(0,16) * 2. baseSanitized = { ...entry, prevHash, hashVersion:2, envFingerprint, hmacAlgo, why: sanitizeWhy(why) } * 3. 铁律:先脱敏再签名 * 4. recordForSig = { ...baseSanitized, prevHash/hashVersion/hmacSig/hmacAlgo: undefined } * 5. hmacSig = createHmac('sha256', key).update(stableStringify(recordForSig) + '|' + fingerprint).digest('hex').slice(0,32) * 6. atomicAppendSync + 每次写入后 chmodSync 0o600 * * @param input 决策输入 * @param dataDir 可选的数据目录覆盖(用于测试) * @returns 落盘的完整条目(含链字段) * @throws DecisionSchemaError 校验失败(不写文件) * @throws DecisionWriteError 写入失败(向上传播) */ export declare function emitDecision(input: EmitDecisionInput, dataDir?: string): DecisionLogEntry; //# sourceMappingURL=decision-log.d.ts.map