/** * lnn_interpretability.ts — Governance decision explanation (thin client) * * FREE tier: generic local summary (decision + score only, no rule detail). * PAID tier: full causal explanation + counterfactuals via DingDawg API. * * The actual policy weights, keyword rules, and scoring thresholds live * server-side only — never in this package. See dingdawg-compliance's * index.ts for the reference pattern this file now follows. */ export interface PolicyViolation { policy: string; severity: "low" | "medium" | "high" | "critical"; description: string; } export interface CausalStep { description: string; score_delta: number; running_total: number; neuron: string; tau: number; activation: number; } export interface Counterfactual { description: string; changed_input: string; from: string; to: string; resulting_decision: "allow" | "deny" | "review"; resulting_score: number; } export interface ExplanationTrace { primary_trigger: string; causal_chain: string[]; causal_steps: CausalStep[]; confidence: number; counterfactual: string; counterfactuals: Counterfactual[]; deliberation_time_ms: number; active_neurons: number; total_neurons: number; mode: "local_basic" | "api_explained"; } export interface TraceInput { action_type: string; action_description: string; target_resource: string; risk_tier: string; violations: PolicyViolation[]; risk_score: number; decision: "allow" | "deny" | "review"; } export declare function isExplainEnabled(): boolean; /** * FREE tier: a generic, non-revealing summary — reports the decision that * was already made by the API, no local rule evaluation happens here. * PAID tier: calls the API for the full causal trace + counterfactuals. */ export declare function generateExplanationTrace(input: TraceInput): Promise; export interface CompactExplanation { primary_trigger: string; causal_chain: string[]; confidence: number; counterfactual: string; } export declare function toCompactExplanation(trace: ExplanationTrace): CompactExplanation;