crates/localization/src/lib.rs
Rama main · réplica de lectura del repositorio original.
//! Lightweight localization registry for high-visibility TUI strings.
//!
//! This intentionally covers UI chrome only. It does not change model prompts,
//! model output language, provider behavior, or media payload semantics.
use rust_i18n::i18n;
include!(concat!(env!("OUT_DIR"), "/i18n_init.rs"));
mod localization_backend;
use std::borrow::Cow;
use unicode_segmentation::UnicodeSegmentation;
use unicode_width::{UnicodeWidthChar, UnicodeWidthStr};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Locale {
En,
Ja,
ZhHans,
ZhHant,
PtBr,
Es419,
Vi,
Ko,
Ca,
De,
Fr,
Id,
Hi,
Ru,
Uk,
}
impl Locale {
pub fn tag(self) -> &'static str {
match self {
Self::En => "en",
Self::Ja => "ja",
Self::ZhHans => "zh-Hans",
Self::ZhHant => "zh-Hant",
Self::PtBr => "pt-BR",
Self::Es419 => "es-419",
Self::Vi => "vi",
Self::Ko => "ko",
Self::Ca => "ca",
Self::De => "de",
Self::Fr => "fr",
Self::Id => "id",
Self::Hi => "hi",
Self::Ru => "ru",
Self::Uk => "uk",
}
}
pub fn translation_target_name(self) -> &'static str {
match self {
Self::En => "English",
Self::Ja => "Japanese (日本語)",
Self::ZhHans => "Simplified Chinese (简体中文)",
Self::ZhHant => "Traditional Chinese (繁體中文)",
Self::PtBr => "Brazilian Portuguese (Português do Brasil)",
Self::Es419 => "Latin American Spanish (Español latinoamericano)",
Self::Vi => "Vietnamese (Tiếng Việt)",
Self::Ko => "Korean (한국어)",
Self::Ca => "Catalan (Català)",
Self::De => "German (Deutsch)",
Self::Fr => "French (Français)",
Self::Id => "Indonesian (Bahasa Indonesia)",
Self::Hi => "Hindi (हिन्दी)",
Self::Ru => "Russian (Русский)",
Self::Uk => "Ukrainian (Українська)",
}
}
/// Every locale the TUI exposes in pickers and runtime resolution.
pub fn shipped() -> &'static [Self] {
&[
Self::En,
Self::Ja,
Self::ZhHans,
Self::ZhHant,
Self::PtBr,
Self::Es419,
Self::Vi,
Self::Ko,
Self::Ca,
Self::De,
Self::Fr,
Self::Id,
Self::Hi,
Self::Ru,
Self::Uk,
]
}
/// Complete UI packs held to `en.json` parity.
pub fn shipped_complete() -> &'static [Self] {
&[
Self::En,
Self::Ja,
Self::ZhHans,
Self::ZhHant,
Self::PtBr,
Self::Es419,
Self::Vi,
Self::Ko,
Self::Ca,
Self::De,
Self::Fr,
Self::Id,
Self::Hi,
Self::Ru,
Self::Uk,
]
}
#[must_use]
pub fn is_partial_pack(self) -> bool {
false
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MessageId {
AccountModelsLoadFailed,
ConnectionSetupTitle,
ConnectionSetupAccount,
ConnectionSetupAccountDetail,
ConnectionSetupLocal,
ConnectionSetupLocalDetail,
AccountModelsTitle,
AccountModelsLoading,
AccountModelsUnavailable,
AccountModelsReady,
AccountModelsConnectFailed,
AccountModelsCancelled,
AccountLoginTitle,
AccountLoginStarting,
AccountLoginWaiting,
AccountLoginCode,
AccountLoginOpenBrowser,
AccountLoginCopyLink,
AccountLoginLink,
AccountLoginSuccess,
AccountLoginNeedsModel,
AccountLoginCancelled,
AccountLoginExpired,
AccountLoginFailed,
AccountLogoutTitle,
AccountLogoutStarting,
AccountLogoutSuccess,
AccountLogoutLocal,
AccountLogoutFailed,
AccountLogoutCancelled,
ReasoningOnlyRetryBody,
OutputLimitAnswerRetryBody,
AnswerRetryActionBare,
AnswerRetryActionNudge,
AnswerRetryCounter,
OrcaRouterOfferRecommended,
OrcaRouterOfferAction,
OrcaRouterOfferBody,
OrcaRouterOfferDisclosure,
MobileStreamReplayFailed,
MobileStreamCatchUpFailed,
MobileStreamRuntimeShutdown,
MobileStreamEnded,
MobileStreamClosed,
MobileStreamReconnecting,
MobileStreamConnected,
ConversationChangedBeforeUndo,
SessionArchiveExported,
SessionArchiveSizes,
SessionArchiveNoArtifacts,
SessionArchiveRestoreHint,
CostReasonNotMoney,
CostReasonBillingUnknown,
CostReasonEndpointUnknown,
CostReasonRateMissing,
CostReasonLiveUnverified,
CostReasonRetiredAlias,
CostReasonTierMissing,
CostReasonRoutingDependent,
CostReasonCoverageMissing,
CostReasonTokenRateMissing,
CostReasonInvalidRate,
CostReasonCurrencyMissing,
CostReasonUsageConflict,
CostReasonUsageBreakdown,
CostReasonOutcomeUnknown,
CostReasonInProgress,
CostReasonProviderUsageMissing,
CostReasonLegacyUsageUnverified,
CostReasonUsageCorrectionUnverified,
CostChipLocal,
CostChipAllowance,
CostChipAllowancePercent,
McpLoginInProgress,
McpLoginStarting,
McpLoginBrowser,
McpLoginStored,
McpLoginFailed,
McpReloadAlreadyRunning,
McpLoginCancelled,
McpLoginHandshakeTimeout,
McpLoginServerNotFound,
McpDiagnosisUnobserved,
McpDiagnosisSummary,
McpDiagnosisLastError,
McpDiagnosisNext,
McpStateDisabled,
McpStateAuthorizationRequired,
McpStateConnecting,
McpStateFailed,
McpStateDisconnected,
ComposerPlaceholder,
ComposerDispatchFailedRestored,
DispatchFailedQueued,
DispatchFailedInitial,
HistorySearchPlaceholder,
HistorySearchTitle,
HistoryHintMove,
HistoryHintAccept,
HistoryHintRestore,
HistoryNoMatches,
TranscriptReasoningExpand,
TranscriptThought,
TranscriptThoughtFor,
ScreenModeFullscreenNotice,
ScreenModeInlineNotice,
ScreenModeMouseCaptureOn,
ScreenModeMouseCaptureOff,
ScreenModeUnchanged,
ImageInputRejectedResent,
ImageInputOmitted,
RequestImageWindow,
ImageCountRejected,
ProviderToolCallMissing,
// First-run anonymous usage disclosure.
TelemetryNoticeDefaultOn,
TelemetryNoticeHeadline,
TelemetryNoticeBody,
TelemetryNoticeCompactBody,
TelemetryNoticeChoiceKeep,
TelemetryNoticeChoiceDisable,
TelemetryNoticeActionChoose,
TelemetryNoticeActionConfirm,
TelemetryNoticeActionExit,
TelemetryNoticeReceiptEnabled,
TelemetryNoticeReceiptDisabled,
TelemetryNoticeReceiptEnabledUnsaved,
TelemetryNoticeReceiptDisabledUnsaved,
TelemetryPreferenceEnabledNextLaunch,
TelemetryPreferenceDisabled,
TelemetryPreferenceDisabledWithWarning,
TelemetryPreferenceDisabledForSession,
TelemetryPreferenceSaveFailed,
// StatusPicker — `/statusline` multi-select footer-item picker.
StatusPickerTitle,
StatusPickerInstruction,
StatusPickerActionToggle,
StatusPickerActionAll,
StatusPickerActionNone,
StatusPickerActionSave,
StatusPickerActionCancel,
StatusPickerModeHint,
StatusPickerModelHint,
StatusPickerCostHint,
StatusPickerCacheHint,
StatusPickerContextPercentHint,
StatusPickerTokensHint,
StatusPickerBalanceHint,
StatusPickerSessionMetricsHint,
StatusPickerTtftHint,
StatusPickerOutputRateHint,
StatusPickerWorkspaceHint,
StatusPickerGitBranchHint,
// Hotbar setup wizard chrome and validation.
HotbarSetupTitle,
HotbarSetupSourceApp,
HotbarSetupSourceSlash,
HotbarSetupSourceMcp,
HotbarSetupSourceSkill,
HotbarSetupSourcePlugin,
HotbarSetupStatusDisabled,
HotbarSetupStatusPrefill,
HotbarSetupStatusReady,
HotbarSetupDirtyModified,
HotbarSetupDirtyClean,
HotbarSetupNoAction,
HotbarSetupConfirmDisable,
HotbarSetupStatusLine,
HotbarSetupSlotOutOfRange,
HotbarSetupNoActionSelected,
HotbarSetupCannotAssign,
HotbarSetupNoActions,
HotbarSetupRecommended,
HotbarSetupEmptySlot,
HotbarSetupHelp,
HotbarActionVoiceToggleName,
HotbarActionVoiceToggleDescription,
HotbarActionSessionCompactName,
HotbarActionSessionCompactDescription,
HotbarActionModePlanName,
HotbarActionModePlanDescription,
HotbarActionModeAgentName,
HotbarActionModeAgentDescription,
HotbarActionModeYoloName,
HotbarActionModeYoloDescription,
HotbarActionModeOperateName,
HotbarActionModeOperateDescription,
HotbarActionReasoningCycleName,
HotbarActionReasoningCycleDescription,
HotbarActionReasoningCycleAutoDisabled,
HotbarActionSidebarToggleName,
HotbarActionSidebarToggleDescription,
HotbarActionFileTreeToggleName,
HotbarActionFileTreeToggleDescription,
HotbarActionPaletteOpenName,
HotbarActionPaletteOpenDescription,
HotbarActionTrustToggleName,
HotbarActionTrustToggleDescription,
CommandPaletteTitle,
CommandPaletteSubtitle,
ConfigTitle,
ConfigPreviewLabel,
ConfigHintExternalCredentials,
ConfigSubtitle,
ConfigModalTitle,
ConfigSearchPlaceholder,
ConfigNoSettings,
ConfigNoMatchesPrefix,
ConfigFilteredSettings,
ConfigShowing,
ConfigFooterDefault,
ConfigFooterScrollable,
ConfigFooterFiltered,
ConfigSectionProvider,
ConfigSectionModel,
ConfigSectionPermissions,
ConfigSectionNetwork,
ConfigSectionDisplay,
ConfigSectionComposer,
ConfigSectionSidebar,
ConfigSectionHistory,
ConfigSectionMcp,
ConfigSectionFleet,
ConfigSectionWorkflow,
ConfigSectionSession,
ConfigSectionLegacy,
ConfigSectionExperimental,
ConfigScopeSession,
ConfigScopeSaved,
ConfigCommandSource,
ConfigCommandInvalidValue,
ConfigSearchUpdated,
ConfigPromptSuggestionUpdated,
ConfigLabelNotificationQuiet,
ConfigLabelNotificationSound,
ConfigLabelNotificationCondition,
ConfigLabelNotificationMethod,
ConfigLabelNotificationThreshold,
ConfigLabelNotificationSummary,
ConfigLabelNotificationSubagents,
ConfigLabelNotificationTurnComplete,
ConfigLabelNotificationSubagentTerminal,
ConfigLabelNotificationApprovalNeeded,
ConfigLabelNotificationInputNeeded,
ConfigLabelNotificationElevationNeeded,
ConfigLabelNotificationModelNotify,
ConfigLabelNotificationCompletionSound,
ConfigLabelNotificationSoundFile,
ConfigLabelNotificationEventSoundEnabled,
ConfigLabelNotificationEventSoundEvents,
ConfigLabelNotificationEventSoundInterval,
ConfigLabelNotificationEventSoundQuiet,
ConfigHintNotificationPolicy,
ConfigHintNotificationSound,
ConfigHintNotificationLegacy,
ConfigChoiceNotificationWhale,
ConfigChoiceNotificationLegacy,
ConfigChoiceNotificationAlways,
ConfigChoiceNotificationUnfocused,
ConfigChoiceNotificationNever,
ConfigChoiceNotificationFile,
ConfigChoiceNotificationBell,
ConfigNotificationsSetHint,
ConfigNotificationUpdated,
ConfigNotificationsWholeNumber,
ConfigAuditSearchProvider,
ConfigAuditPromptSuggestion,
ConfigAuditNotifications,
ConfigHelpDiscoverable,
ConfigEditCancelled,
ConfigEditTitlePrefix,
ConfigEditScopeLabel,
ConfigEditCurrentLabel,
ConfigEditHintLabel,
ConfigEditNewLabel,
ConfigEditFooter,
ConfigLocalePartialBadge,
ConfigLocalePartialDetail,
ConfigRowEffective,
ConfigDefaultValue,
ConfigDefaultReasoning,
ConfigUnavailable,
ConfigLabelProvider,
ConfigLabelBaseUrlDeepseek,
ConfigLabelProviderUrl,
ConfigHintProviderUrl,
ConfigLabelModel,
ConfigLabelFastModel,
ConfigLabelDefaultModel,
ConfigLabelReasoningEffort,
ConfigLabelApprovalMode,
ConfigLabelPermissionPosture,
ConfigLabelApprovalPolicy,
ConfigLabelManagedApprovalPolicy,
ConfigLabelDefaultMode,
ConfigLabelAllowShell,
ConfigLabelManagedAllowShell,
ConfigLabelTelemetry,
ConfigHintTelemetry,
ConfigValueTelemetryOn,
ConfigValueTelemetryOff,
ConfigLabelStreamTimeout,
ConfigLabelTheme,
ConfigLabelLocale,
ConfigLabelBackground,
ConfigLabelWorkSurfacePlacement,
ConfigLabelTopHeight,
ConfigLabelSideWidth,
ConfigLabelCalmMode,
ConfigLabelLowMotion,
ConfigLabelFancyAnimations,
ConfigLabelShowThinking,
ConfigLabelThinkingHighlight,
ConfigLabelShowToolDetails,
ConfigLabelInlineDiffs,
ConfigLabelStatusIndicator,
ConfigLabelSynchronizedOutput,
ConfigLabelCostCurrency,
ConfigLabelTranscriptSpacing,
ConfigLabelToolCollapse,
ConfigLabelComposerDensity,
ConfigLabelComposerBorder,
ConfigLabelComposerMultilineMode,
ConfigLabelComposerVimMode,
ConfigLabelBracketedPaste,
ConfigLabelPasteBurstDetection,
ConfigLabelMentionMenuLimit,
ConfigLabelMentionMenuBehavior,
ConfigLabelMentionWalkDepth,
ConfigLabelWorkspaceFollowSymlinks,
ConfigLabelContextPanel,
ConfigLabelSessionsRail,
ConfigLabelSessionAutoResume,
ConfigLabelAutoCompact,
ConfigLabelAutoCompactThreshold,
ConfigLabelMaxHistory,
ConfigLabelMcpOpen,
ConfigLabelMcpReconnect,
ConfigLabelMcpDiagnose,
ConfigLabelPluginsOpen,
ConfigLabelMcpConfigPath,
ConfigLabelFleetSpawnDepth,
ConfigLabelGoalCommand,
ConfigLabelWorkflow,
ConfigLabelFeaturePrefix,
ConfigColumnSetting,
ConfigColumnValue,
ConfigColumnScope,
ConfigActionOpenProvider,
ConfigActionOpenModel,
ConfigActionOpenMcp,
ConfigActionMcpReconnect,
ConfigActionMcpDiagnose,
ConfigActionOpenPlugins,
ConfigActionToggle,
ConfigActionChoose,
ConfigActionEdit,
ConfigActionReadOnly,
ModelPickerAutoNetworkHint,
ModelPickerAutoNetworkActiveProviderHint,
ModelPickerAutoLocalHint,
ModelPickerAutoLastRoute,
AutoRouteSelectedToast,
ModelPickerNotListed,
HelpGroupCommonCommands,
HelpGroupAllCommands,
HelpTitle,
HelpSubtitle,
HelpFilterPlaceholder,
HelpFilterPrefix,
HelpNoMatches,
HelpSlashCommands,
HelpKeybindings,
HelpUserCommands,
HelpSkills,
HelpFooterTypeFilter,
HelpFooterMove,
HelpFooterJump,
HelpFooterClose,
CmdAttachDescription,
CmdAnchorDescription,
CmdCacheDescription,
CmdPreviewRequestDescription,
CmdToolsDescription,
CmdTurnInspectDescription,
CmdChangeDescription,
CmdEffortDescription,
CmdChangeHeader,
CmdChangeTranslationQueued,
CmdChangeTranslationUnavailable,
CmdChangePreviousVersion,
CmdBalanceDescription,
CmdImportClaudeDescription,
CmdClearDescription,
CmdColorDescription,
CmdColorSet,
CmdColorReset,
CmdColorUnknown,
CmdCompactDescription,
CmdPurgeDescription,
CmdConfigDescription,
CmdPermissionsDescription,
PermissionsListHeader,
PermissionsNoRules,
PermissionsFileMissing,
PermissionsFileEmpty,
PermissionsFilePresent,
PermissionsRuleEntry,
PermissionsMatchExactCommand,
PermissionsMatchCommandPrefix,
PermissionsMatchExactPath,
PermissionsMatchAnyInvocation,
PermissionsScopeGlobal,
PermissionsScopeRepo,
PermissionsAppliesHere,
PermissionsInactiveHere,
PermissionsRemovePreview,
PermissionsRemoved,
PermissionsUsage,
PermissionsRuleNotFound,
AutoReviewReceiptGuardianAllowed,
AutoReviewReceiptGuardianDenied,
AutoReviewReceiptGuardianUnavailable,
AutoReviewReceiptDeterministicBlocked,
AutoReviewReceiptHeld,
FooterHintEscInterrupt,
/// `{enter}` and `{steer}` are key names composed in code.
PostureHintEnterAgain,
PermissionsPostureHeader,
PermissionsPostureAsk,
PermissionsPostureAcceptEdits,
PermissionsPostureAuto,
PermissionsPostureBypass,
PermissionsPostureNever,
PermissionsReceiptsNote,
PermissionsOperationFailed,
CmdAuthDescription,
CmdConstitutionDescription,
CmdContextDescription,
CmdCostDescription,
CmdReceiptsDescription,
CmdDiffDescription,
CmdDiffGitUnavailable,
CmdDiffNoBaseline,
CmdDiffFailed,
CmdDiffNoChanges,
CmdDiffChangedFiles,
CmdDiffChangedFilesRenamed,
CmdDiffStatHeader,
CmdDiffTruncated,
CmdDiffTitle,
CmdUndoUnknownOption,
CmdUndoRemovedMessages,
CmdUndoNothingToUndo,
CmdUndoFilesNotRevertedNote,
CmdUndoNoFileChangesNote,
CmdUndoSnapshotRepoUnavailable,
CmdUndoSnapshotPending,
CmdUndoNoSnapshots,
CmdUndoNoSession,
CmdUndoNoOwnedSteps,
CmdUndoNoDifference,
CmdUndoOpenEnded,
CmdUndoCompareFailed,
CmdUndoSnapshotFailed,
CmdUndoListFailed,
CmdUndoRestoreFailed,
CmdUndoChangedSince,
CmdUndoRequestNamed,
CmdUndoRequestLast,
CmdUndoUndidSummary,
CmdUndoOneFileBack,
CmdUndoFilesBack,
CmdUndoActionRestored,
CmdUndoActionRecreated,
CmdUndoActionRemoved,
CmdUndoForcedNote,
CmdUndoConversationRemoved,
CmdUndoConversationKept,
CmdUndoLeftInPlace,
CmdEditDescription,
CmdExitDescription,
CmdExportDescription,
CmdCopyDescription,
CmdCopyNoOutput,
CmdCopySuccess,
CmdCopySuccessNoBackup,
CmdCopyQueued,
CmdCopyQueuedNoBackup,
CmdCopyFailed,
CmdCopyFailedNoBackup,
CmdFeedbackDescription,
FeedbackNoSession,
FeedbackUnavailable,
FeedbackReviewNotice,
FeedbackHelp,
FeedbackDraftRequested,
CmdHfDescription,
CmdHelpDescription,
CmdProfileDescription,
ProfileUsage,
ProfileSwitching,
ProfileSwitched,
ProfileStatus,
ProfileSwitchFailed,
CmdHomeDescription,
CmdOverviewDescription,
HomeBackToConversation,
HomeNavigationBusy,
CmdHooksDescription,
CmdAgentDescription,
CmdGoalDescription,
GoalReceiptSet,
GoalReceiptSetOperate,
GoalControlAccepted,
GoalControlRuntimeUnavailable,
GoalStatusIdleHint,
GoalContinuationWaiting,
GoalContinuationReady,
GoalContinuationStopped,
CmdInitDescription,
CmdJobsDescription,
CmdLinksDescription,
CmdLoadDescription,
CmdLogoutDescription,
CmdLoginDescription,
CmdConnectDescription,
CmdDisconnectDescription,
CmdMcpDescription,
McpRecommendedUnknownId,
McpRecommendationsHeading,
McpRecommendationsSafety,
McpRecommendationGithub,
McpRecommendationChrome,
McpRecommendationPlaywright,
McpRecommendationContainerUse,
McpCapabilitiesAdvertised,
McpCapabilitiesLegacyFallback,
McpCapabilitiesNotObserved,
CmdMemoryDescription,
CmdPluginDescription,
ExtensionsActionAdd,
ExtensionsActionEnable,
ExtensionsActionDisable,
ExtensionsActionReview,
ExtensionsActionRemove,
ExtensionsStateOn,
ExtensionsStateOff,
ExtensionsStateNeedsReview,
ExtensionsReviewExplainer,
ExtensionsScopeGlobal,
ExtensionsScopeProject,
ExtensionsScopePlugin,
ExtensionsRemoveArmed,
ExtensionsActionEdit,
ExtensionsHooksAddLabel,
ExtensionsHooksAddDescription,
ExtensionsActionReload,
ExtensionsActionConnect,
ExtensionsActionReconnect,
ExtensionsActionReauth,
ExtensionsActionDiagnose,
ExtensionsActionManage,
ExtensionsActionFocus,
ExtensionsActionFold,
ExtensionsActionTabs,
ExtensionsCompatibilityFull,
ExtensionsCompatibilityPartial,
ExtensionsGroupBuiltIn,
ExtensionsGroupConfigured,
ExtensionsGroupProblems,
ExtensionsGroupRecommended,
ExtensionsGroupServers,
ExtensionsGroupNeedsAttention,
ExtensionsGroupNeedsLogin,
ExtensionsGroupStatus,
ExtensionsGroupUser,
ExtensionsGroupWorkspace,
ExtensionsHookDetail,
ExtensionsHookFallback,
ExtensionsHooksConfiguration,
ExtensionsInventoryAgents,
ExtensionsInventoryCommands,
ExtensionsInventoryHooks,
ExtensionsInventoryMcp,
ExtensionsInventoryNone,
ExtensionsInventorySkills,
ExtensionPromptUnavailable,
ProfileConstitutionUnavailableLocal,
ExtensionsMarketplaceDetail,
ExtensionsMarketplaceUnavailable,
ExtensionsMcpEmpty,
ExtensionsMcpBrowse,
ExtensionsMcpDetail,
ExtensionsMcpNotInspected,
ExtensionsMcpNotConnectedYet,
ExtensionsMcpRefresh,
ExtensionsMcpSummary,
ExtensionsNoItems,
ExtensionsNoMatches,
ExtensionsPluginDetail,
ExtensionsProductChromeDescription,
ExtensionsProductDetail,
ExtensionsProductPlaywrightDescription,
ExtensionsProductCodewhaleComputerUseDescription,
ExtensionsStateFirstParty,
ExtensionsSearchLabel,
ExtensionsSkillRootCompatibleGlobal,
ExtensionsSkillRootCompatibleProject,
ExtensionsSkillRootConfigured,
ExtensionsSkillRootGlobal,
ExtensionsSkillRootProject,
ExtensionsSkillRootRegistryCache,
ExtensionsSkillRootReviewedPlugin,
ExtensionsStateAvailable,
ExtensionsStateConnected,
ExtensionsStateEnabled,
ExtensionsStateError,
ExtensionsStateInactive,
ExtensionsStateInapplicable,
ExtensionsStateInvalid,
ExtensionsStateNotInspected,
ExtensionsStateDisconnected,
ExtensionsStateRejected,
ExtensionsStateReviewedCandidate,
ExtensionsStateUnderEvaluation,
ExtensionsStateUnstaged,
ExtensionsStateUnsupported,
ExtensionsStateWarning,
ExtensionsTabHooks,
ExtensionsTabMarketplace,
ExtensionsTabMarketplaceCompact,
ExtensionsTabPlugins,
ExtensionsTierCommunity,
ExtensionsTierCurated,
ExtensionsTierOfficial,
ExtensionsTierPartner,
ExtensionsTitle,
ExtensionsTrustCapabilitiesChanged,
ExtensionsTrustContentChanged,
ExtensionsTrustNotReviewed,
ExtensionsTrustTrusted,
ExtensionsValueNo,
ExtensionsValueYes,
PluginKimiUsage,
PluginKimiManagedRootHeading,
PluginKimiNoneFound,
PluginKimiLicenseUnspecified,
PluginKimiApplicable,
PluginKimiNotApplicable,
PluginKimiCandidateSummary,
PluginKimiCandidateDetails,
PluginKimiRejectedHeading,
PluginKimiInspectionFooter,
PluginKimiCandidateMissing,
PluginKimiCandidateChanged,
PluginKimiHomeMissing,
PluginKimiRootInspectFailed,
PluginKimiRootMustBeDirectory,
PluginKimiRootCanonicalizeFailed,
PluginKimiRootListFailed,
PluginKimiEntryReadFailed,
PluginKimiEntryLimit,
PluginKimiEntryInspectFailed,
PluginKimiEntryLinksRefused,
PluginKimiEntryOutsideRoot,
PluginKimiEntryCanonicalizeFailed,
PluginKimiManifestUnreadable,
PluginKimiManifestMustBeFile,
PluginKimiManifestInvalid,
PluginKimiDirectoryNameMismatch,
PluginKimiHashUnavailable,
PluginKimiRollbackDestinationMissing,
PluginKimiMismatchRemoved,
PluginKimiMismatchRollbackFailed,
PluginKimiUserPluginDirectory,
PluginKimiMarketplaceZipUnsupported,
PluginKimiMarketplaceRemoteUnsupported,
PluginKimiMarketplaceGzipTarball,
CmdPluginBundleUsage,
CmdPluginBundleNoneFound,
CmdPluginBundleListHeader,
CmdPluginLegacyListHeader,
CmdPluginBundleNotFound,
CmdPluginBundleReloaded,
PluginPromptSuggestTrust,
PluginPromptSuggestEnable,
PluginPromptSuggestMarketplace,
PluginCtaInstallPrompt,
PluginCtaReview,
PluginCtaInstall,
PluginCtaReviewTrust,
PluginCtaEnable,
PluginCtaDismiss,
PluginCtaDismissSaveFailed,
PluginSuggestionReason,
PagerActionConfirm,
PagerEvidenceBinary,
PagerEvidenceLoadingTitle,
PagerEvidenceVerifying,
PagerEvidenceRangeTitle,
PagerEvidenceVerifiedRange,
PagerEvidenceUnavailableTitle,
PagerEvidenceUnavailable,
PagerEvidenceCopyLabel,
PagerActionSearchLoadedRange,
PagerActionCopyLoadedRange,
PagerActionByteWindows,
PagerActionFirstLastBytes,
PagerDiffRowsShortened,
PagerDiffCopySource,
PagerUnicodeEscapes,
UserInputUnicodeEscapes,
PagerDisplayContinuation,
PagerActionScroll,
PagerActionPage,
PagerActionHalfPage,
PagerActionTopBottom,
PagerActionCopy,
PagerActionCopyHandoff,
PagerActionCopyAnswer,
PagerCopyContentLabel,
PagerCopyHandoffLabel,
PagerCopyAnswerLabel,
PagerSearchMatch,
ToolOutputShortened,
CmdPluginBundleDetail,
CmdPluginOwnerReport,
CmdPluginOwnerActivating,
CmdPluginOwnerActive,
CmdPluginOwnerFailed,
CmdPluginOwnerFaulted,
CmdPluginOwnerRevoked,
CmdPluginOwnerInactive,
CmdPluginBundleDiagnosticsHeader,
CmdPluginBundleMutationSuccess,
CmdPluginActionFailed,
CmdPluginNoneFound,
CmdPluginNotFound,
CmdPluginListHeader,
CmdPluginDetailDescription,
CmdPluginDetailSchema,
CmdPluginDetailApproval,
CmdPluginDetailPath,
CmdModeDescription,
CmdModelDescription,
CmdModelsDescription,
CmdRouterDescription,
RouterSetupTitle,
RouterPresetJevHint,
RouterPresetFastHint,
RouterPresetOffHint,
RouterPresetOffCostSavingHint,
RouterPresetCustomHint,
RouterPresetUnavailable,
RouterTypesafeSignupPaused,
RouterTestSaveHint,
RouterTestHeader,
RouterTestNotMade,
RouterTestWouldRoute,
RouterTestDecision,
RouterTestChoice,
RouterTestCostReported,
RouterTestCostUnreported,
RouterTestUsage,
RouterTestFailing,
RouterSaved,
RouterNotSaved,
RouterRuntimeNotReloaded,
RouterCurrent,
RouterCurrentFailing,
RouterSummary,
RouterSummaryThinking,
RouterPresetFastLabel,
RouterPresetCustomLabel,
RouterNoKey,
RouterNoFastTier,
RouterNeedKey,
RouterCustomByHand,
RouterCustomHelpIntro,
RouterCustomHelpOutro,
RouterActionTest,
RouterActionSave,
RouterActionDiscard,
ModelsListHeader,
ModelsListHint,
ModelsUpdateSummary,
ModelsUpdatePartial,
ModelsCodexHint,
ModelsSourceFallback,
CmdModelDbDescription,
CmdNetworkDescription,
CmdUpdateDescription,
CmdNoteDescription,
CmdThemeDescription,
CmdProviderDescription,
CmdQueueDescription,
CmdQueueUsage,
QueueRestoredFromPreviousSession,
CmdQueueDraftHeader,
CmdQueueNoMessages,
CmdQueueListHeader,
CmdQueueTip,
CmdQueueAlreadyEditing,
CmdQueueNotFound,
CmdQueueEditingStatus,
CmdQueueEditingMessage,
CmdQueueDropped,
CmdQueueAlreadyEmpty,
CmdQueueCleared,
CmdQueueMissingIndex,
CmdQueueIndexPositive,
CmdQueueIndexMin,
CmdRelayDescription,
CmdRemoteControlDescription,
CmdRemoteEnvDescription,
CmdRemoteEnvOverview,
CmdRemoteEnvOpening,
CmdRemoteEnvUnavailable,
CmdRemoteEnvSourceCustodyPolicy,
CmdRemoteEnvBrowserLabel,
CmdRenameDescription,
CmdTitleDescription,
CmdRestoreDescription,
CmdRetryDescription,
CmdReviewDescription,
CmdRlmDescription,
CmdSaveDescription,
CmdFullscreenDescription,
CmdInlineDescription,
CmdForkDescription,
CmdNewDescription,
CmdSessionsDescription,
CmdTreeDescription,
CmdBranchDescription,
CmdResumeDescription,
CmdSettingsDescription,
CmdSidebarDescription,
CmdSkillDescription,
CmdSkillsDescription,
SkillsIndexDescriptionLimit,
CmdStashDescription,
CmdStatusDescription,
CmdStatuslineDescription,
CmdStructcopyDescription,
CmdStructcopyKindTurn,
CmdStructcopyKindTool,
CmdStructcopyKindPlan,
CmdStructcopyKindWorkflow,
CmdStructcopyUsageError,
CmdStructcopyUnavailable,
CmdStructcopyBusy,
CmdStructcopyPrepareFailed,
CmdStructcopyClipboardQueued,
CmdStructcopyClipboardAccepted,
CmdStructcopyClipboardFailed,
CmdStructcopyReceiptTooLarge,
CmdFleetDescription,
PetUnobserved,
PetOffline,
PetDozing,
PetWatchUnavailable,
PetWatchRestored,
PetWatchStorageUnavailable,
PetWatchExported,
PetWatchExportFailed,
PetWatchExportQueued,
PetWatchExportUnavailable,
PetHabitatTitle,
PetHabitatHints,
PetHabitatQueued,
PetWatchSoundOn,
PetWatchSoundOff,
PetWatchSoundPaused,
PetWatchSoundUnavailable,
CmdPetDescription,
ConfigLabelPetMode,
ConfigHintPetMode,
PetModeCopyHint,
PetModeOn,
PetModeOff,
PetModeOnLabel,
PetModeInspectHint,
PetModeViewHint,
PetViewNeeds,
PetNeedsKittyGraphics,
PetNeedsSynchronizedOutput,
PetNeedsCellPixels,
PetNeedsGraphicsAllowed,
PetNeedsAtlas,
PetNeedsArtSize,
PetNeedsUnicode,
PetNeedsColor,
PetWords,
PetAscii,
PetModeReplyTitle,
PetActivityBrowsing,
PetActivityComputer,
PetActivityMemory,
PetAppearanceLegacy,
PetModeMessageHint,
PetModePaneHint,
PetModeAgentHints,
PetModeReplyHints,
PetModeCompanionHints,
PetModeOffLabel,
PetViewOpen,
PetViewClosed,
CmdLaneDescription,
CmdWorkflowDescription,
CmdWorkflowsDescription,
CmdAutoDescription,
AutoReceiptOn,
AutoReceiptPlanNote,
CmdHotbarDescription,
CmdSetupDescription,
CmdSubagentsDescription,
CmdAdvisorDescription,
CmdSystemDescription,
CmdAutomationDescription,
CmdTaskDescription,
CmdTokensDescription,
CmdTranslateDescription,
CmdTranslateOff,
CmdTranslateOn,
TranslationInProgress,
TranslationComplete,
TranslationFailed,
CmdTrustDescription,
CmdLspDescription,
CmdShareDescription,
CmdWorkspaceDescription,
CmdUndoDescription,
CmdVerboseDescription,
CmdCacheAdvice,
CmdCacheFootnote,
CmdCacheHeader,
CmdCacheNoData,
CmdCacheSessionRates,
CmdCacheRateParent,
CmdCacheRateAgents,
CmdCacheRateCombined,
CmdCacheTotals,
CmdCostReport,
CmdCostReportSubtotal,
CmdCostReportUnknown,
CmdCostUnknownValue,
CmdCostEstimateOnly,
CmdCostCoverage,
CmdCostCoverageUnknownLegacy,
CmdCostUnpricedTurns,
CmdCostUnpricedClasses,
CmdCostPricingProvenance,
CmdCostLivePricingDowngraded,
CmdCostLivePricingUnavailable,
CmdCostRoutesHeader,
CmdTokensCacheWriteTotal,
CmdTokensCacheBoth,
CmdTokensCacheHitOnly,
CmdTokensCacheMissOnly,
CmdTokensContextUnknownWindow,
CmdTokensContextWithWindow,
CmdTokensNotReported,
CmdTokensReport,
FooterAgentSingular,
FooterAgentsPlural,
HeaderAgentsChip,
FooterPressCtrlCAgain,
FooterWorking,
FooterBalancePrefix,
HelpSectionActions,
HelpSectionClipboard,
HelpSectionPointer,
HelpSectionEditing,
HelpSectionHelp,
HelpSectionModes,
HelpSectionNavigation,
HelpSectionSessions,
KbScrollTranscript,
KbNavigateHistory,
KbScrollTranscriptAlt,
KbBrowseHistory,
KbScrollPage,
KbJumpTopBottom,
KbJumpTopBottomEmpty,
KbJumpToolBlocks,
KbMoveCursor,
KbJumpLineStartEnd,
KbDeleteChar,
KbDeleteWord,
KbYank,
KbToggleFileTree,
KbSelectText,
KbSelectAllDraft,
KbClearDraft,
KbRestoreClearedDraft,
KbStashDraft,
KbSearchHistory,
KbInsertNewline,
KbSendDraft,
KbSteerCurrentTurn,
KbCloseMenu,
KbCancelOrExit,
KbShellControls,
KbExitEmpty,
KbCommandPalette,
KbSettings,
KbCancelBackgroundShellJobs,
KbFuzzyFilePicker,
KbCompactInspector,
KbCompactContext,
KbLastMessagePager,
KbSelectedDetails,
KbToolDetailsPager,
KbReasoningDetail,
KbTurnInspector,
KbExternalEditor,
KbLiveTranscript,
KbBacktrackMessage,
KbTabComplete,
KbCycleThinking,
KbCyclePermissions,
KbJumpPlanAgentYolo,
KbAltJumpPlanAgentYolo,
KbFocusSidebar,
KbSessionPicker,
KbUpdateInstall,
UpdateWhatsNewUpdated,
UpdateWhatsNewCounts,
UpdateWhatsNewHeadline,
UpdateWhatsNewFeatureSingular,
UpdateWhatsNewFeaturesPlural,
UpdateWhatsNewFixSingular,
UpdateWhatsNewFixesPlural,
UpdateWhatsNewOtherSingular,
UpdateWhatsNewOtherPlural,
UpdateWhatsNewNotes,
KbTerminalPaste,
KbPasteAttach,
KbCopySelection,
ClipboardSshPasteHint,
/// Copy receipt when a native clipboard confirmed the write.
ClipboardCopied,
/// Copy receipt when the text went to the terminal (OSC 52 / tmux),
/// which never acknowledges it.
ClipboardSentToTerminal,
/// Cut when only the terminal took the copy: the text is kept, because
/// the terminal never confirms it.
ClipboardCutKeptText,
/// Paste found nothing: the clipboard read came back empty or failed.
ClipboardNothingToPaste,
ClipboardCopyFailed,
ComposerOversizedSubmitHeld,
/// Short toast form of [`Self::ComposerOversizedSubmitHeld`]; the toast row
/// sheds clauses to fit, so the full text goes to the transcript instead.
ComposerOversizedSubmitHeldShort,
KbContextMenu,
KbPointerScroll,
KbPointerClick,
KbPointerDrag,
KbAttachPath,
KbHelpOverlay,
KbCycleWorkDock,
KbCycleWorkDockBack,
KbToggleHelp,
KbToggleHelpSlash,
HelpUsageLabel,
HelpAliasesLabel,
SettingsTitle,
SettingsConfigFile,
SettingsTuiPrefsFolded,
SettingsTuiPrefsKept,
SettingsTuiPrefsQuarantined,
ClearConversation,
ClearConversationBusy,
ModelChanged,
ModelChangedSessionNote,
LinksProjectTitle,
LinksDocumentation,
LinksCommunity,
LinksGitHub,
LinksManagedApp,
LinksManagedAppNote,
LinksTitle,
LinksDashboard,
LinksDocs,
LinksKimiCodeRouteNote,
LinksTip,
WorkspaceCurrent,
WorkspaceNotFound,
WorkspaceNotDirectory,
WorkspaceSwitching,
WorkspaceHomeUnresolved,
WorkspaceSwitchBusy,
WorkspaceUnchanged,
WorkspaceSwitched,
WorkspaceStatus,
SubagentsFetching,
SubagentsNoCurrentSessionFleetWorkers,
SubagentsCurrentSessionFleetWorkersTitle,
SubagentsCurrentSessionFleetWorkerRoles,
SubagentsCurrentSessionFleetWorkersStatus,
SubagentsEmptyGuidance,
SubagentsStatusRunning,
SubagentsStatusCompleted,
SubagentsStatusInterrupted,
SubagentsStatusFailed,
SubagentsStatusCancelled,
SubagentsRowStatusInterrupted,
SubagentsRowStatusCancelled,
SubagentsRowStatusBudgetExhausted,
SubagentsSummaryItem,
SubagentsGroupHeading,
SubagentsHeaderRoster,
SubagentsHeaderColumns,
SubagentsActionRefresh,
SubagentsActionRosterSetup,
SubagentsLabelReason,
SubagentsLabelRole,
SubagentsLabelPosture,
SubagentsLabelGit,
SubagentsLabelObjective,
SubagentsLabelResult,
SubagentsPostureDetails,
SubagentsValueOn,
SubagentsValueOff,
SubagentsShellNone,
SubagentsShellReadOnly,
SubagentsShellFull,
SubagentsBranch,
SubagentsBranchWithWorkspace,
SubagentsRoleWorker,
SubagentsRoleScout,
SubagentsRolePlanner,
SubagentsRoleBuilder,
SubagentsRoleVerifier,
SubagentsRoleReviewer,
SubagentsRoleConsultant,
SubagentsRoleCustom,
HelpUnknownCommand,
HomeDashboardTitle,
HomeModel,
HomeMode,
HomeWorkspace,
HomeHistory,
HomeTokens,
HomeQueued,
HomeSubagents,
HomeSkill,
HomeQuickActions,
HomeQuickLinks,
HomeQuickSkills,
HomeQuickConfig,
HomeQuickSettings,
HomeQuickModel,
HomeQuickSubagents,
HomeQuickTaskList,
HomeQuickHelp,
HomeQuickWorkspace,
HomeQuickRestore,
HomeQuickTokens,
HomeModeTips,
HomeAgentModeTip,
HomeAgentModeReviewTip,
HomeAgentModeYoloTip,
HomeYoloModeTip,
HomeYoloModeCaution,
HomePlanModeTip,
HomePlanModeChecklistTip,
HomeOperateModeTip,
HomeOperateModeFleetTip,
HomeGoalModeTip,
// Onboarding screens — calm first-run welcome (#3938 rewrite).
OnboardWelcomeTitle,
OnboardWelcomeLead,
OnboardWelcomeBegin,
OnboardActionBack,
OnboardActionExit,
OnboardStepsTitle,
// Onboarding screens — language picker.
OnboardLanguageTitle,
OnboardLanguageBlurb,
OnboardLanguagePick,
OnboardLanguageKeep,
OnboardProviderTitle,
OnboardProviderBlurb,
OnboardProviderChoose,
OnboardProviderOffline,
KimiCodePlanApiKeyHint,
KimiCodePlanRouteHint,
KimiCodePlanNoImportHint,
StepfunBillingRouteTitle,
StepfunBillingRouteIntro,
StepfunBillingRoutePaygOption,
StepfunBillingRoutePlanOption,
StepfunPlanApiKeyHint,
StepfunPlanRouteHint,
OnboardApiKeyRejectedEnv,
// Onboarding screens — workspace trust prompt.
OnboardTrustTitle,
OnboardTrustQuestion,
OnboardTrustLocationPrefix,
OnboardTrustRiskHint,
OnboardTrustEffectHint,
OnboardTrustActionTrust,
OnboardTrustActionSkip,
OnboardTrustActionQuit,
OnboardTrustEnterHint,
OnboardTrustUntrustedNotice,
RedactionGateSaveFailed,
RedactionGateTitle,
RedactionGateQuestion,
RedactionGateDangerNotice,
RedactionGateRisk,
RedactionGateEffect,
RedactionGateRollbackHint,
RedactionGateEnterHint,
RedactionGateActionConfirm,
RedactionGateActionKeep,
RedactionGateActionQuit,
// Startup gate — second-stage final confirmation before the opt-out
// really takes effect.
RedactionGateConfirmTitle,
RedactionGateConfirmQuestion,
RedactionGateActionBack,
// Onboarding screens — explicit offline ("explore") choice (#3927).
OnboardOfflineOption,
OnboardOfflineNotice,
// Onboarding screens — ready screen and the seeded first task.
OnboardReadyTitle,
OnboardReadyLead,
OnboardReadyStart,
OnboardReadyCustomize,
OnboardSeedCodeProject,
OnboardSeedFolder,
// Constitution-first setup wizard.
SetupWizardTitle,
SetupWizardWhy,
SetupWizardProgress,
SetupActionBack,
SetupActionContinue,
SetupActionSkip,
SetupActionRetry,
SetupActionScrollBody,
SetupActionGuided,
SetupActionTuneGuided,
SetupActionModelDraft,
SetupActionFreeform,
SetupActionKeepExisting,
SetupActionUseRecommended,
SetupActionCustomize,
SetupActionProvider,
SetupActionModel,
SetupActionFleet,
SetupActionHotbar,
SetupActionRemote,
SetupActionMode,
SetupActionConfig,
SetupActionRuntimePreset,
SetupActionApplyRuntimePreset,
SetupActionUseBundled,
SetupActionDefer,
SetupActionCancel,
SetupStatusNotStarted,
SetupStatusRecommended,
SetupStatusOptional,
SetupStatusDeferred,
SetupStatusInProgress,
SetupStatusNeedsAction,
SetupStatusVerified,
SetupStatusSkipped,
SetupStatusFailed,
SetupStepLanguageTitle,
SetupStepLanguageWhy,
SetupStepProviderModelTitle,
SetupStepProviderModelWhy,
SetupStepTrustSandboxTitle,
SetupStepTrustSandboxWhy,
SetupStepOperateFleetTitle,
SetupStepOperateFleetWhy,
SetupStepToolsMcpTitle,
SetupStepToolsMcpWhy,
SetupStepHotbarTitle,
SetupStepHotbarWhy,
SetupStepRemoteRuntimeTitle,
SetupStepRemoteRuntimeWhy,
SetupStepPersistenceTitle,
SetupStepPersistenceWhy,
SetupStepConstitutionTitle,
SetupStepConstitutionWhy,
SetupStepVerificationTitle,
SetupStepVerificationWhy,
SetupCheckpointDoneBundled,
SetupCheckpointDoneGuided,
SetupCheckpointDoneKept,
SetupCheckpointDeferred,
SetupStepSkipped,
SetupStepRetryRecorded,
SetupLanguageReviewed,
SetupConstitutionChoiceLabel,
SetupConstitutionSourceLabel,
SetupConstitutionValidityLabel,
SetupConstitutionPreviewLabel,
SetupConstitutionExistingLabel,
SetupConstitutionExpertOverrideLabel,
SetupConstitutionGuidedHint,
SetupConstitutionGuidedAnswersHint,
SetupConstitutionExistingDefaultDetail,
SetupConstitutionRepairDefaultDetail,
SetupConstitutionPurposeLabel,
SetupConstitutionAutonomyLabel,
SetupConstitutionEvidenceLabel,
SetupConstitutionCommunicationLabel,
SetupConstitutionPrivacyLabel,
SetupConstitutionPrinciplesLabel,
SetupCardRouteLabel,
SetupCardModelLabel,
SetupCardAuthLabel,
SetupCardHealthLabel,
SetupCardIntentLabel,
SetupCardApprovalLabel,
SetupCardShellLabel,
SetupCardTrustLabel,
SetupCardSandboxLabel,
SetupCardNetworkLabel,
SetupOperateRuntimeLabel,
SetupOperateRosterLabel,
SetupOperateConcurrencyLabel,
SetupOperateReadinessLabel,
SetupOperateReviewHint,
SetupOperateReviewed,
SetupOperateNeedsActionSaved,
SetupHotbarBindingsLabel,
SetupHotbarActionsLabel,
SetupHotbarReviewHint,
SetupHotbarReviewed,
SetupToolsMcpServersLabel,
SetupToolsMcpSkillsLabel,
SetupToolsMcpToolsLabel,
SetupToolsMcpPluginsLabel,
SetupToolsMcpHotbarLabel,
SetupToolsMcpReviewHint,
SetupToolsMcpReviewed,
SetupToolsMcpNeedsActionSaved,
SetupToolsMcpPreviewTitle,
SetupToolsMcpOnRampText,
SetupToolsMcpDshLabel,
SetupToolsMcpDshRow,
SetupRemoteCloudsLabel,
SetupRemoteBridgesLabel,
SetupRemoteProvidersLabel,
SetupRemoteModeLabel,
SetupRemoteModeLocalOnly,
SetupRemoteModeRuntimeApi,
SetupRemoteModeMobileLan,
SetupRemoteModeChatBridge,
SetupRemoteStatusDisabled,
SetupRemoteStatusReady,
SetupRemoteStatusNeedsAction,
SetupRemoteReviewHint,
SetupRemotePreviewTitle,
SetupRemoteReviewed,
SetupPersistenceHomeLabel,
SetupPersistenceConfigLabel,
SetupPersistenceStateLabel,
SetupPersistenceConstitutionLabel,
SetupPersistenceMemoryLabel,
SetupPersistenceNotesLabel,
SetupPersistenceReviewHint,
SetupPersistenceReviewed,
SetupProviderModelReadyHint,
SetupProviderModelNeedsActionHint,
SetupProviderModelReviewed,
SetupProviderModelNeedsActionSaved,
SetupRuntimePostureBoundary,
SetupProjectPermissionsInvalid,
SetupProjectPermissionsOverride,
SetupRuntimePostureReviewHint,
SetupRuntimePostureReviewed,
SetupRuntimePresetSelectedLabel,
SetupRuntimePresetDiffLabel,
SetupRuntimePresetAskFirstTitle,
SetupRuntimePresetAskFirstDescription,
SetupRuntimePresetNormalAgentTitle,
SetupRuntimePresetNormalAgentDescription,
SetupRuntimePresetHighTrustTitle,
SetupRuntimePresetHighTrustDescription,
SetupRuntimePresetPreviewTitle,
SetupRuntimePresetSafetyFloor,
SetupRuntimePresetApplyHint,
SetupRuntimePresetApplied,
SetupRuntimeProjectOverrideLabel,
SetupRuntimeProjectOverrideNone,
SetupReportFirstRunLabel,
SetupReportUpdateLabel,
SetupReportOperateLabel,
SetupReportSourceLabel,
SetupReportAutonomyLabel,
SetupReportRuntimePostureLabel,
SetupReportPersisted,
SetupReportInherited,
SetupReportReady,
SetupReportRequired,
SetupReportOptional,
SetupReportRowsLabel,
SetupReportNextActionLabel,
SetupReportNextActionNone,
SetupReportNextActionConstitution,
SetupReportNextActionProvider,
SetupReportNextActionRuntime,
SetupReportNextActionOperate,
SetupReportNextActionRequired,
SetupReportRecorded,
// Context menu.
CtxMenuTitle,
CtxMenuCopySelection,
CtxMenuCopySelectionDesc,
CtxMenuOpenSelection,
CtxMenuOpenSelectionDesc,
CtxMenuClearSelection,
CtxMenuOpenDetails,
CtxMenuCopyMessage,
CtxMenuCopyMessageDesc,
CtxMenuOpenInEditor,
CtxMenuOpenInEditorDesc,
CtxMenuShowCell,
CtxMenuShowCellDesc,
CtxMenuHideCell,
CtxMenuHideCellDesc,
CtxMenuShowHidden,
CtxMenuShowHiddenDesc,
CtxMenuPaste,
CtxMenuPasteDesc,
CtxMenuCmdPalette,
CtxMenuCmdPaletteDesc,
CtxMenuContextInspector,
CtxMenuContextInspectorDesc,
CtxMenuHelp,
CtxMenuHelpDesc,
/// Right-click menu: pin/unpin the host terminal window into an
/// always-on-top mini window.
CtxMenuWindowPin,
/// Right-click menu: unpin label shown while the window is pinned.
CtxMenuWindowUnpin,
/// Right-click menu: description for the window-pin entry.
CtxMenuWindowPinDesc,
/// Right-click menu: a work-surface row's own command, `{command}`.
CtxMenuRunCommand,
CtxMenuOpen,
/// Right-click menu on an agent row: the one agent destination.
CtxMenuFocusAgent,
CtxMenuFocusAgentDesc,
CtxMenuCopyId,
CtxMenuCopyRow,
CtxMenuStopAgent,
/// Right-click menu: stop a work item (job, task, workflow run).
CtxMenuStopWork,
/// Right-click menu: label an armed destructive row shows until the
/// second activation runs it.
CtxMenuConfirmArmed,
/// Open in editor refused at launch: `{path}` is no longer a regular
/// file inside the workspace reached without links.
CtxMenuEditorRefused,
/// `/pin` command description (always-on-top mini-window toggle).
CmdPinDescription,
/// Status toast: host window is now the always-on-top mini window.
WindowPinActive,
/// Status toast: host window restored from the pinned mini window.
WindowPinReleased,
/// Status toast: window change failed or was not observed before timeout.
WindowPinFailed,
// Agent fanout card.
FanoutCounts,
// App mode picker (names, hints) and composer vim indicator.
AppModeAgent,
AppModeAuto,
AppModeYolo,
AppModePlan,
AppModeOperate,
AppModeAgentHint,
AppModeAutoHint,
AppModePlanHint,
AppModeYoloHint,
AppModeOperateHint,
VimModeNormal,
VimModeInsert,
VimModeVisual,
// Approval dialog — risk badges, category labels, field labels, options.
ApprovalEffectReadsOnly,
ApprovalEffectChangesFiles,
ApprovalRiskDestructive,
ApprovalEffectRunsCommand,
ApprovalEffectUsesNetwork,
ApprovalEffectConnectedApp,
ApprovalEffectStartsAgent,
ApprovalEffectUnclassified,
ApprovalCategorySafe,
ApprovalCategoryFileWrite,
ApprovalCategoryShell,
ApprovalCategoryNetwork,
ApprovalCategoryMcpRead,
ApprovalCategoryMcpAction,
ApprovalCategoryAgent,
ApprovalCategoryUnknown,
ApprovalFieldType,
ApprovalFieldAbout,
ApprovalFieldImpact,
ApprovalFieldParams,
ApprovalOptionApproveOnce,
ApprovalOptionApproveAlways,
ApprovalOptionAllowExactRepo,
ApprovalSaveAskRuleHint,
ApprovalOptionDeny,
ApprovalOptionAbortTurn,
ApprovalBlockTitle,
ApprovalControlsHint,
ApprovalOwnerHeader,
ApprovalGoToAgent,
UserInputActionRequired,
UserInputQuestionProgress,
UserInputOtherLabel,
UserInputOtherDescription,
UserInputConfirmLabel,
UserInputConfirmDescription,
UserInputCustomPrompt,
UserInputCustomPlaceholder,
UserInputHintSubmit,
UserInputHintBack,
UserInputHintMove,
UserInputHintToggle,
UserInputHintSelectConfirm,
UserInputHintCancel,
UserInputHintQuickPick,
UserInputHintConfirm,
UserInputHintDigit,
ApprovalControlsHintChild,
PendingApprovalInAgent,
ApprovalTruncationHint,
ApprovalAsksWithoutGit,
ApprovalFullAccessPolicyBlocked,
ApprovalChooseHint,
ApprovalChooseAction,
ApprovalIntentLabel,
ApprovalMoreLines,
ApprovalProceedQuestion,
ApprovalFieldWhy,
ApprovalFieldStop,
ApprovalWhyBody,
ApprovalStopBody,
ApprovalWhyCompactBody,
ApprovalWorkflowApprove,
ApprovalWorkflowEditPlan,
ApprovalWorkflowCancel,
ApprovalFieldSave,
ApprovalSaveSummaryAllow,
ApprovalSaveSummaryAsk,
ApprovalSaveSummaryDeny,
ApprovalSaveMore,
ApprovalToolParamsTitle,
ApprovalAutoDeniedSession,
// Sandbox elevation dialog.
ElevationTitleRequired,
ElevationFieldTool,
ElevationFieldCmd,
ElevationFieldReason,
ElevationImpactHeader,
ElevationImpactNetwork,
ElevationImpactWrite,
ElevationImpactFullAccess,
ElevationPromptProceed,
ElevationOptionNetwork,
ElevationOptionWrite,
ElevationOptionFullAccess,
ElevationOptionAbort,
ElevationOptionNetworkDesc,
ElevationOptionWriteDesc,
ElevationOptionFullAccessDesc,
ElevationOptionAbortDesc,
// Context compaction status and errors.
ContextAutoCompacting,
ContextManualCompacting,
ContextCompactionQueued,
ContextCompactionAlreadyRunning,
ContextCompactionQueueFull,
ContextCompactionQueueClosed,
ContextCompactionRouteInvalid,
ContextCompactionStoppedOnEngineSwitch,
ContextPurgeAbandonedOnEngineSwitch,
CtxInspTitle,
CtxInspSessionContext,
CtxInspSystemPrompt,
CtxInspReferences,
CtxInspRecentTools,
CtxInspToolSchemaCosts,
CtxInspModel,
CtxInspWorkspace,
CtxInspSession,
CtxInspContext,
CtxInspTranscript,
CtxInspWorkspaceStatus,
CtxInspNotSampledYet,
CtxInspOk,
CtxInspHigh,
CtxInspCritical,
CtxInspIncluded,
CtxInspAttached,
CtxInspNotIncluded,
CtxInspOutputCaptured,
CtxInspNoOutputYet,
CtxInspNoSystemPrompt,
CtxInspNoReferences,
CtxInspNoToolActivity,
CtxInspVHint,
CtxInspCells,
CtxInspApiMessages,
CtxInspActive,
CtxInspCell,
CtxInspMoreReferences,
CtxInspStablePrefix,
CtxInspVolatileWorkingSet,
CtxInspFirstLine,
CtxInspTotal,
CtxInspTextPromptLayers,
CtxInspSingleTextBlob,
CtxInspBlocks,
CtxInspBlock,
CtxInspTokens,
CtxInspLayers,
CtxInspNone,
CtxInspEmpty,
CtxInspCacheFriendly,
CtxInspChangesByTurn,
CtxInspStablePrefixOnly,
CtxInspCacheTip,
// Tool family labels (card headers, sidebar, footer).
ToolFamilyRead,
ToolFamilyPatch,
ToolFamilyRun,
ToolFamilyFind,
ToolFamilyDelegate,
ToolFamilyFanout,
ToolFamilyRlm,
ToolFamilyVerify,
ToolFamilyThink,
ToolFamilyGeneric,
// Tool execution receipt labels (card headers).
ToolReceiptDone,
ToolReceiptLinesSingular,
ToolReceiptLinesPlural,
ToolDescriptionNote,
ToolStatusWaitingForApproval,
ToolStatusQueued,
CmdConstitutionAccountApplies,
CmdConstitutionAccountSignedOut,
CmdConstitutionAccountCheckFailed,
CmdConstitutionLocalStandby,
CtxInspPersonalConstitution,
CtxInspConstitutionLocal,
CtxInspConstitutionAccount,
CtxInspConstitutionWithdrawn,
TodoStatusPending,
TodoStatusInProgress,
TodoStatusCompleted,
TodoStatusCancelled,
// Voice commands (/voice, /voice-send, /voice-control)
CmdVoiceDescription,
CmdVoiceSendDescription,
CmdVoiceControlDescription,
VoiceEnabled,
VoiceDisabled,
VoiceSendEnabled,
VoiceSendDisabled,
VoiceControlEnabled,
VoiceControlDisabled,
VoiceErrNoAuth,
VoiceErrNoRecorder,
VoiceErrNetwork,
VoiceErrEmptySend,
VoiceErrTooShort,
VoiceRecording,
/// Recording ends on its own after a short silence; nothing reads keys
/// while the capture runs, so the cue names the pause, not a key.
VoiceRecordingStopHint,
VoiceProcessing,
VoiceTranscribed,
// Notifications (turn/agent completion).
NotificationApprovalNeeded,
NotificationInputNeeded,
NotificationElevationNeeded,
NotificationDecisionWebHint,
NotificationTurnFailed,
NotificationProviderFallback,
ApprovalNeverPostureBlocked,
ApprovalTimedOutDenied,
NotificationWebApproved,
NotificationWebDenied,
NotificationInputSubmitFailed,
NotificationTurnComplete,
NotificationSubagentComplete,
NotificationSubagentFailed,
NotificationSubagentInterrupted,
NotificationSubagentCancelled,
NotificationSubagentBudgetExhausted,
NotificationShellFinished,
NotificationShellFailed,
NotificationShellStopped,
ShellWaitNoActive,
ShellWaitInteractive,
ShellWaitUnavailable,
ShellWaitReleased,
NotificationTaskFinished,
NotificationTaskFailed,
NotificationTaskStopped,
NotificationBackgroundFinished,
NotificationBackgroundMixed,
BackgroundFinishedHeading,
BackgroundFinishedHint,
BackgroundOutcomeDone,
BackgroundOutcomeFailed,
BackgroundOutcomeCancelled,
BackgroundOutcomeKilled,
BackgroundOutcomeTimedOut,
BackgroundExitCode,
BackgroundQuiet,
BackgroundUsingTool,
BackgroundStep,
BackgroundFilesChanged,
NotificationBackgroundStopped,
NotificationFullResultPointer,
// Footer chips.
FooterWorkedChip,
FooterPermissionKeyHint,
ApprovalSummaryRunCommand,
ApprovalSummaryUploadCredentials,
ApprovalSummaryRunShell,
ApprovalSummaryShellWait,
ApprovalSummaryShellInput,
ApprovalSummaryShellStop,
ApprovalSummaryWritePath,
ApprovalSummaryWriteFile,
ApprovalSummaryEditPath,
ApprovalSummaryEditFile,
ApprovalSummaryEditPathMore,
ApprovalSummaryApplyPatch,
ApprovalSummaryReadPath,
ApprovalSummaryReadFile,
ApprovalSummaryListPath,
ApprovalSummaryListWorkspace,
ApprovalSummaryFetchUrl,
ApprovalSummaryFetchPage,
ApprovalSummarySearchQuery,
ApprovalSummarySearchWeb,
ApprovalSummaryImageQuery,
ApprovalSummaryOpenTarget,
ApprovalSummaryMore,
ApprovalSummaryFollowLink,
ApprovalSummaryFindOnPage,
ApprovalSummaryScreenshot,
ApprovalSummaryBrowse,
ApprovalSummaryMcpTool,
ApprovalSummaryUseName,
ApprovalSummaryUseTool,
// Fleet setup wizard.
FleetDraftTitle,
FleetDraftHeader,
// Remote setup on-ramp.
SetupRemoteOnRampText,
// Approval dialog — localized descriptions.
ApprovalDescSafe,
ApprovalDescFileWrite,
ApprovalDescShell,
ApprovalDescNetwork,
ApprovalDescMcpRead,
ApprovalDescMcpAction,
ApprovalDescAgent,
ApprovalDescUnknown,
// Approval impact summaries.
ApprovalImpactSafe,
ApprovalImpactFileWrite,
ApprovalImpactShell,
ApprovalImpactNetwork,
ApprovalImpactMcpRead,
ApprovalImpactMcpAction,
ApprovalImpactAgent,
ApprovalImpactUnknown,
ApprovalImpactReads,
ApprovalImpactWrites,
ApprovalImpactTarget,
ApprovalImpactConnectedApp,
ApprovalImpactAgentType,
ApprovalImpactPrimaryInput,
// Approval detail labels.
ApprovalLabelCommand,
ApprovalLabelDir,
ApprovalLabelFile,
ApprovalLabelPreview,
ApprovalLabelProposedContent,
ApprovalLabelReplaceThis,
ApprovalLabelWithThis,
ApprovalLabelReplacementContent,
ApprovalLabelPath,
ApprovalLabelTarget,
ApprovalLabelInput,
ApprovalLabelAction,
ApprovalLabelType,
ApprovalLabelPrompt,
// Approval header labels.
ApprovalLabelAbout,
ApprovalLabelImpact,
// Setup wizard — constitution file state.
SetupConstitutionFileNotChecked,
SetupConstitutionFileMissing,
SetupConstitutionFileLoadedSelected,
SetupConstitutionFileLoadedInactive,
SetupConstitutionFileLoadedUnselected,
SetupConstitutionFileEmpty,
SetupConstitutionFileInvalid,
SetupConstitutionFileUnreadable,
SetupConstitutionFilePathError,
// Setup wizard — expert override state.
SetupExpertOverrideNotChecked,
SetupExpertOverrideMissing,
SetupExpertOverrideActive,
SetupExpertOverrideDisabled,
SetupExpertOverrideEmpty,
SetupExpertOverrideUnreadable,
SetupExpertOverridePathError,
// Setup wizard — autonomy fallback.
SetupAutonomyUnspecified,
// Setup wizard — purpose labels.
SetupGuidedPurposeCoding,
SetupGuidedPurposeResearch,
SetupGuidedPurposeOperations,
SetupGuidedPurposeMixed,
// Setup wizard — purpose about descriptions.
SetupGuidedPurposeAboutCoding,
SetupGuidedPurposeAboutResearch,
SetupGuidedPurposeAboutOperations,
SetupGuidedPurposeAboutMixed,
// Setup wizard — working style descriptions.
SetupGuidedStyleCoding,
SetupGuidedStyleResearch,
SetupGuidedStyleOperations,
SetupGuidedStyleMixed,
// Setup wizard — evidence labels.
SetupGuidedEvidenceAssumptions,
SetupGuidedEvidenceTestsAndReceipts,
SetupGuidedEvidenceReleaseReceipts,
// Setup wizard — guided answer notes.
SetupGuidedNotes,
// Underwater launch screen (pre-session menu + worktree flow).
LaunchStartTitle,
/// Arming line for a clicked recent-work row. Resuming replaces the whole
/// session context, so the click arms and a second activation confirms.
LaunchResumeConfirm,
LaunchResumeConfirmTitle,
LaunchResumeConfirmBody,
LaunchResumeConfirmResume,
LaunchResumeConfirmCancel,
LaunchWorkDescription,
LaunchChatDescription,
LaunchWorkspaceGitReady,
LaunchWorkspaceFolderReady,
LaunchProviderConfigured,
LaunchProviderSetupNeeded,
LaunchGroupContinue,
LaunchGroupMore,
LaunchWorkspaceGitShort,
LaunchWorkspaceFolderShort,
LaunchProviderConfiguredShort,
LaunchProviderSetupShort,
LaunchMenuChangelog,
LaunchWorktreePrompt,
LaunchWorktreeNeedsGit,
LaunchWorktreeNameLabel,
LaunchHintMove,
LaunchHintOpen,
LaunchTipFlags,
LaunchSavedSessionSingular,
LaunchSavedSessionsPlural,
LaunchCreatingWorktree,
LaunchWorktreeFailed,
LaunchWorktreeCreated,
LaunchNoSavedSessions,
LaunchNewSession,
LaunchRecentHeading,
LaunchRecentResumeHint,
LaunchHelpLine,
LaunchSeeAllSessions,
LaunchNoRecentSessions,
LaunchResumeFailed,
LaunchNoModelConnected,
DispatchNotSentNoModel,
DispatchNotSentSaveKey,
DispatchNotSentStatus,
AuthRejectedRecovery,
ProviderKeyRejected,
ProviderKeyForbidden,
ProviderKeyUnreachable,
ProviderKeyCheckFailed,
LocalModelAdopted,
ProviderPickerNotReopened,
LaunchRunCommand,
LaunchMcpConnectedOne,
LaunchMcpConnectedMany,
LaunchMcpNeedsSignInOne,
LaunchMcpNeedsSignInMany,
LaunchMenuNewWorktree,
LaunchMenuResume,
LaunchMenuQuit,
LaunchNoticeClaude,
ReceiptSessionHooks,
// Underwater shell phase words (footer status band).
PhaseIdle,
PhaseDraft,
PhaseWorking,
PhaseReasoning,
PhaseReading,
PhaseUsingTool,
/// Live sub-users (agent spawns) are running — reading differently from
/// tool work so the shell can signal orchestration.
PhaseSubagents,
/// Metered verification pass (tests/checks) — distinct from `working`
/// so checking reads differently from searching (ocean state model).
PhaseVerifying,
PhaseWaitingOnYou,
PhaseDone,
PhaseFailed,
PhaseFinishing,
// Underwater header chips: mode and permission words.
ChipModeAct,
ChipModePlan,
ChipModeOperate,
ChipPermissionReadOnly,
ChipPermissionAsk,
ChipPermissionAuto,
ChipPermissionAcceptEdits,
ChipPermissionFullAccess,
ChipPermissionNever,
PermissionsChangedReceipt,
// Underwater footer right-hand hint words (keys stay literal in code).
FooterHintKeys,
FooterHintOutput,
FooterHintContext,
InfoLineHelp,
InfoLineContext,
InfoLineTtft,
InfoLinePeak,
InfoLineOffPeak,
InfoLineWhales,
InfoLineAutomation,
InfoLineNotConnected,
InfoLineThinking,
// Session metrics strip short labels (phase strip ledger and /status).
SessionMetricsTurn,
SessionMetricsTurns,
SessionMetricsStep,
SessionMetricsSteps,
SessionMetricsLlm,
SessionMetricsTools,
SessionMetricsTtft,
SessionMetricsTokensPerSecond,
RuntimeStoreRecovered,
ResumeExactSessionHint,
ResumeSavedSessionHint,
GoalProgressLabel,
GoalProgressReceipt,
GoalProgressNow,
GoalProgressNext,
CmdCacheUnpricedNote,
SessionMetricsCache,
SessionMetricsInput,
SessionMetricsStatusLine,
// `/status` report labels and runtime summaries.
StatusLabelRoute,
StatusLabelDirectory,
StatusLabelProjectDocs,
StatusLabelMode,
StatusLabelSafety,
StatusLabelMcp,
StatusLabelFleet,
StatusLabelContextWindow,
StatusLabelWindowSource,
StatusLabelWindowOverride,
StatusLabelCatalog,
StatusLabelCloudFacts,
StatusLabelSession,
StatusLabelSessionTokens,
StatusLabelSessionCost,
StatusLabelToolOutputs,
StatusRouteSummary,
StatusProjectDocsNone,
StatusPostureSummary,
StatusShellOn,
StatusShellOff,
StatusTrustedWorkspace,
StatusWorkspace,
StatusApprovalAsk,
StatusApprovalAuto,
StatusApprovalAcceptEdits,
StatusApprovalFullAccess,
StatusApprovalNever,
StatusMcpConfigured,
StatusFleetDrifted,
StatusModelNotInRoster,
StatusContextUsage,
StatusContextSourceConfigured,
StatusContextSourceConfiguredModel,
StatusContextSourceProviderReported,
StatusContextSourceKimiSafeFloor,
StatusContextSourceCatalog,
StatusContextSourceModelHint,
StatusContextSourceFallback,
StatusWindowOverrideProvider,
StatusWindowOverrideActiveProvider,
StatusSessionNotSaved,
StatusSessionSummary,
StatusSessionTokensSummary,
StatusCacheNotReported,
StatusCacheSummary,
StatusToolRawPressure,
StatusToolCompactReceipts,
StatusToolArtifacts,
StatusToolNone,
StatusSafetyReadOnlyUnenforced,
StatusSafetyReadOnly,
StatusSafetyWorkspaceWriteUnenforcedNetworkOn,
StatusSafetyWorkspaceWriteUnenforcedNetworkOff,
StatusSafetyWorkspaceWriteNetworkOn,
StatusSafetyWorkspaceWriteNetworkOff,
StatusSafetyDisabled,
StatusSafetyDisabledSetuidBlocked,
StatusSafetyDisabledSetuidAllowed,
StatusSafetyExternal,
StatusPointers,
// Underwater post-launch empty state.
EmptyStateNoGit,
EmptyStateMcpLabel,
EmptyStatePrompt,
// Session picker surface.
SessionsSurfaceTitle,
SessionsPaneTitle,
SessionsHistoryPaneTitle,
SessionsActionResume,
SessionsActionSearch,
SessionsActionSort,
SessionsActionRename,
SessionsActionAllWorkspaces,
SessionsActionDelete,
SessionsActionClose,
SessionsScopeSortHeader,
SessionsEmptyTitle,
SessionsEmptyHint,
SessionsShowingAllWorkspaces,
SessionsScopedToWorkspace,
SessionsNewTitlePrompt,
SessionsDeletePrompt,
SessionsConfirmDelete,
SessionsNewSessionTitle,
SessionsOpenedHistory,
SessionsSortStatus,
SessionsSortRecent,
SessionsSortName,
SessionsSortSize,
SessionsSearchPrompt,
SessionsDeleteFailed,
SessionsDeleteOpenHere,
SessionsDeleteOpenElsewhere,
SessionSaveFailed,
SessionSaveFailedAtExit,
SessionsDeleted,
SessionsNoSelection,
SessionsTitleLength,
SessionsOpenFailed,
SessionsLoadFailed,
SessionsResumed,
SessionsRenameFailed,
SessionsRenamed,
SessionsRailTitle,
SessionsRailEmpty,
SessionsRailBrowseAll,
SessionsRailShowingCount,
SessionsRailUnavailable,
SessionsActionArchive,
SessionsActionShowArchived,
SessionsArchived,
SessionsRestored,
SessionsArchiveFailed,
SessionsShowingArchived,
SessionsHidingArchived,
SessionsArchivedCompact,
SessionsNoResults,
SessionsDirectoryFailed,
SessionsPreviewFailed,
SessionsDeleteCancelled,
SessionsRenameCancelled,
SessionsShowingRange,
SessionsMessageCountCompact,
SessionsForkCompact,
SessionsCurrentCompact,
SessionsUnknownMode,
SessionsPreviewTitle,
SessionsPreviewId,
SessionsPreviewUpdated,
SessionsPreviewMessagesModel,
SessionsPreviewMode,
SessionsToolCall,
SessionsToolError,
SessionsToolResult,
SessionsServerTool,
SessionsImage,
SessionsTimeJustNow,
SessionsTimeMinutesAgo,
SessionsTimeHoursAgo,
SessionsTimeDaysAgo,
// Compact context inspector (Alt+C surface).
CtxInspRowSystemPrompt,
CtxInspRowMessages,
CtxInspRowFree,
CtxInspFreeTokensDetail,
CtxInspDrillTitle,
CtxInspSurfaceTitle,
CtxInspActionSelect,
CtxInspActionDrillDown,
CtxInspActionClose,
CtxInspUsedTokens,
CtxInspAutoCompactAt,
CtxInspRowTokens,
CtxInspRowCompaction,
CtxInspRowAnchors,
CtxInspCompactionNever,
CtxInspCompactionDetail,
CtxInspCompactionRestored,
CtxInspCompactionPathSummary,
CtxInspCompactionPathPrune,
CtxInspCompactionAssistantKept,
CtxInspAnchorsNone,
CtxInspAnchorsPresent,
// Model picker route surface.
RouteSurfaceTitle,
RouteBrowseCatalog,
RouteActionType,
RouteActionSearchAnyModel,
RoutePanelHeader,
RouteProviderLabel,
RouteModelFirstAtomic,
PickerActionMove,
PickerActionSwitch,
PickerActionApply,
PickerActionAssignRoute,
FleetRoutePickUnavailable,
FleetRouteSaved,
FleetRouteInherited,
FleetRouteNotInCatalog,
PickerActionSetStartupDefault,
PickerActionPin,
PickerActionFleet,
PickerActionCancel,
PickerActionClear,
PickerActionClearSearch,
PickerActionBrowseAll,
PickerActionCustom,
PickerActionJump,
PickerActionEditKey,
PickerActionModels,
PickerActionUnavailable,
PickerActionSetKey,
PickerActionConfigured,
RouteNoModels,
RouteNoModelMatch,
ProviderNoMatchesTitle,
ProviderNoMatchesHint,
ProviderNoConfiguredTitle,
ProviderNoConfiguredHint,
ProviderNoCatalogModels,
// Provider picker — informed external-credential consent.
ProviderExternalActionRevoke,
ProviderExternalActionChoices,
ProviderExternalActionReuseGrok,
ProviderExternalHintCodexReview,
ProviderExternalHintXaiReview,
ProviderExternalHintXaiApiKey,
XaiAuthChoiceTitle,
XaiAuthChoiceIntro,
XaiAuthChoiceApiKeyOption,
XaiAuthChoiceDeviceOAuthOption,
OrcarouterAuthChoiceTitle,
OrcarouterAuthChoiceIntro,
OrcarouterAuthChoiceApiKeyOption,
OrcarouterAuthChoicePkceOption,
ChatgptAuthChoiceTitle,
ChatgptAuthChoiceIntro,
ChatgptAuthChoicePkceOption,
ChatgptAuthChoiceImportOption,
ProviderExternalHintChatgptReview,
ProviderExternalActionReuseCodex,
ProviderExternalDetailScope,
ProviderExternalDormant,
ProviderExternalOwnerPath,
ProviderExternalPinnedPathWarning,
ToolProjectionWarning,
SnapshotsDisabledTooLarge,
SnapshotsDisabledTooManyFiles,
SnapshotsDisabledUnsafeLocation,
SnapshotsHistoryRepaired,
SnapshotsFailing,
SessionIdDivergedNotice,
RuntimeStoreUnreadableNotice,
RuntimeStoreUnwritableNotice,
ProviderExternalSemanticsRevoke,
ProviderExternalRevoke,
ProviderExternalChoiceTitle,
ProviderExternalActionChoose,
ProviderExternalChoiceIntro,
ProviderExternalDisabledLabel,
ProviderExternalDisabledDetail,
ProviderExternalReadOnlyLabel,
ProviderExternalReadOnlyDetail,
ProviderExternalReadOnlySemantics,
ProviderExternalManagedLabel,
ProviderExternalManagedDetail,
ProviderExternalConfirmTitle,
ProviderExternalActionGrant,
ProviderExternalOwnerLabel,
ProviderExternalExactPathLabel,
ProviderExternalSemanticsLabel,
ProviderExternalRejectUnsafe,
ProviderExternalRevokeLabel,
ProviderExternalRouteLabel,
ProviderExternalCustodyLine,
ProviderExternalBillingLine,
ProviderExternalRevokeScope,
ProviderExternalOwnerOnly,
ProviderExternalPinnedPathChanged,
ProviderExternalRevokeConfirmTitle,
ProviderExternalGrantedToast,
ProviderExternalSaveFailedToast,
ProviderExternalRevokedToast,
ProviderExternalRevokeFailedToast,
// Theme picker surface.
ThemeSurfaceTitle,
// Fleet roster room.
FleetRosterHeaderLabel,
FleetRosterTabRoster,
FleetRosterTabSetup,
FleetRosterWorkers,
FleetRosterMembersCount,
FleetRosterOperatorFirst,
FleetRosterOperatorRow,
/// Roster row badge when a project file is winning the same id.
FleetRosterShadowBadgeProjectOverride,
/// Roster row badge when a personal file exists but is ignored.
FleetRosterShadowBadgePersonalIgnored,
/// Roster row badge when a personal file is winning the same id.
FleetRosterShadowBadgePersonalOverride,
/// Roster row badge when `[fleet.profiles]` is winning the same id.
FleetRosterShadowBadgeConfigOverride,
/// Detail-pane heading for the full per-id layer stack.
FleetRosterLayersLabel,
/// Marker on the winning layer in the detail stack.
FleetRosterLayerWins,
/// Marker on a displaced layer in the detail stack.
FleetRosterLayerIgnored,
FleetReadyNotice,
/// Sticky error when Fleet profile save cannot prove collision safety.
FleetProfileIdentityVerifyFailed,
/// Sticky error when the drafted profile id collides with another file.
FleetProfileIdConflict,
/// Sticky error when the drafted profile pins an unconfigured provider.
FleetProfileProviderUnconfigured,
// The fleet as models: `/fleet models|add|remove`, the picker's ⇧F, and
// the fleet lines of `/models` (design MODEL-ROUTING-CATALOG §10 F1).
FleetModelAdded,
FleetModelAddedAs,
FleetModelAddedCreatedNote,
FleetModelAddedSelectedNote,
FleetModelRemoved,
FleetModelRemovedRoles,
FleetModelUnchanged,
FleetModelReasonOperatorRoute,
FleetModelReasonAlreadyPresent,
FleetModelErrorNeedsRoute,
FleetModelErrorNeedsRole,
FleetReviewWorkspaceLimits,
FleetReviewPolicy,
FleetModelErrorNoSelection,
FleetModelErrorOperatorRoute,
FleetModelErrorNotInFleet,
FleetModelsEmpty,
FleetModelsHeader,
FleetModelsBroken,
FleetModelsFooter,
FleetModelsFactPrice,
FleetModelsFactContext,
FleetModelsFactTools,
FleetAddUsage,
FleetAddProviderUnconfigured,
FleetAddModelNotServed,
FleetAddFailed,
FleetRemoveUsage,
FleetRemoveFailed,
FleetToggleFailed,
// Fleet setup destination step and review actions (save-scope redesign).
FleetDestStepTitle,
FleetDestStepSubtitle,
FleetDestProjectLabel,
FleetDestPersonalLabel,
FleetDestProjectSummary,
FleetDestPersonalSummary,
FleetDestProjectDescription,
FleetDestPersonalDescription,
FleetDestPathLine,
FleetDestUnavailable,
FleetDestReasonNoProjectConfig,
FleetDestReasonWorkspaceMissing,
FleetDestReasonHomeUnavailable,
FleetDestWillReplace,
FleetDestOverridesProject,
FleetDestOverridesPersonal,
FleetDestOverridesBuiltIn,
FleetSavesToChip,
FleetSavesToUndecided,
FleetActionSaveProject,
FleetActionSavePersonal,
FleetActionReplaceProject,
FleetActionReplacePersonal,
FleetActionConfirmReplace,
FleetActionChangeDestination,
FleetActionBack,
FleetReviewSavesTo,
FleetModelRowBlockedNotice,
FleetDestProjectDisabledSave,
// Workflow panel.
WorkflowStatusWaiting,
WorkflowStatusDegraded,
WorkflowRunFailedToast,
WorkflowDebrief,
WorkflowDispatchFailureLine,
WorkflowDispatchFailuresOmitted,
WorkflowDispatchFallbackTask,
WorkflowTranscriptDetails,
WorkflowReceiptRole,
WorkflowReceiptReasoning,
WorkflowReceiptVia,
WorkflowReceiptTokens,
WorkflowReceiptTools,
WorkflowReceiptDuration,
WorkflowReceiptUnknown,
WorkflowReceiptProviderReported,
WorkflowReceiptEstimated,
// Sidebar work strip.
SidebarTasksLabel,
TaskOwnershipUnverified,
TaskInventoryUnavailable,
SidebarTodoLabel,
SidebarStopControl,
SidebarDestructiveArmed,
WorkSurfaceTodoProgress,
WorkSurfaceStopConfirmHint,
TerminalDockStarting,
TerminalDockControls,
TerminalDockEmpty,
TerminalDockUnsupported,
TerminalDockLost,
TerminalDockDropped,
TerminalDockError,
TerminalDockPasteRefused,
TerminalDockExited,
TerminalDockLive,
CoordinationWorkTitle,
CoordinationSummaryDecisions,
CoordinationSummaryContentions,
CoordinationSummaryReconciled,
CoordinationSchema,
CoordinationSequence,
CoordinationPerSectionLimit,
CoordinationDecisionsHeading,
CoordinationNone,
CoordinationNoneValue,
CoordinationStatus,
CoordinationOwner,
CoordinationVersion,
CoordinationWriteClaimsHeading,
CoordinationIsolated,
CoordinationSharedWorkspace,
CoordinationPaths,
CoordinationContracts,
CoordinationContentionsHeading,
CoordinationClaimant,
CoordinationDisposition,
CoordinationNeutralReconciliationHeading,
CoordinationCandidates,
CoordinationRetry,
CoordinationReviewer,
CoordinationVerifier,
CoordinationVerification,
CoordinationContextProjectionsHeading,
CoordinationContextDecisions,
CoordinationBytes,
CoordinationDeduplicated,
CoordinationOmitted,
CoordinationActiveHotPathsHeading,
CoordinationActiveClaims,
CoordinationMetricsNoteHeading,
CoordinationMetricsNoAuthoritativeSource,
CoordinationStatusProposed,
CoordinationStatusAccepted,
CoordinationStatusSuperseded,
// Composer slash menu.
ComposerSlashMenuHint,
// Approval modal — repository law band.
ApprovalRepoLawBadge,
ApprovalRepoLawTitle,
ApprovalRepoLawWarning,
ApprovalRepoLawRuleLabel,
// Fuzzy file picker (@ attach overlay).
FilePickerMatchSingular,
FilePickerMatchesPlural,
FilePickerScanning,
// Quiet action-triggered product guidance.
BehavioralTipPlanning,
BehavioralTipBackgroundReceipt,
BehavioralTipClearedInput,
BehavioralTipMcpValidation,
BehavioralTipRepeatedCommand,
BehavioralTipDurableStateWritten,
BehavioralTipTodoWrite,
ConfigLabelContextualTips,
ConfigHintContextualTips,
ContextualTipsNotSaved,
// Live-route settings lock (#2982): refusals and startup-default receipts.
SettingLockedDuringTurn,
SettingSubjectMode,
SettingSubjectThinking,
SettingSubjectModel,
SettingSubjectModelAndThinking,
SettingSubjectProvider,
SettingSubjectPermissions,
ThinkingControlledByAutoRouting,
SavedAsStartupDefault,
ModeAlreadyActiveSavedAsDefault,
StartupDefaultNotSaved,
RouteSaveNothingPending,
RouteSaveNoTeamSelected,
RouteSaveTeamUpdated,
RouteSaveTeamUpdateFailed,
RouteSaveTeamUpdateFailedMoved,
RouteSaveTeamCreateFailed,
RouteSaveSelectedNote,
RouteSaveSelectionFailedNote,
RouteSaveSavedAsNewTeam,
RouteSaveFailed,
RouteSaveRouteNoLongerActive,
RouteSaveRememberedDefault,
StartupDefaultSubjectMode,
StartupDefaultSubjectThinking,
StartupDefaultSubjectModel,
StartupDefaultSubjectAll,
// Durable scheduled automation operator receipts.
AutomationUsage,
AutomationManagerUnavailable,
AutomationListFailed,
AutomationActionFailed,
AutomationEmpty,
AutomationListHeading,
AutomationScopeNote,
AutomationNoun,
AutomationStatusLabel,
AutomationStatusActive,
AutomationStatusPaused,
AutomationRunStatusQueued,
AutomationRunStatusRunning,
AutomationRunStatusCompleted,
AutomationRunStatusFailed,
AutomationRunStatusCanceled,
AutomationActionInspect,
AutomationActionPause,
AutomationActionResume,
AutomationActionDelete,
AutomationActionRun,
AutomationActionCancel,
AutomationActionPaused,
AutomationActionResumed,
AutomationNextLabel,
AutomationNameLabel,
AutomationEditorNew,
AutomationEditorEdit,
AutomationEditorSchedule,
AutomationEditorDaily,
AutomationEditorWeekly,
AutomationEditorHourly,
AutomationEditorOnce,
AutomationEditorCustom,
AutomationEditorTime,
AutomationEditorDate,
AutomationEditorDays,
AutomationEditorLocalTime,
AutomationEditorProvider,
AutomationEditorDefaultModel,
AutomationEditorInheritedProvider,
AutomationEditorEnabled,
AutomationEditorControls,
AutomationEditorPromptControls,
AutomationEditorSaveFailed,
AutomationEditorBusy,
AutomationEditorSaved,
AutomationEditorPreviewUnavailable,
AutomationEditorConflict,
AutomationEditorInvalidWorkspace,
AutomationEditorModelControls,
AutomationEditorPausedPreview,
AutomationEditorInvalidSchedule,
AutomationEditorMonday,
AutomationEditorTuesday,
AutomationEditorWednesday,
AutomationEditorThursday,
AutomationEditorFriday,
AutomationEditorSaturday,
AutomationEditorSunday,
AutomationPromptLabel,
AutomationCwdLabel,
AutomationModeLabel,
AutomationAllowShellLabel,
AutomationTrustModeLabel,
AutomationAutoApproveLabel,
AutomationRruleLabel,
AutomationDeliveryLabel,
AutomationLastLabel,
AutomationRecentRunsLabel,
AutomationNoRuns,
AutomationRunsUnavailable,
AutomationTaskLabel,
AutomationDeletePreview,
AutomationDeleteConfirmationStale,
// Activity-band slot and typed receipt cards (AUTOMATION-VISIBILITY §2).
AutomationBandScheduled,
AutomationReceiptFired,
AutomationReceiptStarted,
AutomationReceiptCompleted,
AutomationReceiptCoalesced,
AutomationReceiptMissed,
AutomationReceiptExpired,
AutomationReceiptDeleted,
AutomationRunLabel,
AutomationDeletedRunsDetail,
/// Whale Teams state words, species, and jobs (crates/tui/src/tui/whales.rs).
WhaleStateResting,
WhaleStateThinking,
WhaleStateWorking,
WhaleStateWaiting,
WhaleStateBlocked,
WhaleStateOffline,
/// Parked-child status word and its recovery line (#5906). A child parked
/// at the parent's turn end is not "waiting for input": nothing will
/// answer it, so the surfaces name the state and the two ways out.
AgentStatusParked,
AgentStatusParkedRecovery,
WhaleAnimalScout,
WhaleAnimalPatch,
WhaleAnimalHarbor,
WhaleAnimalEcho,
WhaleAnimalKeel,
WhaleAnimalLantern,
WhaleAnimalPlain,
WhaleJobScout,
WhaleJobPatch,
WhaleJobHarbor,
WhaleJobEcho,
WhaleJobKeel,
WhaleJobLantern,
WhaleJobPlain,
AgentFocusOpened,
AgentFocusClosed,
AgentFocusBanner,
AgentFocusPosture,
AgentFocusPostureWrites,
AgentFocusPostureReadOnly,
AgentFocusPostureNetwork,
AgentFocusPostureNoNetwork,
AgentFocusPostureShellFull,
AgentFocusPostureShellReadOnly,
AgentFocusPostureShellNone,
AgentFocusComposerChip,
AgentFocusPlaceholder,
AgentFocusNoTranscript,
AgentFocusOmitted,
AgentFocusResult,
AgentFocusStopReason,
AgentFocusFollowUpDelivered,
AgentFocusFollowUpQueued,
AgentFocusFollowUpContinued,
AgentFocusFollowUpFailed,
FooterHintForAgents,
FooterHintToManage,
AgentRailQueuedCount,
WorkbarSoFar,
WorkbarLargeWorkflow,
WorkbarMoreRuns,
WorkflowLineStarted,
WorkflowLineFinished,
WorkflowLineFinishedWithGaps,
WorkflowLineFailed,
WorkflowLineStopped,
WorkflowLineAgents,
PickerActionTestConnection,
ProviderCustomFormBaseUrl,
ProviderCustomFormModel,
ProviderCustomFormHint,
ProviderConnectionChecked,
ProviderConnectionCheckedPickModel,
ProviderTestConnectionNeedKey,
ProviderTestConnectionFailed,
ProviderTestConnectionNoEndpoint,
ComposerPlaceholderFollowUp,
ComposerPlaceholderSendNow,
ComposerHintSendWithQueue,
ComposerHintQueue,
ComposerHintQueueWithCount,
ComposerHintOfflineQueue,
ComposerHintOfflineConnect,
ComposerHintSendNow,
ComposerHintSendIntoTurn,
ComposerHintLongDraft,
PendingSendingIntoTurnPrefix,
PendingCouldNotSendIntoTurnPrefix,
PendingEditingFollowUpPrefix,
PendingQueuedOnePrefix,
PendingQueuedManyPrefix,
PendingSendNowControls,
PendingSendNowDropControls,
PendingEscRestore,
PendingQueuedFollowUpPrefix,
PendingInputsHeader,
PendingContextHeader,
ToastQueuedFollowUp,
ToastQueuedFollowUpCount,
ToastQueuedOffline,
ToastSentIntoTurn,
ToastCouldNotSendIntoTurn,
ToastHookBlockedFollowUp,
ToastOfflineQueuedCount,
// Operate plan board chrome (contract tokens stay untranslated).
OperateBoardHeader,
OperateBoardBurnObserved,
OperateBoardBurnNoCap,
OperateBoardDirectionEmpty,
OperateBoardDirectionLine,
OperateBoardPlanMissing,
OperateBoardPlanHeader,
OperateBoardGantt,
// Tideline settings shell: categories, detail facts, sources, apply
// semantics, editor kinds, and navigation copy.
ConfigCategoryAppearance,
ConfigCategoryModelsProviders,
ConfigCategoryFleet,
ConfigCategoryWork,
ConfigCategoryToolsMcp,
ConfigCategoryTrust,
ConfigCategoryMotion,
ConfigCategoryAdvanced,
ConfigFactCurrent,
ConfigFactSaved,
ConfigFactStartup,
ConfigFactSource,
ConfigFactScope,
ConfigFactApply,
ConfigFactKind,
ConfigFactAvailable,
ConfigFactObserved,
ConfigFactOpens,
ConfigLaneUnobserved,
ConfigSourceSession,
ConfigSourceUserSettings,
ConfigSourceConfig,
ConfigSourceManaged,
ConfigApplyEffectiveNow,
ConfigApplyOnSave,
ConfigApplyNextSession,
ConfigApplyRestart,
ConfigApplyReadOnly,
ConfigApplyReload,
ConfigApplyUiNowEngineRestart,
ConfigKindToggle,
ConfigKindChoice,
ConfigKindNumber,
ConfigKindText,
ConfigKindAction,
ConfigKindReadOnly,
ConfigRowActionNote,
ConfigRowDiagnosticNote,
ConfigNavHint,
ConfigActivateAgain,
ConfigSearchLabel,
ConfigEditChooseLabel,
ConfigChoiceFooter,
ConfigChoiceFooterCompact,
ConfigEditorApply,
ConfigEditorCancel,
ConfigLaneUnavailable,
ConfigSourceEnvironment,
ConfigSourceTerminal,
ConfigDescriptionDefault,
ConfigValueOn,
ConfigValueOff,
ConfigValueProviderDefault,
ConfigChoiceAsk,
ConfigChoiceAcceptEdits,
ConfigChoiceAutoReview,
ConfigChoiceUseTuiDefault,
ConfigChoiceFullAccess,
ConfigChoiceNever,
ConfigChoiceModeAct,
ConfigChoiceModePlan,
ConfigChoiceModeOperate,
ConfigChoicePlacementTop,
ConfigChoicePlacementBottom,
ConfigChoicePlacementLeft,
ConfigChoicePlacementRight,
ConfigChoiceRailTasks,
ConfigChoiceRailAgents,
ConfigChoiceRailContext,
ConfigChoiceStatusCw,
ConfigChoiceStatusDots,
ConfigChoiceDiffFull,
ConfigChoiceDiffSummary,
ConfigChoiceDetailAsk,
ConfigChoiceDetailAcceptEdits,
ConfigChoiceDetailAutoReview,
ConfigChoiceDetailUseTuiDefault,
ConfigChoiceDetailFullAccess,
ConfigChoiceDetailNever,
ConfigChoiceDetailModeAgent,
ConfigChoiceDetailModePlan,
ConfigChoiceDetailModeOperate,
ConfigChoiceDetailPlacementTop,
ConfigChoiceDetailPlacementBottom,
ConfigChoiceDetailPlacementLeft,
ConfigChoiceDetailPlacementRight,
ConfigChoiceDetailPlacementOff,
ConfigChoiceDetailRailTasks,
ConfigChoiceDetailRailAgents,
ConfigChoiceDetailRailContext,
ConfigChoiceDetailLowMotionOn,
ConfigChoiceDetailLowMotionOff,
ConfigChoiceDetailFancyOn,
ConfigChoiceDetailFancyOff,
ConfigChoiceDetailShowThinkingOn,
ConfigChoiceDetailShowThinkingOff,
ConfigChoiceDetailThinkingHighlightOn,
ConfigChoiceDetailThinkingHighlightOff,
ConfigHintModel,
ConfigHintFastModel,
ConfigHintProvider,
ConfigHintApprovalMode,
ConfigHintPermissionPosture,
ConfigHintApprovalPolicy,
ConfigHintManagedApprovalPolicy,
ConfigHintManagedAllowShell,
ConfigHintAllowShell,
ConfigHintComposerMultilineMode,
ConfigHintBooleanValues,
ConfigHintDensity,
ConfigHintInlineDiffs,
ConfigHintToolCollapse,
ConfigHintBackgroundColor,
ConfigHintWorkSurfacePlacement,
ConfigHintRailPanel,
ConfigHintWorkSurfaceTopHeight,
ConfigHintWorkSurfaceSideWidth,
ConfigHintBaseUrl,
ConfigHintContextWindow,
ConfigHintEffectiveContextWindow,
ConfigHintCostCurrency,
ConfigHintCalmMode,
ConfigHintLowMotion,
ConfigHintFancyAnimations,
ConfigHintShowThinking,
ConfigHintThinkingDefaultExpanded,
ConfigHintThinkingPreviewLines,
ConfigHintHelpExpandGroups,
ConfigHintPinLastPrompt,
ConfigHintThinkingHighlight,
ConfigHintSynchronizedOutput,
ConfigHintDefaultMode,
ConfigHintMaxHistory,
ConfigHintAutoCompactThreshold,
ConfigHintDefaultModel,
ConfigHintReasoningEffort,
ConfigHintMcpOpen,
ConfigHintMcpReconnect,
ConfigHintMcpDiagnose,
ConfigHintPluginsOpen,
ConfigHintMcpConfigPath,
ConfigHintFleetMaxSpawnDepth,
ConfigHintFeatureSubagents,
ConfigHintFeatureWebSearch,
ConfigHintFeatureApplyPatch,
ConfigHintFeatureMcp,
ConfigHintFeatureExecPolicy,
ConfigHintFeatureVisionModel,
ConfigHintGoalCommand,
ConfigHintWorkflow,
SelectionCopiedAsMarkdown,
McpShowCachedWhileTurnRuns,
McpShowUnavailableWhileTurnRuns,
McpLivePoolRefreshDeferredWhileTurnRuns,
McpRetryDeferredWhileTurnRuns,
McpRetryStarted,
McpRetryConnected,
McpRetryNeedsLogin,
McpRetryFailed,
WorkflowCountRunning,
WorkflowCountDone,
WorkflowCountFailed,
WorkflowCountCancelled,
WorkflowNoTasksYet,
WorkflowSettledOfTotal,
WorkflowPhaseCountOne,
WorkflowPhaseCountMany,
WorkflowPhaseOrdinal,
ModelPickerPinned,
ModelPickerUnpinned,
ModelPickerPinFailed,
ModelPickerPinOrderUpdated,
ModelPickerPinReorderFailed,
ModelPickerReadinessRefreshed,
ModelPickerOpenToRefresh,
ModelPickerPinnedChip,
AuthSignedInAs,
AuthSignedInWithoutEmail,
AuthReplacedPreviousSignInAs,
AuthReplacedPreviousSignIn,
AuthSameAccountAsBefore,
AuthEnvTokenOutranksSignIn,
/// Hover label for the pinned user-prompt header above the transcript:
/// clicking the header jumps to the user message it names.
PinnedPromptJumpToMessage,
/// Plan hand-off: the question asked when a Plan turn ends with open
/// To-do steps, its three choices, and the message sent on "Work".
PlanHandoffHeader,
PlanHandoffQuestion,
PlanHandoffWorkAsk,
PlanHandoffWorkAskDetail,
PlanHandoffWorkAcceptEdits,
PlanHandoffWorkAcceptEditsDetail,
PlanHandoffWorkAuto,
PlanHandoffWorkAutoDetail,
PlanHandoffKeepPlanning,
PlanHandoffKeepPlanningDetail,
PluginOAuthBrowser,
PluginOAuthReady,
PluginOAuthLocalLogout,
PlanHandoffProceed,
PlanHandoffTodoNote,
InstructionNoticeHeader,
InstructionNoticeFooter,
InstructionNoticeMore,
InstructionNoticeLine,
InstructionNoticeTrimmed,
InstructionNoticeDroppedBytes,
InstructionNoticeFallback,
InstructionNoticeStaticGuardOver,
InstructionNoticeStaticGuardTrimmed,
InstructionDetailDroppedBroadest,
InstructionDetailNoRoom,
InstructionDetailRulesExhausted,
InstructionDetailOverCeiling,
InstructionDetailUnreadable,
InstructionDetailAlreadyLoaded,
InstructionDetailRulesCap,
InstructionDetailSymlinkedRules,
InstructionBudgetRefused,
InstructionBudgetOverGuard,
ExecAutoHelp,
ExecSandboxHelp,
ExecAfterHelp,
ExecPromptHelp,
ExecFlagAfterPrompt,
ActivityFileOne,
ActivityFileMany,
ActivitySearchOne,
ActivitySearchMany,
ActivityCommandOne,
ActivityCommandMany,
ActivityTaskOne,
ActivityTaskMany,
ActivityDirectoryOne,
ActivityDirectoryMany,
ActivityPatternOne,
ActivityPatternMany,
ActivityExplored,
ActivityRan,
ActivityEdited,
ActivityDelegated,
ActivityUpdatedMetadata,
ActivityRead,
ActivityListed,
ActivitySearched,
ActivityWrote,
ToolReceiptRunning,
ToolReceiptHydrated,
ToolReceiptStopped,
ToolReceiptIssue,
ToolReceiptFailed,
AgentActivityChecking,
AgentActivityChecked,
AgentActivityWaiting,
AgentActivityWaited,
FileMutationCreated,
FileMutationUpdated,
FileMutationDeleted,
FileMutationRenamed,
FileMutationCreatedCount,
FileMutationUpdatedCount,
FileMutationDeletedCount,
FileMutationRenamedCount,
FileMutationChangedFiles,
FileMutationMissingFile,
FileMutationNoText,
FileMutationMoreDiff,
FileMutationChange,
FileMutationSelectReceipt,
FileMutationExactEvidence,
FileMutationExactHeading,
FileActivityReadLabel,
FileActivityListLabel,
FileActivitySearchLabel,
FileActivityWriteLabel,
FileActivityDetailTitle,
ToolReceiptQuiet,
FileActivityEditedLabel,
FileMutationAcrossFiles,
FileActivityNoDetail,
FileActivityPatterns,
FileActivitySettled,
}
pub const ALL_MESSAGE_IDS: &[MessageId] = &[
MessageId::AccountModelsLoadFailed,
MessageId::ConnectionSetupTitle,
MessageId::ConnectionSetupAccount,
MessageId::ConnectionSetupAccountDetail,
MessageId::ConnectionSetupLocal,
MessageId::ConnectionSetupLocalDetail,
MessageId::AccountModelsTitle,
MessageId::AccountModelsLoading,
MessageId::AccountModelsUnavailable,
MessageId::AccountModelsReady,
MessageId::AccountModelsConnectFailed,
MessageId::AccountModelsCancelled,
MessageId::AccountLoginTitle,
MessageId::AccountLoginStarting,
MessageId::AccountLoginWaiting,
MessageId::AccountLoginCode,
MessageId::AccountLoginOpenBrowser,
MessageId::AccountLoginCopyLink,
MessageId::AccountLoginLink,
MessageId::AccountLoginSuccess,
MessageId::AccountLoginNeedsModel,
MessageId::AccountLoginCancelled,
MessageId::AccountLoginExpired,
MessageId::AccountLoginFailed,
MessageId::AccountLogoutTitle,
MessageId::AccountLogoutStarting,
MessageId::AccountLogoutSuccess,
MessageId::AccountLogoutLocal,
MessageId::AccountLogoutFailed,
MessageId::AccountLogoutCancelled,
MessageId::ReasoningOnlyRetryBody,
MessageId::OutputLimitAnswerRetryBody,
MessageId::AnswerRetryActionBare,
MessageId::AnswerRetryActionNudge,
MessageId::AnswerRetryCounter,
MessageId::OrcaRouterOfferRecommended,
MessageId::OrcaRouterOfferAction,
MessageId::OrcaRouterOfferBody,
MessageId::OrcaRouterOfferDisclosure,
MessageId::MobileStreamReplayFailed,
MessageId::MobileStreamCatchUpFailed,
MessageId::MobileStreamRuntimeShutdown,
MessageId::MobileStreamEnded,
MessageId::MobileStreamClosed,
MessageId::MobileStreamReconnecting,
MessageId::MobileStreamConnected,
MessageId::ConversationChangedBeforeUndo,
MessageId::SessionArchiveExported,
MessageId::SessionArchiveSizes,
MessageId::SessionArchiveNoArtifacts,
MessageId::SessionArchiveRestoreHint,
MessageId::CostReasonNotMoney,
MessageId::CostReasonBillingUnknown,
MessageId::CostReasonEndpointUnknown,
MessageId::CostReasonRateMissing,
MessageId::CostReasonLiveUnverified,
MessageId::CostReasonRetiredAlias,
MessageId::CostReasonTierMissing,
MessageId::CostReasonRoutingDependent,
MessageId::CostReasonCoverageMissing,
MessageId::CostReasonTokenRateMissing,
MessageId::CostReasonInvalidRate,
MessageId::CostReasonCurrencyMissing,
MessageId::CostReasonUsageConflict,
MessageId::CostReasonUsageBreakdown,
MessageId::CostReasonOutcomeUnknown,
MessageId::CostReasonInProgress,
MessageId::CostReasonProviderUsageMissing,
MessageId::CostReasonLegacyUsageUnverified,
MessageId::CostReasonUsageCorrectionUnverified,
MessageId::CostChipLocal,
MessageId::CostChipAllowance,
MessageId::CostChipAllowancePercent,
MessageId::McpLoginInProgress,
MessageId::McpLoginStarting,
MessageId::McpLoginBrowser,
MessageId::McpLoginStored,
MessageId::McpLoginFailed,
MessageId::McpReloadAlreadyRunning,
MessageId::McpLoginCancelled,
MessageId::McpLoginHandshakeTimeout,
MessageId::McpLoginServerNotFound,
MessageId::McpDiagnosisUnobserved,
MessageId::McpDiagnosisSummary,
MessageId::McpDiagnosisLastError,
MessageId::McpDiagnosisNext,
MessageId::McpStateDisabled,
MessageId::McpStateAuthorizationRequired,
MessageId::McpStateConnecting,
MessageId::McpStateFailed,
MessageId::McpStateDisconnected,
MessageId::ComposerPlaceholder,
MessageId::ComposerDispatchFailedRestored,
MessageId::DispatchFailedQueued,
MessageId::DispatchFailedInitial,
MessageId::HistorySearchPlaceholder,
MessageId::HistorySearchTitle,
MessageId::HistoryHintMove,
MessageId::HistoryHintAccept,
MessageId::HistoryHintRestore,
MessageId::HistoryNoMatches,
MessageId::TranscriptReasoningExpand,
MessageId::TranscriptThought,
MessageId::TranscriptThoughtFor,
MessageId::ScreenModeFullscreenNotice,
MessageId::ScreenModeInlineNotice,
MessageId::ScreenModeMouseCaptureOn,
MessageId::ScreenModeMouseCaptureOff,
MessageId::ScreenModeUnchanged,
MessageId::ImageInputRejectedResent,
MessageId::ImageInputOmitted,
MessageId::RequestImageWindow,
MessageId::ImageCountRejected,
MessageId::ProviderToolCallMissing,
MessageId::TelemetryNoticeDefaultOn,
MessageId::TelemetryNoticeHeadline,
MessageId::TelemetryNoticeBody,
MessageId::TelemetryNoticeCompactBody,
MessageId::TelemetryNoticeChoiceKeep,
MessageId::TelemetryNoticeChoiceDisable,
MessageId::TelemetryNoticeActionChoose,
MessageId::TelemetryNoticeActionConfirm,
MessageId::TelemetryNoticeActionExit,
MessageId::TelemetryNoticeReceiptEnabled,
MessageId::TelemetryNoticeReceiptDisabled,
MessageId::TelemetryNoticeReceiptEnabledUnsaved,
MessageId::TelemetryNoticeReceiptDisabledUnsaved,
MessageId::TelemetryPreferenceEnabledNextLaunch,
MessageId::TelemetryPreferenceDisabled,
MessageId::TelemetryPreferenceDisabledWithWarning,
MessageId::TelemetryPreferenceDisabledForSession,
MessageId::TelemetryPreferenceSaveFailed,
MessageId::StatusPickerTitle,
MessageId::StatusPickerInstruction,
MessageId::StatusPickerActionToggle,
MessageId::StatusPickerActionAll,
MessageId::StatusPickerActionNone,
MessageId::StatusPickerActionSave,
MessageId::StatusPickerActionCancel,
MessageId::StatusPickerModeHint,
MessageId::StatusPickerModelHint,
MessageId::StatusPickerCostHint,
MessageId::StatusPickerCacheHint,
MessageId::StatusPickerContextPercentHint,
MessageId::StatusPickerTokensHint,
MessageId::StatusPickerBalanceHint,
MessageId::StatusPickerSessionMetricsHint,
MessageId::StatusPickerTtftHint,
MessageId::StatusPickerOutputRateHint,
MessageId::StatusPickerWorkspaceHint,
MessageId::StatusPickerGitBranchHint,
MessageId::HotbarSetupTitle,
MessageId::HotbarSetupSourceApp,
MessageId::HotbarSetupSourceSlash,
MessageId::HotbarSetupSourceMcp,
MessageId::HotbarSetupSourceSkill,
MessageId::HotbarSetupSourcePlugin,
MessageId::HotbarSetupStatusDisabled,
MessageId::HotbarSetupStatusPrefill,
MessageId::HotbarSetupStatusReady,
MessageId::HotbarSetupDirtyModified,
MessageId::HotbarSetupDirtyClean,
MessageId::HotbarSetupNoAction,
MessageId::HotbarSetupConfirmDisable,
MessageId::HotbarSetupStatusLine,
MessageId::HotbarSetupSlotOutOfRange,
MessageId::HotbarSetupNoActionSelected,
MessageId::HotbarSetupCannotAssign,
MessageId::HotbarSetupNoActions,
MessageId::HotbarSetupRecommended,
MessageId::HotbarSetupEmptySlot,
MessageId::HotbarSetupHelp,
MessageId::HotbarActionVoiceToggleName,
MessageId::HotbarActionVoiceToggleDescription,
MessageId::HotbarActionSessionCompactName,
MessageId::HotbarActionSessionCompactDescription,
MessageId::HotbarActionModePlanName,
MessageId::HotbarActionModePlanDescription,
MessageId::HotbarActionModeAgentName,
MessageId::HotbarActionModeAgentDescription,
MessageId::HotbarActionModeYoloName,
MessageId::HotbarActionModeYoloDescription,
MessageId::HotbarActionModeOperateName,
MessageId::HotbarActionModeOperateDescription,
MessageId::HotbarActionReasoningCycleName,
MessageId::HotbarActionReasoningCycleDescription,
MessageId::HotbarActionReasoningCycleAutoDisabled,
MessageId::HotbarActionSidebarToggleName,
MessageId::HotbarActionSidebarToggleDescription,
MessageId::HotbarActionFileTreeToggleName,
MessageId::HotbarActionFileTreeToggleDescription,
MessageId::HotbarActionPaletteOpenName,
MessageId::HotbarActionPaletteOpenDescription,
MessageId::HotbarActionTrustToggleName,
MessageId::HotbarActionTrustToggleDescription,
MessageId::CommandPaletteTitle,
MessageId::CommandPaletteSubtitle,
MessageId::ConfigTitle,
MessageId::ConfigPreviewLabel,
MessageId::ConfigHintExternalCredentials,
MessageId::ConfigSubtitle,
MessageId::ConfigModalTitle,
MessageId::ConfigSearchPlaceholder,
MessageId::ConfigNoSettings,
MessageId::ConfigNoMatchesPrefix,
MessageId::ConfigFilteredSettings,
MessageId::ConfigShowing,
MessageId::ConfigFooterDefault,
MessageId::ConfigFooterScrollable,
MessageId::ConfigFooterFiltered,
MessageId::ConfigSectionProvider,
MessageId::ConfigSectionModel,
MessageId::ConfigSectionPermissions,
MessageId::ConfigSectionNetwork,
MessageId::ConfigSectionDisplay,
MessageId::ConfigSectionComposer,
MessageId::ConfigSectionSidebar,
MessageId::ConfigSectionHistory,
MessageId::ConfigSectionMcp,
MessageId::ConfigSectionFleet,
MessageId::ConfigSectionWorkflow,
MessageId::ConfigSectionSession,
MessageId::ConfigSectionLegacy,
MessageId::ConfigSectionExperimental,
MessageId::ConfigScopeSession,
MessageId::ConfigScopeSaved,
MessageId::ConfigCommandSource,
MessageId::ConfigCommandInvalidValue,
MessageId::ConfigSearchUpdated,
MessageId::ConfigPromptSuggestionUpdated,
MessageId::ConfigLabelNotificationQuiet,
MessageId::ConfigLabelNotificationSound,
MessageId::ConfigLabelNotificationCondition,
MessageId::ConfigLabelNotificationMethod,
MessageId::ConfigLabelNotificationThreshold,
MessageId::ConfigLabelNotificationSummary,
MessageId::ConfigLabelNotificationSubagents,
MessageId::ConfigLabelNotificationTurnComplete,
MessageId::ConfigLabelNotificationSubagentTerminal,
MessageId::ConfigLabelNotificationApprovalNeeded,
MessageId::ConfigLabelNotificationInputNeeded,
MessageId::ConfigLabelNotificationElevationNeeded,
MessageId::ConfigLabelNotificationModelNotify,
MessageId::ConfigLabelNotificationCompletionSound,
MessageId::ConfigLabelNotificationSoundFile,
MessageId::ConfigLabelNotificationEventSoundEnabled,
MessageId::ConfigLabelNotificationEventSoundEvents,
MessageId::ConfigLabelNotificationEventSoundInterval,
MessageId::ConfigLabelNotificationEventSoundQuiet,
MessageId::ConfigHintNotificationPolicy,
MessageId::ConfigHintNotificationSound,
MessageId::ConfigHintNotificationLegacy,
MessageId::ConfigChoiceNotificationWhale,
MessageId::ConfigChoiceNotificationLegacy,
MessageId::ConfigChoiceNotificationAlways,
MessageId::ConfigChoiceNotificationUnfocused,
MessageId::ConfigChoiceNotificationNever,
MessageId::ConfigChoiceNotificationFile,
MessageId::ConfigChoiceNotificationBell,
MessageId::ConfigNotificationsSetHint,
MessageId::ConfigNotificationUpdated,
MessageId::ConfigNotificationsWholeNumber,
MessageId::ConfigAuditSearchProvider,
MessageId::ConfigAuditPromptSuggestion,
MessageId::ConfigAuditNotifications,
MessageId::ConfigHelpDiscoverable,
MessageId::ConfigEditCancelled,
MessageId::ConfigEditTitlePrefix,
MessageId::ConfigEditScopeLabel,
MessageId::ConfigEditCurrentLabel,
MessageId::ConfigEditHintLabel,
MessageId::ConfigEditNewLabel,
MessageId::ConfigEditFooter,
MessageId::ConfigLocalePartialBadge,
MessageId::ConfigLocalePartialDetail,
MessageId::ConfigRowEffective,
MessageId::ConfigDefaultValue,
MessageId::ConfigDefaultReasoning,
MessageId::ConfigUnavailable,
MessageId::ConfigLabelProvider,
MessageId::ConfigLabelBaseUrlDeepseek,
MessageId::ConfigLabelProviderUrl,
MessageId::ConfigHintProviderUrl,
MessageId::ConfigLabelModel,
MessageId::ConfigLabelFastModel,
MessageId::ConfigLabelDefaultModel,
MessageId::ConfigLabelReasoningEffort,
MessageId::ConfigLabelApprovalMode,
MessageId::ConfigLabelPermissionPosture,
MessageId::ConfigLabelApprovalPolicy,
MessageId::ConfigLabelManagedApprovalPolicy,
MessageId::ConfigLabelDefaultMode,
MessageId::ConfigLabelAllowShell,
MessageId::ConfigLabelManagedAllowShell,
MessageId::ConfigLabelTelemetry,
MessageId::ConfigHintTelemetry,
MessageId::ConfigValueTelemetryOn,
MessageId::ConfigValueTelemetryOff,
MessageId::ConfigLabelStreamTimeout,
MessageId::ConfigLabelTheme,
MessageId::ConfigLabelLocale,
MessageId::ConfigLabelBackground,
MessageId::ConfigLabelWorkSurfacePlacement,
MessageId::ConfigLabelTopHeight,
MessageId::ConfigLabelSideWidth,
MessageId::ConfigLabelCalmMode,
MessageId::ConfigLabelLowMotion,
MessageId::ConfigLabelFancyAnimations,
MessageId::ConfigLabelShowThinking,
MessageId::ConfigLabelThinkingHighlight,
MessageId::ConfigLabelShowToolDetails,
MessageId::ConfigLabelInlineDiffs,
MessageId::ConfigLabelStatusIndicator,
MessageId::ConfigLabelSynchronizedOutput,
MessageId::ConfigLabelCostCurrency,
MessageId::ConfigLabelTranscriptSpacing,
MessageId::ConfigLabelToolCollapse,
MessageId::ConfigLabelComposerDensity,
MessageId::ConfigLabelComposerBorder,
MessageId::ConfigLabelComposerMultilineMode,
MessageId::ConfigLabelComposerVimMode,
MessageId::ConfigLabelBracketedPaste,
MessageId::ConfigLabelPasteBurstDetection,
MessageId::ConfigLabelMentionMenuLimit,
MessageId::ConfigLabelMentionMenuBehavior,
MessageId::ConfigLabelMentionWalkDepth,
MessageId::ConfigLabelWorkspaceFollowSymlinks,
MessageId::ConfigLabelContextPanel,
MessageId::ConfigLabelSessionsRail,
MessageId::ConfigLabelSessionAutoResume,
MessageId::ConfigLabelAutoCompact,
MessageId::ConfigLabelAutoCompactThreshold,
MessageId::ConfigLabelMaxHistory,
MessageId::ConfigLabelMcpOpen,
MessageId::ConfigLabelMcpReconnect,
MessageId::ConfigLabelMcpDiagnose,
MessageId::ConfigLabelPluginsOpen,
MessageId::ConfigLabelMcpConfigPath,
MessageId::ConfigLabelFleetSpawnDepth,
MessageId::ConfigLabelGoalCommand,
MessageId::ConfigLabelWorkflow,
MessageId::ConfigLabelFeaturePrefix,
MessageId::ConfigColumnSetting,
MessageId::ConfigColumnValue,
MessageId::ConfigColumnScope,
MessageId::ConfigActionOpenProvider,
MessageId::ConfigActionOpenModel,
MessageId::ConfigActionOpenMcp,
MessageId::ConfigActionMcpReconnect,
MessageId::ConfigActionMcpDiagnose,
MessageId::ConfigActionOpenPlugins,
MessageId::ConfigActionToggle,
MessageId::ConfigActionChoose,
MessageId::ConfigActionEdit,
MessageId::ConfigActionReadOnly,
MessageId::ModelPickerAutoNetworkHint,
MessageId::ModelPickerAutoNetworkActiveProviderHint,
MessageId::ModelPickerAutoLocalHint,
MessageId::ModelPickerAutoLastRoute,
MessageId::AutoRouteSelectedToast,
MessageId::HelpGroupCommonCommands,
MessageId::HelpGroupAllCommands,
MessageId::HelpTitle,
MessageId::HelpSubtitle,
MessageId::HelpFilterPlaceholder,
MessageId::HelpFilterPrefix,
MessageId::HelpNoMatches,
MessageId::HelpSlashCommands,
MessageId::HelpKeybindings,
MessageId::HelpUserCommands,
MessageId::ModelPickerNotListed,
MessageId::HelpSkills,
MessageId::HelpFooterTypeFilter,
MessageId::HelpFooterMove,
MessageId::HelpFooterJump,
MessageId::HelpFooterClose,
MessageId::CmdAnchorDescription,
MessageId::CmdAttachDescription,
MessageId::CmdBalanceDescription,
MessageId::CmdImportClaudeDescription,
MessageId::CmdCacheDescription,
MessageId::CmdPreviewRequestDescription,
MessageId::CmdToolsDescription,
MessageId::CmdEffortDescription,
MessageId::CmdTurnInspectDescription,
MessageId::CmdClearDescription,
MessageId::CmdColorDescription,
MessageId::CmdColorSet,
MessageId::CmdColorReset,
MessageId::CmdColorUnknown,
MessageId::CmdCompactDescription,
MessageId::CmdPurgeDescription,
MessageId::CmdConfigDescription,
MessageId::CmdPermissionsDescription,
MessageId::PermissionsListHeader,
MessageId::PermissionsNoRules,
MessageId::PermissionsFileMissing,
MessageId::PermissionsFileEmpty,
MessageId::PermissionsFilePresent,
MessageId::PermissionsRuleEntry,
MessageId::PermissionsMatchExactCommand,
MessageId::PermissionsMatchCommandPrefix,
MessageId::PermissionsMatchExactPath,
MessageId::PermissionsMatchAnyInvocation,
MessageId::PermissionsScopeGlobal,
MessageId::PermissionsScopeRepo,
MessageId::PermissionsAppliesHere,
MessageId::PermissionsInactiveHere,
MessageId::PermissionsRemovePreview,
MessageId::PermissionsRemoved,
MessageId::PermissionsUsage,
MessageId::PermissionsRuleNotFound,
MessageId::AutoReviewReceiptGuardianAllowed,
MessageId::AutoReviewReceiptGuardianDenied,
MessageId::AutoReviewReceiptGuardianUnavailable,
MessageId::AutoReviewReceiptDeterministicBlocked,
MessageId::AutoReviewReceiptHeld,
MessageId::FooterHintEscInterrupt,
MessageId::PostureHintEnterAgain,
MessageId::PermissionsPostureHeader,
MessageId::PermissionsPostureAsk,
MessageId::PermissionsPostureAcceptEdits,
MessageId::PermissionsPostureAuto,
MessageId::PermissionsPostureBypass,
MessageId::PermissionsPostureNever,
MessageId::PermissionsReceiptsNote,
MessageId::PermissionsOperationFailed,
MessageId::CmdAuthDescription,
MessageId::CmdConstitutionDescription,
MessageId::CmdContextDescription,
MessageId::CmdCostDescription,
MessageId::CmdReceiptsDescription,
MessageId::CmdDiffDescription,
MessageId::CmdDiffGitUnavailable,
MessageId::CmdDiffNoBaseline,
MessageId::CmdDiffFailed,
MessageId::CmdDiffNoChanges,
MessageId::CmdDiffChangedFiles,
MessageId::CmdDiffChangedFilesRenamed,
MessageId::CmdDiffStatHeader,
MessageId::CmdDiffTruncated,
MessageId::CmdDiffTitle,
MessageId::CmdUndoUnknownOption,
MessageId::CmdUndoRemovedMessages,
MessageId::CmdUndoNothingToUndo,
MessageId::CmdUndoFilesNotRevertedNote,
MessageId::CmdUndoNoFileChangesNote,
MessageId::CmdUndoSnapshotRepoUnavailable,
MessageId::CmdUndoSnapshotPending,
MessageId::CmdUndoNoSnapshots,
MessageId::CmdUndoNoSession,
MessageId::CmdUndoNoOwnedSteps,
MessageId::CmdUndoNoDifference,
MessageId::CmdUndoOpenEnded,
MessageId::CmdUndoCompareFailed,
MessageId::CmdUndoSnapshotFailed,
MessageId::CmdUndoListFailed,
MessageId::CmdUndoRestoreFailed,
MessageId::CmdUndoChangedSince,
MessageId::CmdUndoRequestNamed,
MessageId::CmdUndoRequestLast,
MessageId::CmdUndoUndidSummary,
MessageId::CmdUndoOneFileBack,
MessageId::CmdUndoFilesBack,
MessageId::CmdUndoActionRestored,
MessageId::CmdUndoActionRecreated,
MessageId::CmdUndoActionRemoved,
MessageId::CmdUndoForcedNote,
MessageId::CmdUndoConversationRemoved,
MessageId::CmdUndoConversationKept,
MessageId::CmdUndoLeftInPlace,
MessageId::CmdEditDescription,
MessageId::CmdExitDescription,
MessageId::CmdExportDescription,
MessageId::CmdCopyDescription,
MessageId::CmdCopyNoOutput,
MessageId::CmdCopySuccess,
MessageId::CmdCopySuccessNoBackup,
MessageId::CmdCopyQueued,
MessageId::CmdCopyQueuedNoBackup,
MessageId::CmdCopyFailed,
MessageId::CmdCopyFailedNoBackup,
MessageId::CmdFeedbackDescription,
MessageId::FeedbackNoSession,
MessageId::FeedbackUnavailable,
MessageId::FeedbackReviewNotice,
MessageId::FeedbackHelp,
MessageId::FeedbackDraftRequested,
MessageId::CmdForkDescription,
MessageId::CmdTreeDescription,
MessageId::CmdBranchDescription,
MessageId::CmdResumeDescription,
MessageId::CmdGoalDescription,
MessageId::GoalReceiptSet,
MessageId::GoalReceiptSetOperate,
MessageId::GoalControlAccepted,
MessageId::GoalControlRuntimeUnavailable,
MessageId::GoalStatusIdleHint,
MessageId::GoalContinuationWaiting,
MessageId::GoalContinuationReady,
MessageId::GoalContinuationStopped,
MessageId::CmdThemeDescription,
MessageId::CmdHfDescription,
MessageId::CmdHelpDescription,
MessageId::CmdProfileDescription,
MessageId::ProfileUsage,
MessageId::ProfileSwitching,
MessageId::ProfileSwitched,
MessageId::ProfileStatus,
MessageId::ProfileSwitchFailed,
MessageId::CmdHomeDescription,
MessageId::CmdOverviewDescription,
MessageId::HomeBackToConversation,
MessageId::HomeNavigationBusy,
MessageId::CmdHooksDescription,
MessageId::CmdAgentDescription,
MessageId::CmdInitDescription,
MessageId::CmdJobsDescription,
MessageId::CmdLinksDescription,
MessageId::CmdLoadDescription,
MessageId::CmdLogoutDescription,
MessageId::CmdLoginDescription,
MessageId::CmdConnectDescription,
MessageId::CmdDisconnectDescription,
MessageId::CmdMcpDescription,
MessageId::McpRecommendedUnknownId,
MessageId::McpRecommendationsHeading,
MessageId::McpRecommendationsSafety,
MessageId::McpRecommendationGithub,
MessageId::McpRecommendationChrome,
MessageId::McpRecommendationPlaywright,
MessageId::McpRecommendationContainerUse,
MessageId::McpCapabilitiesAdvertised,
MessageId::McpCapabilitiesLegacyFallback,
MessageId::McpCapabilitiesNotObserved,
MessageId::CmdPluginDescription,
MessageId::ExtensionsActionAdd,
MessageId::ExtensionsActionEnable,
MessageId::ExtensionsActionDisable,
MessageId::ExtensionsActionReview,
MessageId::ExtensionsActionRemove,
MessageId::ExtensionsStateOn,
MessageId::ExtensionsStateOff,
MessageId::ExtensionsStateNeedsReview,
MessageId::ExtensionsReviewExplainer,
MessageId::ExtensionsScopeGlobal,
MessageId::ExtensionsScopeProject,
MessageId::ExtensionsScopePlugin,
MessageId::ExtensionsRemoveArmed,
MessageId::ExtensionsActionEdit,
MessageId::ExtensionsHooksAddLabel,
MessageId::ExtensionsHooksAddDescription,
MessageId::ExtensionsActionReload,
MessageId::ExtensionsActionConnect,
MessageId::ExtensionsActionReconnect,
MessageId::ExtensionsActionReauth,
MessageId::ExtensionsActionDiagnose,
MessageId::ExtensionsActionManage,
MessageId::ExtensionsActionFocus,
MessageId::ExtensionsActionFold,
MessageId::ExtensionsActionTabs,
MessageId::ExtensionsCompatibilityFull,
MessageId::ExtensionsCompatibilityPartial,
MessageId::ExtensionsGroupBuiltIn,
MessageId::ExtensionsGroupConfigured,
MessageId::ExtensionsGroupProblems,
MessageId::ExtensionsGroupRecommended,
MessageId::ExtensionsGroupServers,
MessageId::ExtensionsGroupNeedsAttention,
MessageId::ExtensionsGroupNeedsLogin,
MessageId::ExtensionsGroupStatus,
MessageId::ExtensionsGroupUser,
MessageId::ExtensionsGroupWorkspace,
MessageId::ExtensionsHookDetail,
MessageId::ExtensionsHookFallback,
MessageId::ExtensionsHooksConfiguration,
MessageId::ExtensionsInventoryAgents,
MessageId::ExtensionsInventoryCommands,
MessageId::ExtensionsInventoryHooks,
MessageId::ExtensionsInventoryMcp,
MessageId::ExtensionsInventoryNone,
MessageId::ExtensionsInventorySkills,
MessageId::ExtensionPromptUnavailable,
MessageId::ProfileConstitutionUnavailableLocal,
MessageId::ExtensionsMarketplaceDetail,
MessageId::ExtensionsMarketplaceUnavailable,
MessageId::ExtensionsMcpEmpty,
MessageId::ExtensionsMcpBrowse,
MessageId::ExtensionsMcpDetail,
MessageId::ExtensionsMcpNotInspected,
MessageId::ExtensionsMcpNotConnectedYet,
MessageId::ExtensionsMcpRefresh,
MessageId::ExtensionsMcpSummary,
MessageId::ExtensionsNoItems,
MessageId::ExtensionsNoMatches,
MessageId::ExtensionsPluginDetail,
MessageId::ExtensionsProductChromeDescription,
MessageId::ExtensionsProductDetail,
MessageId::ExtensionsProductPlaywrightDescription,
MessageId::ExtensionsProductCodewhaleComputerUseDescription,
MessageId::ExtensionsStateFirstParty,
MessageId::ExtensionsSearchLabel,
MessageId::ExtensionsSkillRootCompatibleGlobal,
MessageId::ExtensionsSkillRootCompatibleProject,
MessageId::ExtensionsSkillRootConfigured,
MessageId::ExtensionsSkillRootGlobal,
MessageId::ExtensionsSkillRootProject,
MessageId::ExtensionsSkillRootRegistryCache,
MessageId::ExtensionsSkillRootReviewedPlugin,
MessageId::ExtensionsStateAvailable,
MessageId::ExtensionsStateConnected,
MessageId::ExtensionsStateEnabled,
MessageId::ExtensionsStateError,
MessageId::ExtensionsStateInactive,
MessageId::ExtensionsStateInapplicable,
MessageId::ExtensionsStateInvalid,
MessageId::ExtensionsStateNotInspected,
MessageId::ExtensionsStateDisconnected,
MessageId::ExtensionsStateRejected,
MessageId::ExtensionsStateReviewedCandidate,
MessageId::ExtensionsStateUnderEvaluation,
MessageId::ExtensionsStateUnstaged,
MessageId::ExtensionsStateUnsupported,
MessageId::ExtensionsStateWarning,
MessageId::ExtensionsTabHooks,
MessageId::ExtensionsTabMarketplace,
MessageId::ExtensionsTabMarketplaceCompact,
MessageId::ExtensionsTabPlugins,
MessageId::ExtensionsTierCommunity,
MessageId::ExtensionsTierCurated,
MessageId::ExtensionsTierOfficial,
MessageId::ExtensionsTierPartner,
MessageId::ExtensionsTitle,
MessageId::ExtensionsTrustCapabilitiesChanged,
MessageId::ExtensionsTrustContentChanged,
MessageId::ExtensionsTrustNotReviewed,
MessageId::ExtensionsTrustTrusted,
MessageId::ExtensionsValueNo,
MessageId::ExtensionsValueYes,
MessageId::PluginKimiUsage,
MessageId::PluginKimiManagedRootHeading,
MessageId::PluginKimiNoneFound,
MessageId::PluginKimiLicenseUnspecified,
MessageId::PluginKimiApplicable,
MessageId::PluginKimiNotApplicable,
MessageId::PluginKimiCandidateSummary,
MessageId::PluginKimiCandidateDetails,
MessageId::PluginKimiRejectedHeading,
MessageId::PluginKimiInspectionFooter,
MessageId::PluginKimiCandidateMissing,
MessageId::PluginKimiCandidateChanged,
MessageId::PluginKimiHomeMissing,
MessageId::PluginKimiRootInspectFailed,
MessageId::PluginKimiRootMustBeDirectory,
MessageId::PluginKimiRootCanonicalizeFailed,
MessageId::PluginKimiRootListFailed,
MessageId::PluginKimiEntryReadFailed,
MessageId::PluginKimiEntryLimit,
MessageId::PluginKimiEntryInspectFailed,
MessageId::PluginKimiEntryLinksRefused,
MessageId::PluginKimiEntryOutsideRoot,
MessageId::PluginKimiEntryCanonicalizeFailed,
MessageId::PluginKimiManifestUnreadable,
MessageId::PluginKimiManifestMustBeFile,
MessageId::PluginKimiManifestInvalid,
MessageId::PluginKimiDirectoryNameMismatch,
MessageId::PluginKimiHashUnavailable,
MessageId::PluginKimiRollbackDestinationMissing,
MessageId::PluginKimiMismatchRemoved,
MessageId::PluginKimiMismatchRollbackFailed,
MessageId::PluginKimiUserPluginDirectory,
MessageId::PluginKimiMarketplaceZipUnsupported,
MessageId::PluginKimiMarketplaceRemoteUnsupported,
MessageId::PluginKimiMarketplaceGzipTarball,
MessageId::CmdPluginBundleUsage,
MessageId::CmdPluginBundleNoneFound,
MessageId::CmdPluginBundleListHeader,
MessageId::CmdPluginLegacyListHeader,
MessageId::CmdPluginBundleNotFound,
MessageId::CmdPluginBundleReloaded,
MessageId::PluginPromptSuggestTrust,
MessageId::PluginPromptSuggestEnable,
MessageId::PluginPromptSuggestMarketplace,
MessageId::PluginCtaInstallPrompt,
MessageId::PluginCtaReview,
MessageId::PluginCtaInstall,
MessageId::PluginCtaReviewTrust,
MessageId::PluginCtaEnable,
MessageId::PluginCtaDismiss,
MessageId::PluginCtaDismissSaveFailed,
MessageId::PluginSuggestionReason,
MessageId::PagerActionConfirm,
MessageId::PagerEvidenceBinary,
MessageId::PagerEvidenceLoadingTitle,
MessageId::PagerEvidenceVerifying,
MessageId::PagerEvidenceRangeTitle,
MessageId::PagerEvidenceVerifiedRange,
MessageId::PagerEvidenceUnavailableTitle,
MessageId::PagerEvidenceUnavailable,
MessageId::PagerEvidenceCopyLabel,
MessageId::PagerActionSearchLoadedRange,
MessageId::PagerActionCopyLoadedRange,
MessageId::PagerActionByteWindows,
MessageId::PagerActionFirstLastBytes,
MessageId::PagerDiffRowsShortened,
MessageId::PagerDiffCopySource,
MessageId::PagerUnicodeEscapes,
MessageId::UserInputUnicodeEscapes,
MessageId::PagerDisplayContinuation,
MessageId::PagerActionScroll,
MessageId::PagerActionPage,
MessageId::PagerActionHalfPage,
MessageId::PagerActionTopBottom,
MessageId::PagerActionCopy,
MessageId::PagerActionCopyHandoff,
MessageId::PagerActionCopyAnswer,
MessageId::PagerCopyContentLabel,
MessageId::PagerCopyHandoffLabel,
MessageId::PagerCopyAnswerLabel,
MessageId::PagerSearchMatch,
MessageId::ToolOutputShortened,
MessageId::CmdPluginBundleDetail,
MessageId::CmdPluginOwnerReport,
MessageId::CmdPluginOwnerActivating,
MessageId::CmdPluginOwnerActive,
MessageId::CmdPluginOwnerFailed,
MessageId::CmdPluginOwnerFaulted,
MessageId::CmdPluginOwnerRevoked,
MessageId::CmdPluginOwnerInactive,
MessageId::CmdPluginBundleDiagnosticsHeader,
MessageId::CmdPluginBundleMutationSuccess,
MessageId::CmdPluginActionFailed,
MessageId::CmdPluginNoneFound,
MessageId::CmdPluginNotFound,
MessageId::CmdPluginListHeader,
MessageId::CmdPluginDetailDescription,
MessageId::CmdPluginDetailSchema,
MessageId::CmdPluginDetailApproval,
MessageId::CmdPluginDetailPath,
MessageId::CmdMemoryDescription,
MessageId::CmdModeDescription,
MessageId::CmdModelDescription,
MessageId::CmdModelsDescription,
MessageId::CmdRouterDescription,
MessageId::RouterSetupTitle,
MessageId::RouterPresetJevHint,
MessageId::RouterPresetFastHint,
MessageId::RouterPresetOffHint,
MessageId::RouterPresetOffCostSavingHint,
MessageId::RouterPresetCustomHint,
MessageId::RouterPresetUnavailable,
MessageId::RouterTypesafeSignupPaused,
MessageId::RouterTestSaveHint,
MessageId::RouterTestHeader,
MessageId::RouterTestNotMade,
MessageId::RouterTestWouldRoute,
MessageId::RouterTestDecision,
MessageId::RouterTestChoice,
MessageId::RouterTestCostReported,
MessageId::RouterTestCostUnreported,
MessageId::RouterTestUsage,
MessageId::RouterTestFailing,
MessageId::RouterSaved,
MessageId::RouterNotSaved,
MessageId::RouterRuntimeNotReloaded,
MessageId::RouterCurrent,
MessageId::RouterCurrentFailing,
MessageId::RouterSummary,
MessageId::RouterSummaryThinking,
MessageId::RouterPresetFastLabel,
MessageId::RouterPresetCustomLabel,
MessageId::RouterNoKey,
MessageId::RouterNoFastTier,
MessageId::RouterNeedKey,
MessageId::RouterCustomByHand,
MessageId::RouterCustomHelpIntro,
MessageId::RouterCustomHelpOutro,
MessageId::RouterActionTest,
MessageId::RouterActionSave,
MessageId::RouterActionDiscard,
MessageId::ModelsListHeader,
MessageId::ModelsListHint,
MessageId::ModelsUpdateSummary,
MessageId::ModelsUpdatePartial,
MessageId::ModelsCodexHint,
MessageId::ModelsSourceFallback,
MessageId::CmdModelDbDescription,
MessageId::CmdNetworkDescription,
MessageId::CmdUpdateDescription,
MessageId::CmdNoteDescription,
MessageId::CmdProviderDescription,
MessageId::CmdQueueDescription,
MessageId::CmdQueueUsage,
MessageId::QueueRestoredFromPreviousSession,
MessageId::CmdQueueDraftHeader,
MessageId::CmdQueueNoMessages,
MessageId::CmdQueueListHeader,
MessageId::CmdQueueTip,
MessageId::CmdQueueAlreadyEditing,
MessageId::CmdQueueNotFound,
MessageId::CmdQueueEditingStatus,
MessageId::CmdQueueEditingMessage,
MessageId::CmdQueueDropped,
MessageId::CmdQueueAlreadyEmpty,
MessageId::CmdQueueCleared,
MessageId::CmdQueueMissingIndex,
MessageId::CmdQueueIndexPositive,
MessageId::CmdQueueIndexMin,
MessageId::CmdRelayDescription,
MessageId::CmdRemoteControlDescription,
MessageId::CmdRemoteEnvDescription,
MessageId::CmdRemoteEnvOverview,
MessageId::CmdRemoteEnvOpening,
MessageId::CmdRemoteEnvUnavailable,
MessageId::CmdRemoteEnvSourceCustodyPolicy,
MessageId::CmdRemoteEnvBrowserLabel,
MessageId::CmdRenameDescription,
MessageId::CmdTitleDescription,
MessageId::CmdRestoreDescription,
MessageId::CmdRetryDescription,
MessageId::CmdReviewDescription,
MessageId::CmdRlmDescription,
MessageId::CmdSaveDescription,
MessageId::CmdFullscreenDescription,
MessageId::CmdInlineDescription,
MessageId::CmdNewDescription,
MessageId::CmdSessionsDescription,
MessageId::CmdSettingsDescription,
MessageId::CmdSidebarDescription,
MessageId::CmdSkillDescription,
MessageId::CmdSkillsDescription,
MessageId::SkillsIndexDescriptionLimit,
MessageId::CmdStashDescription,
MessageId::CmdStatusDescription,
MessageId::CmdStatuslineDescription,
MessageId::CmdStructcopyDescription,
MessageId::CmdStructcopyKindTurn,
MessageId::CmdStructcopyKindTool,
MessageId::CmdStructcopyKindPlan,
MessageId::CmdStructcopyKindWorkflow,
MessageId::CmdStructcopyUsageError,
MessageId::CmdStructcopyUnavailable,
MessageId::CmdStructcopyBusy,
MessageId::CmdStructcopyPrepareFailed,
MessageId::CmdStructcopyClipboardQueued,
MessageId::CmdStructcopyClipboardAccepted,
MessageId::CmdStructcopyClipboardFailed,
MessageId::CmdStructcopyReceiptTooLarge,
MessageId::CmdFleetDescription,
MessageId::PetUnobserved,
MessageId::PetOffline,
MessageId::PetDozing,
MessageId::PetWatchUnavailable,
MessageId::PetWatchRestored,
MessageId::PetWatchStorageUnavailable,
MessageId::PetWatchExported,
MessageId::PetWatchExportFailed,
MessageId::PetWatchExportQueued,
MessageId::PetWatchExportUnavailable,
MessageId::PetHabitatTitle,
MessageId::PetHabitatHints,
MessageId::PetHabitatQueued,
MessageId::PetWatchSoundOn,
MessageId::PetWatchSoundOff,
MessageId::PetWatchSoundPaused,
MessageId::PetWatchSoundUnavailable,
MessageId::CmdPetDescription,
MessageId::ConfigLabelPetMode,
MessageId::ConfigHintPetMode,
MessageId::PetModeCopyHint,
MessageId::PetModeOn,
MessageId::PetModeOff,
MessageId::PetModeOnLabel,
MessageId::PetModeInspectHint,
MessageId::PetModeViewHint,
MessageId::PetViewNeeds,
MessageId::PetNeedsKittyGraphics,
MessageId::PetNeedsSynchronizedOutput,
MessageId::PetNeedsCellPixels,
MessageId::PetNeedsGraphicsAllowed,
MessageId::PetNeedsAtlas,
MessageId::PetNeedsArtSize,
MessageId::PetNeedsUnicode,
MessageId::PetNeedsColor,
MessageId::PetWords,
MessageId::PetAscii,
MessageId::PetModeReplyTitle,
MessageId::PetActivityBrowsing,
MessageId::PetActivityComputer,
MessageId::PetActivityMemory,
MessageId::PetAppearanceLegacy,
MessageId::PetModeMessageHint,
MessageId::PetModePaneHint,
MessageId::PetModeAgentHints,
MessageId::PetModeReplyHints,
MessageId::PetModeCompanionHints,
MessageId::PetModeOffLabel,
MessageId::PetViewOpen,
MessageId::PetViewClosed,
MessageId::CmdLaneDescription,
MessageId::CmdWorkflowDescription,
MessageId::CmdWorkflowsDescription,
MessageId::CmdAutoDescription,
MessageId::AutoReceiptOn,
MessageId::AutoReceiptPlanNote,
MessageId::CmdHotbarDescription,
MessageId::CmdSetupDescription,
MessageId::CmdSubagentsDescription,
MessageId::CmdAdvisorDescription,
MessageId::CmdSystemDescription,
MessageId::CmdAutomationDescription,
MessageId::CmdTaskDescription,
MessageId::CmdTokensDescription,
MessageId::CmdTranslateDescription,
MessageId::CmdTranslateOff,
MessageId::CmdTranslateOn,
MessageId::TranslationInProgress,
MessageId::TranslationComplete,
MessageId::TranslationFailed,
MessageId::CmdTrustDescription,
MessageId::CmdLspDescription,
MessageId::CmdShareDescription,
MessageId::CmdWorkspaceDescription,
MessageId::CmdUndoDescription,
MessageId::CmdVerboseDescription,
MessageId::CmdCacheAdvice,
MessageId::CmdCacheFootnote,
MessageId::CmdCacheHeader,
MessageId::CmdCacheNoData,
MessageId::CmdCacheSessionRates,
MessageId::CmdCacheRateParent,
MessageId::CmdCacheRateAgents,
MessageId::CmdCacheRateCombined,
MessageId::CmdCacheTotals,
MessageId::CmdChangeDescription,
MessageId::CmdChangeHeader,
MessageId::CmdChangeTranslationQueued,
MessageId::CmdChangeTranslationUnavailable,
MessageId::CmdChangePreviousVersion,
MessageId::CmdCostReport,
MessageId::CmdCostReportSubtotal,
MessageId::CmdCostReportUnknown,
MessageId::CmdCostUnknownValue,
MessageId::CmdCostEstimateOnly,
MessageId::CmdCostCoverage,
MessageId::CmdCostCoverageUnknownLegacy,
MessageId::CmdCostUnpricedTurns,
MessageId::CmdCostUnpricedClasses,
MessageId::CmdCostPricingProvenance,
MessageId::CmdCostLivePricingDowngraded,
MessageId::CmdCostLivePricingUnavailable,
MessageId::CmdCostRoutesHeader,
MessageId::CmdTokensCacheWriteTotal,
MessageId::CmdTokensCacheBoth,
MessageId::CmdTokensCacheHitOnly,
MessageId::CmdTokensCacheMissOnly,
MessageId::CmdTokensContextUnknownWindow,
MessageId::CmdTokensContextWithWindow,
MessageId::CmdTokensNotReported,
MessageId::CmdTokensReport,
MessageId::FooterAgentSingular,
MessageId::FooterAgentsPlural,
MessageId::HeaderAgentsChip,
MessageId::FooterPressCtrlCAgain,
MessageId::FooterWorking,
MessageId::FooterBalancePrefix,
MessageId::HelpSectionActions,
MessageId::HelpSectionClipboard,
MessageId::HelpSectionPointer,
MessageId::HelpSectionEditing,
MessageId::HelpSectionHelp,
MessageId::HelpSectionModes,
MessageId::HelpSectionNavigation,
MessageId::HelpSectionSessions,
MessageId::KbScrollTranscript,
MessageId::KbNavigateHistory,
MessageId::KbScrollTranscriptAlt,
MessageId::KbBrowseHistory,
MessageId::KbScrollPage,
MessageId::KbJumpTopBottom,
MessageId::KbJumpTopBottomEmpty,
MessageId::KbJumpToolBlocks,
MessageId::KbMoveCursor,
MessageId::KbJumpLineStartEnd,
MessageId::KbDeleteChar,
MessageId::KbDeleteWord,
MessageId::KbYank,
MessageId::KbToggleFileTree,
MessageId::KbSelectText,
MessageId::KbSelectAllDraft,
MessageId::KbClearDraft,
MessageId::KbRestoreClearedDraft,
MessageId::KbStashDraft,
MessageId::KbSearchHistory,
MessageId::KbInsertNewline,
MessageId::KbSendDraft,
MessageId::KbSteerCurrentTurn,
MessageId::KbCloseMenu,
MessageId::KbCancelOrExit,
MessageId::KbShellControls,
MessageId::KbExitEmpty,
MessageId::KbCommandPalette,
MessageId::KbSettings,
MessageId::KbCancelBackgroundShellJobs,
MessageId::KbFuzzyFilePicker,
MessageId::KbCompactInspector,
MessageId::KbCompactContext,
MessageId::KbLastMessagePager,
MessageId::KbSelectedDetails,
MessageId::KbToolDetailsPager,
MessageId::KbReasoningDetail,
MessageId::KbTurnInspector,
MessageId::KbExternalEditor,
MessageId::KbLiveTranscript,
MessageId::KbBacktrackMessage,
MessageId::KbTabComplete,
MessageId::KbCycleThinking,
MessageId::KbCyclePermissions,
MessageId::KbJumpPlanAgentYolo,
MessageId::KbAltJumpPlanAgentYolo,
MessageId::KbFocusSidebar,
MessageId::KbSessionPicker,
MessageId::KbUpdateInstall,
MessageId::UpdateWhatsNewUpdated,
MessageId::UpdateWhatsNewCounts,
MessageId::UpdateWhatsNewHeadline,
MessageId::UpdateWhatsNewFeatureSingular,
MessageId::UpdateWhatsNewFeaturesPlural,
MessageId::UpdateWhatsNewFixSingular,
MessageId::UpdateWhatsNewFixesPlural,
MessageId::UpdateWhatsNewOtherSingular,
MessageId::UpdateWhatsNewOtherPlural,
MessageId::UpdateWhatsNewNotes,
MessageId::KbTerminalPaste,
MessageId::KbPasteAttach,
MessageId::KbCopySelection,
MessageId::ClipboardSshPasteHint,
MessageId::ClipboardCopied,
MessageId::ClipboardSentToTerminal,
MessageId::ClipboardCutKeptText,
MessageId::ClipboardNothingToPaste,
MessageId::ClipboardCopyFailed,
MessageId::ComposerOversizedSubmitHeld,
MessageId::ComposerOversizedSubmitHeldShort,
MessageId::KbContextMenu,
MessageId::KbPointerScroll,
MessageId::KbPointerClick,
MessageId::KbPointerDrag,
MessageId::KbAttachPath,
MessageId::KbHelpOverlay,
MessageId::KbCycleWorkDock,
MessageId::KbCycleWorkDockBack,
MessageId::KbToggleHelp,
MessageId::KbToggleHelpSlash,
MessageId::HelpUsageLabel,
MessageId::HelpAliasesLabel,
MessageId::SettingsTitle,
MessageId::SettingsConfigFile,
MessageId::SettingsTuiPrefsFolded,
MessageId::SettingsTuiPrefsKept,
MessageId::SettingsTuiPrefsQuarantined,
MessageId::ClearConversation,
MessageId::ClearConversationBusy,
MessageId::ModelChanged,
MessageId::ModelChangedSessionNote,
MessageId::LinksProjectTitle,
MessageId::LinksDocumentation,
MessageId::LinksCommunity,
MessageId::LinksGitHub,
MessageId::LinksManagedApp,
MessageId::LinksManagedAppNote,
MessageId::LinksTitle,
MessageId::LinksDashboard,
MessageId::LinksDocs,
MessageId::LinksKimiCodeRouteNote,
MessageId::LinksTip,
MessageId::WorkspaceCurrent,
MessageId::WorkspaceNotFound,
MessageId::WorkspaceNotDirectory,
MessageId::WorkspaceSwitching,
MessageId::WorkspaceHomeUnresolved,
MessageId::WorkspaceSwitchBusy,
MessageId::WorkspaceUnchanged,
MessageId::WorkspaceSwitched,
MessageId::WorkspaceStatus,
MessageId::SubagentsFetching,
MessageId::SubagentsNoCurrentSessionFleetWorkers,
MessageId::SubagentsCurrentSessionFleetWorkersTitle,
MessageId::SubagentsCurrentSessionFleetWorkerRoles,
MessageId::SubagentsCurrentSessionFleetWorkersStatus,
MessageId::SubagentsEmptyGuidance,
MessageId::SubagentsStatusRunning,
MessageId::SubagentsStatusCompleted,
MessageId::SubagentsStatusInterrupted,
MessageId::SubagentsStatusFailed,
MessageId::SubagentsStatusCancelled,
MessageId::SubagentsRowStatusInterrupted,
MessageId::SubagentsRowStatusCancelled,
MessageId::SubagentsRowStatusBudgetExhausted,
MessageId::SubagentsSummaryItem,
MessageId::SubagentsGroupHeading,
MessageId::SubagentsHeaderRoster,
MessageId::SubagentsHeaderColumns,
MessageId::SubagentsActionRefresh,
MessageId::SubagentsActionRosterSetup,
MessageId::SubagentsLabelReason,
MessageId::SubagentsLabelRole,
MessageId::SubagentsLabelPosture,
MessageId::SubagentsLabelGit,
MessageId::SubagentsLabelObjective,
MessageId::SubagentsLabelResult,
MessageId::SubagentsPostureDetails,
MessageId::SubagentsValueOn,
MessageId::SubagentsValueOff,
MessageId::SubagentsShellNone,
MessageId::SubagentsShellReadOnly,
MessageId::SubagentsShellFull,
MessageId::SubagentsBranch,
MessageId::SubagentsBranchWithWorkspace,
MessageId::SubagentsRoleWorker,
MessageId::SubagentsRoleScout,
MessageId::SubagentsRolePlanner,
MessageId::SubagentsRoleBuilder,
MessageId::SubagentsRoleVerifier,
MessageId::SubagentsRoleReviewer,
MessageId::SubagentsRoleConsultant,
MessageId::SubagentsRoleCustom,
MessageId::HelpUnknownCommand,
MessageId::HomeDashboardTitle,
MessageId::HomeModel,
MessageId::HomeMode,
MessageId::HomeWorkspace,
MessageId::HomeHistory,
MessageId::HomeTokens,
MessageId::HomeQueued,
MessageId::HomeSubagents,
MessageId::HomeSkill,
MessageId::HomeQuickActions,
MessageId::HomeQuickLinks,
MessageId::HomeQuickSkills,
MessageId::HomeQuickConfig,
MessageId::HomeQuickSettings,
MessageId::HomeQuickModel,
MessageId::HomeQuickSubagents,
MessageId::HomeQuickTaskList,
MessageId::HomeQuickHelp,
MessageId::HomeQuickWorkspace,
MessageId::HomeQuickRestore,
MessageId::HomeQuickTokens,
MessageId::HomeModeTips,
MessageId::HomeAgentModeTip,
MessageId::HomeAgentModeReviewTip,
MessageId::HomeAgentModeYoloTip,
MessageId::HomeYoloModeTip,
MessageId::HomeYoloModeCaution,
MessageId::HomePlanModeTip,
MessageId::HomePlanModeChecklistTip,
MessageId::HomeOperateModeTip,
MessageId::HomeOperateModeFleetTip,
MessageId::HomeGoalModeTip,
MessageId::OnboardWelcomeTitle,
MessageId::OnboardWelcomeLead,
MessageId::OnboardWelcomeBegin,
MessageId::OnboardActionBack,
MessageId::OnboardActionExit,
MessageId::OnboardStepsTitle,
MessageId::OnboardLanguageTitle,
MessageId::OnboardLanguageBlurb,
MessageId::OnboardLanguagePick,
MessageId::OnboardLanguageKeep,
MessageId::OnboardProviderTitle,
MessageId::OnboardProviderBlurb,
MessageId::OnboardProviderChoose,
MessageId::OnboardProviderOffline,
MessageId::KimiCodePlanApiKeyHint,
MessageId::KimiCodePlanRouteHint,
MessageId::KimiCodePlanNoImportHint,
MessageId::StepfunBillingRouteTitle,
MessageId::StepfunBillingRouteIntro,
MessageId::StepfunBillingRoutePaygOption,
MessageId::StepfunBillingRoutePlanOption,
MessageId::StepfunPlanApiKeyHint,
MessageId::StepfunPlanRouteHint,
MessageId::OnboardApiKeyRejectedEnv,
MessageId::OnboardTrustTitle,
MessageId::OnboardTrustQuestion,
MessageId::OnboardTrustLocationPrefix,
MessageId::OnboardTrustRiskHint,
MessageId::OnboardTrustEffectHint,
MessageId::OnboardTrustActionTrust,
MessageId::OnboardTrustActionSkip,
MessageId::OnboardTrustActionQuit,
MessageId::OnboardTrustEnterHint,
MessageId::OnboardTrustUntrustedNotice,
MessageId::RedactionGateSaveFailed,
MessageId::RedactionGateTitle,
MessageId::RedactionGateQuestion,
MessageId::RedactionGateDangerNotice,
MessageId::RedactionGateRisk,
MessageId::RedactionGateEffect,
MessageId::RedactionGateRollbackHint,
MessageId::RedactionGateEnterHint,
MessageId::RedactionGateActionConfirm,
MessageId::RedactionGateActionKeep,
MessageId::RedactionGateActionQuit,
MessageId::RedactionGateConfirmTitle,
MessageId::RedactionGateConfirmQuestion,
MessageId::RedactionGateActionBack,
MessageId::OnboardOfflineOption,
MessageId::OnboardOfflineNotice,
MessageId::OnboardReadyTitle,
MessageId::OnboardReadyLead,
MessageId::OnboardReadyStart,
MessageId::OnboardReadyCustomize,
MessageId::OnboardSeedCodeProject,
MessageId::OnboardSeedFolder,
MessageId::SetupWizardTitle,
MessageId::SetupWizardWhy,
MessageId::SetupWizardProgress,
MessageId::SetupActionBack,
MessageId::SetupActionContinue,
MessageId::SetupActionSkip,
MessageId::SetupActionRetry,
MessageId::SetupActionScrollBody,
MessageId::SetupActionGuided,
MessageId::SetupActionTuneGuided,
MessageId::SetupActionModelDraft,
MessageId::SetupActionFreeform,
MessageId::SetupActionKeepExisting,
MessageId::SetupActionUseRecommended,
MessageId::SetupActionCustomize,
MessageId::SetupActionProvider,
MessageId::SetupActionModel,
MessageId::SetupActionFleet,
MessageId::SetupActionHotbar,
MessageId::SetupActionRemote,
MessageId::SetupActionMode,
MessageId::SetupActionConfig,
MessageId::SetupActionRuntimePreset,
MessageId::SetupActionApplyRuntimePreset,
MessageId::SetupActionUseBundled,
MessageId::SetupActionDefer,
MessageId::SetupActionCancel,
MessageId::SetupStatusNotStarted,
MessageId::SetupStatusRecommended,
MessageId::SetupStatusOptional,
MessageId::SetupStatusDeferred,
MessageId::SetupStatusInProgress,
MessageId::SetupStatusNeedsAction,
MessageId::SetupStatusVerified,
MessageId::SetupStatusSkipped,
MessageId::SetupStatusFailed,
MessageId::SetupStepLanguageTitle,
MessageId::SetupStepLanguageWhy,
MessageId::SetupStepProviderModelTitle,
MessageId::SetupStepProviderModelWhy,
MessageId::SetupStepTrustSandboxTitle,
MessageId::SetupStepTrustSandboxWhy,
MessageId::SetupStepOperateFleetTitle,
MessageId::SetupStepOperateFleetWhy,
MessageId::SetupStepToolsMcpTitle,
MessageId::SetupStepToolsMcpWhy,
MessageId::SetupStepHotbarTitle,
MessageId::SetupStepHotbarWhy,
MessageId::SetupStepRemoteRuntimeTitle,
MessageId::SetupStepRemoteRuntimeWhy,
MessageId::SetupStepPersistenceTitle,
MessageId::SetupStepPersistenceWhy,
MessageId::SetupStepConstitutionTitle,
MessageId::SetupStepConstitutionWhy,
MessageId::SetupStepVerificationTitle,
MessageId::SetupStepVerificationWhy,
MessageId::SetupCheckpointDoneBundled,
MessageId::SetupCheckpointDoneGuided,
MessageId::SetupCheckpointDoneKept,
MessageId::SetupCheckpointDeferred,
MessageId::SetupStepSkipped,
MessageId::SetupStepRetryRecorded,
MessageId::SetupLanguageReviewed,
MessageId::SetupConstitutionChoiceLabel,
MessageId::SetupConstitutionSourceLabel,
MessageId::SetupConstitutionValidityLabel,
MessageId::SetupConstitutionPreviewLabel,
MessageId::SetupConstitutionExistingLabel,
MessageId::SetupConstitutionExpertOverrideLabel,
MessageId::SetupConstitutionGuidedHint,
MessageId::SetupConstitutionGuidedAnswersHint,
MessageId::SetupConstitutionExistingDefaultDetail,
MessageId::SetupConstitutionRepairDefaultDetail,
MessageId::SetupConstitutionPurposeLabel,
MessageId::SetupConstitutionAutonomyLabel,
MessageId::SetupConstitutionEvidenceLabel,
MessageId::SetupConstitutionCommunicationLabel,
MessageId::SetupConstitutionPrivacyLabel,
MessageId::SetupConstitutionPrinciplesLabel,
MessageId::SetupCardRouteLabel,
MessageId::SetupCardModelLabel,
MessageId::SetupCardAuthLabel,
MessageId::SetupCardHealthLabel,
MessageId::SetupCardIntentLabel,
MessageId::SetupCardApprovalLabel,
MessageId::SetupCardShellLabel,
MessageId::SetupCardTrustLabel,
MessageId::SetupCardSandboxLabel,
MessageId::SetupCardNetworkLabel,
MessageId::SetupOperateRuntimeLabel,
MessageId::SetupOperateRosterLabel,
MessageId::SetupOperateConcurrencyLabel,
MessageId::SetupOperateReadinessLabel,
MessageId::SetupOperateReviewHint,
MessageId::SetupOperateReviewed,
MessageId::SetupOperateNeedsActionSaved,
MessageId::SetupHotbarBindingsLabel,
MessageId::SetupHotbarActionsLabel,
MessageId::SetupHotbarReviewHint,
MessageId::SetupHotbarReviewed,
MessageId::SetupToolsMcpServersLabel,
MessageId::SetupToolsMcpSkillsLabel,
MessageId::SetupToolsMcpToolsLabel,
MessageId::SetupToolsMcpPluginsLabel,
MessageId::SetupToolsMcpHotbarLabel,
MessageId::SetupToolsMcpReviewHint,
MessageId::SetupToolsMcpReviewed,
MessageId::SetupToolsMcpNeedsActionSaved,
MessageId::SetupToolsMcpPreviewTitle,
MessageId::SetupToolsMcpOnRampText,
MessageId::SetupToolsMcpDshLabel,
MessageId::SetupToolsMcpDshRow,
MessageId::SetupRemoteCloudsLabel,
MessageId::SetupRemoteBridgesLabel,
MessageId::SetupRemoteProvidersLabel,
MessageId::SetupRemoteModeLabel,
MessageId::SetupRemoteModeLocalOnly,
MessageId::SetupRemoteModeRuntimeApi,
MessageId::SetupRemoteModeMobileLan,
MessageId::SetupRemoteModeChatBridge,
MessageId::SetupRemoteStatusDisabled,
MessageId::SetupRemoteStatusReady,
MessageId::SetupRemoteStatusNeedsAction,
MessageId::SetupRemoteReviewHint,
MessageId::SetupRemotePreviewTitle,
MessageId::SetupRemoteReviewed,
MessageId::SetupPersistenceHomeLabel,
MessageId::SetupPersistenceConfigLabel,
MessageId::SetupPersistenceStateLabel,
MessageId::SetupPersistenceConstitutionLabel,
MessageId::SetupPersistenceMemoryLabel,
MessageId::SetupPersistenceNotesLabel,
MessageId::SetupPersistenceReviewHint,
MessageId::SetupPersistenceReviewed,
MessageId::SetupProviderModelReadyHint,
MessageId::SetupProviderModelNeedsActionHint,
MessageId::SetupProviderModelReviewed,
MessageId::SetupProviderModelNeedsActionSaved,
MessageId::SetupRuntimePostureBoundary,
MessageId::SetupProjectPermissionsInvalid,
MessageId::SetupProjectPermissionsOverride,
MessageId::SetupRuntimePostureReviewHint,
MessageId::SetupRuntimePostureReviewed,
MessageId::SetupRuntimePresetSelectedLabel,
MessageId::SetupRuntimePresetDiffLabel,
MessageId::SetupRuntimePresetAskFirstTitle,
MessageId::SetupRuntimePresetAskFirstDescription,
MessageId::SetupRuntimePresetNormalAgentTitle,
MessageId::SetupRuntimePresetNormalAgentDescription,
MessageId::SetupRuntimePresetHighTrustTitle,
MessageId::SetupRuntimePresetHighTrustDescription,
MessageId::SetupRuntimePresetPreviewTitle,
MessageId::SetupRuntimePresetSafetyFloor,
MessageId::SetupRuntimePresetApplyHint,
MessageId::SetupRuntimePresetApplied,
MessageId::SetupRuntimeProjectOverrideLabel,
MessageId::SetupRuntimeProjectOverrideNone,
MessageId::SetupReportFirstRunLabel,
MessageId::SetupReportUpdateLabel,
MessageId::SetupReportOperateLabel,
MessageId::SetupReportSourceLabel,
MessageId::SetupReportAutonomyLabel,
MessageId::SetupReportRuntimePostureLabel,
MessageId::SetupReportPersisted,
MessageId::SetupReportInherited,
MessageId::SetupReportReady,
MessageId::SetupReportRequired,
MessageId::SetupReportOptional,
MessageId::SetupReportRowsLabel,
MessageId::SetupReportNextActionLabel,
MessageId::SetupReportNextActionNone,
MessageId::SetupReportNextActionConstitution,
MessageId::SetupReportNextActionProvider,
MessageId::SetupReportNextActionRuntime,
MessageId::SetupReportNextActionOperate,
MessageId::SetupReportNextActionRequired,
MessageId::SetupReportRecorded,
// Context menu.
MessageId::CtxMenuTitle,
MessageId::CtxMenuCopySelection,
MessageId::CtxMenuCopySelectionDesc,
MessageId::CtxMenuOpenSelection,
MessageId::CtxMenuOpenSelectionDesc,
MessageId::CtxMenuClearSelection,
MessageId::CtxMenuOpenDetails,
MessageId::CtxMenuCopyMessage,
MessageId::CtxMenuCopyMessageDesc,
MessageId::CtxMenuOpenInEditor,
MessageId::CtxMenuOpenInEditorDesc,
MessageId::CtxMenuShowCell,
MessageId::CtxMenuShowCellDesc,
MessageId::CtxMenuHideCell,
MessageId::CtxMenuHideCellDesc,
MessageId::CtxMenuShowHidden,
MessageId::CtxMenuShowHiddenDesc,
MessageId::CtxMenuPaste,
MessageId::CtxMenuPasteDesc,
MessageId::CtxMenuCmdPalette,
MessageId::CtxMenuCmdPaletteDesc,
MessageId::CtxMenuContextInspector,
MessageId::CtxMenuContextInspectorDesc,
MessageId::CtxMenuHelp,
MessageId::CtxMenuHelpDesc,
MessageId::CtxMenuWindowPin,
MessageId::CtxMenuWindowUnpin,
MessageId::CtxMenuWindowPinDesc,
MessageId::CtxMenuRunCommand,
MessageId::CtxMenuOpen,
MessageId::CtxMenuFocusAgent,
MessageId::CtxMenuFocusAgentDesc,
MessageId::CtxMenuCopyId,
MessageId::CtxMenuCopyRow,
MessageId::CtxMenuStopAgent,
MessageId::CtxMenuStopWork,
MessageId::CtxMenuConfirmArmed,
MessageId::CtxMenuEditorRefused,
MessageId::CmdPinDescription,
MessageId::WindowPinActive,
MessageId::WindowPinReleased,
MessageId::WindowPinFailed,
MessageId::FanoutCounts,
MessageId::AppModeAgent,
MessageId::AppModeAuto,
MessageId::AppModeYolo,
MessageId::AppModePlan,
MessageId::AppModeOperate,
MessageId::AppModeAgentHint,
MessageId::AppModeAutoHint,
MessageId::AppModePlanHint,
MessageId::AppModeYoloHint,
MessageId::AppModeOperateHint,
MessageId::VimModeNormal,
MessageId::VimModeInsert,
MessageId::VimModeVisual,
MessageId::ApprovalEffectReadsOnly,
MessageId::ApprovalEffectChangesFiles,
MessageId::ApprovalRiskDestructive,
MessageId::ApprovalEffectRunsCommand,
MessageId::ApprovalEffectUsesNetwork,
MessageId::ApprovalEffectConnectedApp,
MessageId::ApprovalEffectStartsAgent,
MessageId::ApprovalEffectUnclassified,
MessageId::ApprovalCategorySafe,
MessageId::ApprovalCategoryFileWrite,
MessageId::ApprovalCategoryShell,
MessageId::ApprovalCategoryNetwork,
MessageId::ApprovalCategoryMcpRead,
MessageId::ApprovalCategoryMcpAction,
MessageId::ApprovalCategoryAgent,
MessageId::ApprovalCategoryUnknown,
MessageId::ApprovalFieldType,
MessageId::ApprovalFieldAbout,
MessageId::ApprovalFieldImpact,
MessageId::ApprovalFieldParams,
MessageId::ApprovalOptionApproveOnce,
MessageId::ApprovalOptionApproveAlways,
MessageId::ApprovalOptionAllowExactRepo,
MessageId::ApprovalSaveAskRuleHint,
MessageId::ApprovalOptionDeny,
MessageId::ApprovalOptionAbortTurn,
MessageId::ApprovalBlockTitle,
MessageId::ApprovalControlsHint,
MessageId::ApprovalOwnerHeader,
MessageId::ApprovalGoToAgent,
MessageId::UserInputActionRequired,
MessageId::UserInputQuestionProgress,
MessageId::UserInputOtherLabel,
MessageId::UserInputOtherDescription,
MessageId::UserInputConfirmLabel,
MessageId::UserInputConfirmDescription,
MessageId::UserInputCustomPrompt,
MessageId::UserInputCustomPlaceholder,
MessageId::UserInputHintSubmit,
MessageId::UserInputHintBack,
MessageId::UserInputHintMove,
MessageId::UserInputHintToggle,
MessageId::UserInputHintSelectConfirm,
MessageId::UserInputHintCancel,
MessageId::UserInputHintQuickPick,
MessageId::UserInputHintConfirm,
MessageId::UserInputHintDigit,
MessageId::ApprovalControlsHintChild,
MessageId::PendingApprovalInAgent,
MessageId::ApprovalTruncationHint,
MessageId::ApprovalAsksWithoutGit,
MessageId::ApprovalFullAccessPolicyBlocked,
MessageId::ApprovalChooseHint,
MessageId::ApprovalChooseAction,
MessageId::ApprovalIntentLabel,
MessageId::ApprovalMoreLines,
MessageId::ApprovalProceedQuestion,
MessageId::ApprovalFieldWhy,
MessageId::ApprovalFieldStop,
MessageId::ApprovalWhyBody,
MessageId::ApprovalStopBody,
MessageId::ApprovalWhyCompactBody,
MessageId::ApprovalWorkflowApprove,
MessageId::ApprovalWorkflowEditPlan,
MessageId::ApprovalWorkflowCancel,
MessageId::ApprovalFieldSave,
MessageId::ApprovalSaveSummaryAllow,
MessageId::ApprovalSaveSummaryAsk,
MessageId::ApprovalSaveSummaryDeny,
MessageId::ApprovalSaveMore,
MessageId::ApprovalToolParamsTitle,
MessageId::ApprovalAutoDeniedSession,
MessageId::ElevationTitleRequired,
MessageId::ElevationFieldTool,
MessageId::ElevationFieldCmd,
MessageId::ElevationFieldReason,
MessageId::ElevationImpactHeader,
MessageId::ElevationImpactNetwork,
MessageId::ElevationImpactWrite,
MessageId::ElevationImpactFullAccess,
MessageId::ElevationPromptProceed,
MessageId::ElevationOptionNetwork,
MessageId::ElevationOptionWrite,
MessageId::ElevationOptionFullAccess,
MessageId::ElevationOptionAbort,
MessageId::ElevationOptionNetworkDesc,
MessageId::ElevationOptionWriteDesc,
MessageId::ElevationOptionFullAccessDesc,
MessageId::ElevationOptionAbortDesc,
MessageId::ContextAutoCompacting,
MessageId::ContextManualCompacting,
MessageId::ContextCompactionQueued,
MessageId::ContextCompactionAlreadyRunning,
MessageId::ContextCompactionQueueFull,
MessageId::ContextCompactionQueueClosed,
MessageId::ContextCompactionRouteInvalid,
MessageId::ContextCompactionStoppedOnEngineSwitch,
MessageId::ContextPurgeAbandonedOnEngineSwitch,
MessageId::CtxInspTitle,
MessageId::CtxInspSessionContext,
MessageId::CtxInspSystemPrompt,
MessageId::CtxInspReferences,
MessageId::CtxInspRecentTools,
MessageId::CtxInspToolSchemaCosts,
MessageId::CtxInspModel,
MessageId::CtxInspWorkspace,
MessageId::CtxInspSession,
MessageId::CtxInspContext,
MessageId::CtxInspTranscript,
MessageId::CtxInspWorkspaceStatus,
MessageId::CtxInspNotSampledYet,
MessageId::CtxInspOk,
MessageId::CtxInspHigh,
MessageId::CtxInspCritical,
MessageId::CtxInspIncluded,
MessageId::CtxInspAttached,
MessageId::CtxInspNotIncluded,
MessageId::CtxInspOutputCaptured,
MessageId::CtxInspNoOutputYet,
MessageId::CtxInspNoSystemPrompt,
MessageId::CtxInspNoReferences,
MessageId::CtxInspNoToolActivity,
MessageId::CtxInspVHint,
MessageId::CtxInspCells,
MessageId::CtxInspApiMessages,
MessageId::CtxInspActive,
MessageId::CtxInspCell,
MessageId::CtxInspMoreReferences,
MessageId::CtxInspStablePrefix,
MessageId::CtxInspVolatileWorkingSet,
MessageId::CtxInspFirstLine,
MessageId::CtxInspTotal,
MessageId::CtxInspTextPromptLayers,
MessageId::CtxInspSingleTextBlob,
MessageId::CtxInspBlocks,
MessageId::CtxInspBlock,
MessageId::CtxInspTokens,
MessageId::CtxInspLayers,
MessageId::CtxInspNone,
MessageId::CtxInspEmpty,
MessageId::CtxInspCacheFriendly,
MessageId::CtxInspChangesByTurn,
MessageId::CtxInspStablePrefixOnly,
MessageId::CtxInspCacheTip,
MessageId::ToolFamilyRead,
MessageId::ToolFamilyPatch,
MessageId::ToolFamilyRun,
MessageId::ToolFamilyFind,
MessageId::ToolFamilyDelegate,
MessageId::ToolFamilyFanout,
MessageId::ToolFamilyRlm,
MessageId::ToolFamilyVerify,
MessageId::ToolFamilyThink,
MessageId::ToolFamilyGeneric,
MessageId::ToolReceiptDone,
MessageId::ToolReceiptLinesSingular,
MessageId::ToolReceiptLinesPlural,
MessageId::ToolDescriptionNote,
MessageId::ToolStatusWaitingForApproval,
MessageId::ToolStatusQueued,
MessageId::CmdConstitutionAccountApplies,
MessageId::CmdConstitutionAccountSignedOut,
MessageId::CmdConstitutionAccountCheckFailed,
MessageId::CmdConstitutionLocalStandby,
MessageId::CtxInspPersonalConstitution,
MessageId::CtxInspConstitutionLocal,
MessageId::CtxInspConstitutionAccount,
MessageId::CtxInspConstitutionWithdrawn,
MessageId::TodoStatusPending,
MessageId::TodoStatusInProgress,
MessageId::TodoStatusCompleted,
MessageId::TodoStatusCancelled,
MessageId::CmdVoiceDescription,
MessageId::CmdVoiceSendDescription,
MessageId::CmdVoiceControlDescription,
MessageId::VoiceEnabled,
MessageId::VoiceDisabled,
MessageId::VoiceSendEnabled,
MessageId::VoiceSendDisabled,
MessageId::VoiceControlEnabled,
MessageId::VoiceControlDisabled,
MessageId::VoiceErrNoAuth,
MessageId::VoiceErrNoRecorder,
MessageId::VoiceErrNetwork,
MessageId::VoiceErrEmptySend,
MessageId::VoiceErrTooShort,
MessageId::VoiceRecording,
MessageId::VoiceRecordingStopHint,
MessageId::VoiceProcessing,
MessageId::VoiceTranscribed,
MessageId::NotificationApprovalNeeded,
MessageId::NotificationInputNeeded,
MessageId::NotificationElevationNeeded,
MessageId::NotificationDecisionWebHint,
MessageId::NotificationTurnFailed,
MessageId::NotificationProviderFallback,
MessageId::ApprovalNeverPostureBlocked,
MessageId::ApprovalTimedOutDenied,
MessageId::NotificationWebApproved,
MessageId::NotificationWebDenied,
MessageId::NotificationInputSubmitFailed,
MessageId::NotificationTurnComplete,
MessageId::NotificationSubagentComplete,
MessageId::NotificationSubagentFailed,
MessageId::NotificationSubagentInterrupted,
MessageId::NotificationSubagentCancelled,
MessageId::NotificationSubagentBudgetExhausted,
MessageId::NotificationShellFinished,
MessageId::NotificationShellFailed,
MessageId::NotificationShellStopped,
MessageId::ShellWaitNoActive,
MessageId::ShellWaitInteractive,
MessageId::ShellWaitUnavailable,
MessageId::ShellWaitReleased,
MessageId::NotificationTaskFinished,
MessageId::NotificationTaskFailed,
MessageId::NotificationTaskStopped,
MessageId::NotificationBackgroundFinished,
MessageId::NotificationBackgroundMixed,
MessageId::BackgroundFinishedHeading,
MessageId::BackgroundFinishedHint,
MessageId::BackgroundOutcomeDone,
MessageId::BackgroundOutcomeFailed,
MessageId::BackgroundOutcomeCancelled,
MessageId::BackgroundOutcomeKilled,
MessageId::BackgroundOutcomeTimedOut,
MessageId::BackgroundExitCode,
MessageId::BackgroundQuiet,
MessageId::BackgroundUsingTool,
MessageId::BackgroundStep,
MessageId::BackgroundFilesChanged,
MessageId::NotificationBackgroundStopped,
MessageId::NotificationFullResultPointer,
MessageId::FooterWorkedChip,
MessageId::FooterPermissionKeyHint,
MessageId::ApprovalSummaryRunCommand,
MessageId::ApprovalSummaryUploadCredentials,
MessageId::ApprovalSummaryRunShell,
MessageId::ApprovalSummaryShellWait,
MessageId::ApprovalSummaryShellInput,
MessageId::ApprovalSummaryShellStop,
MessageId::ApprovalSummaryWritePath,
MessageId::ApprovalSummaryWriteFile,
MessageId::ApprovalSummaryEditPath,
MessageId::ApprovalSummaryEditFile,
MessageId::ApprovalSummaryEditPathMore,
MessageId::ApprovalSummaryApplyPatch,
MessageId::ApprovalSummaryReadPath,
MessageId::ApprovalSummaryReadFile,
MessageId::ApprovalSummaryListPath,
MessageId::ApprovalSummaryListWorkspace,
MessageId::ApprovalSummaryFetchUrl,
MessageId::ApprovalSummaryFetchPage,
MessageId::ApprovalSummarySearchQuery,
MessageId::ApprovalSummarySearchWeb,
MessageId::ApprovalSummaryImageQuery,
MessageId::ApprovalSummaryOpenTarget,
MessageId::ApprovalSummaryMore,
MessageId::ApprovalSummaryFollowLink,
MessageId::ApprovalSummaryFindOnPage,
MessageId::ApprovalSummaryScreenshot,
MessageId::ApprovalSummaryBrowse,
MessageId::ApprovalSummaryMcpTool,
MessageId::ApprovalSummaryUseName,
MessageId::ApprovalSummaryUseTool,
MessageId::FleetDraftTitle,
MessageId::FleetDraftHeader,
MessageId::SetupRemoteOnRampText,
MessageId::ApprovalDescSafe,
MessageId::ApprovalDescFileWrite,
MessageId::ApprovalDescShell,
MessageId::ApprovalDescNetwork,
MessageId::ApprovalDescMcpRead,
MessageId::ApprovalDescMcpAction,
MessageId::ApprovalDescAgent,
MessageId::ApprovalDescUnknown,
MessageId::ApprovalImpactSafe,
MessageId::ApprovalImpactFileWrite,
MessageId::ApprovalImpactShell,
MessageId::ApprovalImpactNetwork,
MessageId::ApprovalImpactMcpRead,
MessageId::ApprovalImpactMcpAction,
MessageId::ApprovalImpactAgent,
MessageId::ApprovalImpactUnknown,
MessageId::ApprovalImpactReads,
MessageId::ApprovalImpactWrites,
MessageId::ApprovalImpactTarget,
MessageId::ApprovalImpactConnectedApp,
MessageId::ApprovalImpactAgentType,
MessageId::ApprovalImpactPrimaryInput,
MessageId::ApprovalLabelCommand,
MessageId::ApprovalLabelDir,
MessageId::ApprovalLabelFile,
MessageId::ApprovalLabelPreview,
MessageId::ApprovalLabelProposedContent,
MessageId::ApprovalLabelReplaceThis,
MessageId::ApprovalLabelWithThis,
MessageId::ApprovalLabelReplacementContent,
MessageId::ApprovalLabelPath,
MessageId::ApprovalLabelTarget,
MessageId::ApprovalLabelInput,
MessageId::ApprovalLabelAction,
MessageId::ApprovalLabelType,
MessageId::ApprovalLabelPrompt,
MessageId::ApprovalLabelAbout,
MessageId::ApprovalLabelImpact,
MessageId::SetupConstitutionFileNotChecked,
MessageId::SetupConstitutionFileMissing,
MessageId::SetupConstitutionFileLoadedSelected,
MessageId::SetupConstitutionFileLoadedInactive,
MessageId::SetupConstitutionFileLoadedUnselected,
MessageId::SetupConstitutionFileEmpty,
MessageId::SetupConstitutionFileInvalid,
MessageId::SetupConstitutionFileUnreadable,
MessageId::SetupConstitutionFilePathError,
MessageId::SetupExpertOverrideNotChecked,
MessageId::SetupExpertOverrideMissing,
MessageId::SetupExpertOverrideActive,
MessageId::SetupExpertOverrideDisabled,
MessageId::SetupExpertOverrideEmpty,
MessageId::SetupExpertOverrideUnreadable,
MessageId::SetupExpertOverridePathError,
MessageId::SetupAutonomyUnspecified,
MessageId::SetupGuidedPurposeCoding,
MessageId::SetupGuidedPurposeResearch,
MessageId::SetupGuidedPurposeOperations,
MessageId::SetupGuidedPurposeMixed,
MessageId::SetupGuidedPurposeAboutCoding,
MessageId::SetupGuidedPurposeAboutResearch,
MessageId::SetupGuidedPurposeAboutOperations,
MessageId::SetupGuidedPurposeAboutMixed,
MessageId::SetupGuidedStyleCoding,
MessageId::SetupGuidedStyleResearch,
MessageId::SetupGuidedStyleOperations,
MessageId::SetupGuidedStyleMixed,
MessageId::SetupGuidedEvidenceAssumptions,
MessageId::SetupGuidedEvidenceTestsAndReceipts,
MessageId::SetupGuidedEvidenceReleaseReceipts,
MessageId::SetupGuidedNotes,
MessageId::LaunchStartTitle,
MessageId::LaunchResumeConfirm,
MessageId::LaunchResumeConfirmTitle,
MessageId::LaunchResumeConfirmBody,
MessageId::LaunchResumeConfirmResume,
MessageId::LaunchResumeConfirmCancel,
MessageId::LaunchWorkDescription,
MessageId::LaunchChatDescription,
MessageId::LaunchWorkspaceGitReady,
MessageId::LaunchWorkspaceFolderReady,
MessageId::LaunchProviderConfigured,
MessageId::LaunchProviderSetupNeeded,
MessageId::LaunchGroupContinue,
MessageId::LaunchGroupMore,
MessageId::LaunchWorkspaceGitShort,
MessageId::LaunchWorkspaceFolderShort,
MessageId::LaunchProviderConfiguredShort,
MessageId::LaunchProviderSetupShort,
MessageId::LaunchMenuChangelog,
MessageId::LaunchWorktreePrompt,
MessageId::LaunchWorktreeNeedsGit,
MessageId::LaunchWorktreeNameLabel,
MessageId::LaunchHintMove,
MessageId::LaunchHintOpen,
MessageId::LaunchTipFlags,
MessageId::LaunchSavedSessionSingular,
MessageId::LaunchSavedSessionsPlural,
MessageId::LaunchCreatingWorktree,
MessageId::LaunchWorktreeFailed,
MessageId::LaunchWorktreeCreated,
MessageId::LaunchNoSavedSessions,
MessageId::LaunchNewSession,
MessageId::LaunchRecentHeading,
MessageId::LaunchRecentResumeHint,
MessageId::LaunchHelpLine,
MessageId::LaunchSeeAllSessions,
MessageId::LaunchNoRecentSessions,
MessageId::LaunchResumeFailed,
MessageId::LaunchNoModelConnected,
MessageId::DispatchNotSentNoModel,
MessageId::DispatchNotSentSaveKey,
MessageId::DispatchNotSentStatus,
MessageId::AuthRejectedRecovery,
MessageId::ProviderKeyRejected,
MessageId::ProviderKeyForbidden,
MessageId::ProviderKeyUnreachable,
MessageId::ProviderKeyCheckFailed,
MessageId::LocalModelAdopted,
MessageId::ProviderPickerNotReopened,
MessageId::LaunchRunCommand,
MessageId::LaunchMcpConnectedOne,
MessageId::LaunchMcpConnectedMany,
MessageId::LaunchMcpNeedsSignInOne,
MessageId::LaunchMcpNeedsSignInMany,
MessageId::LaunchMenuNewWorktree,
MessageId::LaunchMenuResume,
MessageId::LaunchMenuQuit,
MessageId::LaunchNoticeClaude,
MessageId::ReceiptSessionHooks,
MessageId::PhaseIdle,
MessageId::PhaseDraft,
MessageId::PhaseWorking,
MessageId::PhaseReasoning,
MessageId::PhaseReading,
MessageId::PhaseUsingTool,
MessageId::PhaseSubagents,
MessageId::PhaseVerifying,
MessageId::PhaseWaitingOnYou,
MessageId::PhaseDone,
MessageId::PhaseFailed,
MessageId::PhaseFinishing,
MessageId::ChipModeAct,
MessageId::ChipModePlan,
MessageId::ChipModeOperate,
MessageId::ChipPermissionReadOnly,
MessageId::ChipPermissionAsk,
MessageId::ChipPermissionAuto,
MessageId::ChipPermissionAcceptEdits,
MessageId::ChipPermissionFullAccess,
MessageId::ChipPermissionNever,
MessageId::PermissionsChangedReceipt,
MessageId::FooterHintKeys,
MessageId::FooterHintOutput,
MessageId::FooterHintContext,
MessageId::InfoLineHelp,
MessageId::InfoLineContext,
MessageId::InfoLineTtft,
MessageId::InfoLinePeak,
MessageId::InfoLineOffPeak,
MessageId::InfoLineWhales,
MessageId::InfoLineAutomation,
MessageId::InfoLineNotConnected,
MessageId::InfoLineThinking,
MessageId::SessionMetricsTurn,
MessageId::SessionMetricsTurns,
MessageId::SessionMetricsStep,
MessageId::SessionMetricsSteps,
MessageId::SessionMetricsLlm,
MessageId::SessionMetricsTools,
MessageId::SessionMetricsTtft,
MessageId::SessionMetricsTokensPerSecond,
MessageId::RuntimeStoreRecovered,
MessageId::ResumeExactSessionHint,
MessageId::ResumeSavedSessionHint,
MessageId::GoalProgressLabel,
MessageId::GoalProgressReceipt,
MessageId::GoalProgressNow,
MessageId::GoalProgressNext,
MessageId::CmdCacheUnpricedNote,
MessageId::SessionMetricsCache,
MessageId::SessionMetricsInput,
MessageId::SessionMetricsStatusLine,
MessageId::StatusLabelRoute,
MessageId::StatusLabelDirectory,
MessageId::StatusLabelProjectDocs,
MessageId::StatusLabelMode,
MessageId::StatusLabelSafety,
MessageId::StatusLabelMcp,
MessageId::StatusLabelFleet,
MessageId::StatusLabelContextWindow,
MessageId::StatusLabelWindowSource,
MessageId::StatusLabelWindowOverride,
MessageId::StatusLabelCatalog,
MessageId::StatusLabelCloudFacts,
MessageId::StatusLabelSession,
MessageId::StatusLabelSessionTokens,
MessageId::StatusLabelSessionCost,
MessageId::StatusLabelToolOutputs,
MessageId::StatusRouteSummary,
MessageId::StatusProjectDocsNone,
MessageId::StatusPostureSummary,
MessageId::StatusShellOn,
MessageId::StatusShellOff,
MessageId::StatusTrustedWorkspace,
MessageId::StatusWorkspace,
MessageId::StatusApprovalAsk,
MessageId::StatusApprovalAuto,
MessageId::StatusApprovalAcceptEdits,
MessageId::StatusApprovalFullAccess,
MessageId::StatusApprovalNever,
MessageId::StatusMcpConfigured,
MessageId::StatusFleetDrifted,
MessageId::StatusModelNotInRoster,
MessageId::StatusContextUsage,
MessageId::StatusContextSourceConfigured,
MessageId::StatusContextSourceConfiguredModel,
MessageId::StatusContextSourceProviderReported,
MessageId::StatusContextSourceKimiSafeFloor,
MessageId::StatusContextSourceCatalog,
MessageId::StatusContextSourceModelHint,
MessageId::StatusContextSourceFallback,
MessageId::StatusWindowOverrideProvider,
MessageId::StatusWindowOverrideActiveProvider,
MessageId::StatusSessionNotSaved,
MessageId::StatusSessionSummary,
MessageId::StatusSessionTokensSummary,
MessageId::StatusCacheNotReported,
MessageId::StatusCacheSummary,
MessageId::StatusToolRawPressure,
MessageId::StatusToolCompactReceipts,
MessageId::StatusToolArtifacts,
MessageId::StatusToolNone,
MessageId::StatusSafetyReadOnlyUnenforced,
MessageId::StatusSafetyReadOnly,
MessageId::StatusSafetyWorkspaceWriteUnenforcedNetworkOn,
MessageId::StatusSafetyWorkspaceWriteUnenforcedNetworkOff,
MessageId::StatusSafetyWorkspaceWriteNetworkOn,
MessageId::StatusSafetyWorkspaceWriteNetworkOff,
MessageId::StatusSafetyDisabled,
MessageId::StatusSafetyDisabledSetuidBlocked,
MessageId::StatusSafetyDisabledSetuidAllowed,
MessageId::StatusSafetyExternal,
MessageId::StatusPointers,
MessageId::EmptyStateNoGit,
MessageId::EmptyStateMcpLabel,
MessageId::EmptyStatePrompt,
MessageId::SessionsSurfaceTitle,
MessageId::SessionsPaneTitle,
MessageId::SessionsHistoryPaneTitle,
MessageId::SessionsActionResume,
MessageId::SessionsActionSearch,
MessageId::SessionsActionSort,
MessageId::SessionsActionRename,
MessageId::SessionsActionAllWorkspaces,
MessageId::SessionsActionDelete,
MessageId::SessionsActionClose,
MessageId::SessionsScopeSortHeader,
MessageId::SessionsEmptyTitle,
MessageId::SessionsEmptyHint,
MessageId::SessionsShowingAllWorkspaces,
MessageId::SessionsScopedToWorkspace,
MessageId::SessionsNewTitlePrompt,
MessageId::SessionsDeletePrompt,
MessageId::SessionsConfirmDelete,
MessageId::SessionsNewSessionTitle,
MessageId::SessionsOpenedHistory,
MessageId::SessionsSortStatus,
MessageId::SessionsSortRecent,
MessageId::SessionsSortName,
MessageId::SessionsSortSize,
MessageId::SessionsSearchPrompt,
MessageId::SessionsDeleteFailed,
MessageId::SessionsDeleteOpenHere,
MessageId::SessionsDeleteOpenElsewhere,
MessageId::SessionSaveFailed,
MessageId::SessionSaveFailedAtExit,
MessageId::SessionsDeleted,
MessageId::SessionsNoSelection,
MessageId::SessionsTitleLength,
MessageId::SessionsOpenFailed,
MessageId::SessionsLoadFailed,
MessageId::SessionsResumed,
MessageId::SessionsRenameFailed,
MessageId::SessionsRenamed,
MessageId::SessionsRailTitle,
MessageId::SessionsRailEmpty,
MessageId::SessionsRailBrowseAll,
MessageId::SessionsRailShowingCount,
MessageId::SessionsRailUnavailable,
MessageId::SessionsActionArchive,
MessageId::SessionsActionShowArchived,
MessageId::SessionsArchived,
MessageId::SessionsRestored,
MessageId::SessionsArchiveFailed,
MessageId::SessionsShowingArchived,
MessageId::SessionsHidingArchived,
MessageId::SessionsArchivedCompact,
MessageId::SessionsNoResults,
MessageId::SessionsDirectoryFailed,
MessageId::SessionsPreviewFailed,
MessageId::SessionsDeleteCancelled,
MessageId::SessionsRenameCancelled,
MessageId::SessionsShowingRange,
MessageId::SessionsMessageCountCompact,
MessageId::SessionsForkCompact,
MessageId::SessionsCurrentCompact,
MessageId::SessionsUnknownMode,
MessageId::SessionsPreviewTitle,
MessageId::SessionsPreviewId,
MessageId::SessionsPreviewUpdated,
MessageId::SessionsPreviewMessagesModel,
MessageId::SessionsPreviewMode,
MessageId::SessionsToolCall,
MessageId::SessionsToolError,
MessageId::SessionsToolResult,
MessageId::SessionsServerTool,
MessageId::SessionsImage,
MessageId::SessionsTimeJustNow,
MessageId::SessionsTimeMinutesAgo,
MessageId::SessionsTimeHoursAgo,
MessageId::SessionsTimeDaysAgo,
MessageId::CtxInspRowSystemPrompt,
MessageId::CtxInspRowMessages,
MessageId::CtxInspRowFree,
MessageId::CtxInspFreeTokensDetail,
MessageId::CtxInspDrillTitle,
MessageId::CtxInspSurfaceTitle,
MessageId::CtxInspActionSelect,
MessageId::CtxInspActionDrillDown,
MessageId::CtxInspActionClose,
MessageId::CtxInspUsedTokens,
MessageId::CtxInspAutoCompactAt,
MessageId::CtxInspRowTokens,
MessageId::CtxInspRowCompaction,
MessageId::CtxInspRowAnchors,
MessageId::CtxInspCompactionNever,
MessageId::CtxInspCompactionDetail,
MessageId::CtxInspCompactionRestored,
MessageId::CtxInspCompactionPathSummary,
MessageId::CtxInspCompactionPathPrune,
MessageId::CtxInspCompactionAssistantKept,
MessageId::CtxInspAnchorsNone,
MessageId::CtxInspAnchorsPresent,
MessageId::RouteSurfaceTitle,
MessageId::RouteBrowseCatalog,
MessageId::RouteActionType,
MessageId::RouteActionSearchAnyModel,
MessageId::RoutePanelHeader,
MessageId::RouteProviderLabel,
MessageId::RouteModelFirstAtomic,
MessageId::PickerActionMove,
MessageId::PickerActionSwitch,
MessageId::PickerActionApply,
MessageId::PickerActionAssignRoute,
MessageId::FleetRoutePickUnavailable,
MessageId::FleetRouteSaved,
MessageId::FleetRouteInherited,
MessageId::FleetRouteNotInCatalog,
MessageId::PickerActionSetStartupDefault,
MessageId::PickerActionPin,
MessageId::PickerActionFleet,
MessageId::PickerActionCancel,
MessageId::PickerActionClear,
MessageId::PickerActionClearSearch,
MessageId::PickerActionBrowseAll,
MessageId::PickerActionCustom,
MessageId::PickerActionJump,
MessageId::PickerActionEditKey,
MessageId::PickerActionModels,
MessageId::PickerActionUnavailable,
MessageId::PickerActionSetKey,
MessageId::PickerActionConfigured,
MessageId::RouteNoModels,
MessageId::RouteNoModelMatch,
MessageId::ProviderNoMatchesTitle,
MessageId::ProviderNoMatchesHint,
MessageId::ProviderNoConfiguredTitle,
MessageId::ProviderNoConfiguredHint,
MessageId::ProviderNoCatalogModels,
MessageId::ProviderExternalActionRevoke,
MessageId::ProviderExternalActionChoices,
MessageId::ProviderExternalActionReuseGrok,
MessageId::ProviderExternalHintCodexReview,
MessageId::ProviderExternalHintXaiReview,
MessageId::ProviderExternalHintXaiApiKey,
MessageId::XaiAuthChoiceTitle,
MessageId::XaiAuthChoiceIntro,
MessageId::XaiAuthChoiceApiKeyOption,
MessageId::XaiAuthChoiceDeviceOAuthOption,
MessageId::OrcarouterAuthChoiceTitle,
MessageId::OrcarouterAuthChoiceIntro,
MessageId::OrcarouterAuthChoiceApiKeyOption,
MessageId::OrcarouterAuthChoicePkceOption,
MessageId::ChatgptAuthChoiceTitle,
MessageId::ChatgptAuthChoiceIntro,
MessageId::ChatgptAuthChoicePkceOption,
MessageId::ChatgptAuthChoiceImportOption,
MessageId::ProviderExternalHintChatgptReview,
MessageId::ProviderExternalActionReuseCodex,
MessageId::ProviderExternalDetailScope,
MessageId::ProviderExternalDormant,
MessageId::ProviderExternalOwnerPath,
MessageId::ProviderExternalPinnedPathWarning,
MessageId::ToolProjectionWarning,
MessageId::SnapshotsDisabledTooLarge,
MessageId::SnapshotsDisabledTooManyFiles,
MessageId::SnapshotsDisabledUnsafeLocation,
MessageId::SnapshotsHistoryRepaired,
MessageId::SnapshotsFailing,
MessageId::SessionIdDivergedNotice,
MessageId::RuntimeStoreUnreadableNotice,
MessageId::RuntimeStoreUnwritableNotice,
MessageId::ProviderExternalSemanticsRevoke,
MessageId::ProviderExternalRevoke,
MessageId::ProviderExternalChoiceTitle,
MessageId::ProviderExternalActionChoose,
MessageId::ProviderExternalChoiceIntro,
MessageId::ProviderExternalDisabledLabel,
MessageId::ProviderExternalDisabledDetail,
MessageId::ProviderExternalReadOnlyLabel,
MessageId::ProviderExternalReadOnlyDetail,
MessageId::ProviderExternalReadOnlySemantics,
MessageId::ProviderExternalManagedLabel,
MessageId::ProviderExternalManagedDetail,
MessageId::ProviderExternalConfirmTitle,
MessageId::ProviderExternalActionGrant,
MessageId::ProviderExternalOwnerLabel,
MessageId::ProviderExternalExactPathLabel,
MessageId::ProviderExternalSemanticsLabel,
MessageId::ProviderExternalRejectUnsafe,
MessageId::ProviderExternalRevokeLabel,
MessageId::ProviderExternalRouteLabel,
MessageId::ProviderExternalCustodyLine,
MessageId::ProviderExternalBillingLine,
MessageId::ProviderExternalRevokeScope,
MessageId::ProviderExternalOwnerOnly,
MessageId::ProviderExternalPinnedPathChanged,
MessageId::ProviderExternalRevokeConfirmTitle,
MessageId::ProviderExternalGrantedToast,
MessageId::ProviderExternalSaveFailedToast,
MessageId::ProviderExternalRevokedToast,
MessageId::ProviderExternalRevokeFailedToast,
MessageId::ThemeSurfaceTitle,
MessageId::FleetRosterHeaderLabel,
MessageId::FleetRosterTabRoster,
MessageId::FleetRosterTabSetup,
MessageId::FleetRosterWorkers,
MessageId::FleetRosterMembersCount,
MessageId::FleetRosterOperatorFirst,
MessageId::FleetRosterOperatorRow,
MessageId::FleetRosterShadowBadgeProjectOverride,
MessageId::FleetRosterShadowBadgePersonalIgnored,
MessageId::FleetRosterShadowBadgePersonalOverride,
MessageId::FleetRosterShadowBadgeConfigOverride,
MessageId::FleetRosterLayersLabel,
MessageId::FleetRosterLayerWins,
MessageId::FleetRosterLayerIgnored,
MessageId::FleetReadyNotice,
MessageId::FleetProfileIdentityVerifyFailed,
MessageId::FleetProfileIdConflict,
MessageId::FleetProfileProviderUnconfigured,
MessageId::FleetModelAdded,
MessageId::FleetModelAddedAs,
MessageId::FleetModelAddedCreatedNote,
MessageId::FleetModelAddedSelectedNote,
MessageId::FleetModelRemoved,
MessageId::FleetModelRemovedRoles,
MessageId::FleetModelUnchanged,
MessageId::FleetModelReasonOperatorRoute,
MessageId::FleetModelReasonAlreadyPresent,
MessageId::FleetModelErrorNeedsRoute,
MessageId::FleetModelErrorNeedsRole,
MessageId::FleetReviewWorkspaceLimits,
MessageId::FleetReviewPolicy,
MessageId::FleetModelErrorNoSelection,
MessageId::FleetModelErrorOperatorRoute,
MessageId::FleetModelErrorNotInFleet,
MessageId::FleetModelsEmpty,
MessageId::FleetModelsHeader,
MessageId::FleetModelsBroken,
MessageId::FleetModelsFooter,
MessageId::FleetModelsFactPrice,
MessageId::FleetModelsFactContext,
MessageId::FleetModelsFactTools,
MessageId::FleetAddUsage,
MessageId::FleetAddProviderUnconfigured,
MessageId::FleetAddModelNotServed,
MessageId::FleetAddFailed,
MessageId::FleetRemoveUsage,
MessageId::FleetRemoveFailed,
MessageId::FleetToggleFailed,
MessageId::FleetDestStepTitle,
MessageId::FleetDestStepSubtitle,
MessageId::FleetDestProjectLabel,
MessageId::FleetDestPersonalLabel,
MessageId::FleetDestProjectSummary,
MessageId::FleetDestPersonalSummary,
MessageId::FleetDestProjectDescription,
MessageId::FleetDestPersonalDescription,
MessageId::FleetDestPathLine,
MessageId::FleetDestUnavailable,
MessageId::FleetDestReasonNoProjectConfig,
MessageId::FleetDestReasonWorkspaceMissing,
MessageId::FleetDestReasonHomeUnavailable,
MessageId::FleetDestWillReplace,
MessageId::FleetDestOverridesProject,
MessageId::FleetDestOverridesPersonal,
MessageId::FleetDestOverridesBuiltIn,
MessageId::FleetSavesToChip,
MessageId::FleetSavesToUndecided,
MessageId::FleetActionSaveProject,
MessageId::FleetActionSavePersonal,
MessageId::FleetActionReplaceProject,
MessageId::FleetActionReplacePersonal,
MessageId::FleetActionConfirmReplace,
MessageId::FleetActionChangeDestination,
MessageId::FleetActionBack,
MessageId::FleetReviewSavesTo,
MessageId::FleetModelRowBlockedNotice,
MessageId::FleetDestProjectDisabledSave,
MessageId::WorkflowStatusWaiting,
MessageId::WorkflowStatusDegraded,
MessageId::WorkflowRunFailedToast,
MessageId::WorkflowDebrief,
MessageId::WorkflowDispatchFailureLine,
MessageId::WorkflowDispatchFailuresOmitted,
MessageId::WorkflowDispatchFallbackTask,
MessageId::WorkflowTranscriptDetails,
MessageId::WorkflowReceiptRole,
MessageId::WorkflowReceiptReasoning,
MessageId::WorkflowReceiptVia,
MessageId::WorkflowReceiptTokens,
MessageId::WorkflowReceiptTools,
MessageId::WorkflowReceiptDuration,
MessageId::WorkflowReceiptUnknown,
MessageId::WorkflowReceiptProviderReported,
MessageId::WorkflowReceiptEstimated,
MessageId::SidebarTasksLabel,
MessageId::TaskOwnershipUnverified,
MessageId::TaskInventoryUnavailable,
MessageId::SidebarTodoLabel,
MessageId::SidebarStopControl,
MessageId::SidebarDestructiveArmed,
MessageId::WorkSurfaceTodoProgress,
MessageId::WorkSurfaceStopConfirmHint,
MessageId::TerminalDockStarting,
MessageId::TerminalDockControls,
MessageId::TerminalDockEmpty,
MessageId::TerminalDockUnsupported,
MessageId::TerminalDockLost,
MessageId::TerminalDockDropped,
MessageId::TerminalDockError,
MessageId::TerminalDockPasteRefused,
MessageId::TerminalDockExited,
MessageId::TerminalDockLive,
MessageId::CoordinationWorkTitle,
MessageId::CoordinationSummaryDecisions,
MessageId::CoordinationSummaryContentions,
MessageId::CoordinationSummaryReconciled,
MessageId::CoordinationSchema,
MessageId::CoordinationSequence,
MessageId::CoordinationPerSectionLimit,
MessageId::CoordinationDecisionsHeading,
MessageId::CoordinationNone,
MessageId::CoordinationNoneValue,
MessageId::CoordinationStatus,
MessageId::CoordinationOwner,
MessageId::CoordinationVersion,
MessageId::CoordinationWriteClaimsHeading,
MessageId::CoordinationIsolated,
MessageId::CoordinationSharedWorkspace,
MessageId::CoordinationPaths,
MessageId::CoordinationContracts,
MessageId::CoordinationContentionsHeading,
MessageId::CoordinationClaimant,
MessageId::CoordinationDisposition,
MessageId::CoordinationNeutralReconciliationHeading,
MessageId::CoordinationCandidates,
MessageId::CoordinationRetry,
MessageId::CoordinationReviewer,
MessageId::CoordinationVerifier,
MessageId::CoordinationVerification,
MessageId::CoordinationContextProjectionsHeading,
MessageId::CoordinationContextDecisions,
MessageId::CoordinationBytes,
MessageId::CoordinationDeduplicated,
MessageId::CoordinationOmitted,
MessageId::CoordinationActiveHotPathsHeading,
MessageId::CoordinationActiveClaims,
MessageId::CoordinationMetricsNoteHeading,
MessageId::CoordinationMetricsNoAuthoritativeSource,
MessageId::CoordinationStatusProposed,
MessageId::CoordinationStatusAccepted,
MessageId::CoordinationStatusSuperseded,
MessageId::ComposerSlashMenuHint,
MessageId::ApprovalRepoLawBadge,
MessageId::ApprovalRepoLawTitle,
MessageId::ApprovalRepoLawWarning,
MessageId::ApprovalRepoLawRuleLabel,
MessageId::FilePickerMatchSingular,
MessageId::FilePickerMatchesPlural,
MessageId::FilePickerScanning,
MessageId::BehavioralTipPlanning,
MessageId::BehavioralTipBackgroundReceipt,
MessageId::BehavioralTipClearedInput,
MessageId::BehavioralTipMcpValidation,
MessageId::BehavioralTipRepeatedCommand,
MessageId::BehavioralTipDurableStateWritten,
MessageId::BehavioralTipTodoWrite,
MessageId::ConfigLabelContextualTips,
MessageId::ConfigHintContextualTips,
MessageId::ContextualTipsNotSaved,
MessageId::SettingLockedDuringTurn,
MessageId::SettingSubjectMode,
MessageId::SettingSubjectThinking,
MessageId::SettingSubjectModel,
MessageId::SettingSubjectModelAndThinking,
MessageId::SettingSubjectProvider,
MessageId::SettingSubjectPermissions,
MessageId::ThinkingControlledByAutoRouting,
MessageId::SavedAsStartupDefault,
MessageId::ModeAlreadyActiveSavedAsDefault,
MessageId::StartupDefaultNotSaved,
MessageId::RouteSaveNothingPending,
MessageId::RouteSaveNoTeamSelected,
MessageId::RouteSaveTeamUpdated,
MessageId::RouteSaveTeamUpdateFailed,
MessageId::RouteSaveTeamUpdateFailedMoved,
MessageId::RouteSaveTeamCreateFailed,
MessageId::RouteSaveSelectedNote,
MessageId::RouteSaveSelectionFailedNote,
MessageId::RouteSaveSavedAsNewTeam,
MessageId::RouteSaveFailed,
MessageId::RouteSaveRouteNoLongerActive,
MessageId::RouteSaveRememberedDefault,
MessageId::StartupDefaultSubjectMode,
MessageId::StartupDefaultSubjectThinking,
MessageId::StartupDefaultSubjectModel,
MessageId::StartupDefaultSubjectAll,
MessageId::AutomationUsage,
MessageId::AutomationManagerUnavailable,
MessageId::AutomationListFailed,
MessageId::AutomationActionFailed,
MessageId::AutomationEmpty,
MessageId::AutomationListHeading,
MessageId::AutomationScopeNote,
MessageId::AutomationNoun,
MessageId::AutomationStatusLabel,
MessageId::AutomationStatusActive,
MessageId::AutomationStatusPaused,
MessageId::AutomationRunStatusQueued,
MessageId::AutomationRunStatusRunning,
MessageId::AutomationRunStatusCompleted,
MessageId::AutomationRunStatusFailed,
MessageId::AutomationRunStatusCanceled,
MessageId::AutomationActionInspect,
MessageId::AutomationActionPause,
MessageId::AutomationActionResume,
MessageId::AutomationActionDelete,
MessageId::AutomationActionRun,
MessageId::AutomationActionCancel,
MessageId::AutomationActionPaused,
MessageId::AutomationActionResumed,
MessageId::AutomationNextLabel,
MessageId::AutomationNameLabel,
MessageId::AutomationEditorNew,
MessageId::AutomationEditorEdit,
MessageId::AutomationEditorSchedule,
MessageId::AutomationEditorDaily,
MessageId::AutomationEditorWeekly,
MessageId::AutomationEditorHourly,
MessageId::AutomationEditorOnce,
MessageId::AutomationEditorCustom,
MessageId::AutomationEditorTime,
MessageId::AutomationEditorDate,
MessageId::AutomationEditorDays,
MessageId::AutomationEditorLocalTime,
MessageId::AutomationEditorProvider,
MessageId::AutomationEditorDefaultModel,
MessageId::AutomationEditorInheritedProvider,
MessageId::AutomationEditorEnabled,
MessageId::AutomationEditorControls,
MessageId::AutomationEditorPromptControls,
MessageId::AutomationEditorSaveFailed,
MessageId::AutomationEditorBusy,
MessageId::AutomationEditorSaved,
MessageId::AutomationEditorPreviewUnavailable,
MessageId::AutomationEditorConflict,
MessageId::AutomationEditorInvalidWorkspace,
MessageId::AutomationEditorModelControls,
MessageId::AutomationEditorPausedPreview,
MessageId::AutomationEditorInvalidSchedule,
MessageId::AutomationEditorMonday,
MessageId::AutomationEditorTuesday,
MessageId::AutomationEditorWednesday,
MessageId::AutomationEditorThursday,
MessageId::AutomationEditorFriday,
MessageId::AutomationEditorSaturday,
MessageId::AutomationEditorSunday,
MessageId::AutomationPromptLabel,
MessageId::AutomationCwdLabel,
MessageId::AutomationModeLabel,
MessageId::AutomationAllowShellLabel,
MessageId::AutomationTrustModeLabel,
MessageId::AutomationAutoApproveLabel,
MessageId::AutomationRruleLabel,
MessageId::AutomationDeliveryLabel,
MessageId::AutomationLastLabel,
MessageId::AutomationRecentRunsLabel,
MessageId::AutomationNoRuns,
MessageId::AutomationRunsUnavailable,
MessageId::AutomationTaskLabel,
MessageId::AutomationDeletePreview,
MessageId::AutomationDeleteConfirmationStale,
MessageId::AutomationBandScheduled,
MessageId::AutomationReceiptFired,
MessageId::AutomationReceiptStarted,
MessageId::AutomationReceiptCompleted,
MessageId::AutomationReceiptCoalesced,
MessageId::AutomationReceiptMissed,
MessageId::AutomationReceiptExpired,
MessageId::AutomationReceiptDeleted,
MessageId::AutomationRunLabel,
MessageId::AutomationDeletedRunsDetail,
MessageId::WhaleStateResting,
MessageId::WhaleStateThinking,
MessageId::WhaleStateWorking,
MessageId::WhaleStateWaiting,
MessageId::WhaleStateBlocked,
MessageId::WhaleStateOffline,
MessageId::AgentStatusParked,
MessageId::AgentStatusParkedRecovery,
MessageId::WhaleAnimalScout,
MessageId::WhaleAnimalPatch,
MessageId::WhaleAnimalHarbor,
MessageId::WhaleAnimalEcho,
MessageId::WhaleAnimalKeel,
MessageId::WhaleAnimalLantern,
MessageId::WhaleAnimalPlain,
MessageId::WhaleJobScout,
MessageId::WhaleJobPatch,
MessageId::WhaleJobHarbor,
MessageId::WhaleJobEcho,
MessageId::WhaleJobKeel,
MessageId::WhaleJobLantern,
MessageId::WhaleJobPlain,
MessageId::AgentFocusOpened,
MessageId::AgentFocusClosed,
MessageId::AgentFocusBanner,
MessageId::AgentFocusPosture,
MessageId::AgentFocusPostureWrites,
MessageId::AgentFocusPostureReadOnly,
MessageId::AgentFocusPostureNetwork,
MessageId::AgentFocusPostureNoNetwork,
MessageId::AgentFocusPostureShellFull,
MessageId::AgentFocusPostureShellReadOnly,
MessageId::AgentFocusPostureShellNone,
MessageId::AgentFocusComposerChip,
MessageId::AgentFocusPlaceholder,
MessageId::AgentFocusNoTranscript,
MessageId::AgentFocusOmitted,
MessageId::AgentFocusResult,
MessageId::AgentFocusStopReason,
MessageId::AgentFocusFollowUpDelivered,
MessageId::AgentFocusFollowUpQueued,
MessageId::AgentFocusFollowUpContinued,
MessageId::AgentFocusFollowUpFailed,
MessageId::FooterHintForAgents,
MessageId::FooterHintToManage,
MessageId::AgentRailQueuedCount,
MessageId::WorkbarSoFar,
MessageId::WorkbarLargeWorkflow,
MessageId::WorkbarMoreRuns,
MessageId::WorkflowLineStarted,
MessageId::WorkflowLineFinished,
MessageId::WorkflowLineFinishedWithGaps,
MessageId::WorkflowLineFailed,
MessageId::WorkflowLineStopped,
MessageId::WorkflowLineAgents,
MessageId::PickerActionTestConnection,
MessageId::ProviderCustomFormBaseUrl,
MessageId::ProviderCustomFormModel,
MessageId::ProviderCustomFormHint,
MessageId::ProviderConnectionChecked,
MessageId::ProviderConnectionCheckedPickModel,
MessageId::ProviderTestConnectionNeedKey,
MessageId::ProviderTestConnectionFailed,
MessageId::ProviderTestConnectionNoEndpoint,
MessageId::ComposerPlaceholderFollowUp,
MessageId::ComposerPlaceholderSendNow,
MessageId::ComposerHintSendWithQueue,
MessageId::ComposerHintQueue,
MessageId::ComposerHintQueueWithCount,
MessageId::ComposerHintOfflineQueue,
MessageId::ComposerHintOfflineConnect,
MessageId::ComposerHintSendNow,
MessageId::ComposerHintSendIntoTurn,
MessageId::ComposerHintLongDraft,
MessageId::PendingSendingIntoTurnPrefix,
MessageId::PendingCouldNotSendIntoTurnPrefix,
MessageId::PendingEditingFollowUpPrefix,
MessageId::PendingQueuedOnePrefix,
MessageId::PendingQueuedManyPrefix,
MessageId::PendingSendNowControls,
MessageId::PendingSendNowDropControls,
MessageId::PendingEscRestore,
MessageId::PendingQueuedFollowUpPrefix,
MessageId::PendingInputsHeader,
MessageId::PendingContextHeader,
MessageId::ToastQueuedFollowUp,
MessageId::ToastQueuedFollowUpCount,
MessageId::ToastQueuedOffline,
MessageId::ToastSentIntoTurn,
MessageId::ToastCouldNotSendIntoTurn,
MessageId::ToastHookBlockedFollowUp,
MessageId::ToastOfflineQueuedCount,
MessageId::OperateBoardHeader,
MessageId::OperateBoardBurnObserved,
MessageId::OperateBoardBurnNoCap,
MessageId::OperateBoardDirectionEmpty,
MessageId::OperateBoardDirectionLine,
MessageId::OperateBoardPlanMissing,
MessageId::OperateBoardPlanHeader,
MessageId::OperateBoardGantt,
MessageId::ConfigCategoryAppearance,
MessageId::ConfigCategoryModelsProviders,
MessageId::ConfigCategoryFleet,
MessageId::ConfigCategoryWork,
MessageId::ConfigCategoryToolsMcp,
MessageId::ConfigCategoryTrust,
MessageId::ConfigCategoryMotion,
MessageId::ConfigCategoryAdvanced,
MessageId::ConfigFactCurrent,
MessageId::ConfigFactSaved,
MessageId::ConfigFactStartup,
MessageId::ConfigFactSource,
MessageId::ConfigFactScope,
MessageId::ConfigFactApply,
MessageId::ConfigFactKind,
MessageId::ConfigFactAvailable,
MessageId::ConfigFactObserved,
MessageId::ConfigFactOpens,
MessageId::ConfigLaneUnobserved,
MessageId::ConfigSourceSession,
MessageId::ConfigSourceUserSettings,
MessageId::ConfigSourceConfig,
MessageId::ConfigSourceManaged,
MessageId::ConfigApplyEffectiveNow,
MessageId::ConfigApplyOnSave,
MessageId::ConfigApplyNextSession,
MessageId::ConfigApplyRestart,
MessageId::ConfigApplyReadOnly,
MessageId::ConfigApplyReload,
MessageId::ConfigApplyUiNowEngineRestart,
MessageId::ConfigKindToggle,
MessageId::ConfigKindChoice,
MessageId::ConfigKindNumber,
MessageId::ConfigKindText,
MessageId::ConfigKindAction,
MessageId::ConfigKindReadOnly,
MessageId::ConfigRowActionNote,
MessageId::ConfigRowDiagnosticNote,
MessageId::ConfigNavHint,
MessageId::ConfigActivateAgain,
MessageId::ConfigSearchLabel,
MessageId::ConfigEditChooseLabel,
MessageId::ConfigChoiceFooter,
MessageId::ConfigChoiceFooterCompact,
MessageId::ConfigEditorApply,
MessageId::ConfigEditorCancel,
MessageId::ConfigLaneUnavailable,
MessageId::ConfigSourceEnvironment,
MessageId::ConfigSourceTerminal,
MessageId::ConfigDescriptionDefault,
MessageId::ConfigValueOn,
MessageId::ConfigValueOff,
MessageId::ConfigValueProviderDefault,
MessageId::ConfigChoiceAsk,
MessageId::ConfigChoiceAcceptEdits,
MessageId::ConfigChoiceAutoReview,
MessageId::ConfigChoiceUseTuiDefault,
MessageId::ConfigChoiceFullAccess,
MessageId::ConfigChoiceNever,
MessageId::ConfigChoiceModeAct,
MessageId::ConfigChoiceModePlan,
MessageId::ConfigChoiceModeOperate,
MessageId::ConfigChoicePlacementTop,
MessageId::ConfigChoicePlacementBottom,
MessageId::ConfigChoicePlacementLeft,
MessageId::ConfigChoicePlacementRight,
MessageId::ConfigChoiceRailTasks,
MessageId::ConfigChoiceRailAgents,
MessageId::ConfigChoiceRailContext,
MessageId::ConfigChoiceStatusCw,
MessageId::ConfigChoiceStatusDots,
MessageId::ConfigChoiceDiffFull,
MessageId::ConfigChoiceDiffSummary,
MessageId::ConfigChoiceDetailAsk,
MessageId::ConfigChoiceDetailAcceptEdits,
MessageId::ConfigChoiceDetailAutoReview,
MessageId::ConfigChoiceDetailUseTuiDefault,
MessageId::ConfigChoiceDetailFullAccess,
MessageId::ConfigChoiceDetailNever,
MessageId::ConfigChoiceDetailModeAgent,
MessageId::ConfigChoiceDetailModePlan,
MessageId::ConfigChoiceDetailModeOperate,
MessageId::ConfigChoiceDetailPlacementTop,
MessageId::ConfigChoiceDetailPlacementBottom,
MessageId::ConfigChoiceDetailPlacementLeft,
MessageId::ConfigChoiceDetailPlacementRight,
MessageId::ConfigChoiceDetailPlacementOff,
MessageId::ConfigChoiceDetailRailTasks,
MessageId::ConfigChoiceDetailRailAgents,
MessageId::ConfigChoiceDetailRailContext,
MessageId::ConfigChoiceDetailLowMotionOn,
MessageId::ConfigChoiceDetailLowMotionOff,
MessageId::ConfigChoiceDetailFancyOn,
MessageId::ConfigChoiceDetailFancyOff,
MessageId::ConfigChoiceDetailShowThinkingOn,
MessageId::ConfigChoiceDetailShowThinkingOff,
MessageId::ConfigChoiceDetailThinkingHighlightOn,
MessageId::ConfigChoiceDetailThinkingHighlightOff,
MessageId::ConfigHintModel,
MessageId::ConfigHintFastModel,
MessageId::ConfigHintProvider,
MessageId::ConfigHintApprovalMode,
MessageId::ConfigHintPermissionPosture,
MessageId::ConfigHintApprovalPolicy,
MessageId::ConfigHintManagedApprovalPolicy,
MessageId::ConfigHintManagedAllowShell,
MessageId::ConfigHintAllowShell,
MessageId::ConfigHintComposerMultilineMode,
MessageId::ConfigHintBooleanValues,
MessageId::ConfigHintDensity,
MessageId::ConfigHintInlineDiffs,
MessageId::ConfigHintToolCollapse,
MessageId::ConfigHintBackgroundColor,
MessageId::ConfigHintWorkSurfacePlacement,
MessageId::ConfigHintRailPanel,
MessageId::ConfigHintWorkSurfaceTopHeight,
MessageId::ConfigHintWorkSurfaceSideWidth,
MessageId::ConfigHintBaseUrl,
MessageId::ConfigHintContextWindow,
MessageId::ConfigHintEffectiveContextWindow,
MessageId::ConfigHintCostCurrency,
MessageId::ConfigHintCalmMode,
MessageId::ConfigHintLowMotion,
MessageId::ConfigHintFancyAnimations,
MessageId::ConfigHintShowThinking,
MessageId::ConfigHintThinkingDefaultExpanded,
MessageId::ConfigHintThinkingPreviewLines,
MessageId::ConfigHintHelpExpandGroups,
MessageId::ConfigHintPinLastPrompt,
MessageId::ConfigHintThinkingHighlight,
MessageId::ConfigHintSynchronizedOutput,
MessageId::ConfigHintDefaultMode,
MessageId::ConfigHintMaxHistory,
MessageId::ConfigHintAutoCompactThreshold,
MessageId::ConfigHintDefaultModel,
MessageId::ConfigHintReasoningEffort,
MessageId::ConfigHintMcpOpen,
MessageId::ConfigHintMcpReconnect,
MessageId::ConfigHintMcpDiagnose,
MessageId::ConfigHintPluginsOpen,
MessageId::ConfigHintMcpConfigPath,
MessageId::ConfigHintFleetMaxSpawnDepth,
MessageId::ConfigHintFeatureSubagents,
MessageId::ConfigHintFeatureWebSearch,
MessageId::ConfigHintFeatureApplyPatch,
MessageId::ConfigHintFeatureMcp,
MessageId::ConfigHintFeatureExecPolicy,
MessageId::ConfigHintFeatureVisionModel,
MessageId::ConfigHintGoalCommand,
MessageId::ConfigHintWorkflow,
MessageId::SelectionCopiedAsMarkdown,
MessageId::McpShowCachedWhileTurnRuns,
MessageId::McpShowUnavailableWhileTurnRuns,
MessageId::McpLivePoolRefreshDeferredWhileTurnRuns,
MessageId::McpRetryDeferredWhileTurnRuns,
MessageId::McpRetryStarted,
MessageId::McpRetryConnected,
MessageId::McpRetryNeedsLogin,
MessageId::McpRetryFailed,
MessageId::WorkflowCountRunning,
MessageId::WorkflowCountDone,
MessageId::WorkflowCountFailed,
MessageId::WorkflowCountCancelled,
MessageId::WorkflowNoTasksYet,
MessageId::WorkflowSettledOfTotal,
MessageId::WorkflowPhaseCountOne,
MessageId::WorkflowPhaseCountMany,
MessageId::WorkflowPhaseOrdinal,
MessageId::ModelPickerPinned,
MessageId::ModelPickerUnpinned,
MessageId::ModelPickerPinFailed,
MessageId::ModelPickerPinOrderUpdated,
MessageId::ModelPickerPinReorderFailed,
MessageId::ModelPickerReadinessRefreshed,
MessageId::ModelPickerOpenToRefresh,
MessageId::ModelPickerPinnedChip,
MessageId::AuthSignedInAs,
MessageId::AuthSignedInWithoutEmail,
MessageId::AuthReplacedPreviousSignInAs,
MessageId::AuthReplacedPreviousSignIn,
MessageId::AuthSameAccountAsBefore,
MessageId::AuthEnvTokenOutranksSignIn,
MessageId::PinnedPromptJumpToMessage,
MessageId::PlanHandoffHeader,
MessageId::PlanHandoffQuestion,
MessageId::PlanHandoffWorkAsk,
MessageId::PlanHandoffWorkAskDetail,
MessageId::PlanHandoffWorkAcceptEdits,
MessageId::PlanHandoffWorkAcceptEditsDetail,
MessageId::PlanHandoffWorkAuto,
MessageId::PlanHandoffWorkAutoDetail,
MessageId::PlanHandoffKeepPlanning,
MessageId::PlanHandoffKeepPlanningDetail,
MessageId::PluginOAuthBrowser,
MessageId::PluginOAuthReady,
MessageId::PluginOAuthLocalLogout,
MessageId::PlanHandoffProceed,
MessageId::PlanHandoffTodoNote,
MessageId::InstructionNoticeHeader,
MessageId::InstructionNoticeFooter,
MessageId::InstructionNoticeMore,
MessageId::InstructionNoticeLine,
MessageId::InstructionNoticeTrimmed,
MessageId::InstructionNoticeDroppedBytes,
MessageId::InstructionNoticeFallback,
MessageId::InstructionNoticeStaticGuardOver,
MessageId::InstructionNoticeStaticGuardTrimmed,
MessageId::InstructionDetailDroppedBroadest,
MessageId::InstructionDetailNoRoom,
MessageId::InstructionDetailRulesExhausted,
MessageId::InstructionDetailOverCeiling,
MessageId::InstructionDetailUnreadable,
MessageId::InstructionDetailAlreadyLoaded,
MessageId::InstructionDetailRulesCap,
MessageId::InstructionDetailSymlinkedRules,
MessageId::InstructionBudgetRefused,
MessageId::InstructionBudgetOverGuard,
MessageId::ExecAutoHelp,
MessageId::ExecSandboxHelp,
MessageId::ExecAfterHelp,
MessageId::ExecPromptHelp,
MessageId::ExecFlagAfterPrompt,
MessageId::ActivityFileOne,
MessageId::ActivityFileMany,
MessageId::ActivitySearchOne,
MessageId::ActivitySearchMany,
MessageId::ActivityCommandOne,
MessageId::ActivityCommandMany,
MessageId::ActivityTaskOne,
MessageId::ActivityTaskMany,
MessageId::ActivityDirectoryOne,
MessageId::ActivityDirectoryMany,
MessageId::ActivityPatternOne,
MessageId::ActivityPatternMany,
MessageId::ActivityExplored,
MessageId::ActivityRan,
MessageId::ActivityEdited,
MessageId::ActivityDelegated,
MessageId::ActivityUpdatedMetadata,
MessageId::ActivityRead,
MessageId::ActivityListed,
MessageId::ActivitySearched,
MessageId::ActivityWrote,
MessageId::ToolReceiptRunning,
MessageId::ToolReceiptHydrated,
MessageId::ToolReceiptStopped,
MessageId::ToolReceiptIssue,
MessageId::ToolReceiptFailed,
MessageId::AgentActivityChecking,
MessageId::AgentActivityChecked,
MessageId::AgentActivityWaiting,
MessageId::AgentActivityWaited,
MessageId::FileMutationCreated,
MessageId::FileMutationUpdated,
MessageId::FileMutationDeleted,
MessageId::FileMutationRenamed,
MessageId::FileMutationCreatedCount,
MessageId::FileMutationUpdatedCount,
MessageId::FileMutationDeletedCount,
MessageId::FileMutationRenamedCount,
MessageId::FileMutationChangedFiles,
MessageId::FileMutationMissingFile,
MessageId::FileMutationNoText,
MessageId::FileMutationMoreDiff,
MessageId::FileMutationChange,
MessageId::FileMutationSelectReceipt,
MessageId::FileMutationExactEvidence,
MessageId::FileMutationExactHeading,
MessageId::FileActivityReadLabel,
MessageId::FileActivityListLabel,
MessageId::FileActivitySearchLabel,
MessageId::FileActivityWriteLabel,
MessageId::FileActivityDetailTitle,
MessageId::ToolReceiptQuiet,
MessageId::FileActivityEditedLabel,
MessageId::FileMutationAcrossFiles,
MessageId::FileActivityNoDetail,
MessageId::FileActivityPatterns,
MessageId::FileActivitySettled,
];
pub fn tr(locale: Locale, id: MessageId) -> Cow<'static, str> {
rust_i18n::t!(format!("{id:?}"), locale = locale.tag())
}
/// Resolve a message by its registry key — the `MessageId` variant name.
///
/// The settings schema (`codewhale_config::SETTINGS_SCHEMA`) names the string
/// a setting shows rather than carrying its prose, so it needs to resolve a
/// key it holds as a `&str`. An unknown key returns the key itself, which the
/// schema binding test in `crate::tui::views` fails on.
pub fn tr_key(locale: Locale, key: &'static str) -> Cow<'static, str> {
rust_i18n::t!(key, locale = locale.tag())
}
pub fn thinking_translation_placeholder(locale: Locale) -> &'static str {
match locale {
Locale::En => "Thinking; translating when complete...",
Locale::Ja => "思考中です。完了後に日本語へ翻訳します...",
Locale::ZhHans => "正在思考,完成后翻译为简体中文...",
Locale::ZhHant => "正在思考,完成後翻譯為繁體中文...",
Locale::PtBr => "Pensando; traduzindo ao concluir...",
Locale::Es419 => "Pensando; traduciendo al finalizar...",
Locale::Vi => "Đang suy nghĩ; sẽ dịch sau khi hoàn thành...",
Locale::Ko => "생각하는 중입니다. 완료되면 번역합니다...",
Locale::Ca => "S'està pensant; es traduirà en acabar...",
Locale::De => "Denkt nach; Übersetzung folgt nach Abschluss...",
Locale::Fr => "Réflexion en cours ; traduction à la fin...",
Locale::Id => "Sedang berpikir; akan diterjemahkan setelah selesai...",
Locale::Hi => "सोच रहा है; पूरा होने पर अनुवाद होगा...",
Locale::Ru => "Идут размышления; перевод будет после завершения...",
Locale::Uk => "Тривають роздуми; переклад буде після завершення...",
}
}
pub fn thinking_translation_in_progress(locale: Locale) -> &'static str {
match locale {
Locale::En => "Translating thinking content...",
Locale::Ja => "思考内容を翻訳中...",
Locale::ZhHans => "正在翻译思考内容...",
Locale::ZhHant => "正在翻譯思考內容...",
Locale::PtBr => "Traduzindo o conteúdo de raciocínio...",
Locale::Es419 => "Traduciendo el contenido de razonamiento...",
Locale::Vi => "Đang dịch nội dung suy nghĩ...",
Locale::Ko => "생각 내용을 번역하는 중...",
Locale::Ca => "S'està traduint el contingut del raonament...",
Locale::De => "Denkinhalte werden übersetzt...",
Locale::Fr => "Traduction du contenu de réflexion...",
Locale::Id => "Menerjemahkan konten pemikiran...",
Locale::Hi => "विचार सामग्री का अनुवाद हो रहा है...",
Locale::Ru => "Перевод содержимого рассуждений...",
Locale::Uk => "Переклад вмісту міркувань...",
}
}
pub fn thinking_translation_complete(locale: Locale) -> &'static str {
match locale {
Locale::En => "Thinking translation complete",
Locale::Ja => "思考内容の翻訳が完了しました",
Locale::ZhHans => "思考内容翻译完成",
Locale::ZhHant => "思考內容翻譯完成",
Locale::PtBr => "Tradução do raciocínio concluída",
Locale::Es419 => "Traducción del razonamiento completada",
Locale::Vi => "Đã dịch xong nội dung suy nghĩ",
Locale::Ko => "생각 내용 번역 완료",
Locale::Ca => "Traducció del raonament completada",
Locale::De => "Übersetzung der Denkinhalte abgeschlossen",
Locale::Fr => "Traduction de la réflexion terminée",
Locale::Id => "Terjemahan pemikiran selesai",
Locale::Hi => "विचार अनुवाद पूरा हुआ",
Locale::Ru => "Перевод рассуждений завершён",
Locale::Uk => "Переклад міркувань завершено",
}
}
pub fn thinking_translation_failed(locale: Locale) -> &'static str {
match locale {
Locale::En => "Thinking translation failed",
Locale::Ja => "思考内容の翻訳に失敗しました",
Locale::ZhHans => "思考内容翻译失败",
Locale::ZhHant => "思考內容翻譯失敗",
Locale::PtBr => "Falha ao traduzir o raciocínio",
Locale::Es419 => "Falló la traducción del razonamiento",
Locale::Vi => "Dịch nội dung suy nghĩ thất bại",
Locale::Ko => "생각 내용 번역 실패",
Locale::Ca => "Ha fallat la traducció del raonament",
Locale::De => "Übersetzung der Denkinhalte fehlgeschlagen",
Locale::Fr => "Échec de la traduction de la réflexion",
Locale::Id => "Terjemahan pemikiran gagal",
Locale::Hi => "विचार अनुवाद विफल",
Locale::Ru => "Не удалось перевести рассуждения",
Locale::Uk => "Не вдалося перекласти міркування",
}
}
pub fn hidden_translation_failed(locale: Locale) -> &'static str {
match locale {
Locale::En => "Translation failed; original text is hidden.",
Locale::Ja => "翻訳に失敗しました。原文は非表示です。",
Locale::ZhHans => "翻译失败,原文已隐藏。",
Locale::ZhHant => "翻譯失敗,原文已隱藏。",
Locale::PtBr => "A tradução falhou; o texto original está oculto.",
Locale::Es419 => "La traducción falló; el texto original está oculto.",
Locale::Vi => "Dịch thất bại; văn bản gốc đã bị ẩn.",
Locale::Ko => "번역에 실패했습니다. 원문은 숨겨져 있습니다.",
Locale::Ca => "La traducció ha fallat; el text original està amagat.",
Locale::De => "Übersetzung fehlgeschlagen; der Originaltext ist ausgeblendet.",
Locale::Fr => "La traduction a échoué ; le texte original est masqué.",
Locale::Id => "Terjemahan gagal; teks asli disembunyikan.",
Locale::Hi => "अनुवाद विफल; मूल पाठ छिपा हुआ है.",
Locale::Ru => "Перевод не удался; исходный текст скрыт.",
Locale::Uk => "Переклад не вдався; оригінальний текст приховано.",
}
}
pub fn normalize_configured_locale(input: &str) -> Option<&'static str> {
let normalized = normalize_locale_input(input);
if matches!(normalized.as_str(), "" | "auto" | "system") {
return Some("auto");
}
parse_locale(&normalized).map(Locale::tag)
}
/// Whether a configured locale selects a shipped pack that intentionally
/// relies on English fallback for missing messages.
#[must_use]
pub fn configured_locale_is_partial_pack(input: &str) -> bool {
let normalized = normalize_locale_input(input);
if matches!(normalized.as_str(), "" | "auto" | "system") {
return false;
}
parse_locale(&normalized).is_some_and(|locale| {
Locale::shipped().contains(&locale)
&& locale.is_partial_pack()
&& !Locale::shipped_complete().contains(&locale)
})
}
/// Human-facing list of accepted `locale` setting values, derived from the
/// shipped packs so config hints and error messages cannot go stale as new
/// locales land. `separator` is `", "` for prose and `" | "` for hints.
#[must_use]
pub fn configured_locale_values(separator: &str) -> String {
let mut out = String::from("auto");
for locale in Locale::shipped() {
out.push_str(separator);
out.push_str(locale.tag());
}
out
}
pub fn resolve_locale(setting: &str) -> Locale {
resolve_locale_with_env(setting, |key| std::env::var(key).ok())
}
pub fn resolve_locale_with_env<F>(setting: &str, env: F) -> Locale
where
F: Fn(&str) -> Option<String>,
{
let normalized = normalize_locale_input(setting);
if !matches!(normalized.as_str(), "" | "auto" | "system") {
return parse_locale(&normalized).unwrap_or(Locale::En);
}
for key in ["LC_ALL", "LC_MESSAGES", "LANG"] {
if let Some(value) = env(key)
&& let Some(locale) = parse_locale(&normalize_locale_input(&value))
{
return locale;
}
}
Locale::En
}
pub fn truncate_to_width(text: &str, max_width: usize) -> String {
if max_width == 0 {
return String::new();
}
if text.width() <= max_width {
return text.to_string();
}
let ellipsis_width = '…'.width().unwrap_or(1);
if max_width <= ellipsis_width {
return "…".to_string();
}
let limit = max_width - ellipsis_width;
let mut out = String::new();
let mut width = 0usize;
// Iterate extended grapheme clusters, not chars: a Devanagari conjunct
// (क + ् + ष), a combined mark (e + ́), or a ZWJ emoji sequence must
// never be cut apart — a trailing virama or orphaned combining mark
// renders as visibly broken shaping in the terminal.
for cluster in text.graphemes(true) {
let cluster_width = UnicodeWidthStr::width(cluster);
if width + cluster_width > limit {
break;
}
out.push_str(cluster);
width += cluster_width;
}
out.push('…');
out
}
fn normalize_locale_input(input: &str) -> String {
input
.split('.')
.next()
.unwrap_or(input)
.split('@')
.next()
.unwrap_or(input)
.trim()
.replace('_', "-")
.to_lowercase()
}
fn parse_locale(value: &str) -> Option<Locale> {
if value == "c" || value == "posix" || value.starts_with("en") {
return Some(Locale::En);
}
if value.starts_with("ja") {
return Some(Locale::Ja);
}
if value.starts_with("zh") {
if value.contains("hant")
|| value.contains("-tw")
|| value.contains("-hk")
|| value.contains("-mo")
{
return Some(Locale::ZhHant);
}
return Some(Locale::ZhHans);
}
if value.starts_with("pt") || value == "br" {
return Some(Locale::PtBr);
}
if value.starts_with("es") {
return Some(Locale::Es419);
}
if value.starts_with("vi") {
return Some(Locale::Vi);
}
if value.starts_with("ko") {
return Some(Locale::Ko);
}
if value.starts_with("ca") {
return Some(Locale::Ca);
}
if value.starts_with("de") {
return Some(Locale::De);
}
if value.starts_with("fr") {
return Some(Locale::Fr);
}
if value.starts_with("id") {
return Some(Locale::Id);
}
if value.starts_with("hi") {
return Some(Locale::Hi);
}
if value.starts_with("ru") {
return Some(Locale::Ru);
}
if value.starts_with("uk") {
return Some(Locale::Uk);
}
None
}
#[cfg(test)]
mod tests {
use super::*;
use ratatui::{
buffer::Buffer,
layout::Rect,
widgets::{Paragraph, Widget, Wrap},
};
#[test]
fn locale_setting_normalizes_supported_tags() {
assert_eq!(normalize_configured_locale("auto"), Some("auto"));
assert_eq!(normalize_configured_locale("ja_JP.UTF-8"), Some("ja"));
assert_eq!(normalize_configured_locale("zh-CN"), Some("zh-Hans"));
assert_eq!(normalize_configured_locale("zh-TW"), Some("zh-Hant"));
assert_eq!(normalize_configured_locale("zh_HK.UTF-8"), Some("zh-Hant"));
assert_eq!(normalize_configured_locale("pt"), Some("pt-BR"));
assert_eq!(normalize_configured_locale("pt-PT"), Some("pt-BR"));
assert_eq!(normalize_configured_locale("es"), Some("es-419"));
assert_eq!(normalize_configured_locale("es-MX"), Some("es-419"));
assert_eq!(normalize_configured_locale("ca-ES"), Some("ca"));
assert_eq!(normalize_configured_locale("de_DE.UTF-8"), Some("de"));
assert_eq!(normalize_configured_locale("fr-FR"), Some("fr"));
assert_eq!(normalize_configured_locale("id-ID"), Some("id"));
assert_eq!(normalize_configured_locale("hi_IN.UTF-8"), Some("hi"));
assert_eq!(normalize_configured_locale("ru-RU"), Some("ru"));
assert_eq!(normalize_configured_locale("uk_UA.UTF-8"), Some("uk"));
}
#[test]
fn partial_pack_status_tracks_the_shipped_locale_registry() {
assert!(!configured_locale_is_partial_pack("auto"));
assert!(!configured_locale_is_partial_pack("system"));
assert!(!configured_locale_is_partial_pack("zh-Hant"));
assert!(!configured_locale_is_partial_pack("zh_TW.UTF-8"));
assert!(!configured_locale_is_partial_pack("vi"));
assert!(!configured_locale_is_partial_pack("ko"));
for locale in Locale::shipped() {
assert_eq!(
configured_locale_is_partial_pack(locale.tag()),
locale.is_partial_pack(),
"{} partial-pack classification drifted",
locale.tag()
);
assert_ne!(
Locale::shipped_complete().contains(locale),
locale.is_partial_pack(),
"{} must be exactly one of complete or partial",
locale.tag()
);
}
}
#[test]
fn locale_resolution_uses_config_then_environment_then_english() {
assert_eq!(
resolve_locale_with_env("ja", |_| Some("pt_BR.UTF-8".to_string())),
Locale::Ja
);
assert_eq!(
resolve_locale_with_env("auto", |key| {
(key == "LANG").then(|| "zh_CN.UTF-8".to_string())
}),
Locale::ZhHans
);
assert_eq!(
resolve_locale_with_env("auto", |key| {
(key == "LANG").then(|| "zh_TW.UTF-8".to_string())
}),
Locale::ZhHant
);
assert_eq!(resolve_locale_with_env("auto", |_| None), Locale::En);
}
pub fn missing_message_ids(locale: Locale) -> Vec<MessageId> {
ALL_MESSAGE_IDS
.iter()
.copied()
.filter(|id| tr(locale, *id).eq(&format!("{id:?}")))
.collect()
}
fn locale_json_source(locale: Locale) -> &'static str {
match locale {
Locale::En => include_str!("../locales/en.json"),
Locale::Ja => include_str!("../locales/ja.json"),
Locale::ZhHans => include_str!("../locales/zh-Hans.json"),
Locale::ZhHant => include_str!("../locales/zh-Hant.json"),
Locale::PtBr => include_str!("../locales/pt-BR.json"),
Locale::Es419 => include_str!("../locales/es-419.json"),
Locale::Vi => include_str!("../locales/vi.json"),
Locale::Ko => include_str!("../locales/ko.json"),
Locale::Ca => include_str!("../locales/ca.json"),
Locale::De => include_str!("../locales/de.json"),
Locale::Fr => include_str!("../locales/fr.json"),
Locale::Id => include_str!("../locales/id.json"),
Locale::Hi => include_str!("../locales/hi.json"),
Locale::Ru => include_str!("../locales/ru.json"),
Locale::Uk => include_str!("../locales/uk.json"),
}
}
#[test]
fn shipped_complete_packs_have_no_missing_core_messages() {
for locale in Locale::shipped_complete() {
assert!(
missing_message_ids(*locale).is_empty(),
"{} is missing messages",
locale.tag()
);
}
}
#[test]
fn work_stop_confirmation_is_explicitly_localized() {
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
assert_ne!(tr(*locale, MessageId::SidebarStopControl), "stop");
assert_ne!(
tr(*locale, MessageId::WorkSurfaceStopConfirmHint),
"confirm stop · Esc cancels"
);
}
}
#[test]
fn coordination_work_chrome_is_explicitly_localized() {
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
assert_ne!(
tr(*locale, MessageId::CoordinationWorkTitle),
tr(Locale::En, MessageId::CoordinationWorkTitle),
"{} fell back to the English Coordination Work title",
locale.tag()
);
assert_ne!(
tr(*locale, MessageId::CoordinationMetricsNoAuthoritativeSource),
tr(
Locale::En,
MessageId::CoordinationMetricsNoAuthoritativeSource
),
"{} fell back to the English coordination metrics note",
locale.tag()
);
}
}
#[test]
fn context_inspector_and_command_hints_are_explicitly_localized() {
let ids = [
MessageId::CtxInspRowCompaction,
MessageId::CtxInspRowAnchors,
MessageId::CtxInspCompactionNever,
MessageId::CtxInspCompactionDetail,
MessageId::CtxInspCompactionRestored,
MessageId::CtxInspCompactionPathSummary,
MessageId::CtxInspCompactionPathPrune,
MessageId::CtxInspCompactionAssistantKept,
MessageId::CtxInspAnchorsNone,
MessageId::CtxInspAnchorsPresent,
MessageId::KbReasoningDetail,
MessageId::CmdTurnInspectDescription,
MessageId::CmdAdvisorDescription,
MessageId::ModelChangedSessionNote,
];
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
for id in ids {
assert_ne!(
tr(*locale, id),
tr(Locale::En, id),
"{} ships the English text for {id:?}",
locale.tag()
);
}
}
}
fn raw_locale_messages(locale: Locale) -> serde_json::Map<String, serde_json::Value> {
serde_json::from_str::<serde_json::Map<String, serde_json::Value>>(locale_json_source(
locale,
))
.unwrap_or_else(|err| panic!("{} locale json should parse: {err}", locale.tag()))
}
fn raw_locale_keys(locale: Locale) -> std::collections::BTreeSet<String> {
raw_locale_messages(locale).keys().cloned().collect()
}
fn message_placeholders(value: &str) -> std::collections::BTreeSet<String> {
value
.split('{')
.skip(1)
.filter_map(|suffix| suffix.split_once('}').map(|(name, _)| name.to_string()))
.collect()
}
#[test]
fn plugin_owner_report_keeps_translated_state_and_placeholder_parity() {
let english = raw_locale_messages(Locale::En);
let keys: Vec<_> = english
.keys()
.filter(|key| key.starts_with("CmdPluginOwner"))
.collect();
assert_eq!(keys.len(), 7);
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for key in &keys {
let original = english[*key].as_str().unwrap();
let translated = pack[*key].as_str().unwrap();
assert_eq!(
message_placeholders(translated),
message_placeholders(original),
"{} changed placeholders for {key}",
locale.tag()
);
if *locale != Locale::En {
assert_ne!(
translated,
original,
"{} left {key} in English",
locale.tag()
);
}
}
}
}
/// #5906: the parked-agent vocabulary is new copy on the busiest rows in
/// the product, so it gets the same hard parity gate coordination copy
/// has — and the recovery line must keep the tool tokens it names, or it
/// tells an operator to type a verb that does not exist.
#[test]
fn parked_agent_copy_is_translated_and_keeps_its_tool_verbs() {
for locale in Locale::shipped_complete() {
let word = tr(*locale, MessageId::AgentStatusParked);
assert!(
!word.trim().is_empty(),
"{} has no parked status word",
locale.tag()
);
let recovery = tr(*locale, MessageId::AgentStatusParkedRecovery);
assert!(
recovery.contains("resume_from"),
"{} lost the resume verb the agent tool exposes: {recovery}",
locale.tag()
);
assert!(
recovery.contains("cancel"),
"{} lost the dismiss verb: {recovery}",
locale.tag()
);
if *locale == Locale::En {
continue;
}
assert_ne!(
word,
tr(Locale::En, MessageId::AgentStatusParked),
"{} fell back to the English parked status word",
locale.tag()
);
assert_ne!(
recovery,
tr(Locale::En, MessageId::AgentStatusParkedRecovery),
"{} fell back to the English parked recovery line",
locale.tag()
);
}
}
#[test]
fn background_review_complete_packs_translate_copy_and_preserve_placeholders() {
let english = raw_locale_messages(Locale::En);
let keys = english
.keys()
.filter(|key| {
key.starts_with("Background") || key.as_str() == "NotificationBackgroundStopped"
})
.collect::<Vec<_>>();
assert_eq!(keys.len(), 13);
for &locale in Locale::shipped_complete() {
let pack = raw_locale_messages(locale);
for key in &keys {
let source = english[*key].as_str().unwrap();
let translated = pack
.get(*key)
.and_then(serde_json::Value::as_str)
.expect("translated background key");
assert_eq!(
message_placeholders(translated),
message_placeholders(source),
"{} {key}",
locale.tag()
);
if locale != Locale::En {
assert_ne!(translated, source, "{} {key}", locale.tag());
}
}
}
}
#[test]
fn coordination_complete_packs_have_raw_key_and_placeholder_parity() {
let english = raw_locale_messages(Locale::En);
let coordination_keys = english
.keys()
.filter(|key| key.starts_with("Coordination"))
.collect::<Vec<_>>();
assert_eq!(coordination_keys.len(), 39);
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for key in &coordination_keys {
let english_value = english
.get(*key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English {key} must be a string"));
let translated = pack
.get(*key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing raw key {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
}
}
}
#[test]
fn automation_complete_packs_have_raw_key_and_placeholder_parity() {
let english = raw_locale_messages(Locale::En);
let automation_keys = english
.keys()
.filter(|key| key.starts_with("Automation"))
.collect::<Vec<_>>();
// New room/editor strings are part of the same complete-pack contract.
assert!(!automation_keys.is_empty());
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for key in &automation_keys {
let english_value = english
.get(*key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English {key} must be a string"));
let translated = pack
.get(*key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing raw key {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
}
}
}
/// The `/cost` and `/tokens` honesty block is assembled by `{placeholder}`
/// substitution, so a translation that drops or renames one silently ships a
/// line with a literal `{priced}` in it — or worse, omits the count that
/// makes the sentence true. Cost copy is exactly where a mistranslation
/// becomes a false claim about money, so it gets the same hard parity gate
/// the coordination pack has (#4318).
#[test]
fn cost_copy_has_raw_key_and_placeholder_parity_across_complete_packs() {
let english = raw_locale_messages(Locale::En);
let cost_keys = english
.keys()
.filter(|key| key.starts_with("CmdCost") || key.starts_with("CmdTokensCache"))
.cloned()
.collect::<Vec<_>>();
// Guard against the filter silently matching nothing after a rename.
assert!(
cost_keys.len() >= 12,
"expected the full CmdCost*/CmdTokensCache* set, found {cost_keys:?}"
);
// The keys this pass added must be in the set the gate covers.
for required in [
"CmdCostEstimateOnly",
"CmdCostCoverage",
"CmdCostCoverageUnknownLegacy",
"CmdCostUnpricedTurns",
"CmdCostUnpricedClasses",
"CmdCostPricingProvenance",
"CmdCostLivePricingDowngraded",
"CmdCostLivePricingUnavailable",
"CmdCostRoutesHeader",
"CmdTokensCacheWriteTotal",
] {
assert!(
cost_keys.iter().any(|key| key == required),
"{required} is missing from en.json"
);
}
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for key in &cost_keys {
let english_value = english
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English {key} must be a string"));
let translated = pack
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing raw key {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
}
}
}
/// Key parity proves a pack *has* the subtotal and audited-route lines; it
/// does not prove anyone translated them. A pack that copies the English
/// string passes every structural gate and still ships English text to a
/// Japanese user — and these two lines are the ones that say a money figure
/// is incomplete and name the routes it was built from, which is exactly
/// the copy a reader must be able to understand (#4318).
#[test]
fn every_complete_pack_localizes_the_subtotal_and_audited_route_copy() {
for locale in Locale::shipped_complete()
.iter()
.filter(|locale| **locale != Locale::En)
{
for id in [
MessageId::CmdCostReportSubtotal,
MessageId::CmdCostReportUnknown,
MessageId::CmdCostRoutesHeader,
MessageId::CmdCostUnknownValue,
MessageId::CmdCostCoverageUnknownLegacy,
] {
let localized = tr(*locale, id);
let english = tr(Locale::En, id);
assert!(
!localized.trim().is_empty(),
"{} has empty copy for {id:?}",
locale.tag()
);
assert_ne!(
localized,
english,
"{} still ships the English string for {id:?}",
locale.tag()
);
}
// The subtotal headline must still carry its amount, and must not
// reuse the complete-total wording — those two states are the whole
// point of having separate keys.
let subtotal = tr(*locale, MessageId::CmdCostReportSubtotal);
assert!(
subtotal.contains("{cost}"),
"{} subtotal headline lost its amount",
locale.tag()
);
assert_ne!(
subtotal,
tr(*locale, MessageId::CmdCostReport),
"{} cannot distinguish a subtotal from a complete total",
locale.tag()
);
// The unknown headline names no amount at all.
let unknown = tr(*locale, MessageId::CmdCostReportUnknown);
assert!(
!unknown.contains("{cost}"),
"{} unknown headline must not interpolate an amount",
locale.tag()
);
}
}
/// Both money surfaces must say "estimate". `/tokens` quotes the same total
/// as `/cost`, so it cannot present it as settled while `/cost` hedges.
#[test]
fn every_complete_pack_marks_the_cost_total_as_an_estimate() {
for locale in Locale::shipped_complete() {
let disclaimer = tr(*locale, MessageId::CmdCostEstimateOnly);
assert!(
!disclaimer.trim().is_empty(),
"{} has no cost estimate disclaimer",
locale.tag()
);
let coverage = tr(*locale, MessageId::CmdCostCoverage);
assert!(
coverage.contains("{priced}") && coverage.contains("{turns}"),
"{} coverage line lost its counts",
locale.tag()
);
}
}
/// `missing_message_ids` is blind to keys that exist in en but not in a
/// "complete" pack — the English fallback returns the English string, so
/// nothing looks missing. Keep the enum, en.json, and ALL_MESSAGE_IDS in
/// exact sync so every other parity gate actually sees every message.
#[test]
fn message_id_list_english_pack_stay_in_exact_sync() {
let en = raw_locale_keys(Locale::En);
let ids: std::collections::BTreeSet<String> =
ALL_MESSAGE_IDS.iter().map(|id| format!("{id:?}")).collect();
assert_eq!(
ids.len(),
ALL_MESSAGE_IDS.len(),
"ALL_MESSAGE_IDS contains duplicates"
);
let unlisted: Vec<_> = en.difference(&ids).collect();
assert!(
unlisted.is_empty(),
"en.json keys absent from ALL_MESSAGE_IDS — every parity test is blind to them: {unlisted:?}"
);
let untranslatable: Vec<_> = ids.difference(&en).collect();
assert!(
untranslatable.is_empty(),
"ALL_MESSAGE_IDS entries without an en.json string: {untranslatable:?}"
);
}
/// Raw key-set parity for every pack that claims completeness, in both
/// directions. This is the test that fails when a new en key ships
/// without translations instead of silently falling back to English.
#[test]
fn shipped_complete_packs_have_raw_key_parity_with_english() {
let en = raw_locale_keys(Locale::En);
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
let pack = raw_locale_keys(*locale);
let missing: Vec<_> = en.difference(&pack).collect();
assert!(
missing.is_empty(),
"{} claims completeness but lacks {} key(s); the English fallback hides these at runtime: {missing:?}",
locale.tag(),
missing.len()
);
let extra: Vec<_> = pack.difference(&en).collect();
assert!(
extra.is_empty(),
"{} defines key(s) en.json lacks: {extra:?}",
locale.tag()
);
}
}
/// #6715 review: the sign-in account summary is filled by `{provider}` and
/// `{account}` substitution, so a pack that drops a placeholder or ships the
/// English sentence would silently name no account or stay untranslated.
#[test]
fn auth_sign_in_copy_is_translated_and_keeps_its_placeholders() {
let english = raw_locale_messages(Locale::En);
let auth_keys = [
"AuthSignedInAs",
"AuthSignedInWithoutEmail",
"AuthReplacedPreviousSignInAs",
"AuthReplacedPreviousSignIn",
"AuthSameAccountAsBefore",
"AuthEnvTokenOutranksSignIn",
];
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
let pack = raw_locale_messages(*locale);
for key in auth_keys {
let english_value = english
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English {key} must be a string"));
let translated = pack
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing raw key {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
assert_ne!(
translated,
english_value,
"{} ships English for {key}",
locale.tag()
);
}
}
}
#[test]
fn current_session_pod_worker_copy_has_complete_locale_and_placeholder_parity() {
let current_session_ids = [
MessageId::SubagentsNoCurrentSessionFleetWorkers,
MessageId::SubagentsCurrentSessionFleetWorkersTitle,
MessageId::SubagentsCurrentSessionFleetWorkerRoles,
MessageId::SubagentsCurrentSessionFleetWorkersStatus,
];
let modal_ids = [
MessageId::SubagentsEmptyGuidance,
MessageId::SubagentsStatusRunning,
MessageId::SubagentsStatusCompleted,
MessageId::SubagentsStatusInterrupted,
MessageId::SubagentsStatusFailed,
MessageId::SubagentsStatusCancelled,
MessageId::SubagentsRowStatusInterrupted,
MessageId::SubagentsRowStatusCancelled,
MessageId::SubagentsRowStatusBudgetExhausted,
MessageId::SubagentsSummaryItem,
MessageId::SubagentsGroupHeading,
MessageId::SubagentsHeaderRoster,
MessageId::SubagentsHeaderColumns,
MessageId::SubagentsActionRefresh,
MessageId::SubagentsActionRosterSetup,
MessageId::SubagentsLabelReason,
MessageId::SubagentsLabelRole,
MessageId::SubagentsLabelPosture,
MessageId::SubagentsLabelGit,
MessageId::SubagentsLabelObjective,
MessageId::SubagentsLabelResult,
MessageId::SubagentsPostureDetails,
MessageId::SubagentsValueOn,
MessageId::SubagentsValueOff,
MessageId::SubagentsShellNone,
MessageId::SubagentsShellReadOnly,
MessageId::SubagentsShellFull,
MessageId::SubagentsBranch,
MessageId::SubagentsBranchWithWorkspace,
MessageId::SubagentsRoleWorker,
MessageId::SubagentsRoleScout,
MessageId::SubagentsRolePlanner,
MessageId::SubagentsRoleBuilder,
MessageId::SubagentsRoleVerifier,
MessageId::SubagentsRoleReviewer,
MessageId::SubagentsRoleConsultant,
MessageId::SubagentsRoleCustom,
];
let english = raw_locale_messages(Locale::En);
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for id in current_session_ids.iter().chain(modal_ids.iter()) {
let id = *id;
let key = format!("{id:?}");
let english_value = english
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English pack is missing {key}"));
let translated = pack
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
if *locale != Locale::En && current_session_ids.contains(&id) {
assert_ne!(
translated,
english_value,
"{} must translate {key} instead of copying English",
locale.tag()
);
}
}
}
}
#[test]
fn home_subagents_keeps_the_current_session_boundary_in_every_complete_pack() {
let expected = [
(Locale::Ca, "Treballadors de flota de la sessió actual:"),
(Locale::De, "Flotten-Worker der aktuellen Sitzung:"),
(Locale::En, "Agents this session:"),
(Locale::Es419, "Workers de flota de la sesión actual:"),
(Locale::Fr, "Workers de la flotte de la session actuelle :"),
(Locale::Hi, "वर्तमान सत्र के बेड़ा वर्कर:"),
(Locale::Id, "Worker armada sesi saat ini:"),
(Locale::Ja, "現在のセッションの艦隊ワーカー:"),
(Locale::Ko, "현재 세션의 플릿 워커:"),
(Locale::PtBr, "Workers da frota da sessão atual:"),
(Locale::Ru, "Воркеры флота текущего сеанса:"),
(Locale::Uk, "Воркери флоту поточного сеансу:"),
(Locale::Vi, "Worker hạm đội của phiên hiện tại:"),
(Locale::ZhHans, "本会话的智能体:"),
(Locale::ZhHant, "本工作階段的代理:"),
];
assert_eq!(expected.len(), Locale::shipped_complete().len());
for (locale, value) in expected {
assert_eq!(
tr(locale, MessageId::HomeSubagents),
value,
"{}",
locale.tag()
);
}
}
#[test]
fn es_419_setup_review_hint_records_only_the_setup_snapshot() {
assert_eq!(
tr(Locale::Es419, MessageId::SetupOperateReviewHint),
"Enter registra esta instantánea de configuración."
);
}
#[test]
fn status_report_copy_has_placeholder_parity_across_complete_packs() {
let english = raw_locale_messages(Locale::En);
let status_ids = ALL_MESSAGE_IDS
.iter()
.filter(|id| format!("{id:?}").starts_with("Status"));
for id in status_ids {
let key = format!("{id:?}");
let english_value = english
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English {key} must be a string"));
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
let translated = pack
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing raw key {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
}
}
}
#[test]
fn status_report_copy_preserves_technical_identities_across_complete_packs() {
let required: &[(MessageId, &[&str])] = &[
(MessageId::StatusLabelMcp, &["MCP"]),
(MessageId::StatusContextSourceKimiSafeFloor, &["Kimi Code"]),
(
MessageId::StatusWindowOverrideProvider,
&["[providers.{table}]", "context_window", "config.toml"],
),
(
MessageId::StatusWindowOverrideActiveProvider,
&["context_window", "config.toml"],
),
(
MessageId::StatusSafetyWorkspaceWriteUnenforcedNetworkOn,
&["workspace-write"],
),
(
MessageId::StatusSafetyWorkspaceWriteUnenforcedNetworkOff,
&["workspace-write"],
),
(
MessageId::StatusSafetyWorkspaceWriteNetworkOn,
&["workspace-write"],
),
(
MessageId::StatusSafetyWorkspaceWriteNetworkOff,
&["workspace-write"],
),
(MessageId::StatusPointers, &["/tokens", "/statusline"]),
];
for locale in Locale::shipped_complete() {
for (id, literals) in required {
let translated = tr(*locale, *id);
for literal in *literals {
assert!(
translated.contains(literal),
"{} changed protected literal {literal:?} in {id:?}: {translated}",
locale.tag()
);
}
}
}
}
#[test]
fn config_command_prose_is_translated_in_complete_locales() {
let ids = [
MessageId::ConfigCommandSource,
MessageId::ConfigCommandInvalidValue,
MessageId::ConfigSearchUpdated,
MessageId::ConfigPromptSuggestionUpdated,
MessageId::ConfigNotificationsSetHint,
MessageId::ConfigNotificationUpdated,
MessageId::ConfigNotificationsWholeNumber,
MessageId::ConfigAuditSearchProvider,
MessageId::ConfigAuditPromptSuggestion,
MessageId::ConfigAuditNotifications,
MessageId::ConfigHelpDiscoverable,
];
for locale in Locale::shipped_complete() {
for id in ids {
let localized = tr(*locale, id);
assert!(!localized.trim().is_empty(), "{} {id:?}", locale.tag());
if *locale != Locale::En {
assert_ne!(localized, tr(Locale::En, id), "{} {id:?}", locale.tag());
}
}
}
assert!(tr(Locale::En, MessageId::ConfigCommandSource).contains("{source}"));
assert!(tr(Locale::En, MessageId::ConfigCommandInvalidValue).contains("{choices}"));
assert!(tr(Locale::En, MessageId::ConfigNotificationUpdated).contains("{scope}"));
}
#[test]
fn remote_env_strings_are_explicitly_localized_in_every_complete_pack() {
let ids = [
MessageId::CmdRemoteEnvDescription,
MessageId::CmdRemoteEnvOverview,
MessageId::CmdRemoteEnvOpening,
MessageId::CmdRemoteEnvUnavailable,
MessageId::CmdRemoteEnvSourceCustodyPolicy,
MessageId::CmdRemoteEnvBrowserLabel,
];
for locale in Locale::shipped_complete() {
let messages = serde_json::from_str::<serde_json::Map<String, serde_json::Value>>(
locale_json_source(*locale),
)
.unwrap_or_else(|err| panic!("{} locale JSON should parse: {err}", locale.tag()));
for id in ids {
let key = format!("{id:?}");
let value = messages
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} must explicitly define {key}", locale.tag()));
assert!(
!value.trim().is_empty(),
"{} {key} must not be empty",
locale.tag()
);
}
}
}
#[test]
fn todo_write_tip_is_localized_and_keeps_the_command_placeholder() {
let english = tr(Locale::En, MessageId::BehavioralTipTodoWrite);
assert!(english.contains("{command}"));
for locale in Locale::shipped_complete() {
let tip = tr(*locale, MessageId::BehavioralTipTodoWrite);
assert!(
tip.contains("{command}"),
"{} todo_write tip must compose the command in code",
locale.tag()
);
if *locale != Locale::En {
assert_ne!(
tip,
english,
"{} todo_write tip must be translated instead of copying English",
locale.tag()
);
}
}
}
#[test]
fn zh_hant_has_reached_en_parity_and_is_complete() {
assert!(
!Locale::ZhHant.is_partial_pack(),
"zh-Hant is now a complete pack and must not be marked partial"
);
assert!(
Locale::shipped_complete().contains(&Locale::ZhHant),
"zh-Hant must be included in shipped_complete now that it has full en.json parity"
);
let en_keys = serde_json::from_str::<serde_json::Map<String, serde_json::Value>>(
locale_json_source(Locale::En),
)
.expect("en locale json");
let zh_hant_keys = serde_json::from_str::<serde_json::Map<String, serde_json::Value>>(
locale_json_source(Locale::ZhHant),
)
.expect("zh-Hant locale json");
assert_eq!(
zh_hant_keys.len(),
en_keys.len(),
"zh-Hant must have the same number of keys as en.json"
);
}
#[test]
fn shipped_setup_strings_are_explicitly_localized() {
let setup_keys = ALL_MESSAGE_IDS
.iter()
.map(|id| format!("{id:?}"))
.filter(|id| id.starts_with("Setup"))
.collect::<Vec<_>>();
for locale in Locale::shipped_complete() {
let messages = serde_json::from_str::<serde_json::Map<String, serde_json::Value>>(
locale_json_source(*locale),
)
.unwrap_or_else(|err| panic!("{} locale json should parse: {err}", locale.tag()));
for key in &setup_keys {
assert!(
messages.contains_key(key),
"{} should define {key} explicitly",
locale.tag()
);
}
}
}
#[test]
fn zh_hans_constitution_copy_uses_charter_term() {
let messages = serde_json::from_str::<serde_json::Map<String, serde_json::Value>>(
locale_json_source(Locale::ZhHans),
)
.expect("zh-Hans locale json");
for (key, value) in &messages {
let Some(value) = value.as_str() else {
continue;
};
for literal_metaphor in ["宪法", "教义", "自由原则", "仓库法则"] {
assert!(
!value.contains(literal_metaphor),
"zh-Hans {key} should use functional terminology instead of {literal_metaphor}: {value}"
);
}
}
let setup_intro = tr(Locale::ZhHans, MessageId::SetupStepConstitutionWhy);
assert!(setup_intro.contains("Codewhale"));
assert!(setup_intro.contains("宪章"));
assert!(!setup_intro.contains("代码"));
// The romanized-brand guard lives on `setup_intro` above: the welcome
// lead names commands, not the product, so asserting "Codewhale" here
// would only force a brand into copy that does not need one (#5442).
let welcome = tr(Locale::ZhHans, MessageId::OnboardWelcomeLead);
assert!(!welcome.contains("代码"));
assert!(
tr(
Locale::ZhHans,
MessageId::SetupConstitutionFileLoadedUnselected
)
.contains("constitution.json")
);
}
#[test]
fn home_quick_rows_name_flagship_capabilities_in_every_complete_pack() {
// #5442: /home must name the shipped surfaces a new user never finds
// from governance copy alone. First-run onboarding no longer carries a
// command tour — contextual help and /setup own that job — so the
// flagship-command guard lives on the /home surface that still shows it.
for locale in Locale::shipped_complete() {
for id in [
MessageId::HomeQuickWorkspace,
MessageId::HomeQuickRestore,
MessageId::HomeQuickTokens,
] {
let text = tr(*locale, id);
assert!(!text.trim().is_empty(), "{} {id:?} is empty", locale.tag());
}
assert!(
tr(*locale, MessageId::HomeQuickWorkspace).contains("/workspace"),
"{} /home lost /workspace",
locale.tag()
);
assert!(
tr(*locale, MessageId::HomeQuickRestore).contains("/restore"),
"{} /home lost /restore",
locale.tag()
);
assert!(
tr(*locale, MessageId::HomeQuickTokens).contains("/tokens"),
"{} /home lost /tokens",
locale.tag()
);
}
}
#[test]
fn home_quick_action_rows_share_one_command_column_in_every_pack() {
// The quick-action block is a fixed-width list. The command name and
// its padding are composed in English and must survive translation
// byte-for-byte, or the column goes ragged in that locale alone.
const ROWS: &[MessageId] = &[
MessageId::HomeQuickWorkspace,
MessageId::HomeQuickRestore,
MessageId::HomeQuickTokens,
MessageId::HomeQuickLinks,
MessageId::HomeQuickSkills,
MessageId::HomeQuickConfig,
MessageId::HomeQuickSettings,
MessageId::HomeQuickModel,
MessageId::HomeQuickSubagents,
MessageId::HomeQuickTaskList,
MessageId::HomeQuickHelp,
];
for id in ROWS {
let english = tr(Locale::En, *id);
let dash = english.find(" - ").expect("quick-action row separator");
let prefix = &english[..dash + " - ".len()];
for locale in Locale::shipped_complete() {
let row = tr(*locale, *id);
assert!(
row.starts_with(prefix),
"{} {id:?} moved the command column: expected prefix {prefix:?}, got {row:?}",
locale.tag()
);
}
}
}
#[test]
fn restore_copy_never_promises_to_rewind_the_conversation() {
// #5442: `/restore` rolls *workspace files* back to a snapshot. `/undo`
// is what drops a conversation turn. Copy that says "rewind a turn"
// sends new users to the wrong command.
for locale in Locale::shipped_complete() {
let text = tr(*locale, MessageId::HomeQuickRestore);
assert!(
text.contains("/restore"),
"{} HomeQuickRestore stopped naming /restore: {text}",
locale.tag()
);
}
let english = tr(Locale::En, MessageId::HomeQuickRestore);
assert!(
!english.contains("rewind a turn") && !english.contains("rewind turn"),
"HomeQuickRestore describes /restore as rewinding a turn: {english}"
);
}
#[test]
fn route_and_provider_picker_strings_are_translated_in_complete_locales() {
// High-visibility model/provider empty states and footers must not
// leak English through the fallback chain in complete packs.
let ids = [
MessageId::PickerActionMove,
MessageId::PickerActionSwitch,
MessageId::PickerActionApply,
MessageId::PickerActionAssignRoute,
MessageId::FleetRoutePickUnavailable,
MessageId::FleetRouteSaved,
MessageId::FleetRouteInherited,
MessageId::FleetRouteNotInCatalog,
MessageId::StatusFleetDrifted,
MessageId::StatusModelNotInRoster,
MessageId::PickerActionSetStartupDefault,
MessageId::PickerActionPin,
MessageId::PickerActionFleet,
MessageId::PickerActionCancel,
MessageId::PickerActionClear,
MessageId::PickerActionClearSearch,
MessageId::PickerActionBrowseAll,
MessageId::PickerActionCustom,
MessageId::PickerActionJump,
MessageId::PickerActionEditKey,
MessageId::PickerActionModels,
MessageId::PickerActionConfigured,
MessageId::RouteNoModels,
MessageId::RouteNoModelMatch,
MessageId::ProviderNoMatchesTitle,
MessageId::ProviderNoMatchesHint,
MessageId::ProviderNoConfiguredTitle,
MessageId::ProviderNoConfiguredHint,
MessageId::ProviderNoCatalogModels,
MessageId::ProviderCustomFormBaseUrl,
MessageId::ProviderCustomFormModel,
MessageId::ConfigHintProviderUrl,
MessageId::SessionsOpenedHistory,
MessageId::SessionsTimeJustNow,
];
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
for id in ids {
let localized = tr(*locale, id);
assert!(!localized.is_empty(), "{} empty for {id:?}", locale.tag());
// Catalan "models" is the correct translation of the English
// picker action — the words coincide. Every other id must
// differ from English, or the pack is leaking the fallback.
if matches!((*locale, id), (Locale::Ca, MessageId::PickerActionModels)) {
continue;
}
assert_ne!(
localized,
tr(Locale::En, id),
"{} should translate {id:?}",
locale.tag()
);
}
}
}
#[test]
fn launch_copy_is_translated_in_complete_locales() {
let ids = [
MessageId::ComposerPlaceholder,
MessageId::ComposerPlaceholderFollowUp,
MessageId::ComposerPlaceholderSendNow,
MessageId::ComposerHintQueue,
MessageId::EmptyStatePrompt,
];
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
for id in ids {
let localized = tr(*locale, id);
assert!(!localized.is_empty(), "{} empty for {id:?}", locale.tag());
assert_ne!(
localized,
tr(Locale::En, id),
"{} should translate {id:?}",
locale.tag()
);
}
}
}
#[test]
fn launch_choice_and_readiness_prose_is_translated_in_complete_locales() {
let ids = [
MessageId::LaunchStartTitle,
MessageId::LaunchWorkDescription,
MessageId::LaunchChatDescription,
MessageId::LaunchWorkspaceFolderReady,
MessageId::LaunchProviderSetupNeeded,
MessageId::LaunchNewSession,
MessageId::LaunchRecentHeading,
MessageId::LaunchSeeAllSessions,
MessageId::LaunchNoRecentSessions,
MessageId::LaunchResumeFailed,
MessageId::LaunchNoticeClaude,
];
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
for id in ids {
let localized = tr(*locale, id);
assert!(!localized.is_empty(), "{} empty for {id:?}", locale.tag());
assert_ne!(
localized,
tr(Locale::En, id),
"{} should translate {id:?}",
locale.tag()
);
}
}
}
#[test]
fn kimi_import_and_new_mcp_recommendations_have_complete_locale_parity() {
let ids = [
MessageId::McpRecommendedUnknownId,
MessageId::McpRecommendationsHeading,
MessageId::McpRecommendationsSafety,
MessageId::McpRecommendationGithub,
MessageId::McpRecommendationChrome,
MessageId::McpRecommendationPlaywright,
MessageId::McpRecommendationContainerUse,
MessageId::PluginKimiUsage,
MessageId::PluginKimiManagedRootHeading,
MessageId::PluginKimiNoneFound,
MessageId::PluginKimiLicenseUnspecified,
MessageId::PluginKimiApplicable,
MessageId::PluginKimiNotApplicable,
MessageId::PluginKimiCandidateSummary,
MessageId::PluginKimiCandidateDetails,
MessageId::PluginKimiRejectedHeading,
MessageId::PluginKimiInspectionFooter,
MessageId::PluginKimiCandidateMissing,
MessageId::PluginKimiCandidateChanged,
MessageId::PluginKimiHomeMissing,
MessageId::PluginKimiRootInspectFailed,
MessageId::PluginKimiRootMustBeDirectory,
MessageId::PluginKimiRootCanonicalizeFailed,
MessageId::PluginKimiRootListFailed,
MessageId::PluginKimiEntryReadFailed,
MessageId::PluginKimiEntryLimit,
MessageId::PluginKimiEntryInspectFailed,
MessageId::PluginKimiEntryLinksRefused,
MessageId::PluginKimiEntryOutsideRoot,
MessageId::PluginKimiEntryCanonicalizeFailed,
MessageId::PluginKimiManifestUnreadable,
MessageId::PluginKimiManifestMustBeFile,
MessageId::PluginKimiManifestInvalid,
MessageId::PluginKimiDirectoryNameMismatch,
MessageId::PluginKimiHashUnavailable,
MessageId::PluginKimiRollbackDestinationMissing,
MessageId::PluginKimiMismatchRemoved,
MessageId::PluginKimiMismatchRollbackFailed,
MessageId::PluginKimiUserPluginDirectory,
MessageId::PluginKimiMarketplaceZipUnsupported,
MessageId::PluginKimiMarketplaceRemoteUnsupported,
MessageId::PluginKimiMarketplaceGzipTarball,
];
let english = raw_locale_messages(Locale::En);
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for id in ids {
let key = format!("{id:?}");
let english_value = english
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English pack is missing {key}"));
let translated = pack
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
if *locale != Locale::En {
assert_ne!(
translated,
english_value,
"{} must translate {key} instead of copying English",
locale.tag()
);
}
}
}
}
#[test]
fn extensions_modal_has_complete_translated_placeholder_parity() {
let english = raw_locale_messages(Locale::En);
let keys = english
.keys()
.filter(|key| key.starts_with("Extensions"))
.cloned()
.collect::<Vec<_>>();
assert_eq!(
keys.len(),
101,
"the complete extensions locale set changed"
);
let prose_keys = [
"ExtensionsMcpEmpty",
"ExtensionsMcpBrowse",
"ExtensionsMarketplaceUnavailable",
"ExtensionsMcpNotInspected",
"ExtensionsMcpNotConnectedYet",
"ExtensionsMcpRefresh",
"ExtensionsNoItems",
"ExtensionsNoMatches",
"ExtensionsProductChromeDescription",
"ExtensionsProductPlaywrightDescription",
// The sentence that replaced the word "untrusted" is the most
// load-bearing prose on the panel: a pack that ships it in
// English has not localized the one row a person gets stuck on.
"ExtensionsReviewExplainer",
];
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for key in &keys {
let english_value = english
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English {key} must be a string"));
let translated = pack
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing raw key {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
}
if *locale != Locale::En {
for key in prose_keys {
assert_ne!(
pack.get(key),
english.get(key),
"{} copied English prose for {key}",
locale.tag()
);
}
}
}
}
#[test]
fn mcp_capability_metadata_copy_has_complete_locale_parity() {
let ids = [
MessageId::McpCapabilitiesAdvertised,
MessageId::McpCapabilitiesLegacyFallback,
MessageId::McpCapabilitiesNotObserved,
];
let english = raw_locale_messages(Locale::En);
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for id in ids {
let key = format!("{id:?}");
let english_value = english
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English pack is missing {key}"));
let translated = pack
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
if *locale != Locale::En {
assert_ne!(
translated,
english_value,
"{} must translate {key} instead of copying English",
locale.tag()
);
}
}
}
}
#[test]
fn tool_receipt_strings_have_complete_locale_parity() {
let ids = [
MessageId::ToolReceiptDone,
MessageId::ToolReceiptLinesSingular,
MessageId::ToolReceiptLinesPlural,
];
let english = raw_locale_messages(Locale::En);
for locale in Locale::shipped_complete() {
let pack = raw_locale_messages(*locale);
for id in ids {
let key = format!("{id:?}");
let english_value = english
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English pack is missing {key}"));
let translated = pack
.get(&key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing {key}", locale.tag()));
assert_eq!(
message_placeholders(translated),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
if *locale != Locale::En {
assert_ne!(
translated,
english_value,
"{} must translate {key} instead of copying English",
locale.tag()
);
}
}
}
}
#[test]
fn mode_picker_strings_are_translated_in_non_english_locales() {
// The mode hints are full sentences; every shipped non-English locale
// must provide a real translation rather than leaking the English
// string through the fallback chain.
let sentences = [
MessageId::AppModeAgentHint,
MessageId::AppModeAutoHint,
MessageId::AppModePlanHint,
MessageId::AppModeYoloHint,
MessageId::AppModeOperateHint,
];
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
for id in sentences {
let localized = tr(*locale, id);
assert!(!localized.is_empty(), "{} empty for {id:?}", locale.tag());
assert_ne!(
localized,
tr(Locale::En, id),
"{} should translate {id:?}",
locale.tag()
);
}
}
}
/// Upstream rewired Alt+P/Alt+A to jump to Plan/Work and Alt+Y to request
/// Full Access as a legacy alias, renamed the rail UI to the workbar, and
/// reworded uk "крок" (step) to "хід/ходу" (turn) wherever the English
/// counterpart says "turn", but many shipped non-English packs still
/// described the deleted Plan / Work / Operate alternate-jump, the removed
/// rail panel, and the conflated turn/step wording.
/// en.json is the source of truth for every key: keys whose English value
/// still says "workbar" must use the pack's workbar term, while keys whose
/// English value now talks about a dashed reasoning line or side
/// placements must follow that meaning instead.
#[test]
fn stale_mode_jump_and_rail_copy_is_swept_from_non_english_locales() {
let swept_keys = [
"KbFocusSidebar",
"ConfigChoiceDetailPlacementOff",
"ConfigChoiceDetailRailTasks",
"ConfigChoiceDetailRailAgents",
"ConfigChoiceDetailRailContext",
"ConfigChoiceDetailThinkingHighlightOff",
"ConfigHintWorkSurfacePlacement",
"ConfigHintRailPanel",
"ConfigHintThinkingHighlight",
"ConfigLabelSessionsRail",
];
let english = raw_locale_messages(Locale::En);
for locale in Locale::shipped_complete() {
if *locale == Locale::En {
continue;
}
let pack = raw_locale_messages(*locale);
// (a) The deleted Plan / Work / Operate alternate-jump description
// must not survive in any pack, in translated form either.
let localized = pack
.get("KbAltJumpPlanAgentYolo")
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing KbAltJumpPlanAgentYolo", locale.tag()));
assert!(
!localized.is_empty(),
"{} empty for KbAltJumpPlanAgentYolo",
locale.tag()
);
let english_jump = english
.get("KbAltJumpPlanAgentYolo")
.and_then(serde_json::Value::as_str)
.unwrap();
assert_ne!(
localized,
english_jump,
"{} should translate KbAltJumpPlanAgentYolo",
locale.tag()
);
// Placeholders must match en (en carries none in this key today,
// so every pack value must be placeholder-free here as well).
assert_eq!(
message_placeholders(localized),
message_placeholders(english_jump),
"{} changed placeholders for KbAltJumpPlanAgentYolo",
locale.tag()
);
let squeezed: String = localized.chars().filter(|c| !c.is_whitespace()).collect();
let stale_jump_marker = squeezed.contains("Plan/Work/Operate")
|| squeezed.contains("Plan-/Work-/Operate")
|| squeezed.contains("계획/실행/운영");
assert!(
!stale_jump_marker,
"{} still describes the deleted Plan / Work / Operate alternate-jump: {localized}",
locale.tag()
);
// A regression that re-adds only one stale mode (e.g. "Operate")
// must not slip past the full-sequence check above. Verified
// against all shipped packs: no current value mentions these
// words in this key.
let squeezed_lower = squeezed.to_lowercase();
assert!(
!squeezed_lower.contains("operate"),
"{} still mentions the deleted Operate alternate-jump mode: {localized}",
locale.tag()
);
if locale.tag() == "ko" {
assert!(
!squeezed.contains("운영"),
"ko still mentions the deleted 운영 alternate-jump mode: {localized}"
);
}
// (b) No rail-word residue may remain in the swept workbar keys.
let rail_markers: &[&str] = match locale.tag() {
"ca" | "fr" | "de" => &["rail"],
"es-419" => &["riel"],
"hi" => &["रेल"],
// "rel" catches the local rail rendering, "rail" the English
// loanword (e.g. "panel rail") that survived the sweep once.
"id" => &["rel", "rail"],
"ja" => &["レール"],
"ko" => &["레일"],
"pt-BR" => &["trilho"],
"ru" | "uk" => &["рейк"],
"vi" => &["ray"],
"zh-Hans" => &["轨道"],
"zh-Hant" => &["軌道"],
other => panic!("add rail markers for shipped locale {other}"),
};
for key in swept_keys {
let value = pack
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("{} is missing {key}", locale.tag()));
let english_value = english
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("English pack is missing {key}"));
assert_eq!(
message_placeholders(value),
message_placeholders(english_value),
"{} changed placeholders for {key}",
locale.tag()
);
let lowered = value.to_lowercase();
for marker in rail_markers {
assert!(
!lowered.contains(marker),
"{} still uses rail wording {:?} in {key}: {value}",
locale.tag(),
marker
);
}
}
// (c) The uk turn/step sweep: keys whose English counterpart says
// "turn" must keep the established "хід/ходу" forms, not the
// stale "крок" (step). The stems cover Ukrainian inflection
// (хід / ходу).
if *locale == Locale::Uk {
for (key, turn_stem) in [
("KbSteerCurrentTurn", "хід"),
("CmdTurnInspectDescription", "ходу"),
] {
let value = pack
.get(key)
.and_then(serde_json::Value::as_str)
.unwrap_or_else(|| panic!("uk is missing {key}"));
assert!(
value.contains(turn_stem),
"uk lost the turn wording ({turn_stem}) in {key}: {value}"
);
assert!(
!value.contains("крок"),
"uk still says крок (step) where en says turn in {key}: {value}"
);
}
}
}
}
#[test]
fn zh_hant_hotbar_command_and_keybinding_strings_are_native() {
for id in [
MessageId::CmdHotbarDescription,
MessageId::KbJumpPlanAgentYolo,
MessageId::KbAltJumpPlanAgentYolo,
] {
let localized = tr(Locale::ZhHant, id);
assert!(!localized.is_empty(), "zh-Hant empty for {id:?}");
assert_ne!(
localized,
tr(Locale::En, id),
"zh-Hant should translate {id:?}"
);
}
}
#[test]
fn unsupported_locale_falls_back_to_english() {
assert_eq!(
resolve_locale_with_env("ar", |_| None),
Locale::En,
"Arabic is planned for QA but not shipped in the v0.7.6 core pack"
);
}
#[test]
fn provider_description_is_present_for_all_locales() {
for locale in Locale::shipped_complete() {
let description = tr(*locale, MessageId::CmdProviderDescription);
assert!(
!description.is_empty(),
"{} provider description should not be empty",
locale.tag()
);
assert!(
!description.contains("codewhale |"),
"{} provider description should not name codewhale as a backend: {description}",
locale.tag()
);
}
}
#[test]
fn width_truncation_handles_cjk_rtl_indic_and_latin_samples() {
let samples = [
("zh-Hans", "输入以筛选配置"),
("ar", "تصفية الإعدادات"),
("hi", "सेटिंग खोजें"),
("pt-BR", "configurações filtradas"),
];
for (tag, sample) in samples {
let truncated = truncate_to_width(sample, 12);
assert!(
truncated.width() <= 12,
"{tag} sample overflowed: {truncated:?}"
);
}
}
#[test]
fn planned_script_samples_render_in_narrow_terminal_buffer() {
let samples = [
("CJK", "输入以筛选配置"),
("RTL", "تصفية الإعدادات"),
("Indic", "सेटिंग खोजें"),
("Latin Global South", "configurações filtradas"),
];
for (label, sample) in samples {
let area = Rect::new(0, 0, 18, 4);
let mut buf = Buffer::empty(area);
Paragraph::new(sample)
.wrap(Wrap { trim: false })
.render(area, &mut buf);
let dump = buffer_text(&buf, area);
assert!(
dump.chars().any(|ch| !ch.is_whitespace()),
"{label} sample produced an empty render"
);
}
}
fn buffer_text(buf: &Buffer, area: Rect) -> String {
let mut out = String::new();
for y in area.top()..area.bottom() {
for x in area.left()..area.right() {
out.push_str(buf[(x, y)].symbol());
}
out.push('\n');
}
out
}
fn visible_row_text(buf: &Buffer, area: Rect, y: u16) -> String {
let mut out = String::new();
let mut skip_cells = 0usize;
for x in area.left()..area.right() {
if skip_cells > 0 {
skip_cells -= 1;
continue;
}
let symbol = buf[(x, y)].symbol();
out.push_str(symbol);
skip_cells = UnicodeWidthStr::width(symbol).saturating_sub(1);
}
out
}
// --- Unicode / CJK / terminal-width QA (issue #3488) -------------------
// `truncate_to_width` is the localization-layer truncation helper. These
// verify it clips by display width (never byte/char count), preserves
// semantic prefixes, never splits a grapheme cluster, and that mixed
// English/CJK rows wrap inside a narrow (40-col) and medium (80-col)
// terminal buffer without overflowing the column.
#[test]
fn truncate_to_width_clips_cjk_by_display_width_and_keeps_prefix_intact() {
// Each Han glyph is two columns. A 12-column budget fits the six-glyph
// title exactly, so no truncation/ellipsis happens and the prefix survives.
let title = "项目报告结果"; // 12 columns
assert_eq!(truncate_to_width(title, 12), title);
// Oversized: clip on a whole-glyph boundary, append the ellipsis, and
// stay within the budget by display width.
let out = truncate_to_width("数据库迁移任务结果", 7); // 10 glyphs = 20 cols
assert!(
UnicodeWidthStr::width(out.as_str()) <= 7,
"{out:?} overflowed"
);
assert!(out.ends_with('…'), "expected ellipsis, got {out:?}");
assert!(!out.contains('\u{FFFD}'), "split a wide glyph: {out:?}");
// The kept body is whole wide glyphs (each two columns) — never a half cell.
let body = out.strip_suffix('…').unwrap_or(&out);
assert!(
body.chars()
.map(|c| UnicodeWidthChar::width(c).unwrap_or(0))
.sum::<usize>()
<= 6,
"body exceeded budget-minus-ellipsis: {out:?}"
);
// A semantic ASCII prefix (e.g. a status verb) survives when it fits.
let row = "running 数据库迁移任务结果预览测试";
let out = truncate_to_width(row, 16);
assert!(
out.starts_with("running"),
"semantic prefix dropped: {out:?}"
);
assert!(UnicodeWidthStr::width(out.as_str()) <= 16);
assert!(!out.contains('\u{FFFD}'));
}
#[test]
fn truncate_to_width_never_splits_combining_marks_or_emoji() {
// Combining mark (U+0301) and ZWJ are zero-width; they must not be
// counted as columns and must never be cut mid-cluster into U+FFFD.
let cafe = "cafe\u{0301}"; // "café", 4 columns
assert_eq!(truncate_to_width(cafe, 10), cafe);
let out = truncate_to_width("cafe\u{0301} overflow here", 6);
assert!(UnicodeWidthStr::width(out.as_str()) <= 6);
assert!(!out.contains('\u{FFFD}'));
// Emoji is two columns; truncation lands on a cluster boundary.
let out = truncate_to_width("\u{1F433}\u{1F433}\u{1F433} whales everywhere", 5);
assert!(UnicodeWidthStr::width(out.as_str()) <= 5);
assert!(!out.contains('\u{FFFD}'));
}
#[test]
fn narrow_and_medium_terminal_wraps_mixed_width_rows_without_overflow() {
// Issue #3488 acceptance: at a 40-col (narrow, macOS-Terminal-like) and
// 80-col (medium) terminal, mixed English/CJK task titles and transcript
// lines must (a) truncate to the column by display width, and (b) wrap
// inside the buffer so no rendered row exceeds the terminal width.
let fixtures = [
"Task: 数据库迁移任务 — verify provider routing for issue #3488",
"抹香鲸 is running codex/issue-3439-zhipu-glm-fixture @ issue-3439",
"满員電車🫠 — full-width punctuation:『』【】 mixes with ASCII ids",
];
for width in [40usize, 80] {
// (a) The truncation helper clips by display width.
for fixture in fixtures {
let out = truncate_to_width(fixture, width);
assert!(
UnicodeWidthStr::width(out.as_str()) <= width,
"width={width}: truncated row overflowed: {out:?}"
);
assert!(
!out.contains('\u{FFFD}'),
"width={width}: split a glyph: {out:?}"
);
}
// (b) Wrapping the full mixed-width line inside a buffer of `width`
// columns never lets a rendered row exceed the terminal width.
for fixture in fixtures {
let area = Rect::new(0, 0, width as u16, 6);
let mut buf = Buffer::empty(area);
Paragraph::new(fixture)
.wrap(Wrap { trim: false })
.render(area, &mut buf);
let mut saw_text = false;
for (row_idx, y) in (area.top()..area.bottom()).enumerate() {
let row = visible_row_text(&buf, area, y);
let trimmed = row.trim_end_matches('\u{0}').trim_end();
assert!(
UnicodeWidthStr::width(trimmed) <= width,
"width={width} row {row_idx}: wrapped row overflowed ({} cols): {trimmed:?}",
UnicodeWidthStr::width(trimmed)
);
saw_text |= trimmed.chars().any(|ch| !ch.is_whitespace());
}
assert!(
saw_text,
"width={width}: mixed fixture produced an empty render"
);
}
}
}
// --- Cyrillic script fixtures (ru/uk, #3092 / #4791) -------------------
// Russian and Ukrainian share the Cyrillic script but are different
// languages. These fixtures lock the failure modes seen in real
// machine-translated packs: Russian-only letters (ы/э/ъ) leaking into
// the Ukrainian pack, Ukrainian-only letters (і/ї/є/ґ) leaking into the
// Russian pack, untranslated English prose hiding behind the fallback,
// and one pack copied into the other.
fn has_cyrillic(value: &str) -> bool {
value
.chars()
.any(|ch| ('\u{0400}'..='\u{04FF}').contains(&ch))
}
fn has_devanagari(value: &str) -> bool {
value
.chars()
.any(|ch| ('\u{0900}'..='\u{097F}').contains(&ch))
}
/// Latin words remaining after the exempt categories are stripped:
/// `code spans`, {placeholders}, URLs, slash commands, env-style
/// ALL-CAPS tokens, and the product-term allowlist from
/// `locales/AGENTS.md`. Anything left over in a Cyrillic or Devanagari
/// string is mixed-language copy.
fn latin_words_in_translated_copy(value: &str) -> Vec<String> {
const ALLOWED: &[&str] = &[
"codewhale",
"deepseek",
"fleet",
"plan",
"act",
"operate",
"ask",
"auto",
"review",
"full",
"access",
"enter",
"esc",
"alt",
"ctrl",
"shift",
"tab",
"space",
"backspace",
"delete",
"api",
"json",
"toml",
"yaml",
"yml",
"tui",
"ci",
"cd",
"mcp",
"url",
"uri",
"dns",
"ssh",
"http",
"https",
"git",
"github",
"gitee",
"openai",
"anthropic",
"gemini",
"kimi",
"codex",
"claude",
"vllm",
"ollama",
"sglang",
"npm",
"rust",
"cargo",
"linux",
"macos",
"windows",
"id",
"ok",
"true",
"false",
"utf",
"ascii",
"cli",
"ui",
"md",
"ai",
"llm",
"gpt",
"faq",
"docs",
"admin",
"oauth",
"ssl",
"tls",
"jwt",
"svg",
"png",
"wasm",
"app",
"slash",
"skill",
"plugin",
"shell",
];
let mut scrubbed = String::with_capacity(value.len());
let mut chars = value.chars();
let mut in_backtick = false;
let mut in_brace = false;
for ch in chars.by_ref() {
match ch {
'`' => in_backtick = !in_backtick,
'{' if !in_backtick => in_brace = true,
'}' if in_brace => in_brace = false,
_ if !in_backtick && !in_brace => scrubbed.push(ch),
_ => {}
}
}
scrubbed
.split(|c: char| !c.is_ascii_alphanumeric() && c != '-' && c != '/')
.filter(|token| token.len() >= 2)
.filter(|token| !token.contains('/') && !token.contains("://"))
.filter(|token| token.is_ascii())
.filter(|token| !token.chars().any(|c| c.is_ascii_digit()))
.filter(|token| !token.chars().all(|c| c.is_ascii_uppercase()))
.filter(|token| !ALLOWED.contains(&token.to_ascii_lowercase().as_str()))
.map(str::to_string)
.collect()
}
/// High-visibility chrome where mixed-language copy is most visible.
const SCRIPT_FIXTURE_IDS: &[MessageId] = &[
MessageId::ComposerPlaceholder,
MessageId::HistorySearchTitle,
MessageId::HistorySearchPlaceholder,
MessageId::StatusPickerTitle,
MessageId::StatusPickerInstruction,
MessageId::ConfigTitle,
MessageId::CommandPaletteTitle,
MessageId::AppModeAgentHint,
MessageId::AppModePlanHint,
MessageId::RouteNoModels,
MessageId::ProviderNoMatchesTitle,
MessageId::SessionsOpenedHistory,
];
#[test]
fn cyrillic_packs_have_script_purity_and_no_mixed_language_fixtures() {
for locale in [Locale::Ru, Locale::Uk] {
let messages = raw_locale_messages(locale);
let total = messages.len();
let with_cyrillic = messages
.values()
.filter(|v| v.as_str().is_some_and(has_cyrillic))
.count();
assert!(
with_cyrillic * 100 >= total * 85,
"{}: only {with_cyrillic}/{total} values contain Cyrillic — pack looks under-translated",
locale.tag()
);
for (key, value) in &messages {
let Some(value) = value.as_str() else {
continue;
};
if locale == Locale::Uk {
assert!(
!value.chars().any(|c| "ыэъЫЭЪ".contains(c)),
"uk {key} contains a Russian-only letter: {value}"
);
} else {
assert!(
!value.chars().any(|c| "іІїЇєЄґҐ".contains(c)),
"ru {key} contains a Ukrainian-only letter: {value}"
);
}
}
for id in SCRIPT_FIXTURE_IDS {
let value = tr(locale, *id);
assert!(
has_cyrillic(&value),
"{} {id:?} fixture has no Cyrillic: {value}",
locale.tag()
);
let leaked = latin_words_in_translated_copy(&value);
assert!(
leaked.is_empty(),
"{} {id:?} mixes Latin prose into Cyrillic copy: {leaked:?} in {value}",
locale.tag()
);
}
}
// The two packs are translations of the same source, not copies of
// each other: sentence-length fixtures must differ between ru and uk.
for id in [
MessageId::ComposerPlaceholder,
MessageId::StatusPickerInstruction,
MessageId::AppModeAgentHint,
MessageId::AppModePlanHint,
MessageId::ProviderNoMatchesTitle,
] {
assert_ne!(
tr(Locale::Ru, id),
tr(Locale::Uk, id),
"ru and uk share an identical sentence for {id:?} — one pack was copied from the other"
);
}
}
#[test]
fn hindi_pack_uses_devanagari_for_prose_fixtures() {
let messages = raw_locale_messages(Locale::Hi);
let total = messages.len();
let with_devanagari = messages
.values()
.filter(|v| v.as_str().is_some_and(has_devanagari))
.count();
assert!(
with_devanagari * 100 >= total * 80,
"hi: only {with_devanagari}/{total} values contain Devanagari — pack looks under-translated"
);
for id in SCRIPT_FIXTURE_IDS {
let value = tr(Locale::Hi, *id);
assert!(
has_devanagari(&value),
"hi {id:?} fixture has no Devanagari: {value}"
);
let leaked = latin_words_in_translated_copy(&value);
assert!(
leaked.is_empty(),
"hi {id:?} mixes Latin prose into Devanagari copy: {leaked:?} in {value}"
);
}
}
#[test]
fn no_shipped_locale_renders_a_missing_message_marker() {
// rust_i18n falls back to en for absent keys, so a "{MessageId}"
// debug string in the UI would mean the fallback chain itself broke.
for locale in Locale::shipped() {
assert!(
missing_message_ids(*locale).is_empty(),
"{} renders raw message ids (missing-marker UI)",
locale.tag()
);
}
}
// --- Devanagari grapheme safety (#4790 spike) --------------------------
#[test]
fn truncate_to_width_never_splits_devanagari_clusters() {
// क्ष is क + ् + ष — a single cluster. A budget landing inside it
// must drop the whole cluster; a dangling virama (U+094D) renders as
// visibly broken shaping (क् instead of a conjunct).
let conjuncts = "क्षत्रिय ज्ञान श्रृंखला प्रत्यक्ष";
for budget in [1usize, 2, 3, 5, 7, 40, 60, 80] {
let out = truncate_to_width(conjuncts, budget);
assert!(
UnicodeWidthStr::width(out.as_str()) <= budget,
"budget={budget}: overflowed: {out:?}"
);
assert!(!out.contains('\u{FFFD}'), "budget={budget}: {out:?}");
let body = out.strip_suffix('…').unwrap_or(&out);
assert!(
!body.ends_with('\u{094D}'),
"budget={budget}: dangling virama: {out:?}"
);
assert!(
!body.ends_with('\u{200D}'),
"budget={budget}: dangling ZWJ: {out:?}"
);
if let Some(last) = body.chars().last() {
let cp = last as u32;
let combining = (0x0900..=0x0903).contains(&cp) || (0x093A..=0x094F).contains(&cp);
assert!(
!combining,
"budget={budget}: trailing combining mark: {out:?}"
);
}
}
}
#[test]
fn cyrillic_latin_extended_and_devanagari_rows_wrap_within_terminal_columns() {
// Width/grapheme QA for the v0.9.2 scripts at narrow (40), medium
// (60), and standard (80) terminal columns: truncation clips by
// display width and wrapped rows never overflow the buffer.
let fixtures = [
(
"ru",
"Задача: миграция базы данных — проверка маршрутизации провайдера #3092",
),
(
"uk",
"Завдання: міграція бази даних — перевірка маршрутизації провайдера #4791",
),
(
"de",
"Aufgabe: Datenbankmigration — Anbieter-Routing für #4788 prüfen",
),
(
"fr",
"Tâche : migration de la base — vérifier le routage fournisseur #4788",
),
(
"ca",
"Tasca: migració de la base de dades — comprovar l'encaminament #4788",
),
(
"id",
"Tugas: migrasi basis data — periksa perutean penyedia untuk #4789",
),
("hi", "कार्य: डेटाबेस माइग्रेशन — प्रदाता रूटिंग की जांच करें #4790"),
];
for width in [40usize, 60, 80] {
for (tag, fixture) in fixtures {
let out = truncate_to_width(fixture, width);
assert!(
UnicodeWidthStr::width(out.as_str()) <= width,
"{tag} width={width}: truncated row overflowed: {out:?}"
);
assert!(
!out.contains('\u{FFFD}'),
"{tag} width={width}: split a glyph: {out:?}"
);
let area = Rect::new(0, 0, width as u16, 6);
let mut buf = Buffer::empty(area);
Paragraph::new(fixture)
.wrap(Wrap { trim: false })
.render(area, &mut buf);
let mut saw_text = false;
for (row_idx, y) in (area.top()..area.bottom()).enumerate() {
let row = visible_row_text(&buf, area, y);
let trimmed = row.trim_end_matches('\u{0}').trim_end();
assert!(
UnicodeWidthStr::width(trimmed) <= width,
"{tag} width={width} row {row_idx}: wrapped row overflowed ({} cols): {trimmed:?}",
UnicodeWidthStr::width(trimmed)
);
saw_text |= trimmed.chars().any(|ch| !ch.is_whitespace());
}
assert!(
saw_text,
"{tag} width={width}: fixture produced an empty render"
);
}
}
}
}