mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
Unify protocol types and modes
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { getPermissionModesForFlavor, MODEL_MODE_LABELS, MODEL_MODES, PERMISSION_MODE_LABELS } from '@hapi/protocol'
|
||||
import { ComposerPrimitive, useAssistantApi, useAssistantState } from '@assistant-ui/react'
|
||||
import {
|
||||
type ChangeEvent as ReactChangeEvent,
|
||||
@@ -26,25 +27,6 @@ export interface TextInputState {
|
||||
selection: { start: number; end: number }
|
||||
}
|
||||
|
||||
const CLAUDE_PERMISSION_MODES = ['default', 'acceptEdits', 'plan', 'bypassPermissions'] as const
|
||||
const CODEX_PERMISSION_MODES = ['default', 'read-only', 'safe-yolo', 'yolo'] as const
|
||||
const PERMISSION_MODE_LABELS: Record<string, string> = {
|
||||
default: 'Default',
|
||||
acceptEdits: 'Accept Edits',
|
||||
plan: 'Plan Mode',
|
||||
bypassPermissions: 'Yolo',
|
||||
'read-only': 'Read Only',
|
||||
'safe-yolo': 'Safe Yolo',
|
||||
yolo: 'Yolo'
|
||||
}
|
||||
|
||||
const MODEL_MODES = ['default', 'sonnet', 'opus'] as const
|
||||
const MODEL_MODE_LABELS: Record<string, string> = {
|
||||
default: 'Default',
|
||||
sonnet: 'Sonnet',
|
||||
opus: 'Opus'
|
||||
}
|
||||
|
||||
const defaultSuggestionHandler = async (): Promise<Suggestion[]> => []
|
||||
|
||||
export function HappyComposer(props: {
|
||||
@@ -225,15 +207,10 @@ export function HappyComposer(props: {
|
||||
}
|
||||
}, [switchDisabled, onSwitchToRemote, haptic])
|
||||
|
||||
const permissionModes = useMemo(() => {
|
||||
if (agentFlavor === 'codex') {
|
||||
return CODEX_PERMISSION_MODES as readonly PermissionMode[]
|
||||
}
|
||||
if (agentFlavor === 'gemini') {
|
||||
return [] as readonly PermissionMode[]
|
||||
}
|
||||
return CLAUDE_PERMISSION_MODES as readonly PermissionMode[]
|
||||
}, [agentFlavor])
|
||||
const permissionModes = useMemo(
|
||||
() => getPermissionModesForFlavor(agentFlavor),
|
||||
[agentFlavor]
|
||||
)
|
||||
|
||||
const handleKeyDown = useCallback((e: ReactKeyboardEvent<HTMLTextAreaElement>) => {
|
||||
const key = e.key
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
import { PERMISSION_MODE_LABELS } from '@hapi/protocol'
|
||||
import { useMemo } from 'react'
|
||||
import type { AgentState, ModelMode, PermissionMode } from '@/types/api'
|
||||
import { getContextBudgetTokens } from '@/chat/modelConfig'
|
||||
|
||||
const PERMISSION_MODE_LABELS: Record<string, string> = {
|
||||
default: 'Default',
|
||||
acceptEdits: 'Accept Edits',
|
||||
plan: 'Plan Mode',
|
||||
bypassPermissions: 'Yolo',
|
||||
'read-only': 'Read Only',
|
||||
'safe-yolo': 'Safe Yolo',
|
||||
yolo: 'Yolo'
|
||||
}
|
||||
|
||||
// Vibing messages for thinking state
|
||||
const VIBING_MESSAGES = [
|
||||
"Accomplishing", "Actioning", "Actualizing", "Baking", "Booping", "Brewing",
|
||||
@@ -112,9 +103,11 @@ export function StatusBar(props: {
|
||||
)
|
||||
|
||||
const permissionMode = props.permissionMode
|
||||
const shouldShowPermissionMode = props.agentFlavor !== 'gemini'
|
||||
const displayPermissionMode = props.agentFlavor !== 'gemini'
|
||||
&& permissionMode
|
||||
&& permissionMode !== 'default'
|
||||
? permissionMode
|
||||
: null
|
||||
|
||||
return (
|
||||
<div className="flex items-center justify-between px-2 pb-1">
|
||||
@@ -134,17 +127,17 @@ export function StatusBar(props: {
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
{shouldShowPermissionMode ? (
|
||||
{displayPermissionMode ? (
|
||||
<span className={`text-xs ${
|
||||
permissionMode === 'acceptEdits' ? 'text-amber-500' :
|
||||
permissionMode === 'bypassPermissions' ? 'text-red-500' :
|
||||
permissionMode === 'plan' ? 'text-blue-500' :
|
||||
permissionMode === 'read-only' ? 'text-amber-500' :
|
||||
permissionMode === 'safe-yolo' ? 'text-amber-500' :
|
||||
permissionMode === 'yolo' ? 'text-red-500' :
|
||||
displayPermissionMode === 'acceptEdits' ? 'text-amber-500' :
|
||||
displayPermissionMode === 'bypassPermissions' ? 'text-red-500' :
|
||||
displayPermissionMode === 'plan' ? 'text-blue-500' :
|
||||
displayPermissionMode === 'read-only' ? 'text-amber-500' :
|
||||
displayPermissionMode === 'safe-yolo' ? 'text-amber-500' :
|
||||
displayPermissionMode === 'yolo' ? 'text-red-500' :
|
||||
'text-[var(--app-hint)]'
|
||||
}`}>
|
||||
{PERMISSION_MODE_LABELS[permissionMode]}
|
||||
{PERMISSION_MODE_LABELS[displayPermissionMode]}
|
||||
</span>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user