export default {
    common: {
        apply: "Apply",
        cancel: "Cancel",
        close: "Close",
        copy: "Copy",
        confirm: "Confirm",
        refresh: "Refresh",
        yes: "Yes",
        no: "No",
        exit: "Exit",
        back: "Back",
        next: "Next",
        save: "Save",
        empty: "—",
        unknownError: "Unknown error",
        inputClearTip: "Ctrl+C clear",
    },
    configDialog: {
        title: "Settings",
        hint: "Tab/Shift+Tab switch field  •  Enter Apply  •  Esc Cancel",
        modelsTitle: "Models (custom)",
        modelsPlaceholder: "model-a, model-b",
        contextWindowTitle: "Context Window",
        contextWindowLocked: "Context Window (model-defined)",
        contextWindowPlaceholder: "128000",
        temperatureTitle: "Temperature",
        temperaturePlaceholder: "0.7",
        temperatureValidationError: 'Temperature: only numbers and "."',
        maxTokensTitle: "Max Output Tokens",
        maxTokensPlaceholder: "8192",
        baseUrlTitle: "Base URL (OpenAI-compatible)",
        baseUrlPlaceholder: "https://api.openai.com/v1",
        apiKeyCurrentPrefix: "Current:",
        apiKeyNotSet: "(not set)",
        apiKeyTitle: "API Key",
        apiKeyPlaceholder: "Paste a new key to update (leave empty to keep)",
        interleavedThinkingTitle: "Interleaved Thinking (Press Space toggle)",
        interleavedThinkingLocked: "Interleaved Thinking (model-defined)",
        interleavedThinkingOpen: "Open",
        interleavedThinkingClose: "Close",
        tipIntensityTitle: "Tip Intensity",
        tipIntensityOff: "Off",
        tipIntensityLow: "Low",
        tipIntensityStandard: "Standard",
        shortcutsTitle: "Shortcuts",
        shortcutCommandsLabel: "Commands",
        shortcutTimelineLabel: "Timeline",
        shortcutNewSessionLabel: "New session",
        shortcutsPlaceholder: "e.g. mod+p",
        shortcutsHint: "Use mod/ctrl/alt/shift + key (a-z, 0-9, F1-F12).",
    },
    languageDialog: {
        title: "Language",
        hint: "Enter Apply  •  Esc Cancel",
        languageTitle: "Language",
        languageEnglish: "English",
        languageChinese: "简体中文",
    },
    toolSettingsDialog: {
        title: "Tool Settings",
        hint: "Enter Apply  •  Esc Cancel",
        websearchTitle: "WebSearch API Key",
        apiKeyCurrentPrefix: "Current:",
        apiKeyNotSet: "(not set)",
        apiKeyPlaceholder: "Paste Serper API key",
    },
    pluginsDialog: {
        title: "Plugins",
        hint: "Select a plugin to configure  •  Esc Close",
        serperSearch: "Serper Search",
        serperSearchDetail: "Web search via Serper API",
        configured: "Configured",
        notConfigured: "Not configured",
        serperConfigTitle: "Serper Search Settings",
        serperConfigHint: "Enter Apply  •  Esc Cancel",
    },
    mcpSettingsDialog: {
        title: "MCP",
        hint: "Edit the mcp.json file to configure MCP servers  •  Esc Close",
        configFileLabel: "Config file:",
        noServersHint: "No MCP servers configured yet.",
        serverCount: "{count} server(s) configured",
        guideText: "Edit the file above to add or modify MCP servers.",
        openFile: "Open File",
        reload: "Reload",
        close: "Close",
        reloaded: "MCP config reloaded.",
        reloadFailed: "Failed to reload: {error}",
        status: "Status",
        toolCount: "Tools",
        disabled: "disabled",
        testConnection: "Test",
        testing: "Testing connections...",
        testComplete: "Test complete.",
        testPartial: "Test complete with errors.",
        testFailed: "Connection failed: {error}",
        invalidJson: "Invalid JSON: {error}",
        invalidShape: 'Invalid MCP JSON: expected "mcpServers".',
        invalidServer: "Invalid MCP server: {name}",
        noServers: "No MCP servers found.",
        lintOk: "JSON syntax OK",
        lintAt: "{error} (line {line}, col {column})",
        lintUnclosed: "Unclosed {char} (line {line}, col {column})",
        lintInvalid: "{error}",
        exampleFormat: "Example format:",
    },
    toolApprovalsDialog: {
        title: "Tool Approvals",
        useAuto: "Auto",
        useNormal: "Normal",
        useStrict: "Strict",
        close: "Close",
        focusedTitleAuto: "AUTO",
        focusedTitleNormal: "NORMAL",
        focusedTitleStrict: "STRICT",
        focusedTitleClose: "CLOSE",
        focusedDescAuto: "Auto-approve all tool calls. No approval prompts (fastest, least safe).",
        focusedDescNormal: "Auto-approve read-only tools. Prompt before write/execute tools.",
        focusedDescStrict: "Require confirmation for every tool call (safest, slowest).",
        focusedDescClose: "Close this dialog without changing the current setting.",
        currentPrefix: "Current: {mode}",
        tip: "Tip: use ←/→ to move between buttons, Enter to confirm, Esc to close.",
    },
    settingsDialog: {
        pendingApproval: "Resolve the pending approval before changing settings.",
        invalidShortcut: "Invalid shortcut for {label}: {value}",
        shortcutCommands: "Commands shortcut",
        shortcutTimeline: "Timeline shortcut",
        shortcutNewSession: "New session shortcut",
        toolApprovalsApplied: "Tool approvals: {mode}",
        applied: "Settings applied.",
    },
    exitAppDialog: {
        title: "Exit DimCode",
        confirm: "Exit now?",
        warning: "An agent response is still in progress. Exiting will interrupt it.",
        reasonPrefix: "Reason: {reason}",
    },
    approvalDialog: {
        title: "Approve Tool Permission",
        toolLabel: "Tool: {tool}{suffix}",
        toolLabelSuffix: " ({description})",
        permissionLabel: "Permission: {permission} ({risk})",
        descriptionLabel: "Description: {description}",
        commandLabel: "Command:",
        inlineActionHint: "↑/← Prev  ↓/→ Next  Enter Confirm  1/2/3 Choose",
        inlineActionHintCompact: "←/→ Move  Enter Confirm  1/2/3 Choose",
        buttons: {
            approve: "Approve",
            alwaysApprove: "Always approve",
            deny: "Deny",
            always: "Always",
            ok: "OK",
            no: "No",
            y: "Y",
            all: "All",
            n: "N",
        },
    },
    askUserDialog: {
        noQuestionsTitle: "No Questions",
        noQuestionsBody: "No questions to answer.",
        title: "Question {index}/{total}: {header}",
        defaultHeader: "Question",
        prev: "Prev",
        next: "Next",
        submit: "Submit",
        otherOption: "Other",
        otherDetail: "Provide a custom answer",
        inlineHintOptions: "Keys: ↑↓ to move, ←→ to switch questions, Enter to select.",
        inlineHintMulti: "Multi-select: Space toggles checked state.",
        inlineHintButtons: "Tab to buttons, ←→ to switch, Enter to activate, ↑ returns to options.",
        inlineHintNav: "Ctrl+Left / Ctrl+Right (or Ctrl+A / Ctrl+E) to switch questions.",
        inlineHintSubmit: "Ctrl+Enter submits, Esc cancels.",
        inlineButtonPrev: "[Prev]",
        inlineButtonNext: "[Next]",
        inlineButtonSubmit: "[Submit]",
        inlineButtonCancel: "[Cancel]",
        inlineActionHint: "Space Select  ← Prev  → Next  Enter Next/Submit  Esc Cancel",
        inlineActionHintCompact: "Space Select  ←/→ Prev/Next  Enter Next/Submit  Esc Cancel",
        optionsSummaryAll: "{count} options",
        optionsSummaryVisibleMore: "{count} options ({start}-{end}) ↓ more",
        multiSelectHint: "[Multi-select] Space to toggle, Enter to confirm",
        singleSelectHint: "[Single-select] Use arrows, Enter to confirm",
        customAnswerLabel: "Custom answer:",
        customAnswerPlaceholder: "Type your answer...",
        otherPlaceholder: "Other selected — type your answer and press Enter to fill.",
    },
    nextApiOAuthDialog: {
        title: "Next API OAuth Login",
        copyUrl: "Copy URL",
        login: "Login",
        logout: "Logout",
        statusTitle: "Status",
        statusAuthenticated: "✓ Logged in as {email}",
        statusLoading: "⏳ Authenticating...",
        statusNotLoggedIn: "✗ Not logged in",
        instructionAuthenticated: "Use ↑↓ to navigate, Enter to select, or numbers 1-9",
        instructionLoading: "Press C to copy the URL below if browser did not open",
        instructionNeedsSetup: "Check the Next API OAuth client redirect_uri, scopes, and enabled state, then try again",
        instructionWithUrl: "Press C to copy the OAuth URL below, or press Enter to open browser",
        instructionUnauthed: "Press Enter to login with Next API OAuth, or Esc to close",
        oauthUrlTitleLoading: "OAuth URL (copy if browser did not open)",
        oauthUrlTitleReady: "OAuth URL (ready to use)",
        scrollIndicator: " [{start}-{end} of {total}]",
        selectModelTitle: "Select Model (↑↓/1-9, Enter to select){indicator}",
        aboutTitle: "About Next API OAuth",
        setupTitle: "OAuth login error",
        aboutBulletOne: "• Uses the built-in FAZHI Tech Next API OAuth client",
        aboutBulletTwo: "• Fetches relay models after login and stores provider config",
        aboutBulletThree: "• Uses OAuth refresh tokens instead of a long-lived API key",
        viewAllPlans: "View All Plans →",
        defaultAccount: "Next API Account",
        toast: {
            generatingUrl: "Generating OAuth URL...",
            urlReady: "OAuth URL ready! Copy it or press Enter to open browser.",
            generateUrlFailed: "Failed to generate OAuth URL: {error}",
            startingLogin: "Starting OAuth login...",
            browserOpened: "Browser opened. If not, copy the URL from the dialog.",
            copyUrlToLogin: "Copy the OAuth URL from the dialog to login.",
            urlCopied: "OAuth URL copied to clipboard.",
            urlCopyFailed: "Failed to copy OAuth URL.",
            authSuccess: "Successfully authenticated with Next API OAuth!",
            loginFailed: "OAuth login failed: {error}",
            loggedOut: "Logged out from Next API OAuth",
            loggedOutWithRemoteWarning: "Logged out from Next API OAuth, but remote revoke failed: {error}",
            logoutFailed: "Logout failed: {error}",
            initFailed: "Dialog initialization error: {error}",
            modelSwitched: "Model switched to {model}",
            selectModelFailed: "Failed to select model: {error}",
        },
    },
    debugTryDialog: {
        titleDebug: "Debug",
        titleDebugging: "Debugging",
        copy: "copy",
        proceed: "proceed",
        fixed: "fixed",
        body: "I’ve added debug logs (and possibly a fix). Please try to reproduce the issue now, then choose an outcome.",
    },
    exitSessionDialog: {
        title: "Exit Session",
        confirm: "Exit the current session and return to Home?",
        note: "Next message will start a new session.",
    },
    messageActionsDialog: {
        title: "Message Actions",
        revert: "Revert messages",
        revertWithFiles: "Revert messages and file changes",
        revertKeepFiles: "Revert messages (keep file changes)",
        revertFilesOnly: "Revert file changes only",
        copy: "Copy message text to clipboard",
        fork: "Fork create a new session",
        pin: "Pin message",
        unpin: "Unpin message",
    },
    pathPickerDialog: {
        hint: "↑/↓ select • Tab complete • Enter confirm • Esc close",
    },
    providerConnectDialog: {
        title: "Connect {provider}",
        providerFallback: "Provider",
        hint: "Tab switch • Ctrl+C clear • Enter Apply",
        hintOpenAI: "Tab switch • Ctrl+C clear • Enter Apply",
        hintGemini: "Tab switch • Ctrl+C clear • Enter Apply",
        hintAnthropic: "Tab switch • Ctrl+C clear • Enter Apply",
        hintGeneric: "Tab switch • Ctrl+C clear • Enter Apply",
        applyingHint: "Testing connection, please wait...",
        applyingButton: "Applying...",
        testConnection: "Test connection",
        baseUrlStatusAutoFix: "Auto-fix: {value}",
        baseUrlStatusInvalid: "Base URL must be http(s)",
        baseUrlTitle: "Base URL",
        baseUrlPlaceholder: "https://api.example.com/v1",
        apiKeyTitle: "API Key",
        apiKeyPlaceholder: "Paste a new key to update (leave empty to keep)",
        apiKeyCurrent: "Current: {value}",
        apiKeyNotSet: "Current: (not set)",
        clearKey: "Delete",
        useDetectedKey: "Use {name}",
    },
    redoConfirmDialog: {
        title: "Confirm Redo",
        body: "Are you sure you want to restore the reverted messages?",
    },
    renameSessionDialog: {
        title: "Rename session",
        label: "Session name",
        placeholder: "e.g. Planning notes",
    },
    sessionsDialog: {
        timeNow: "now",
        timeMinutes: "{count} min",
        timeHours: "{count} hr",
        timeDays: "{count} d",
        newSession: "New session",
        title: "Sessions ({count})",
        titleScoped: "Sessions ({count}/{total})",
        scope: "Scope: {cwd}",
        loading: "Loading…",
        confirmDelete: "Confirm delete: press Delete again",
        header: "{count} sessions • Arrow keys to navigate • Enter selects{range}{activity}",
        headerRange: " • Showing {start}-{end}",
        runningCount: "{count} running",
        pausedCount: "{count} waiting confirmation",
        hint: "Type to jump • ←/→ buttons • Enter confirm • Esc close",
        focusPrefix: "Focus: {focus}",
        focusList: "List",
        focusButtons: "Buttons",
        noSessionsCwd: "No sessions in this cwd",
        noSessions: "No saved sessions yet",
        nodeOnly: "Sessions are only available in Node/CLI mode.",
        newSessionTitle: "New Session",
        newSessionTarget: "a new session",
        busy: {
            agentResponding: "Agent is still responding",
            awaitingAskUser: "Awaiting AskUser answers",
            awaitingToolApproval: "Awaiting tool approval",
            pendingApproval: "Pending approval",
        },
        buttons: {
            open: "Open",
            delete: "Delete",
            deleteConfirm: "Delete (confirm)",
            scope: "Scope: {scope}",
            scopeCwd: "CWD",
            scopeAll: "All",
            refresh: "Refresh",
        },
    },
    switchSessionDialog: {
        title: "Switch Session",
        confirm: "Switch & Interrupt",
        target: "Switch to {target}?",
        fallback: "Switch sessions now?",
        warning: "This will interrupt the current response/flow in the active session.",
        reason: "Reason: {reason}",
    },
    themeDialog: {
        title: "Theme",
        hint: "Enter Apply  •  Esc Cancel",
        mode: "Mode",
        light: "Light",
        dark: "Dark",
        tip: "Tip: default follows system theme.",
    },
    commandPalette: {
        searchPlaceholder: "Search…",
        noMatches: "No matches",
        hint: "Type to filter • Enter: open • Esc: close",
        title: "Commands",
    },
    help: {
        title: "Help",
        modeLabel: "Mode: {mode}",
        modeDetail: "Current assistant mode.",
        shortcutsLabel: "Shortcuts",
        onboarding: 'Welcome! Quick start:\n1) /connect: connect a provider\n2) /models: pick a model\n3) send "hello" to start chatting\nTip: {commandsKey} opens command palette.',
        items: {
            help: "Help and shortcuts (F1)",
            commands: "Command palette (Ctrl+P)",
            back: "Back to the previous jump",
            status: "Toggle status details",
        },
    },
    commands: {
        help: {
            label: "Help",
            detail: "Shortcuts + common commands (F1)",
        },
        sessions: {
            label: "Sessions",
            detail: "Pick or create a session (/sessions)",
        },
        timeline: {
            label: "Timeline",
            detail: "Jump to a user message (/timeline)",
        },
        trace: {
            label: "Request Trace",
            detail: "Inspect the current session request trace (/trace)",
        },
        newSession: {
            label: "New Session",
            detail: "Start a new session (/new)",
        },
        connectProvider: {
            label: "Connect Provider",
            detail: "Connect a provider (/connect)",
        },
        models: {
            label: "Models",
            detail: "Select a model (/models)",
        },
        toolApprovals: {
            label: "Tool Approvals",
            detail: "Configure approvals (/approvals)",
        },
        toolSettings: {
            label: "Tool Settings",
            detail: "Configure tool-specific settings (/tool-settings)",
        },
        mcpHub: {
            label: "MCP",
            detail: "Manage MCP connectors and settings (/mcp)",
        },
        plugins: {
            label: "Plugins",
            detail: "Manage plugins (/plugins)",
        },
        mcpSettings: {
            label: "MCP (Advanced JSON)",
            detail: "Configure raw MCP server JSON (/mcp-settings)",
        },
        language: {
            label: "Language",
            detail: "Switch UI language (/language)",
        },
        settings: {
            label: "Settings",
            detail: "Custom provider settings (/settings, Ctrl+K)",
        },
    },
    homePage: {
        multilineTitle: "Multiline Text",
        multilineTitleWithCount: "Multiline Text ({count} lines)",
        providerCustom: "Custom",
        reviewPrompt: "help me review the code changes",
        footerCwd: "cwd {cwd}",
        hints: {
            switchMode: "switch mode",
            commands: "commands",
        },
        tips: {
            greeting: "Welcome back! Try {commandsKey} or {init} to get started.",
            commandsAlias: "Tip: {key} opens the command palette.",
        },
        prompts: {
            help: "Help & shortcuts (F1)",
            sessions: "List/pick sessions",
            connect: "Connect a provider",
            models: "Select a model",
            newSession: "Start a new session",
            approvals: "Configure tool approvals (auto/normal/strict)",
            commands: "Open command palette",
            toolSettings: "Configure tool-specific settings",
            mcpSettings: "Open MCP",
            plugins: "Manage plugins",
            language: "Switch UI language",
            theme: "Select a theme",
            status: "Toggle status details",
            review: "Review code changes",
            init: "Initialize/improve AGENTS.md",
            skills: "List loaded skills",
            exit: "Exit the application",
            debug: "Debug dialog (chat)",
            settings: "Custom provider settings",
        },
        commandPalette: {
            connect: "Connect a provider",
            models: "Select a model",
        },
        commands: {
            debugLabel: "Debug",
            debugDetail: "Runtime stats (/debug)",
        },
        toast: {
            approvalsUsage: "Use /approvals (no on/off).",
            customProviderOnly: "Settings only for custom providers.",
            redoChatOnly: "Redo is only available in the chat view.",
            retryChatOnly: "Retry is only available in the chat view.",
            pinsChatOnly: "Pins are only available in the chat view.",
            renameChatOnly: "Rename is only available in the chat view (/rename <title>).",
            commandRemoved: "This command is no longer available: {command}",
            helpAliasRemoved: "Press F1 for help.",
            deleteConfirm: "Press Delete again to confirm.",
            themeToggled: "Theme: {mode}",
            pasteImagePending: "Image is still processing. Please wait.",
        },
    },
    chatPage: {
        placeholder: "Ask anything... (newline: Shift+Enter or Ctrl+J)",
        placeholderAwaitingApproval: "Blocked by approval: select Approve / Deny to continue.",
        reviewPrompt: "help me review the code changes",
        notification: {
            approvalTitle: "[Approval Required] Tool Permission",
            approvalMessage: "DimCode is waiting for tool approval: {tool}.",
            doneTitle: "[Task Complete]",
            doneMessage: "DimCode finished this task.",
            doneMessageWithDuration: "DimCode finished this task in {duration}.",
            doneMessageWithTools: "DimCode finished this task after {tools} tool call(s).",
            doneMessageWithToolsAndDuration: "DimCode finished this task in {duration} with {tools} tool call(s).",
        },
        headerStats: "{messages} msgs · {tokens} tok",
        contextChip: "≈{pct}% / {tokens} tok",
        contextChipCompact: "{pct}%",
        thinkingWords: "Coalescing,Thinking,Reasoning,Planning,Analyzing,Synthesizing,Refining,Composing",
        modelFallback: "model",
        mode: {
            plan: "plan",
            agent: "agent",
            debug: "debug",
        },
        status: {
            approvalsAuto: "AUTO",
            approvalsAll: "ALL",
            blockedByApproval: "Blocked by approval",
            awaitingApprovalAction: "Waiting for your approval: choose Approve / Deny to continue.",
        },
        footer: {
            dragSelect: "drag to select",
            openLink: "Ctrl+Click to open files or links",
            esc: "esc",
            interrupt: "interrupt",
            approvalPaused: "⏸ Paused",
            approvalPausedHint: "Waiting for approval (Enter to choose).",
            shortcuts: "Ctrl+K: config    Ctrl+O: expand/collapse tools & thinking    Cmd+Delete/Ctrl+W: clear input    Tab: switch mode    {commandsKey}: commands",
            shortcutsCompact: "Ctrl+K: config    Ctrl+O: tools/thinking    Cmd+Delete/Ctrl+W: clear    Tab: switch mode    {commandsKey}: commands",
            shortcutsMicro: "Ctrl+O: tools    {commandsKey}: commands",
            shortcutsMini: "{commandsKey}: commands",
        },
        session: {
            new: "new",
        },
        timeline: {
            title: "Timeline",
            empty: "(empty)",
            filterAll: "All messages",
            filterUser: "User messages",
            filterTool: "Tool calls",
        },
        pins: {
            title: "Pinned",
            empty: "(empty)",
        },
        jumpToBottom: {
            button: "↓",
        },
        prompts: {
            help: "Help & shortcuts (F1)",
            newSession: "Start a new session",
            resume: "Resume the paused queue",
            sessions: "List/pick sessions",
            timeline: "Jump to a user message",
            trace: "Inspect the current session request/event trace",
            pins: "Open pinned messages",
            pin: "Pin the last message",
            back: "Back to previous jump",
            connect: "Connect a provider",
            models: "Select a model",
            theme: "Switch UI theme",
            approvals: "Configure tool approvals (auto/normal/strict)",
            commands: "Open command palette",
            toolSettings: "Configure tool-specific settings",
            mcpSettings: "Open MCP",
            plugins: "Manage plugins",
            language: "Switch UI language",
            status: "Toggle status details",
            review: "Review code changes",
            retry: "Retry the last user message",
            compact: "Compact session context",
            init: "Initialize/improve AGENTS.md",
            rename: "Rename current session",
            skills: "List loaded skills",
            exit: "Exit the application",
            debug: "Debug dialog",
            settings: "Custom provider settings",
        },
        commands: {
            pinsLabel: "Pins",
            pinsDetail: "Open pinned messages",
            backLabel: "Back",
            backDetail: "Return to the previous jump",
            debugLabel: "Debug",
            debugDetail: "Runtime stats (/debug)",
            statusLabel: "Status",
            statusDetail: "Toggle status details",
            themeLabel: "Theme",
            themeDetail: "Switch color theme",
        },
        tips: {
            contextWarn: "Tip: Context is getting full. Consider /compact or /new to keep replies sharp.",
            contextCritical: "Tip: You are near the context limit. Start a new session with /new (or /compact first).",
            timeline: "Tip: Long chat? Use /tl to jump back to a specific user message.",
            timelineAlias: "Tip: /tl is a short alias for /timeline.",
            commandsAlias: "Tip: {key} opens the command palette.",
            errorRecovery: "Tip: If something failed, try /compact or /new.",
            greeting: "Welcome back! Try {commandsKey} or {init} to get started.",
            compactDelight: "Nice! Keeping context lean helps.",
            addTests: "All set! Want me to add tests? Reply “yes” or “ok”.",
        },
        trace: {
            title: "Session Trace",
            loading: "Loading session trace...",
            empty: "No request trace is available for this session yet.",
            error: "Failed to load session trace.",
            summary: "{requests} requests · {events} events",
            hint: "Arrow keys switch requests · Refresh reloads · Esc closes",
            sessionEvents: "Session-level events",
            requestFallback: "(empty prompt)",
            counts: "{events} events · {runs} runs · {tools} tools · {children} child tasks · {compactions} compactions",
            moreEvents: "… {count} more events",
        },
        confirm: {
            addTests: "Please add tests for the changes we just made.",
        },
        toast: {
            customProviderOnly: "Settings only for custom providers.",
            renameNodeOnly: "Rename is only available in Node/CLI mode.",
            noActiveSession: "No active session to rename.",
            sessionNameEmpty: "Session name cannot be empty.",
            sessionRenamed: "Renamed session to: {title}",
            renameFailed: "Failed to rename session.",
            linkOpenHint: "Tip: Ctrl+Click to open files or links.",
            copySuccess: "Copied",
            copyFailed: "Copy failed",
            forkFailed: "Failed to fork session.",
            backEmpty: "No previous jump to return to.",
            pinsEmpty: "No pinned messages yet.",
            pinEmpty: "No message to pin yet.",
            pinned: "Pinned message.",
            unpinned: "Unpinned message.",
            debugUnavailable: "Debug server is unavailable.",
            approvalsUsage: "Use /approvals (no on/off).",
            debugDialogOpened: "Debug dialog opened.",
            debugDialogClosed: "Debug dialog closed.",
            traceUnavailable: "Session trace is unavailable in this runtime.",
            renameUsage: "Usage: /rename <title>",
            themeToggled: "Theme: {mode}",
            statusCompactOn: "Status: compact",
            statusCompactOff: "Status: detailed",
            compactingSession: "Compacting session...",
            compactSuccess: "Session compacted: {message}",
            compactWarning: "Session compacted with limited gain: {message}",
            compactSuccessDetailWithTokens: "Folded the first {count} history messages into a summary. Estimated input {before} -> {after} tokens, saving about {saved} tokens.",
            compactSuccessDetailNotReduced: "Folded the first {count} history messages into a summary, but the estimated input changed from {before} to {after} tokens, so this did not reduce request size.",
            compactSuccessDetailCountOnly: "Folded the first {count} history messages into a summary.",
            compactSuccessDetailSummaryOnly: "Generated a fresh conversation summary.",
            compactFailed: "Failed to compact session: {error}",
            compactFailedTokenLimit: "Compaction failed due to insufficient context budget. Set DIMCODE_CONTEXT_WINDOW correctly, switch to a larger-context model, or use /new. Detail: {error}",
            retryEmpty: "No previous user message to retry.",
            commandRemoved: "This command is no longer available: {command}",
            helpAliasRemoved: "Press F1 for help.",
            waitForResponse: "Please wait for the current response to complete, or press Esc to interrupt.",
            pasteImagePending: "Image is still processing. Please wait.",
            pendingApproval: "Please handle tool_approve first.",
            awaitingApprovalAction: "Paused: action needed. Choose Approve / Always approve / Deny in the permission card.",
            awaitingApprovalStillWaiting: "Still waiting for approval ({seconds}s). The model will not continue until you approve or deny.",
            pendingAskUser: "Please handle ask_user first.",
            sessionBusyElsewhere: "Another window is still running this session. Wait for it to finish before sending here.",
            notificationSessionBusy: "This notification belongs to another busy session. Finish that work or switch sessions manually first.",
            notificationSessionUnavailable: "Cannot open the session for this notification here.",
            notificationSessionSwitchFailed: "Failed to open the session for this notification.",
            approvalNotActive: "This approval is queued. Resolve the active one first.",
            askUserNotActive: "This ask_user request is no longer active.",
        },
    },
    chatQueue: {
        label: "Queue ({count})",
        labelCompact: "Queue {count}",
        more: "+{count} more…",
        resumeToken: "/resume",
        resumePlainToken: "resume",
        resumeLegacyToken: "resume queue",
        state: {
            idle: "Pending",
            running: "Running",
            paused: "Paused",
            error: "Error",
        },
        item: {
            steerAction: "Steer",
            steerReady: "First",
            steerPending: "Next",
            steerPaused: "Paused",
        },
        toast: {
            enqueued: "Added to queue (#{count}).",
            full: "Queue is full (max 5). Delete one or start /new.",
            cleared: "Cleared {count} queued item(s).",
            deleted: "Deleted {count} queued item(s). Ctrl+Z to undo.",
            steerPromoted: "Upgraded to steer. It will run first when the queue resumes.",
            steerQueued: "Steer cannot be injected immediately. It was promoted and will run first on the next round.",
            steerSent: "Steer accepted. It will be injected before the next model call in this round.",
            undo: "Queue delete undone.",
            pausedTip: "Queue paused. Use {resume} or {resumeText} to continue, or send a new message to choose what to do.",
            stale: "Queue paused: request looks stuck.",
        },
        confirm: {
            title: "Continue queued messages?",
            description: "Previous request did not finish. {count} queued message(s) waiting.",
            hint: "Continue to send the next item, or pause the queue.",
            continue: "Continue",
            pause: "Pause",
            reason: "Reason: {reason}",
        },
        reason: {
            network_error: "Network error.",
            timeout: "Request timed out.",
            canceled_by_user: "Canceled by user.",
            rate_limited: "Rate limited.",
            config_unavailable: "Saved config unavailable.",
            unknown: "Request failed.",
        },
        draftDecision: {
            title: "Queue is paused",
            description: "{count} queued message(s) are still waiting. Decide what to do with your new input.",
            previewLabel: "New input:",
            continue: "Continue queue",
            append: "Append to queue",
            replace: "Discard queue & send",
        },
    },
    chatStatus: {
        done: "Done.",
        error: "Error.",
        interrupted: "Interrupted.",
        permissionDenied: "Permission denied.",
        planning: "Planning…",
        drafting: "Drafting…",
        runningTool: "Running {tool}…",
        runningTools: "Running {count} tools…",
        approvalPendingOther: "Another approval is pending ({permission})…",
        awaitingApproval: "Awaiting approval…",
        awaitingApprovalWithPerm: "Awaiting approval ({permission})…",
        awaitingApprovalWithRisk: "Awaiting approval ({risk})…",
        awaitingAnswers: "Awaiting answers…",
        resumingApproved: "Approved. Resuming…",
        resumingDenied: "Denied. Resuming…",
        resuming: "Resuming…",
        autoApprovingWithRisk: "Auto-approving ({risk})…",
        riskFallback: "risk",
        toolFallback: "tool",
        thinking: "Thinking…",
        autoCompactionRequired: "Context is near the limit. Compaction is required first.",
        autoCompactionRequiredDetailed: "Context is near the limit · the next request is estimated at {estimated} tokens, and auto-compaction starts at {threshold} tokens, so compaction is required first.",
        compressed: "Context compacted · folded {removed} older messages into a summary, saving an estimated {saved} input tokens ({elapsed}ms)",
        autoCompactedDetailed: "Auto-compaction completed · folded {removed} older messages into a summary, estimated input {before} -> {after} tokens, saving about {saved} tokens",
        autoCompactedNotReduced: "Auto-compaction completed · folded {removed} older messages into a summary, but the estimated input changed from {before} to {after} tokens, so this did not reduce request size",
        autoCompactedSaved: "Auto-compaction completed · folded {removed} older messages into a summary, saving about {saved} tokens",
        autoCompactedCountOnly: "Auto-compaction completed · folded {removed} older messages into a summary",
        interruptedMarkdown: "> **Interrupted** · Response canceled by user (`Esc`).",
        awaitingApprovalPrefix: "Awaiting approval",
        awaitingAnswersPrefix: "Awaiting answers",
        approvalPendingPrefix: "Another approval is pending",
        autoApprovingPrefix: "Auto-approving",
    },
    chatParts: {
        thinking: "Thinking",
        plan: "Plan",
        todo: "Todo",
    },
    chatRender: {
        userLabel: "user",
        outputLabel: "↳ output",
        outputLabelShort: "out:",
        canceled: "canceled",
        inputLabel: "in:",
        collapse: "... (collapse)",
        moreLines: "... ({count} more lines)",
        moreLinesOmitted: "... ({count} more lines omitted; set {envVar} to increase)",
        streamingTail: "… (streaming: showing last {shown} chars; {omitted} omitted)",
        copy: "Copy",
        userResponses: "User responses:",
        approvalQueued: "Waiting for earlier approval...",
        proposedPlan: {
            title: "Proposed Plan",
        },
        llmMeta: {
            changedFiles: "Changed {count} file(s): {files}",
            changedFilesMore: "+{count} more",
            revertHint: "Tip: Click this message -> Revert messages to undo this turn.",
            changedFilesCardTitle: "changed {count} files:",
            revertButton: "Revert",
        },
        toolName: {
            explore: "Explore",
            subagent: "Subagent",
        },
        toolSuffix: {
            offset: "offset {value}",
            limit: "limit {value}",
            matches: "{count} matches",
            todos: "{count} todos",
            results: "{count} results",
            results_one: "{count} result",
        },
        toolGroup: {
            readFiles: "Read {count} files",
            writeFiles: "Write {count} files",
            editFiles: "Edit {count} files",
            globPatterns: "Glob {count} patterns",
            globSingle: "Glob {pattern}",
            grepPatterns: "Grep {count} patterns",
            bashCommands: "Run {count} commands",
            searchQueries: "Search {count} queries",
            taskCount: "{name} x{count}",
            generic: "{name} x{count}",
        },
    },
    toolApproval: {
        reason: {
            search: "Search may access the network.",
            bash: "Bash can execute commands.",
            edit: "File changes can modify local files.",
            grep: "Grep may read local files.",
        },
        inlineHint: "Keys: ↑↓←→ to move, Enter to select.",
        awaitingUserAction: "Waiting for your action: choose Approve / Always approve / Deny.",
        decision: {
            userDenied: "User denied approval",
        },
        denied: {
            title: "# Tool permission denied",
            toolLine: "- tool: `{tool}`",
            permissionLine: "- permission: `{permission}`",
            hint: "You can re-select the tool_call and try again.",
        },
        summary: {
            title: "# Approved + executed tool",
            permissionLine: "Permission `{permission}` approved for `{tool}`.",
        },
        required: "Approval required ({risk}).",
        args: {
            commandWithDescription: "Command: {command} - {description}",
            command: "Command: {command}",
            description: "Description: {description}",
            raw: "Args: {args}",
        },
    },
    pathPicker: {
        titleWorkspace: "Select Workspace",
        titleFile: "Select File",
        placeholderWorkspace: "Type a path (../ etc). Tab to complete. Enter selects a directory.",
        placeholderFile: "Type a path (../ etc). Tab to complete. Enter selects a file.",
    },
    providerDialogs: {
        customLabel: "Custom",
        customDetail: "custom",
        nextApiOAuthLabel: "Next API Provider (OAuth)",
        nextApiOAuthDetail: "Login with Next API OAuth",
        addCustomLabel: "Add custom provider",
        addCustomDetail: "add custom provider",
        providerFallback: "Provider",
        adapter: {
            openai: "OpenAI",
            openaiOpenRouter: "OpenAI-compatible (OpenRouter)",
            openaiLocal: "OpenAI-compatible (Local endpoint)",
            openaiResponses: "OpenAI Responses",
            gemini: "Gemini",
            anthropic: "Anthropic",
        },
        status: {
            configured: "Configured",
            notConfigured: "Not configured",
        },
        manage: {
            title: "Custom provider: {provider}",
            connect: "Connect",
            connectDetail: "Edit API key / Base URL",
            rename: "Rename",
            renameDetail: "Edit provider name",
            models: "Edit models",
            modelsDetail: "Update available model IDs",
            delete: "Delete",
            deleteDetail: "Remove this provider",
        },
        deleteConfirm: {
            title: "Delete {provider}?",
            confirm: "Delete (confirm)",
            confirmDetail: "This cannot be undone",
            cancelDetail: "Keep provider",
        },
        nameDialog: {
            title: "Name custom provider",
            label: "Provider name",
            placeholder: "e.g. DeepSeek (Proxy)",
        },
        modelsDialog: {
            title: "Custom provider models",
            modelsTitle: "Models",
            modelsPlaceholder: "Model IDs (, or new lines)",
            hint: ", / newline • Shift+Enter newline • Enter Apply",
            fetch: "Fetch models",
            fetching: "Fetching models…",
        },
        modelsFetchDialog: {
            title: "Select models",
            searchPlaceholder: "Filter models",
            hint: "Space toggle  •  Enter confirm  •  Esc cancel",
        },
        toast: {
            modelSet: "Model set to {provider} / {model}.",
            noModels: "No models available yet. Connect a provider first (/connect).",
            connectFirst: "Please connect a provider first (/connect) before sending your first message.",
            apiKeyRequired: "API key is required.",
            baseUrlRequired: "Base URL is required.",
            baseUrlInvalid: "Base URL must start with http:// or https://",
            connected: "Connected to {provider}.",
            connectedSelectModel: "Connected to {provider}. Choose a model.",
            connectedCheckFailed: "Connected to {provider}, but self-check failed: {reason}",
            connectionTestPassed: "Connection test passed: {provider}.",
            connectionTestFailed: "Connection test failed: {provider} - {reason}",
            connectionActionUpdateKey: "Action: reopen Connect and update API key, then test again.",
            connectionActionFixBaseUrl: "Action: check Base URL path (usually ends with /v1), then test again.",
            connectionActionSwitchKey: "Action: wait a moment or switch to another key/provider.",
            connectionActionRetryTest: "Action: check network/proxy and run Test connection again.",
            noModelsFetching: "No models yet. Fetching model list…",
            firstUseGuide: 'Quick start: 1) /connect  2) /models  3) send "hello"',
            firstUseSendHello: 'Next step: send your first message (for example: "hello").',
            connectionCheckUnauthorized: "401 Unauthorized: check API key and provider type.",
            connectionCheckForbidden: "403 Forbidden: your key may not have access to this provider/model.",
            connectionCheckNotFound: "404 Not Found: check Base URL path (OpenAI-compatible usually ends with /v1).",
            connectionCheckRateLimited: "429 Rate limited: wait and retry, or switch to another key/provider.",
            connectionCheckTimeout: "Connection timed out: check network/proxy and retry.",
            connectionCheckNetwork: "Network connection failed: check DNS/proxy/Base URL.",
            connectionCheckFailed: "Connection check failed: {error}",
            apiKeyCleared: "API key cleared for {provider}.",
            customAdded: "Custom provider added: {provider}.",
            customRenamed: "Custom provider renamed: {provider}.",
            customModelsUpdated: "Custom provider models updated: {provider}.",
            customDeleted: "Custom provider deleted: {provider}.",
            modelsRequired: "Add at least one model.",
            modelsEmpty: "No models found.",
            modelsFetchFailed: "Failed to fetch models: {error}",
            modelsFetchChatCompletions: "Model list not supported for /chat/completions or /responses base URL.",
            manualModelsRequired: "This endpoint doesn't support automatic model discovery. Please manually enter model names in the models configuration.",
            nameRequired: "Provider name is required.",
            nameConflict: "Provider name already exists.",
        },
    },
    copyToast: {
        copiedToClipboard: "Copied to clipboard",
    },
};
//# sourceMappingURL=en.js.map