/** 签名提供者接口。应用经此签名/验签,不直接访问 secret。 */ export interface SignatureProvider { /** 签名 record,返 hmac。无 secret 抛错(fail-closed);EACCES 抛(权限 fail-closed)。 */ signRecord(record: unknown): Promise; /** * 验签 record.hmac。无 secret 返 false(fail-closed);EACCES 抛;验签失败返 false。 * context.file(可选)=记录来源文件——带文件上下文的失败走 per-file 状态表(同文件同因不刷屏), * 恢复(再次验签通过且状态表有未解决条目)记 resolved;无上下文保持事件行(低频调用方)。 */ verifyRecord(record: unknown, context?: { file?: string; }): Promise; /** secret 是否可用。EACCES 抛(fail-closed);无 secret 返 false。 */ isAvailable(): Promise; } /** provider 健康状态(供 doctor 上报可靠性:重启次数/是否永久死亡/最后退出码)。 */ export interface SignatureProviderHealth { restart_attempts: number; permanently_dead: boolean; last_exit_code: number | null; } /** * 本地签名提供者(同进程包装现有 HMAC)。 * secret 经 provenance 加载到本进程内存——非完整进程隔离,但建立 provider 接口边界(store 不直接读 secret)。 * 完整 Layer2 进程隔离用 SignatureClient(子进程)。仅测试/local 模式用(生产 ipc)。 */ export declare class LocalSignatureProvider implements SignatureProvider { private readonly projectRoot; constructor(projectRoot: string); signRecord(record: unknown): Promise; verifyRecord(record: unknown, context?: { file?: string; }): Promise; isAvailable(): Promise; getHealth(): SignatureProviderHealth; } /** * 子进程签名服务客户端(Layer2 进程隔离)+ 生产级可靠性。 * - 健康管理:意外 exit → 指数退避 re-spawn(maxRestartAttempts 后永久 fail-closed,防崩溃循环) * - 审计:crash/restart/exhausted/verify_failed(hmac_mismatch)→ signature_audit.jsonl * - 单例:经 createDefaultProvider per-projectRoot cache(多 store 共享 1 子进程) * * 重启期间(子进程已死、新子进程 spawn 中):request 写旧 child.stdin EPIPE → reject(fail-closed); * 新子进程 spawn 完成 → 后续 request 成功(自愈恢复)。 */ export declare class SignatureClient implements SignatureProvider { private child; private readonly pending; private nextId; private buf; private closed; private permanentlyDead; private restartAttempts; private lastExitCode; private readonly projectRoot; private readonly maxRestartAttempts; constructor(projectRoot: string); private spawnChild; /** 意外崩溃后指数退避重启(100/200/400/800/1600ms,maxAttempts 后永久 fail-closed)。防崩溃循环。 */ private scheduleRestart; private request; signRecord(record: unknown): Promise; verifyRecord(record: unknown, context?: { file?: string; }): Promise; isAvailable(): Promise; getHealth(): SignatureProviderHealth; /** 关闭子进程(测试/进程退出时调用)。主动 close 后不再重启。 */ close(): void; } export declare function createDefaultProvider(projectRoot: string): SignatureProvider; /** 关闭全部签名服务子进程并清空单例 cache。幂等(无实例/重复调用均安全)。 * 生产 CLI 收尾入口:一次性命令(verify/doctor 等)结束后,signature-service 子进程持三路 stdio pipe * 会让事件循环无法排空 → 进程打印完结果后永久挂起(脚本化/CI 不可用),必须显式收尾。 * MCP 长生命周期路径不调用:provider 由进程生命周期持有,共享子进程中途 close 会破坏其他 store。 */ export declare function shutdownSignatureProviders(): void; /** 测试清理:重置单例 cache + close 子进程(afterEach 调,避免跨测试共享已 close/已死 provider)。 */ export declare function resetSignatureProviderCache(): void; /** 生产启动检查:SIGNATURE_MODE=local 须配逃逸阀(仅测试/dev),否则 fail(强制 ipc)。 * 在 MCP server 启动(index.ts main)调用。 */ export declare function assertSignatureModeForProduction(): void;