58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import {
|
|
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
logEvent,
|
|
} from '../services/analytics/index.js'
|
|
import { saveGlobalConfig } from '../utils/config.js'
|
|
import { isLegacyModelRemapEnabled } from '../utils/model/model.js'
|
|
import { getAPIProvider } from '../utils/model/providers.js'
|
|
import {
|
|
getSettingsForSource,
|
|
updateSettingsForSource,
|
|
} from '../utils/settings/settings.js'
|
|
|
|
/**
|
|
* Migrate first-party users off explicit Opus 4.0/4.1 model strings.
|
|
*
|
|
* The 'opus' alias already resolves to Opus 4.6 for 1P, so anyone still
|
|
* on an explicit 4.0/4.1 string pinned it in settings before 4.5 launched.
|
|
* parseUserSpecifiedModel now silently remaps these at runtime anyway —
|
|
* this migration cleans up the settings file so /model shows the right
|
|
* thing, and sets a timestamp so the REPL can show a one-time notification.
|
|
*
|
|
* Only touches userSettings. Legacy strings in project/local/policy settings
|
|
* are left alone (we can't/shouldn't rewrite those) and are still remapped at
|
|
* runtime by parseUserSpecifiedModel. Reading and writing the same source
|
|
* keeps this idempotent without a completion flag, and avoids silently
|
|
* promoting 'opus' to the global default for users who only pinned it in one
|
|
* project.
|
|
*/
|
|
export function migrateLegacyOpusToCurrent(): void {
|
|
if (getAPIProvider() !== 'firstParty') {
|
|
return
|
|
}
|
|
|
|
if (!isLegacyModelRemapEnabled()) {
|
|
return
|
|
}
|
|
|
|
const model = getSettingsForSource('userSettings')?.model
|
|
if (
|
|
model !== 'claude-opus-4-20250514' &&
|
|
model !== 'claude-opus-4-1-20250805' &&
|
|
model !== 'claude-opus-4-0' &&
|
|
model !== 'claude-opus-4-1'
|
|
) {
|
|
return
|
|
}
|
|
|
|
updateSettingsForSource('userSettings', { model: 'opus' })
|
|
saveGlobalConfig(current => ({
|
|
...current,
|
|
legacyOpusMigrationTimestamp: Date.now(),
|
|
}))
|
|
logEvent('tengu_legacy_opus_migration', {
|
|
from_model:
|
|
model as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
})
|
|
}
|