import { type ContributionKey } from "../forge/define-contribution.js"; import type { PluginInput } from "../forge/define-plugin.js"; import type { LocaleAdapter } from "../ports/locale.js"; import type { PersistenceDriver } from "../ports/persistence.js"; import type { TextMeasurer } from "../ports/text.js"; export interface PluginDescriptor { id: string; requires: string[]; slotNames: string[]; hasSettings: boolean; } export interface SlotSummary { id: string; slotName: string; pluginId: string; dependsOn: string[]; expose: boolean; persist?: boolean | string[]; } export interface Kernel> { stores: Map; overlays: unknown[]; getCell(cellName: K): TCells[K]; subscribe(cellName: keyof TCells, listener: () => void): () => void; getContributions(key: ContributionKey): T[]; registerContribution(key: ContributionKey, item: T): void; unregisterContribution(key: ContributionKey, id: string): void; getStoreEntry(id: string): | { contextKey?: symbol; expose?: boolean; } | undefined; listPlugins(): PluginDescriptor[]; listSlots(): SlotSummary[]; dispose(): Promise; } export declare function createKernel>( pluginsInput: PluginInput[], options: { persistence: PersistenceDriver; localeAdapter?: LocaleAdapter; textMeasurer?: TextMeasurer; pluginConfig?: Record>; }, ): Kernel;