import { log } from "./shared" export type PluginDispose = () => Promise export function createPluginDispose(args: { backgroundManager: { shutdown: () => void | Promise } skillMcpManager: { disconnectAll: () => Promise } disposeHooks: () => void }): PluginDispose { const { backgroundManager, skillMcpManager, disposeHooks } = args let disposePromise: Promise | null = null return async (): Promise => { if (disposePromise) { await disposePromise return } disposePromise = (async (): Promise => { try { await backgroundManager.shutdown() } catch (error) { log("[plugin-dispose] backgroundManager.shutdown() error:", error) } try { await skillMcpManager.disconnectAll() } catch (error) { log("[plugin-dispose] skillMcpManager.disconnectAll() error:", error) } try { disposeHooks() } catch (error) { log("[plugin-dispose] disposeHooks() error:", error) } })() await disposePromise } }