-
- {t("codexAuth.accountModeTitle")}
- {accountModeState === "pool" && {t("codexAuth.accountModePool")}}
- {accountModeState === "direct" && {t("codexAuth.accountModeDirect")}}
-
- {accountModeState === "pool" && (
-
{t("codexAuth.accountModePoolDesc")}
- )}
- {accountModeState === "direct" && (
-
- {t("codexAuth.accountModeDirectDesc")} {t("codexAuth.openProviders")}
-
- )}
- {accountModeState === "absent" && (
-
- {t("codexAuth.openaiMissing")} {t("codexAuth.openProviders")}
-
- )}
- {accountModeState === "disabled" && (
-
- {t("codexAuth.openaiDisabled")} {t("codexAuth.openProviders")}
-
- )}
-
- );
+ const enableOpenAi = async () => {
+ setEnableBusy(true);
+ setEnableError("");
+ try {
+ // Recovery is gated on the same canonical checks as Providers → Accounts.
+ if (bannerState !== "absent" && bannerState !== "disabled") return;
+ await ensureOpenAiProvider(apiBase, bannerState);
+ await loadMode();
+ } catch (error) {
+ if (error instanceof OpenAiEnableError) {
+ setEnableError(t(error.i18nKey));
+ } else {
+ setEnableError(error instanceof Error ? error.message : t("prov.saveFailed"));
+ }
+ } finally {
+ setEnableBusy(false);
+ }
+ };
+
+ const banner = <>
+