import type { RuleCheck, ActionGovernance } from './rules/types'; export { checkHistoryChainIntegrity, checkHistoryChainDetailed, getHistoryFilePath, getHmacKey, validateHmacKey } from '@sofagent/core'; /** * 单条审计历史记录 */ export interface AuditHistoryEntry { /** ISO 8601 时间戳 */ timestamp: string; /** git diff 范围,如 "HEAD~1..HEAD" */ diffRange: string; /** --task 参数传入的任务描述 */ task?: string; /** 退出码:0=PASS / 1=WARN / 2=FAIL */ exitCode: number; /** 每条规则的判定结果 */ ruleResults: RuleCheck[]; /** 变更文件数 */ diffFileCount: number; /** commit message */ commitMsg?: string; /** 前一条记录的 hash,用于链完整性验证 */ prevHash?: string; /** 本次审计对应的 commit SHA(doctor #8 追溯用) */ commitSha?: string; /** * v1.2.9 commit-msg hook 场景(commit 对象尚未生成)记录的父提交 SHA * (= 审计运行时的 HEAD)。--verify-commit 精确 commitSha 未命中时, * 对 commitPhase='pre-commit' 的记录按 parentSha fallback 匹配。 * 旧记录无此字段时 fallback 不生效(向后兼容)。 */ parentSha?: string; /** * v1.2.9 审计所处阶段标记。'pre-commit' = commit-msg hook 场景 * (审计在 commit 对象生成前运行,commitSha 未知,仅记 parentSha)。 * 手动 --diff 场景无此字段(保持旧语义)。 */ commitPhase?: 'pre-commit'; /** hash 算法版本:1 = 无指纹(v1.0.5 及以前),2 = 环境指纹(v1.0.6+) */ hashVersion?: number; /** v1.1.8+: HMAC-SHA256 签名(密钥来自 ~/.sofagent-key,chmod 600)。无密钥时缺省(降级 SHA-256,向后兼容)。用于强防篡改。 */ hmacSig?: string; /** v1.2.5 写入时记录的环境指纹——读侧 HMAC 不匹配时用它区分「真篡改(指纹一致)」与「环境漂移(指纹不一致)」 */ envFingerprint?: string; /** v1.1.3+: 审计引擎标识,用于追溯记录来源 */ engine?: string; /** * v1.3.1 交付 6: 审计记录关联的 Agent 身份码(AgentIdentity.agentId)。 * 可选字段——旧记录无此字段时读侧/验链侧全部向后兼容 *(HMAC 链校验只依赖链字段,新增业务字段天然兼容,先脱敏再签名语义不变)。 */ agentId?: string; /** Action Governance 审计 5 字段 schema + 决策溯源组(A4 研读落地)。可选项——旧记录无此字段时向后兼容。 */ actionGovernance?: ActionGovernance; } /** 是否已配置 HMAC 密钥(供 --doctor 提示完整性校验强度用) */ export declare function isHmacKeyConfigured(): boolean; /** * 追加一条审计记录到历史文件 * 文件不存在时自动创建目录和文件 * @param entry 审计历史条目 * @param dataDir 可选的数据目录覆盖(用于测试) */ export declare function appendHistory(entry: AuditHistoryEntry, dataDir?: string): void; /** * 加载审计历史 * 读取 history.jsonl,返回按时间倒序的数组 * @param limit 返回最近 N 条(默认 100) * @param dataDir 可选的数据目录覆盖(用于测试) */ export declare function loadHistory(limit?: number, dataDir?: string): AuditHistoryEntry[]; /** * 清空审计历史文件(用于测试) * @param dataDir 可选的数据目录覆盖(用于测试) */ export declare function clearHistory(dataDir?: string): void; //# sourceMappingURL=audit-history.d.ts.map