import type { CheckEvidence } from "../audit/provenance-types.js";
import { type RedactedEvidenceValue } from "./redaction.js";
type EvidenceActor = "dashboard" | "cli" | "server";
/** Stable event names emitted by local runtime producers into the evidence log. */
export type EvidenceEventKind = "terminal.create" | "terminal.delete" | "terminal.upload" | "terminal.send" | "prompt.launch" | "prompt.send" | "audit.exec" | "audit.run" | "setup.prompt" | "quality.prompt" | "index.regenerate" | "project.save" | "project.remove" | "project.switch";
type EvidencePayloadValue = string | number | boolean | null | RedactedEvidenceValue | EvidencePayloadValue[] | {
    [key: string]: EvidencePayloadValue;
};
/** JSON-compatible payload object; sensitive values must use redaction markers. */
export type EvidencePayload = Record<string, EvidencePayloadValue>;
/** Runtime event record that reuses CheckEvidence provenance fields. */
export interface EvidenceEnvelope extends CheckEvidence {
    producer: string;
    event_kind: EvidenceEventKind;
    actor: EvidenceActor;
    timestamp: string;
    project_path: string;
    payload?: EvidencePayload;
}
/** Caller-friendly input shape before camelCase fields are adapted to envelope keys. */
export interface CreateEvidenceEnvelopeInput {
    producer?: string;
    eventType: EvidenceEventKind;
    actor: EvidenceActor;
    projectRoot: string;
    timestamp?: string | Date;
    payload?: EvidencePayload | undefined;
    provenance?: Partial<Pick<CheckEvidence, "source_urls" | "evidence_paths" | "framework_evidence_paths" | "target_evidence_paths" | "reason">>;
}
/** Non-throwing append result returned to dashboard and CLI producers. */
export interface AppendEvidenceEnvelopeResult extends Record<"ok", boolean> {
    path: string | null;
    error?: string;
}
/** Optional warning sink used by tests and dashboard routes instead of direct stderr writes. */
export interface EvidenceEnvelopeWriteOptions {
    onWarning?: ((message: string) => void) | undefined;
}
type EvidencePathExists = (path: string) => boolean;
/**
 * Build a validated envelope shape from one local runtime event.
 *
 * @param input - Runtime event details and optional provenance override.
 * @returns Evidence envelope ready for validation or append.
 */
export declare function createEvidenceEnvelope(input: CreateEvidenceEnvelopeInput): EvidenceEnvelope;
/**
 * Validate runtime envelope fields while delegating provenance rules.
 *
 * @param envelope - Envelope to validate.
 * @param pathExists - Optional path-existence predicate for provenance checks.
 * @returns Human-readable validation errors; an empty array means valid.
 */
export declare function validateEvidenceEnvelope(envelope: EvidenceEnvelope, pathExists?: EvidencePathExists): string[];
/**
 * Append one envelope to the local gitignored JSONL event log. Never throws.
 *
 * @param projectRoot - Project root that owns `.goat-flow/logs/events`.
 * @param envelope - Validated or caller-created envelope to append.
 * @param options - Optional warning callback for non-fatal validation or filesystem failures.
 * @returns Append outcome with a path on success and an error string on failure.
 */
export declare function appendEvidenceEnvelope(projectRoot: string, envelope: EvidenceEnvelope, options?: EvidenceEnvelopeWriteOptions): AppendEvidenceEnvelopeResult;
/**
 * Convenience producer helper for common dashboard/server event emission.
 *
 * @param input - Runtime event details to envelope and append.
 * @param options - Optional warning callback for append failures.
 * @returns Append outcome from the underlying non-throwing writer.
 */
export declare function recordEvidenceEvent(input: CreateEvidenceEnvelopeInput, options?: EvidenceEnvelopeWriteOptions): AppendEvidenceEnvelopeResult;
/**
 * Read the newest local event envelopes, preserving chronological order.
 *
 * @param projectRoot - Project root whose gitignored event logs should be tailed.
 * @param limit - Requested maximum number of newest envelopes; capped for bounded reads.
 * @returns Valid envelopes from the newest tail window.
 */
export declare function tailEvidenceEvents(projectRoot: string, limit?: number): EvidenceEnvelope[];
export {};
//# sourceMappingURL=envelope.d.ts.map