/**
 * Issue-specific redaction guard.
 *
 * Wraps the existing `scanAndRedact` PII backstop with two issue-aware
 * behaviors so a private issue's body cannot leak through a public artifact
 * (e.g. a PR opened by the `process-issues` skill that derives from a
 * private issue):
 *
 *  - `mode: "scan"` (default) returns a redacted copy of the inputs and a
 *    summary of hits. Used inside `submitIssue` and `addIssueMessage` for
 *    public threads to apply the existing strip behavior consistently.
 *  - `mode: "guard"` is a hard refusal: when ANY PII is detected and the
 *    operation requires public emission (e.g. opening a public PR derived
 *    from a private issue), the guard throws a structured error so callers
 *    do not accidentally publish unredacted content.
 *
 * The guard does not introduce new redaction rules — it reuses
 * `scanAndRedact` so all clients agree on what counts as PII. See
 * `docs/subsystems/agent_feedback_pipeline.md` for the rule set.
 */
export type RedactionGuardMode = "scan" | "guard";
export interface RedactionGuardInput {
    title: string;
    body: string;
    /** Optional additional context fields scanned the same way (e.g. branch names, PR descriptions). */
    extra_fields?: Record<string, string>;
    salt?: string;
    mode?: RedactionGuardMode;
}
export interface RedactionGuardResult {
    title: string;
    body: string;
    extra_fields?: Record<string, string>;
    hits: string[];
    applied: boolean;
    fields_redacted: number;
    /** Always returned so the caller can persist a stable per-emission salt for forensic correlation. */
    salt: string;
}
export declare class RedactionGuardError extends Error {
    readonly code = "ERR_REDACTION_REQUIRED";
    readonly hits: string[];
    readonly fields_redacted: number;
    constructor(message: string, hits: string[], fields_redacted: number);
}
/**
 * Run redaction over issue title/body and optional extras.
 *
 * `mode: "scan"` — return the redacted copy plus hits.
 * `mode: "guard"` — throw `RedactionGuardError` if any hit was found, so the
 * caller cannot proceed to publish the original content.
 */
export declare function runRedactionGuard(input: RedactionGuardInput): RedactionGuardResult;
/**
 * Convenience helper: run a `guard` pass over inputs that will land in a
 * public artifact (e.g. PR title/body) when the originating issue is
 * private. Throws on any leak so callers can surface the failure rather
 * than emitting the unredacted text.
 */
export declare function assertPublicEmissionIsClean(input: {
    title: string;
    body: string;
    extra_fields?: Record<string, string>;
}): RedactionGuardResult;
//# sourceMappingURL=redaction_guard.d.ts.map