export const EXTENSION_OPERATIONS = [ "mcp-connect", "mcp-auth", "mcp-disconnect", "mcp-refresh", "skill-install", "skill-validation", "skill-activation", "skill-resource", "skill-script", ] as const; export const EXTENSION_FAILURES = [ "authentication", "connection", "discovery", "timeout", "cancelled", "storage", "validation", "unavailable", "script", "unknown", ] as const; /** Closed metadata vocabulary; raw errors and operation payloads never enter it. */ export interface ExtensionDiagnosticInput { operation: (typeof EXTENSION_OPERATIONS)[number]; source?: { kind: "mcp" | "skill"; id: string }; version?: string; fingerprint?: string; startedAt: number; status: "completed" | "error" | "aborted"; failure?: (typeof EXTENSION_FAILURES)[number]; } export type ExtensionDiagnosticSink = (event: ExtensionDiagnosticInput) => void; /** Owner-only presentation; labels are joined from current inventory, never exported. */ export interface ExtensionHealth { available: boolean; events: Array<{ sequence: number; timestamp: number; operation: ExtensionDiagnosticInput["operation"]; status: ExtensionDiagnosticInput["status"]; durationMs: number | null; failure?: ExtensionDiagnosticInput["failure"]; sourceId: string | null; sourceName: string | null; version: string | null; }>; }