UNPKG

@blundergoat/goat-flow

Version:

AI coding agent harness and local dashboard for Claude Code, OpenAI Codex, Google Antigravity, and GitHub Copilot - setup audits, guardrails, structured skills, deny hooks, and persistent learning loops.

81 lines 4.27 kB
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