import type { Notification } from 'src/context/notifications.js' import { type GlobalConfig, getGlobalConfig } from 'src/utils/config.js' import { useStartupNotification } from './useStartupNotification.js' // Shows a one-time notification right after a model migration writes its // timestamp to config. Each entry reads its own timestamp field(s) and emits // a notification if the write happened within the last 3s (i.e. this launch). // Future model migrations: add an entry to MIGRATIONS below. const MIGRATIONS: ((c: GlobalConfig) => Notification | undefined)[] = [ // Sonnet 4.5 โ†’ 4.6 (pro/max/team premium) c => { if (!recent(c.sonnet45To46MigrationTimestamp)) return return { key: 'sonnet-46-update', text: 'Model updated to Sonnet 4.6', color: 'suggestion', priority: 'high', timeoutMs: 3000, } }, // Opus Pro โ†’ default, or pinned 4.0/4.1 โ†’ opus alias. Both land on the // current Opus default (4.7 for 1P). c => { const isLegacyRemap = Boolean(c.legacyOpusMigrationTimestamp) const ts = c.legacyOpusMigrationTimestamp ?? c.opusProMigrationTimestamp if (!recent(ts)) return return { key: 'opus-pro-update', text: isLegacyRemap ? 'Model updated to Opus 4.7 ยท Set CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP=1 to opt out' : 'Model updated to Opus 4.7', color: 'suggestion', priority: 'high', timeoutMs: isLegacyRemap ? 8000 : 3000, } }, ] export function useModelMigrationNotifications(): void { useStartupNotification(() => { const config = getGlobalConfig() const notifs: Notification[] = [] for (const migration of MIGRATIONS) { const notif = migration(config) if (notif) notifs.push(notif) } return notifs.length > 0 ? notifs : null }) } function recent(ts: number | undefined): boolean { return ts !== undefined && Date.now() - ts < 3000 }