/** Types for the dashboard plugin system. */ export interface PluginManifest { name: string; label: string; description: string; icon: string; version: string; tab: { path: string; position: string; // "end", "after:", "before:" /** When set to a built-in route path (e.g. `"/"`, `"/sessions"`), this * plugin's component replaces the built-in page at that route rather * than adding a new tab. Useful for themes that want a custom home * page without losing the rest of the dashboard. */ override?: string; /** When true, the plugin registers its component and slot contributors * without adding a tab to the nav. Used by slot-only plugins (e.g. a * plugin that just injects a header crest). */ hidden?: boolean; }; /** Named shell slots this plugin populates. Mirrored by the backend's * manifest discovery; used purely as a documentation/discovery aid — * actual slot registration happens when the plugin's JS bundle calls * `window.__HERMES_PLUGINS__.registerSlot(name, slot, Component)`. */ slots?: string[]; entry: string; css?: string | null; has_api: boolean; source: string; } export interface RegisteredPlugin { manifest: PluginManifest; component: React.ComponentType; }