From 08c4757824f39d0824a208021a579be27a494026 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 10 Apr 2026 15:53:19 +0900 Subject: [PATCH] fix(hooks): improve auto update checker Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/hooks/auto-update-checker/hook.ts | 58 ++++++++++++++++++++------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/src/hooks/auto-update-checker/hook.ts b/src/hooks/auto-update-checker/hook.ts index caac8ddc5..fbe3998da 100644 --- a/src/hooks/auto-update-checker/hook.ts +++ b/src/hooks/auto-update-checker/hook.ts @@ -1,7 +1,7 @@ import type { PluginInput } from "@opencode-ai/plugin" import { log } from "../../shared/logger" -import { getCachedVersion, getLocalDevVersion } from "./checker" import type { AutoUpdateCheckerOptions } from "./types" +import { getCachedVersion, getLocalDevVersion } from "./checker" import { runBackgroundUpdateCheck } from "./hook/background-update-check" import { showConfigErrorsIfAny } from "./hook/config-errors-toast" import { updateAndShowConnectedProvidersCacheStatus } from "./hook/connected-providers-status" @@ -9,7 +9,37 @@ import { refreshModelCapabilitiesOnStartup } from "./hook/model-capabilities-sta import { showModelCacheWarningIfNeeded } from "./hook/model-cache-warning" import { showLocalDevToast, showVersionToast } from "./hook/startup-toasts" -export function createAutoUpdateCheckerHook(ctx: PluginInput, options: AutoUpdateCheckerOptions = {}) { +interface AutoUpdateCheckerDeps { + getCachedVersion: typeof getCachedVersion + getLocalDevVersion: typeof getLocalDevVersion + showConfigErrorsIfAny: typeof showConfigErrorsIfAny + updateAndShowConnectedProvidersCacheStatus: typeof updateAndShowConnectedProvidersCacheStatus + refreshModelCapabilitiesOnStartup: typeof refreshModelCapabilitiesOnStartup + showModelCacheWarningIfNeeded: typeof showModelCacheWarningIfNeeded + showLocalDevToast: typeof showLocalDevToast + showVersionToast: typeof showVersionToast + runBackgroundUpdateCheck: typeof runBackgroundUpdateCheck + log: typeof log +} + +const defaultDeps: AutoUpdateCheckerDeps = { + getCachedVersion, + getLocalDevVersion, + showConfigErrorsIfAny, + updateAndShowConnectedProvidersCacheStatus, + refreshModelCapabilitiesOnStartup, + showModelCacheWarningIfNeeded, + showLocalDevToast, + showVersionToast, + runBackgroundUpdateCheck, + log, +} + +export function createAutoUpdateCheckerHook( + ctx: PluginInput, + options: AutoUpdateCheckerOptions = {}, + deps: AutoUpdateCheckerDeps = defaultDeps, +) { const { showStartupToast = true, isSisyphusEnabled = false, @@ -40,32 +70,32 @@ export function createAutoUpdateCheckerHook(ctx: PluginInput, options: AutoUpdat const props = event.properties as { info?: { parentID?: string } } | undefined if (props?.info?.parentID) return - hasChecked = true + hasChecked = true setTimeout(async () => { - const cachedVersion = getCachedVersion() - const localDevVersion = getLocalDevVersion(ctx.directory) + const cachedVersion = deps.getCachedVersion() + const localDevVersion = deps.getLocalDevVersion(ctx.directory) const displayVersion = localDevVersion ?? cachedVersion - await showConfigErrorsIfAny(ctx) - await updateAndShowConnectedProvidersCacheStatus(ctx) - await refreshModelCapabilitiesOnStartup(modelCapabilities) - await showModelCacheWarningIfNeeded(ctx) + await deps.showConfigErrorsIfAny(ctx) + await deps.updateAndShowConnectedProvidersCacheStatus(ctx) + await deps.refreshModelCapabilitiesOnStartup(modelCapabilities) + await deps.showModelCacheWarningIfNeeded(ctx) if (localDevVersion) { if (showStartupToast) { - showLocalDevToast(ctx, displayVersion, isSisyphusEnabled).catch(() => {}) + deps.showLocalDevToast(ctx, displayVersion, isSisyphusEnabled).catch(() => {}) } - log("[auto-update-checker] Local development mode") + deps.log("[auto-update-checker] Local development mode") return } if (showStartupToast) { - showVersionToast(ctx, displayVersion, getToastMessage(false)).catch(() => {}) + deps.showVersionToast(ctx, displayVersion, getToastMessage(false)).catch(() => {}) } - runBackgroundUpdateCheck(ctx, autoUpdate, getToastMessage).catch((err) => { - log("[auto-update-checker] Background update check failed:", err) + deps.runBackgroundUpdateCheck(ctx, autoUpdate, getToastMessage).catch((err) => { + deps.log("[auto-update-checker] Background update check failed:", err) }) }, 0) },