From 76469a9435ab14d54949de66737f997dab131514 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 28 Dec 2025 00:36:43 +0900 Subject: [PATCH 1/2] fix: defer config error toast to session.created for TUI readiness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed showToast calls from loadConfigFromPath() function. Error notifications were not visible during plugin initialization because the TUI was not ready yet. Changes: - Removed immediate showToast calls from validation error handler - Removed immediate showToast calls from file load error handler - Errors are still captured via addConfigLoadError() for later display - auto-update-checker hook will display errors via showConfigErrorsIfAny() after session.created event This ensures error messages are displayed when the TUI is fully ready and able to render them properly. 🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) --- src/index.ts | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/index.ts b/src/index.ts index 30e85006..eb521e33 100644 --- a/src/index.ts +++ b/src/index.ts @@ -129,20 +129,6 @@ function loadConfigFromPath(configPath: string, ctx: any): OhMyOpenCodeConfig | const errorMsg = result.error.issues.map(i => `${i.path.join(".")}: ${i.message}`).join(", "); log(`Config validation error in ${configPath}:`, result.error.issues); addConfigLoadError({ path: configPath, error: `Validation error: ${errorMsg}` }); - - const errorList = result.error.issues - .map(issue => `• ${issue.path.join(".")}: ${issue.message}`) - .join("\n"); - - ctx.client.tui.showToast({ - body: { - title: "❌ OhMyOpenCode: Config Validation Failed", - message: `Failed to load ${configPath}\n\nValidation errors:\n${errorList}\n\nConfig will be ignored. Please fix the errors above.`, - variant: "error" as const, - duration: 10000, - }, - }).catch(() => {}); - return null; } @@ -153,19 +139,6 @@ function loadConfigFromPath(configPath: string, ctx: any): OhMyOpenCodeConfig | const errorMsg = err instanceof Error ? err.message : String(err); log(`Error loading config from ${configPath}:`, err); addConfigLoadError({ path: configPath, error: errorMsg }); - - const hint = err instanceof SyntaxError - ? "\n\nHint: Check for syntax errors in your JSON file (missing commas, quotes, brackets, etc.)" - : ""; - - ctx.client.tui.showToast({ - body: { - title: "❌ OhMyOpenCode: Config Load Failed", - message: `Failed to load ${configPath}\n\nError: ${errorMsg}${hint}\n\nConfig will be ignored. Please fix the error above.`, - variant: "error" as const, - duration: 10000, - }, - }).catch(() => {}); } return null; } From daffbac40d1a828f2af434575d87688849f9f441 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 28 Dec 2025 00:42:11 +0900 Subject: [PATCH 2/2] fix: await config error toast before showing startup toast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensure config errors are awaited and displayed before the startup spinner toast is shown. Changed showConfigErrorsIfAny(ctx).catch(() => {}) to await showConfigErrorsIfAny(ctx) to guarantee proper error handling order. 🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) --- src/hooks/auto-update-checker/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/auto-update-checker/index.ts b/src/hooks/auto-update-checker/index.ts index 9cbe4715..77a4f500 100644 --- a/src/hooks/auto-update-checker/index.ts +++ b/src/hooks/auto-update-checker/index.ts @@ -34,12 +34,12 @@ export function createAutoUpdateCheckerHook(ctx: PluginInput, options: AutoUpdat hasChecked = true - setTimeout(() => { + setTimeout(async () => { const cachedVersion = getCachedVersion() const localDevVersion = getLocalDevVersion(ctx.directory) const displayVersion = localDevVersion ?? cachedVersion - showConfigErrorsIfAny(ctx).catch(() => {}) + await showConfigErrorsIfAny(ctx) if (localDevVersion) { if (showStartupToast) {