export type PluginDispose = () => Promise export function createPluginDispose(args: { backgroundManager: { shutdown: () => void } skillMcpManager: { disconnectAll: () => Promise } tmuxSessionManager: { cleanup: () => Promise } disposeHooks: () => void }): PluginDispose { const { backgroundManager, skillMcpManager, tmuxSessionManager, disposeHooks } = args let disposePromise: Promise | null = null return async (): Promise => { if (disposePromise) { await disposePromise return } disposePromise = (async (): Promise => { backgroundManager.shutdown() await Promise.all([ skillMcpManager.disconnectAll(), tmuxSessionManager.cleanup(), ]) disposeHooks() })() await disposePromise } }