import type { GjcBundleIdentity, GjcPluginLoadErrorCode, GjcPluginRegistryEntry } from "./types"; /** * Session-start validation: the registry is the collision authority. Capability * provider output is supplied as EVIDENCE only; plugin surfaces are never * resolved by capability first-wins. Offending surfaces are quarantined * fail-closed with a stable error code rather than silently shadowed. */ export interface SessionCapabilityEvidence { /** Built-in + provider tool names already present before plugin insertion. */ toolNames?: Iterable; /** Non-plugin MCP server names from providers/built-ins. */ mcpNames?: Iterable; /** Non-plugin hook keys (event:phase:target:name) from providers/built-ins. */ hookKeys?: Iterable; /** Existing appendix extension ids already present. */ appendixIds?: Iterable; } export interface SessionQuarantine { /** Scope-qualified canonical target this finding belongs to. */ identity: GjcBundleIdentity; plugin: string; surfaceId: string; code: GjcPluginLoadErrorCode; message: string; } export interface SessionValidationResult { /** Registry entries (enabled, non-quarantined) whose surfaces may activate. */ active: GjcPluginRegistryEntry[]; /** Per-surface quarantine records (fail-closed). */ quarantine: SessionQuarantine[]; } /** * Re-verify that the installed files still match the registry's recorded hashes. * Drift (manual edits, partial writes) quarantines the whole plugin with * runtime_mismatch. */ export declare function verifyEntryHashes(entry: GjcPluginRegistryEntry): Promise; /** * Validate the effective installed registry against the current capability * universe (evidence) and across plugins. Returns the entries that may activate * plus per-surface quarantine records. Disabled entries/surfaces are skipped * (not an error). */ export declare function validateSessionBundles(entries: readonly GjcPluginRegistryEntry[], evidence?: SessionCapabilityEvidence, preQuarantined?: readonly SessionQuarantine[]): SessionValidationResult;