# All files / lib/reflection types.ts

100% Statements 19/19
100% Branches 0/0
100% Functions 0/0
100% Lines 19/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    831x

    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x

    1x
    1x
    1x
    1x
    1x
    1x
    1x

    1x
    1x
    1x
     // lib/reflection/types.ts

    // --- SIGNALS ---
    export const SIGNALS = {
      WINDOW_CHURN: 'WINDOW_CHURN',
      FOCUS_STABILITY: 'FOCUS_STABILITY',
      LATENCY_SUMMARY: 'LATENCY_SUMMARY',
      IDLE_RATIO: 'IDLE_RATIO',
      WINDOW_LIFETIME: 'WINDOW_LIFETIME',
    } as const;

    export type SignalType = (typeof SIGNALS)[keyof typeof SIGNALS];

    // --- POLICY NAMES ---
    export const POLICY_NAMES = {
      THROTTLE_WINDOWS: 'THROTTLE_WINDOWS',
      DEFER_ANIMATIONS: 'DEFER_ANIMATIONS',
      ADJUST_PREFETCH: 'ADJUST_PREFETCH',
      TUNE_FOCUS_TIMEOUT: 'TUNE_FOCUS_TIMEOUT',
    } as const;

    export type PolicyName = (typeof POLICY_NAMES)[keyof typeof POLICY_NAMES];

    export type EvalStatus = 'NORMAL' | 'WARNING' | 'CRITICAL';

    export interface IntrospectionSignal {
      type: SignalType;
      value: number;
      timestamp: number;
      metadata?: Record<string, any>;
    }

    // Backwards-compatible alias expected by some modules/tests
    export type Signal = IntrospectionSignal;

    export interface SignalEvaluator {
      signal: SignalType;
      slos: { threshold: number; status: EvalStatus }[];
    }

    // -------------------------
    // Reflection Snapshot Type
    // -------------------------
    export interface ReflectionSnapshot {
      timestamp: number;
      evaluationCount: number;
      appliedDecisions: string[];
      metrics: { churn: number; focus: number };
    }

    // Memory entry used by in-memory buffer
    export interface ReflectionMemoryEntry {
      sequence: number;
      timestamp: number;
      evaluation?: EvaluationResult;
      decision?: FeedbackDecision;
    }

    export interface EvaluationResult {
      signal: IntrospectionSignal;
      status: EvalStatus;
      slo: { threshold: number; status: EvalStatus } | null;
      timestamp: number;
    }

    export interface FeedbackDecision {
      ts: number;
      cause: EvaluationResult[];
      action: 'THROTTLE_WINDOWS' | 'DEFER_ANIM' | 'ADJUST_PREFETCH' | 'TUNE_FOCUS_TIMEOUT' | 'NOOP';
      params?: Record<string, any>;
      mode: 'PROPOSED' | 'DRY_RUN' | 'APPLIED';
    }

    export interface PolicyAdjustment {
      policyName: PolicyName;
      newValue: number | boolean;
      reason: string;
    }

    export const ReflectionEvent = {
      EVALUATION_PERFORMED: 'EVALUATION_PERFORMED',
    } as const;