2026-03-12 00:28:19 +09:00
|
|
|
import { log } from "./shared"
|
|
|
|
|
|
2026-03-11 20:12:56 +09:00
|
|
|
export type PluginDispose = () => Promise<void>
|
|
|
|
|
|
|
|
|
|
export function createPluginDispose(args: {
|
|
|
|
|
backgroundManager: {
|
2026-03-11 21:30:04 +09:00
|
|
|
shutdown: () => void | Promise<void>
|
2026-03-11 20:12:56 +09:00
|
|
|
}
|
|
|
|
|
skillMcpManager: {
|
|
|
|
|
disconnectAll: () => Promise<void>
|
|
|
|
|
}
|
|
|
|
|
disposeHooks: () => void
|
|
|
|
|
}): PluginDispose {
|
2026-03-11 21:16:37 +09:00
|
|
|
const { backgroundManager, skillMcpManager, disposeHooks } = args
|
2026-03-11 20:12:56 +09:00
|
|
|
let disposePromise: Promise<void> | null = null
|
|
|
|
|
|
|
|
|
|
return async (): Promise<void> => {
|
|
|
|
|
if (disposePromise) {
|
|
|
|
|
await disposePromise
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
disposePromise = (async (): Promise<void> => {
|
2026-03-12 00:28:19 +09:00
|
|
|
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)
|
|
|
|
|
}
|
2026-03-11 20:12:56 +09:00
|
|
|
})()
|
|
|
|
|
|
|
|
|
|
await disposePromise
|
|
|
|
|
}
|
|
|
|
|
}
|