export default {
  aiChat: {
    // ── Multi-Agent parallel execution ──
    conflictsPending: '{n} conflicts to resolve',
    acceptA: 'Accept A',
    acceptB: 'Accept B',
    mergeBoth: 'Merge Both',
    manualResolve: 'Manual',

    // ── Conversation sidebar ──
    sidebarTitle: 'Chats',
    newConversation: 'New chat',
    doubleClickToRename: 'Double-click to rename',
    generating: 'Generating…',
    archive: 'Archive',
    unarchive: 'Unarchive',
    pinConversation: 'Pin',
    unpinConversation: 'Unpin',
    moreActions: 'More actions',
    archived: 'Archived',
    archivedCount: 'Archived ({n})',
    emptyConversation: 'No conversations',
    // UX-06 §3.1: conversation search (live title filter, Ctrl+K to focus)
    searchPlaceholder: 'Search chats…',
    searchEmpty: 'No matching chats',
    searchShortcutHint: 'Ctrl+K',

    // ── Time grouping (sidebar) ──
    today: 'Today',
    yesterday: 'Yesterday',
    earlier: 'Earlier',
    groupEmpty: 'None',

    // ── Header buttons ──
    conversationList: 'Chat list',
    maximize: 'Maximize',
    pendingApprovalCount: '{n} pending',
    pendingApprovalHint: 'Click to jump to the first pending approval',
    restoreSidebar: 'Restore sidebar',
    sidebarResizeHint: 'Drag to resize sidebar',
    detachWindow: 'Detach window',
    closePanel: 'Close panel',
    dockRight: 'Dock to main window right',
    undock: 'Undock',
    pinOnTop: 'Pin on top',
    unpin: 'Unpin',
    closeWindow: 'Close window',

    // ── Approval overlay (global top-right) ──
    approvalWaitingTitle: 'Approval required',
    approvalWaitingDesc: 'Click to review and handle',

    // ── System-level approval popup (standalone window, visible when app unfocused) ──
    popupTitle: 'Approval pending',
    popupTagPath: 'Path auth',
    popupTagRisk: 'Risk action',
    popupOpenPanel: 'Open approval panel',
    // 空态文案:正常空态会被 maybeAutoClose 即时关窗,此 hint 仅 close 失败时兜底
    popupEmptyHint: 'Closing…',

    // ── Provider status ──
    clickToSwitchProvider: 'Click to switch provider',
    providerNotConfigured: 'No AI provider configured. Please add one in settings.',
    notConfigured: 'Not configured',

    // ── F-01 阶段6: model picker (auto/specify toggle + dropdown) ──
    autoMode: 'Auto',
    specifyMode: 'Specify',
    autoModeHint: 'Auto mode: router picks the best model per scenario',
    specifyModeHint: 'Specify mode: use the selected model, overriding the router (main chat only)',
    selectModel: 'Select model',
    noModels: 'No models available. Please fetch in settings.',

    // ── Empty states (UX-2025-20: example prompt cards + no-provider guidance) ──
    emptyNoProvider: 'No AI provider configured',
    emptyNoProviderHint: 'Please add a provider in settings to start chatting',
    emptyTitle: 'Chat with AI assistant',
    emptyHint: 'Try "create a project" or "list all tasks"',
    // Example prompt cards: click to fill and send (4 prompts, DevFlow scenarios)
    examplePrompt1: 'Analyze this project’s dependencies',
    examplePrompt2: 'Help me write a workflow node',
    examplePrompt3: 'List all current tasks',
    examplePrompt4: 'Generate a project idea',
    goToSettings: 'Open settings',
    goToSettingsHint: 'The detached window cannot open settings directly. Configure AI providers on the main window’s Settings page.',

    // ── Provider switch feedback (UX-2025-14) ──
    providerSwitched: 'Switched to {model}',
    providerSwitchHint: 'Current model: {model}',

    // ── Back to bottom ──
    backToBottom: 'Back to bottom',

    // ── Pending queue ──
    queueTitle: 'Queued {n}/10',
    clearQueue: 'Clear',
    // UX-260616-06/07: queue item edit + send now
    queueEdit: 'Edit',
    queueSave: 'Save',
    queueCancel: 'Cancel',
    queueSendNow: 'Send now',

    // ── Skill ──
    clearSkill: 'Clear skill',
    placeholderWithSkill: 'Skill selected. Type arguments and press Enter',
    placeholderDefault: "Type a message... (/ for skills, {'@'} to mention)",
    skillNoMatch: 'No matching skill',
    skillNotLoaded: 'No local skills loaded',

    // ── UX-10: @ entity mention (@ opens popover, select inserts [Type:Name] token) ──
    mentionHint: "{'@'} to mention project/task",
    mentionGroupProject: 'Projects',
    mentionGroupTask: 'Tasks',
    mentionGroupIdea: 'Ideas',
    mentionNoMatch: 'No matching entity',
    mentionEmpty: 'No project/task to mention',

    // ── Send ──
    stopGenerating: 'Stop generating',
    // L2 状态机停止按钮三态(ConvState 派生)
    stopping: 'Stopping',
    stopFailedRetry: 'Stop failed, click to retry',

    // ── Input hint ──
    inputHint: 'Enter to send · Shift+Enter for newline',

    // ── F-260614-05 Phase 2b: image input (paste / drag-drop) ──
    removeImage: 'Remove image',
    imagePreviewAlt: 'Pending image',
    imageTooLarge: 'Image too large (max 10MB), skipped',
    imageLimit: 'Up to {n} images, extras ignored',
    imageReadFailed: 'Failed to read image',

    // ── Confirm dialog ──
    confirmDeleteConversation: 'Delete chat "{title}"? This cannot be undone.',
    // UX-260617-24: stronger warning when deleting the currently active conversation
    confirmDeleteActiveConversation: '"{title}" is the chat you are currently viewing. Deleting it will clear the current view and cannot be undone. Continue?',
    clearChat: 'Clear',
    confirmClearChat: 'Are you sure you want to clear all messages in this chat? This cannot be undone.',
    toastSendFail: 'Send failed: {msg}',

    // ── Message copy (F-260615-13) ──
    copyMsg: 'Copy message',
    copied: 'Copied',
    copyFailed: 'Copy failed',

    // ── Message actions bar (UX-02) ──
    regenerate: 'Regenerate',
    regenerateFailed: 'Regenerate failed: {msg}',
    regenerateUnavailable: 'No reply to regenerate',
    // fetch_url "Install obscura via AI" button triggers sendMessage; failure toast (mirrors editMessageFailed)
    sendFailed: 'Send failed: {msg}',

    // ── UX-09: edit last user message and regenerate ──
    editMessage: 'Edit',
    editMessageFailed: 'Edit failed: {msg}',
    editNotLastUser: 'Only the last user message can be edited',
    placeholderEditing: 'Edit message then Enter to regenerate (Esc to cancel)',

    // ── Error bubble actions (UX-03 / UX-260616-01) ──
    retry: 'Retry',
    goToSettingsAction: 'Open settings',

    // ── F-260616-03: max iterations reached pause action card ──
    maxRoundsReached: 'Max rounds reached. Continue?',
    maxRoundsHint: 'Continue runs another full round; stop ends with current results',
    continueLoop: 'Continue',
    stopLoop: 'Stop',
    continueLoopFailed: 'Continue failed: {msg}',
    stopLoopFailed: 'Stop failed: {msg}',

    // ── L1 help protocol (aichat experience & agent capability redesign §2.3, 2026-06-21): circuit-breaker help card ──
    helpRequiredAck: 'Choice noted. Please rephrase your request to try another approach / continue',

    // ── F-260619-03 Phase B: path authorization dialog (LLM accessing dir outside whitelist) ──
    dirAuthRequired: 'Path authorization required',
    dirAuthHint: '{tool} wants to access: {path}',
    dirAuthOnce: 'This time',
    dirAuthSession: 'This session',
    dirAuthAlways: 'Always',
    dirAuthDeny: 'Deny',
    dirAuthFailed: 'Authorization failed: {msg}',
    // M5:path deny second confirmation (deny is irreversible — tool returns Err, loop continues without retry; asymmetry with approve, prevents mis-clicks)
    dirAuthDenyConfirm: 'Deny authorization? The tool will fail immediately and will not be retried this round.',

    // ── Input Augmentation layer: mention/skill injection feedback ──
    // search_files blind search denied by whitelist fallback (no auth dialog; prompt user to use @mention or absolute path)
    searchFilesBlocked: 'search_files only works inside authorized dirs. Use @[project] to reference or provide an absolute path.',
    // /skill hot reload (ai_reload_skills IPC) success toast
    skillReloaded: 'Skills reloaded',
    // @mention entity resolve failed (id points to a project/task/idea/skill that was deleted or unavailable)
    mentionUnresolved: 'The mentioned {kind} was deleted or is unavailable',
    // Same-name skill conflict (scan_skills returns conflicts; frontend warns, injection takes first by skills>commands>plugins priority)
    skillConflict: 'Skill "{name}" has multiple definitions; using skills priority',

    // ── ⑥.4 Phase 4: @project expansion summary (input area preview) ──
    enrichmentBadge: '📎 Referenced "{project}" ({tasks} tasks, {ideas} ideas)',
    enrichmentExpand: 'Show context preview',
    enrichmentCollapse: 'Hide context preview',
    enrichmentLabel: 'Context preview',


    // ── F-15 phase 2: manual context management (clear / compress) ──
    // Buttons (Header action area: trash + compress icon)
    clearContext: 'Clear context',
    compressContext: 'Compress context',
    // Confirm dialog (clear is semantically irreversible; history archived, not deleted)
    // Title "Clear context" folded into the lead sentence; stress irreversible + archived segment + AI no longer sees history
    clearContextConfirm: 'Clear context? This action is irreversible. The current chat context will be archived as a segment (the AI will no longer see these history messages). New chats are not affected.',
    // Danger button label for the confirm dialog (ConfirmDialog dangerLabel); falls back to common.confirm if omitted
    clearContextDangerLabel: 'Clear',
    // Collapsed separator (consecutive same-status merged into one bar; {n}=merged message count)
    contextArchived: 'Archived {n} messages',
    compressed: 'Context compressed',
    compressing: 'Compressing…',
    clearSuccess: 'Context cleared',
    compressSuccess: 'Context compressed',
    compressError: 'Compression failed: {msg}',
    clearError: 'Clear failed: {msg}',
    // Separator expand / collapse
    expand: 'Expand',
    collapse: 'Collapse',
    // Compressed summary block label (before the system summary message when expanded)
    compressedSummaryLabel: 'Context summary',

    // ── TopBar bottom context badges (tooltip + L3 full context popover labels) ──
    viewGoals: 'View goals',
    viewHistory: 'View history messages',
    viewSummary: 'View context summary',
    viewContext: 'View AI context',
    contextSystemPrompt: 'System Prompt',
    contextEnvironment: 'Environment',
    contextCompressedSummary: 'Compressed Summary',
    contextEnrichment: 'Enriched Context',
    contextCountUnit: 'items',

    // ── EnrichmentPanel ──
    enrichmentDismiss: 'Unlink',

    // ── AE-2025-04 Session Trust ──
    // Auto-approval toast (same-session already approved same-kind op: same tool + same dir)
    autoApprovedToast: 'Auto-approved: {tool}({dir})',

    // ── CIStatus.vue (commit CI checks status card) ──
    ciTitle: 'CI Checks',
    ciNFailed: '{n} failed',
    ciNPending: '{n} pending',
    ciNPassed: '{n} passed',
  },
}
