export interface ActivateContext { pluginId: string; logger: PluginLogger; subscriptions: CommandDisposable[]; commands?: CommandRegistry; storage?: PluginStorage; } export interface IdeAPluginModule { activate(ctx: ActivateContext): void | Promise; deactivate?(): void | Promise; } export interface PluginLogger { debug(message: string, ...args: unknown[]): void; info(message: string, ...args: unknown[]): void; warn(message: string, ...args: unknown[]): void; error(message: string, ...args: unknown[]): void; } export type CommandHandler = (...args: unknown[]) => unknown | Promise; export interface CommandRegistry { registerCommand(commandId: string, handler: CommandHandler): CommandDisposable; } export interface CommandDisposable { dispose(): void; } export interface PluginStorage { get(key: string): Promise; set(key: string, value: T): Promise; delete(key: string): Promise; }