52 lines · 1.7 KB · TypeScript
RawDownload
import { useEffect } from "react"; import {  useClientSettingsHydrated,  usePrimarySettings,  useUpdatePrimarySettings,} from "./hooks/useSettings";import { resolvePlanAgentHealPatch } from "./modelSelection"; /** * Heals persisted text-generation model selections that still reference the * opencode "plan" agent. The dropdown hides the option while legacy plan mode * is off, but the toggle handler only runs when the setting flips; users who * already have plan mode off with a stored "plan" selection need this pass * whenever the settings load. */export function PlanAgentSelectionHeal() {  const planModeEnabled = usePrimarySettings((settings) => settings.planModeEnabled);  const textGenerationModelSelection = usePrimarySettings(    (settings) => settings.textGenerationModelSelection,  );  const sourceControlWriterModelSelection = usePrimarySettings(    (settings) => settings.sourceControlWriterModelSelection,  );  const settingsHydrated = useClientSettingsHydrated();  const updateSettings = useUpdatePrimarySettings();   useEffect(() => {    // planModeEnabled reads as false until client settings hydrate, so never    // heal before then: we would strip a stored plan selection from a user    // whose plan mode is actually on.    if (!settingsHydrated) {      return;    }    const patch = resolvePlanAgentHealPatch({      planModeEnabled,      textGenerationModelSelection,      sourceControlWriterModelSelection,    });    if (patch) {      updateSettings(patch);    }  }, [    planModeEnabled,    settingsHydrated,    textGenerationModelSelection,    sourceControlWriterModelSelection,    updateSettings,  ]);   return null;}