/** * src/gates/damage-control.ts — damage-control block metadata, body-like field * detection, and fail-closed persistence helpers, plus damage-rule loading. * * Pure helpers: damageControlBodyLikeFieldViolations, * validateDamageControlBlockMetadata, buildDamageControlBlockMetadata, * persistDamageControlBlockFailClosed. STATEFUL (fs): loadDamageRules — made * injectable via an optional `rulesSource` param so it stays testable. Zero * @earendil-works/* imports (the harness `getAgentDir` dependency is dropped). */ import type { ModeName } from "../core/types.js"; import type { DamageRules } from "./types.js"; /** Default damage-control rules (ported from harness `core/constants.ts`). */ export declare const DEFAULT_RULES: DamageRules; /** * Load damage-control rules. STATEFUL via fs when `rulesSource` is absent * (reads `/.pi/damage-control-rules.json`). When `rulesSource` is * provided (JSON string or Partial) no fs read occurs, keeping * the function injectable and testable. */ export declare function loadDamageRules(cwd: string, rulesSource?: string | Partial): DamageRules; export declare const DAMAGE_CONTROL_REASON_CODES: readonly ["mode_blocked", "zero_access", "read_only", "protected_delete", "destructive_command", "approval_denied"]; export type DamageControlReasonCode = (typeof DAMAGE_CONTROL_REASON_CODES)[number]; export interface DamageControlBlockMetadata { schema: "zob.damage-control-block.v1"; block: true; executionPerformed: false; currentMode: ModeName; toolName: string; reasonCode: DamageControlReasonCode; ruleDigest: string; argumentHash: string; argumentCount: number; bodyStored: false; } /** * Detect body-like fields anywhere in a value (hash-only/body-free safety). * Returns a sorted list of field paths (empty when none are body-like). */ export declare function damageControlBodyLikeFieldViolations(value: unknown): string[]; /** * Validate a damage-control block metadata object: allowed fields only, * body-free posture, and correct scalar/hash constraints. Returns errors. */ export declare function validateDamageControlBlockMetadata(value: unknown): string[]; /** * Build a valid damage-control block metadata object, throwing if the result * would not pass validation (fail-closed). */ export declare function buildDamageControlBlockMetadata(input: { toolName: string; currentMode: ModeName; reasonCode: DamageControlReasonCode; ruleIdentity: string; attemptedInput: unknown; }): DamageControlBlockMetadata; /** * Persist a damage-control block fail-closed through an injected append * callback. Returns whether telemetry was recorded. */ export declare function persistDamageControlBlockFailClosed(metadata: DamageControlBlockMetadata, appendEntry: (customType: "zob-damage-control", data: DamageControlBlockMetadata) => void): { block: true; telemetryRecorded: boolean; };