π File detail
migrations/resetAutoModeOptInForDefaultOffer.ts
π― Use case
This file lives under βmigrations/β, which covers version migrations for settings or on-disk data. On the API surface it exposes resetAutoModeOptInForDefaultOffer β mainly functions, hooks, or classes. Dependencies touch bun:bundle and src. It composes internal code from utils (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { feature } from 'bun:bundle' import { logEvent } from 'src/services/analytics/index.js' import { getGlobalConfig, saveGlobalConfig } from '../utils/config.js' import { logError } from '../utils/log.js' import { getAutoModeEnabledState } from '../utils/permissions/permissionSetup.js'
π€ Exports (heuristic)
resetAutoModeOptInForDefaultOffer
π External import roots
Package roots from from "β¦" (relative paths omitted).
bun:bundlesrc
π₯οΈ Source preview
import { feature } from 'bun:bundle'
import { logEvent } from 'src/services/analytics/index.js'
import { getGlobalConfig, saveGlobalConfig } from '../utils/config.js'
import { logError } from '../utils/log.js'
import { getAutoModeEnabledState } from '../utils/permissions/permissionSetup.js'
import {
getSettingsForSource,
updateSettingsForSource,
} from '../utils/settings/settings.js'
/**
* One-shot migration: clear skipAutoPermissionPrompt for users who accepted
* the old 2-option AutoModeOptInDialog but don't have auto as their default.
* Re-surfaces the dialog so they see the new "make it my default mode" option.
* Guard lives in GlobalConfig (~/.claude.json), not settings.json, so it
* survives settings resets and doesn't re-arm itself.
*
* Only runs when tengu_auto_mode_config.enabled === 'enabled'. For 'opt-in'
* users, clearing skipAutoPermissionPrompt would remove auto from the carousel
* (permissionSetup.ts:988) β the dialog would become unreachable and the
* migration would defeat itself. In practice the ~40 target ants are all
* 'enabled' (they reached the old dialog via bare Shift+Tab, which requires
* 'enabled'), but the guard makes it safe regardless.
*/
export function resetAutoModeOptInForDefaultOffer(): void {
if (feature('TRANSCRIPT_CLASSIFIER')) {
const config = getGlobalConfig()
if (config.hasResetAutoModeOptInForDefaultOffer) return
if (getAutoModeEnabledState() !== 'enabled') return
try {
const user = getSettingsForSource('userSettings')
if (
user?.skipAutoPermissionPrompt &&
user?.permissions?.defaultMode !== 'auto'
) {
updateSettingsForSource('userSettings', {
skipAutoPermissionPrompt: undefined,
})
logEvent('tengu_migrate_reset_auto_opt_in_for_default_offer', {})
}
saveGlobalConfig(c => {
if (c.hasResetAutoModeOptInForDefaultOffer) return c
return { ...c, hasResetAutoModeOptInForDefaultOffer: true }
})
} catch (error) {
logError(new Error(`Failed to reset auto mode opt-in: ${error}`))
}
}
}