Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
3.5 kB · 141 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142import { feature } from 'bun:bundle'import z from 'zod/v4'import { PAUSE_ICON } from '../../constants/figures.js'// Types extracted to src/types/permissions.ts to break import cyclesimport { EXTERNAL_PERMISSION_MODES, type ExternalPermissionMode, PERMISSION_MODES, type PermissionMode,} from '../../types/permissions.js'import { lazySchema } from '../lazySchema.js'
// Re-export for backwards compatibilityexport { EXTERNAL_PERMISSION_MODES, PERMISSION_MODES, type ExternalPermissionMode, type PermissionMode,}
export const permissionModeSchema = lazySchema(() => z.enum(PERMISSION_MODES))export const externalPermissionModeSchema = lazySchema(() => z.enum(EXTERNAL_PERMISSION_MODES),)
type ModeColorKey = | 'text' | 'planMode' | 'permission' | 'autoAccept' | 'error' | 'warning'
type PermissionModeConfig = { title: string shortTitle: string symbol: string color: ModeColorKey external: ExternalPermissionMode}
const PERMISSION_MODE_CONFIG: Partial< Record<PermissionMode, PermissionModeConfig>> = { default: { title: 'Default', shortTitle: 'Default', symbol: '', color: 'text', external: 'default', }, plan: { title: 'Plan Mode', shortTitle: 'Plan', symbol: PAUSE_ICON, color: 'planMode', external: 'plan', }, acceptEdits: { title: 'Accept edits', shortTitle: 'Accept', symbol: '⏵⏵', color: 'autoAccept', external: 'acceptEdits', }, bypassPermissions: { title: 'Bypass Permissions', shortTitle: 'Bypass', symbol: '⏵⏵', color: 'error', external: 'bypassPermissions', }, dontAsk: { title: "Don't Ask", shortTitle: 'DontAsk', symbol: '⏵⏵', color: 'error', external: 'dontAsk', }, ...(feature('TRANSCRIPT_CLASSIFIER') ? { auto: { title: 'Auto mode', shortTitle: 'Auto', symbol: '⏵⏵', color: 'warning' as ModeColorKey, external: 'default' as ExternalPermissionMode, }, } : {}),}
/** * Type guard to check if a PermissionMode is an ExternalPermissionMode. * auto is ant-only and excluded from external modes. */export function isExternalPermissionMode( mode: PermissionMode,): mode is ExternalPermissionMode { // External users can't have auto, so always true for them if (process.env.USER_TYPE !== 'ant') { return true } return mode !== 'auto' && mode !== 'bubble'}
function getModeConfig(mode: PermissionMode): PermissionModeConfig { return PERMISSION_MODE_CONFIG[mode] ?? PERMISSION_MODE_CONFIG.default!}
export function toExternalPermissionMode( mode: PermissionMode,): ExternalPermissionMode { return getModeConfig(mode).external}
export function permissionModeFromString(str: string): PermissionMode { return (PERMISSION_MODES as readonly string[]).includes(str) ? (str as PermissionMode) : 'default'}
export function permissionModeTitle(mode: PermissionMode): string { return getModeConfig(mode).title}
export function isDefaultMode(mode: PermissionMode | undefined): boolean { return mode === 'default' || mode === undefined}
export function permissionModeShortTitle(mode: PermissionMode): string { return getModeConfig(mode).shortTitle}
export function permissionModeSymbol(mode: PermissionMode): string { return getModeConfig(mode).symbol}
export function getModeColor(mode: PermissionMode): ModeColorKey { return getModeConfig(mode).color}