mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-06 06:41:56 +00:00
121 lines
3.7 KiB
TypeScript
121 lines
3.7 KiB
TypeScript
export const CLAUDE_PERMISSION_MODES = ['default', 'acceptEdits', 'bypassPermissions', 'plan'] as const
|
|
export type ClaudePermissionMode = typeof CLAUDE_PERMISSION_MODES[number]
|
|
|
|
export const CODEX_PERMISSION_MODES = ['default', 'read-only', 'safe-yolo', 'yolo'] as const
|
|
export type CodexPermissionMode = typeof CODEX_PERMISSION_MODES[number]
|
|
|
|
export const GEMINI_PERMISSION_MODES = ['default', 'read-only', 'safe-yolo', 'yolo'] as const
|
|
export type GeminiPermissionMode = typeof GEMINI_PERMISSION_MODES[number]
|
|
|
|
export const OPENCODE_PERMISSION_MODES = ['default', 'yolo'] as const
|
|
export type OpencodePermissionMode = typeof OPENCODE_PERMISSION_MODES[number]
|
|
|
|
export const CURSOR_PERMISSION_MODES = ['default', 'plan', 'ask', 'yolo'] as const
|
|
export type CursorPermissionMode = typeof CURSOR_PERMISSION_MODES[number]
|
|
|
|
export const PERMISSION_MODES = [
|
|
'default',
|
|
'acceptEdits',
|
|
'bypassPermissions',
|
|
'plan',
|
|
'ask',
|
|
'read-only',
|
|
'safe-yolo',
|
|
'yolo'
|
|
] as const
|
|
export type PermissionMode = typeof PERMISSION_MODES[number]
|
|
|
|
export const MODEL_MODES = ['default', 'sonnet', 'sonnet[1m]', 'opus', 'opus[1m]'] as const
|
|
export type ModelMode = typeof MODEL_MODES[number]
|
|
|
|
export type AgentFlavor = 'claude' | 'codex' | 'gemini' | 'opencode' | 'cursor'
|
|
|
|
export const PERMISSION_MODE_LABELS: Record<PermissionMode, string> = {
|
|
default: 'Default',
|
|
acceptEdits: 'Accept Edits',
|
|
plan: 'Plan Mode',
|
|
ask: 'Ask Mode',
|
|
bypassPermissions: 'Yolo',
|
|
'read-only': 'Read Only',
|
|
'safe-yolo': 'Safe Yolo',
|
|
yolo: 'Yolo'
|
|
}
|
|
|
|
export type PermissionModeTone = 'neutral' | 'info' | 'warning' | 'danger'
|
|
|
|
export const PERMISSION_MODE_TONES: Record<PermissionMode, PermissionModeTone> = {
|
|
default: 'neutral',
|
|
acceptEdits: 'warning',
|
|
plan: 'info',
|
|
ask: 'info',
|
|
bypassPermissions: 'danger',
|
|
'read-only': 'warning',
|
|
'safe-yolo': 'warning',
|
|
yolo: 'danger'
|
|
}
|
|
|
|
export type PermissionModeOption = {
|
|
mode: PermissionMode
|
|
label: string
|
|
tone: PermissionModeTone
|
|
}
|
|
|
|
export const MODEL_MODE_LABELS: Record<ModelMode, string> = {
|
|
default: 'Default',
|
|
sonnet: 'Sonnet',
|
|
'sonnet[1m]': 'Sonnet 1M',
|
|
opus: 'Opus',
|
|
'opus[1m]': 'Opus 1M'
|
|
}
|
|
|
|
export function getModelModeLabel(mode: ModelMode): string {
|
|
return MODEL_MODE_LABELS[mode]
|
|
}
|
|
|
|
export function getPermissionModeLabel(mode: PermissionMode): string {
|
|
return PERMISSION_MODE_LABELS[mode]
|
|
}
|
|
|
|
export function getPermissionModeTone(mode: PermissionMode): PermissionModeTone {
|
|
return PERMISSION_MODE_TONES[mode]
|
|
}
|
|
|
|
export function getPermissionModesForFlavor(flavor?: string | null): readonly PermissionMode[] {
|
|
if (flavor === 'codex') {
|
|
return CODEX_PERMISSION_MODES
|
|
}
|
|
if (flavor === 'gemini') {
|
|
return GEMINI_PERMISSION_MODES
|
|
}
|
|
if (flavor === 'opencode') {
|
|
return OPENCODE_PERMISSION_MODES
|
|
}
|
|
if (flavor === 'cursor') {
|
|
return CURSOR_PERMISSION_MODES
|
|
}
|
|
return CLAUDE_PERMISSION_MODES
|
|
}
|
|
|
|
export function getPermissionModeOptionsForFlavor(flavor?: string | null): PermissionModeOption[] {
|
|
return getPermissionModesForFlavor(flavor).map((mode) => ({
|
|
mode,
|
|
label: getPermissionModeLabel(mode),
|
|
tone: getPermissionModeTone(mode)
|
|
}))
|
|
}
|
|
|
|
export function isPermissionModeAllowedForFlavor(mode: PermissionMode, flavor?: string | null): boolean {
|
|
return getPermissionModesForFlavor(flavor).includes(mode)
|
|
}
|
|
|
|
export function getModelModesForFlavor(flavor?: string | null): readonly ModelMode[] {
|
|
if (flavor === 'codex' || flavor === 'gemini' || flavor === 'opencode' || flavor === 'cursor') {
|
|
return []
|
|
}
|
|
return MODEL_MODES
|
|
}
|
|
|
|
export function isModelModeAllowedForFlavor(mode: ModelMode, flavor?: string | null): boolean {
|
|
return getModelModesForFlavor(flavor).includes(mode)
|
|
}
|