import { I18nKey } from "#/i18n/declaration"; /** * Structured `code` values the SDK's ACPAgent puts on a ConversationErrorEvent * (see software-agent-sdk `acp_agent.py`). The banner uses them to show a * code-specific header and, for credential failures, a recovery action. */ export const ACP_AUTH_REQUIRED_CODE = "ACPAuthRequired"; const ACP_ERROR_HEADER_KEYS: Record = { ACPAuthRequired: I18nKey.ERROR$ACP_AUTH_REQUIRED_TITLE, // Spawn/init/prompt/usage-policy failures share the generic "Agent error" // header; their detail already carries the specific cause. ACPSpawnError: I18nKey.CHAT_INTERFACE$AGENT_ERROR_MESSAGE, ACPInitError: I18nKey.CHAT_INTERFACE$AGENT_ERROR_MESSAGE, ACPPromptError: I18nKey.CHAT_INTERFACE$AGENT_ERROR_MESSAGE, UsagePolicyRefusal: I18nKey.CHAT_INTERFACE$AGENT_ERROR_MESSAGE, }; /** Localized header key for an error code, or null when the code is unknown. */ export function getAcpErrorHeaderKey(code?: string | null): I18nKey | null { if (!code) return null; return ACP_ERROR_HEADER_KEYS[code] ?? null; } /** Whether the error is a credential failure that warrants a re-auth action. */ export function isAcpAuthErrorCode(code?: string | null): boolean { return code === ACP_AUTH_REQUIRED_CODE; }