import { useAtomValue } from "@effect/atom-react"; import { useRef } from "react"; import type { SourceControlWritingStyleMode } from "@t3tools/contracts"; import { DEFAULT_UNIFIED_SETTINGS } from "@t3tools/contracts/settings"; import { createModelSelection } from "@t3tools/shared/model"; import { resolveSourceControlWriterModelSelection } from "@t3tools/shared/serverSettings"; import { usePrimarySettings, useUpdatePrimarySettings } from "../../hooks/useSettings"; import { applyProviderInstanceSettings, deriveProviderInstanceEntries, sortProviderInstanceEntries, } from "../../providerInstances"; import { getCustomModelOptionsByInstance, resolveAppModelSelectionState, } from "../../modelSelection"; import { primaryServerProvidersAtom } from "../../state/server"; import { ProviderModelPicker } from "../chat/ProviderModelPicker"; import { Select, SelectItem, SelectPopup, SelectTrigger, SelectValue } from "../ui/select"; import { Switch } from "../ui/switch"; import { Textarea } from "../ui/textarea"; import { SettingResetButton, SettingsRow, SettingsSection } from "./settingsLayout"; const MODE_OPTIONS: Record = { repo_conventions: { label: "Repository conventions", description: "In each project, matches recent change descriptions and change request titles.", }, conventional_commits: { label: "Conventional Commits", description: "Uses Conventional Commit prefixes for change descriptions; change request titles and descriptions stay concise.", }, custom: { label: "Custom instructions", description: "Applies your instructions to change descriptions and change request titles and descriptions in every project.", }, }; export function SourceControlWritingSettingsSection() { const settings = usePrimarySettings(); const updateSettings = useUpdatePrimarySettings(); const serverProviders = useAtomValue(primaryServerProvidersAtom); const customInstructionsRef = useRef(null); const style = settings.sourceControlWritingStyle; const defaults = DEFAULT_UNIFIED_SETTINGS.sourceControlWritingStyle; const isSourceControlWritingStyleDirty = style.mode !== defaults.mode || style.customInstructions !== defaults.customInstructions; const defaultModelSelection = resolveAppModelSelectionState(settings, serverProviders); const usesDedicatedModel = settings.sourceControlWriterModelSelection !== null; const resolvedSourceControlWriterSelection = resolveSourceControlWriterModelSelection( settings, serverProviders, ); const activeSelection = resolvedSourceControlWriterSelection === settings.textGenerationModelSelection ? defaultModelSelection : resolvedSourceControlWriterSelection; const instanceEntries = sortProviderInstanceEntries( applyProviderInstanceSettings(deriveProviderInstanceEntries(serverProviders), settings), ); const modelOptionsByInstance = getCustomModelOptionsByInstance( settings, serverProviders, activeSelection.instanceId, activeSelection.model, ); return ( updateSettings({ sourceControlWritingStyle: { mode: defaults.mode, customInstructions: defaults.customInstructions, }, }) } /> ) : null } control={ } > {style.mode === "custom" ? (