{
  "title": "Settings",
  "tabs": {
    "basic": "General",
    "ai": "AI Settings",
    "aiConfig": "Model Service",
    "aiDefaultModel": "Default Model",
    "semanticIndex": "Semantic Index",
    "chatPreferences": "Preferences",
    "compression": "Compression",
    "aiPreprocess": "Preprocess",
    "dataManage": "Data Management",
    "storage": "Storage",
    "sessionManage": "Session Index",
    "about": "About",
    "api": "Automation",
    "apiSubTabs": {
      "autoSync": "Auto Sync",
      "apiService": "API Service",
      "mcp": "MCP"
    }
  },
  "basic": {
    "general": {
      "title": "General"
    },
    "preferences": {
      "title": "Preferences"
    },
    "language": {
      "description": "Choose language"
    },
    "appearance": {
      "title": "Appearance",
      "themeMode": "Theme Mode",
      "auto": "System",
      "light": "Light",
      "dark": "Dark"
    },
    "defaultTab": {
      "description": "Default page when entering a chat conversation",
      "overview": "Overview",
      "aiChat": "AI Chat"
    },
    "autoLaunch": {
      "openAtLogin": "Launch at Login",
      "openAtLoginDesc": "Automatically start ChatLab when the system boots",
      "devModeHint": "Not available in dev mode"
    },
    "toolsPanel": {
      "positionLabel": "Tools Panel Position",
      "positionDesc": "Choose where the quick tools panel appears",
      "positionSide": "Side",
      "positionHeader": "Header"
    },
    "screenshot": {
      "mobileAdapt": "Mobile Adaptation",
      "mobileAdaptDesc": "Auto-scale width when taking screenshots for mobile viewing"
    },
    "network": {
      "title": "Network",
      "proxyMode": "Proxy Mode",
      "proxyModeDesc": "How to connect when accessing external services",
      "modeOff": "Off",
      "modeSystem": "System",
      "modeManual": "Manual",
      "proxyAddress": "Proxy Address",
      "proxyPlaceholder": "http://127.0.0.1:7890",
      "proxyHelp": "Supports HTTP/HTTPS proxy, e.g.: http://127.0.0.1:7890",
      "testConnection": "Test Connection",
      "testing": "Testing...",
      "connectionSuccess": "Proxy connection successful!",
      "connectionFailed": "Connection failed",
      "enterProxyFirst": "Please enter proxy address first",
      "invalidProxyUrl": "Please enter a valid proxy address, e.g. http://127.0.0.1:7890",
      "onlyHttpSupported": "Only http:// or https:// protocols are supported",
      "saveFailed": "Save failed"
    }
  },
  "defaultModel": {
    "title": "Default Model",
    "noConfigs": "Please add a model configuration in \"Model Service\" first",
    "selectProvider": "Select provider",
    "selectModel": "Select model",
    "assistantModel": {
      "label": "Default Assistant Model",
      "description": "Used for AI chat, tool calls, SQL assistant, and context compression"
    },
    "fastModel": {
      "label": "Fast Model",
      "description": "Used for session summary generation. Falls back to the default assistant model if not set",
      "followAssistant": "Follow default assistant model"
    }
  },
  "aiConfig": {
    "title": "Model Services",
    "defaultModel": "Default Model",
    "empty": {
      "title": "No AI service configured",
      "description": "Add a configuration to start using AI features"
    },
    "addConfig": "Add New Service",
    "maxConfigs": "Maximum configurations reached (10)",
    "modal": {
      "addConfig": "Add New Service",
      "editConfig": "Edit Service",
      "localService": "Local Service",
      "configName": "Configuration Name",
      "optional": " (Optional)",
      "configNamePlaceholderPreset": "Leave empty to use provider name",
      "configNamePlaceholderCustom": "Leave empty to use API endpoint",
      "aiProvider": "AI Provider",
      "apiKeyPlaceholder": "Enter your API Key",
      "apiKeyPlaceholderEdit": "Enter new API Key (leave empty to keep current)",
      "apiKeyPlaceholderLocal": "Usually not required for local services",
      "apiKeyHintLocal": "Enter if the service requires authentication",
      "validate": "Validate",
      "validationSuccess": "Connection validated successfully",
      "validationFailed": "Connection validation failed",
      "validationFailedTitle": "API Connection Validation Failed",
      "saveAnywayHint": "Validation did not pass. The configuration may be incorrect. Save anyway?",
      "saveAnyway": "Save Anyway",
      "validationError": "Validation failed: ",
      "model": "Model",
      "apiEndpoint": "API URL",
      "apiEndpointHint": "OpenAI-compatible API endpoint",
      "resolvedUrl": "Resolved URL:",
      "fetchModels": "Fetch from API",
      "fetchModelsTitle": "Browse Remote Models",
      "fetchModelsLoading": "Fetching model list...",
      "fetchModelsEmpty": "No models found",
      "fetchModelsError": "Failed to fetch models",
      "fetchModelsCount": "{total} models total, showing {shown}",
      "modelAdded": "Added",
      "addAllModels": "Add all",
      "searchModels": "Search models...",
      "apiEndpointOverrideHint": "Default URL is prefilled. Replace if needed",
      "customService": "Custom Service",
      "visitWebsite": "Visit Website",
      "getApiKey": "Get API Key",
      "presetService": "Preset",
      "thirdPartyService": "Third-party",
      "addCustomModel": "Add Model",
      "deleteCustomModel": "Delete Selected",
      "customModelId": "Model Endpoint Name",
      "customModelIdHint": "The model identifier used in API calls",
      "customModelDisplayName": "Display Name",
      "customModelDisplayNamePlaceholder": "Custom display name",
      "editModel": "Edit Model",
      "contextWindow": "Context Window",
      "contextWindowPlaceholder": "e.g. 128000",
      "contextWindowHint": "Maximum context tokens supported by this model (used for context compression)",
      "contextWindowMissing": "Context window not set, will use default. Click \"Edit Model\" to set it manually",
      "modelRequired": "Add at least one model to save",
      "apiFormat": "API Format",
      "apiFormatOpenAI": "OpenAI Completions",
      "apiFormatAnthropic": "Anthropic",
      "apiFormatGemini": "Gemini",
      "apiFormatOpenAIResponses": "OpenAI Responses"
    },
    "providerKind": {
      "aggregator": "Aggregator",
      "custom": "Custom"
    }
  },
  "storage": {
    "title": "Local Storage Management",
    "description": "Manage data files stored locally by ChatLab",
    "dataLocation": {
      "title": "Data Directory",
      "description": "Customize where local data and cache are stored",
      "choose": "Choose",
      "applyPath": "Apply",
      "reset": "Reset",
      "open": "Open",
      "serverPathHint": "Enter an absolute path that is accessible from the machine running the CLI server.",
      "migrateHint": "Data is still at a legacy location. Migrate to the unified directory:",
      "ignoreMigrateHint": "Ignore",
      "migrateAction": "Migrate Now",
      "restartTip": "Please restart the app after switching. Data will be migrated from the old directory.",
      "cliRestartTip": "Restart the CLI server after switching. Data will be migrated before the server starts.",
      "confirmTitle": "Confirm Directory Change",
      "confirmMessage": "You are about to change the data storage location. Existing data will be migrated to the new directory.",
      "newPath": "New directory path",
      "defaultPath": "Default location",
      "confirmWarning": "After restarting, the old data directory will be automatically deleted. Please ensure the new path is correct.",
      "cliConfirmWarning": "After restarting the CLI server, data will be migrated to the new location. Make sure the path is correct and writable by the server process.",
      "pathRequired": "Please enter a data directory path",
      "installDirForbidden": "Data directory cannot be placed inside the app installation directory, as it will be cleared during updates",
      "cancel": "Cancel",
      "confirm": "Confirm",
      "migrationQueuedTitle": "Migration Queued",
      "migrationSuccessMessage": "The app needs to restart for changes to take effect.",
      "cliMigrationSuccessMessage": "Stop the current CLI server and start it again. Migration will run before the server starts. Reopen the page afterward to see the new directory.",
      "relaunchNow": "Restart Now",
      "acknowledge": "Got it"
    },
    "openRootDir": "Open Root",
    "totalUsage": "Total: ",
    "loading": "Loading...",
    "files": "files",
    "notExist": "Not exist",
    "clear": "Clear",
    "open": "Open",
    "cache": {
      "databases": {
        "name": "Chat Databases",
        "description": "Imported chat analysis data"
      },
      "ai": {
        "name": "AI Chat Databases",
        "description": "AI chat history and config files"
      },
      "statsCache": {
        "name": "Cache Data",
        "description": "Statistics cache for chat records, auto-rebuilt after clearing"
      },
      "logs": {
        "name": "Log Files",
        "description": "App logs including import, AI, error logs"
      }
    }
  },
  "ai": {
    "session": {
      "title": "Session Index Settings",
      "description": "Session index splits chat history into conversation segments by time gaps for better AI analysis",
      "defaultThreshold": "Default Gap Threshold",
      "thresholdUnit": "minutes",
      "thresholdHelp": "Messages exceeding this time gap will be split into a new session",
      "generating": "Generating",
      "batchTitle": "Batch Generate Index",
      "totalSessions": "{count} chats total",
      "generatedCount": "{count} generated",
      "notGeneratedCount": "{count} not generated",
      "loadingStatus": "Loading...",
      "batchGenerate": "Generate Missing",
      "batchRegenerate": "Regenerate All",
      "batchRegenerateConfirmTitle": "Confirm Regeneration",
      "batchRegenerateConfirmMessage": "This will clear all existing AI summaries and regenerate session indexes from scratch.",
      "batchRegenerateConfirmWarning": "Existing summaries will be overwritten. This action cannot be undone.",
      "summaryStrategy": "Summary Detail Level",
      "summaryStrategyHelp": "Controls how detailed AI-generated summaries will be",
      "summaryBrief": "Brief",
      "summaryStandard": "Standard"
    },
    "semanticIndex": {
      "title": "Semantic Index",
      "description": "Builds an index of your chats with the selected vector model. Once enabled, the AI can semantically retrieve relevant past excerpts as supporting evidence.",
      "vectorModel": "Vector Model",
      "selectModel": "Select Vector Model",
      "switchModel": "Switch Model",
      "noModelSelected": "No vector model selected",
      "modelModalTitle": "Configure Vector Model",
      "modeLocal": "Local Model",
      "modeApi": "API",
      "recommended": "Recommended",
      "approxSize": "~{mb} MB",
      "localDownloadHint": "The model is downloaded automatically on first index build, which may take a while.",
      "apiTemplate": "Service Template",
      "modelName": "Model Name",
      "apiKeySaved": "Saved; leave blank to keep",
      "apiKeyHint": "API keys are stored separately and securely; the config keeps only a reference.",
      "apiCostWarning": "API mode may incur provider costs. Please confirm model pricing.",
      "changeRebuildHint": "After changing the model or API, enabled conversations need to be rebuilt.",
      "modelError": "Model download failed. It will be retried when building the index.",
      "modelDownloading": "Downloading model, this may take a few minutes on first use…",
      "searchMaxResults": {
        "label": "Excerpts per search",
        "hint": "Default number of relevant excerpts returned when the AI runs a semantic search (5-15). The AI may raise it as needed."
      },
      "overview": "Index Overview",
      "enabledCount": "{count} conversations enabled",
      "coverage": "Coverage {percent}%",
      "buildPending": "Build Pending Indexes",
      "cleanup": "Clean Up Unused Indexes",
      "cleanupConfirm": "This deletes index data from disabled conversations and old models. It does not delete chat records.",
      "configFirst": "Configure a vector model first",
      "selectConversations": "Select Conversations",
      "enabledSessions": "Enabled Conversations",
      "state": {
        "completed": "Completed",
        "building": "Building",
        "pending": "Pending",
        "needsRebuild": "Needs Rebuild",
        "failed": "Failed",
        "paused": "Paused"
      },
      "action": {
        "build": "Build Index",
        "pause": "Pause",
        "cancel": "Cancel",
        "rebuild": "Rebuild",
        "remove": "Remove"
      },
      "session": {
        "statusLabel": "Status",
        "notEnabled": "Not enabled",
        "coverageLabel": "Coverage",
        "progressLabel": "Build progress",
        "enableHint": "Once enabled, the AI can retrieve past chat excerpts when answering questions about this conversation.",
        "configFirst": "Configure a vector model under Settings > AI > Semantic Index before enabling.",
        "enable": "Enable Index",
        "buildVsEnable": "Enable Index: include this conversation in semantic retrieval. Build Index: read all messages and generate vectors, which may use local compute or API quota.",
        "retry": "Retry",
        "continue": "Continue"
      },
      "picker": {
        "title": "Select Conversations",
        "all": "All",
        "group": "Group",
        "private": "Private",
        "searchPlaceholder": "Search by name",
        "messages": "{count} messages",
        "enabled": "Enabled",
        "selectedSummary": "{count} conversations selected, ~{messages} messages",
        "confirmRemoveTitle": "Confirm Remove",
        "confirmRemoveMessage": "The semantic index for these conversations will be permanently deleted."
      }
    }
  },
  "aiPrompt": {
    "chatSettings": {
      "title": "Tool Settings"
    },
    "exportSettings": {
      "title": "Export Settings"
    },
    "chatPreferences": {
      "title": "Conversation Preferences",
      "enableAutoSkill": "AI Auto-Select Skills",
      "enableAutoSkillDesc": "When enabled, AI will automatically match and activate suitable analysis skills based on user queries; when disabled, skills only take effect when manually selected",
      "chartAutoMode": {
        "title": "Auto Chart Generation",
        "description": "Controls how actively AI uses charts when the Chart Assistant is not manually selected",
        "explicit": "Explicit requests",
        "explicitHint": "AI only generates charts when you explicitly ask for them.",
        "suggest": "Smart generation",
        "suggestHint": "Conservative strategy: AI only generates charts when they clearly help explain the analysis.",
        "aggressive": "Active generation",
        "aggressiveHint": "AI more actively adds charts in data analysis scenarios."
      }
    },
    "maxMessages": {
      "title": "Max Messages per Request",
      "description": "Max number of messages sent to AI per request. Higher values consume more tokens but provide more accurate context (recommended: 2000)."
    },
    "searchContext": {
      "title": "Search Context Window",
      "description": "Automatically include surrounding messages for each search hit to help AI understand the context. Set to 0 to disable",
      "before": "Before",
      "after": "After"
    },
    "exportFormat": {
      "title": "Export Format",
      "description": "File format for exporting AI conversations",
      "txtLabel": "TXT"
    },
    "sqlExportFormat": {
      "title": "SQL Lab Export Format",
      "description": "File format for exporting SQL query results"
    },
    "compression": {
      "title": "Context Compression",
      "enable": "Auto-compress context",
      "enableDesc": "Automatically compress long conversation history into summaries to reduce token usage",
      "threshold": "Compression threshold",
      "thresholdDesc": "Trigger compression when context tokens reach this percentage of the model's context window",
      "buffer": "Buffer size",
      "bufferDesc": "Percentage of recent messages to keep uncompressed",
      "maxToolResultPercent": "Tool result limit",
      "maxToolResultPercentDesc": "Maximum data percentage per tool call sent to AI (based on model context window). Excess results are intelligently truncated"
    }
  },
  "about": {
    "title": "About ChatLab",
    "description": "Chat records analysis tool",
    "version": "Version",
    "checkUpdate": "Check for Updates",
    "checking": "Checking...",
    "upToDate": "You are up to date",
    "newVersionAvailable": "New version {version} available",
    "webUpdateHint": "Run clb update in your terminal, then restart the service.",
    "updateCheckFailed": "Update check failed: {error}",
    "unknown": "Unknown",
    "privacy": {
      "title": "Privacy Settings",
      "analytics": "Anonymous Usage Statistics",
      "analyticsDesc": "When enabled, the app collects non-sensitive data like version number and OS version to help improve the product"
    },
    "developer": {
      "title": "Developer Options",
      "debugMode": "DEBUG Mode",
      "debugModeDesc": "When enabled, the debug panel and quick debugging tools will be shown. You can use them to view databases, run testing tools, and record more detailed debug logs."
    }
  },
  "aiPreprocess": {
    "title": "Chat Preprocessing",
    "description": "Preprocess chat records before sending to AI to save tokens and filter noise. Original data is not modified.",
    "dataCleaning": "Data Cleaning",
    "dataCleaningDesc": "Automatically clean XML card messages (shared links, mini-programs, etc.), extracting useful content and significantly saving tokens. Recommended to keep enabled.",
    "mergeConsecutive": "Merge Consecutive",
    "mergeConsecutiveDesc": "Merge consecutive messages from the same sender within a short time window",
    "mergeWindow": "Merge window (seconds)",
    "denoise": "Smart Denoise",
    "denoiseDesc": "Filter out meaningless messages like interjections, emojis, and system placeholders (e.g. [Image])",
    "desensitize": "Data Masking",
    "desensitizeDesc": "Replace sensitive information (phone numbers, emails, ID numbers, etc.) based on rules",
    "desensitizeBuiltin": "Built-in Rules",
    "desensitizeResetBuiltin": "Restore Defaults",
    "desensitizeCustom": "Custom Rules",
    "desensitizeAddCustom": "Add Custom Rule",
    "desensitizeRuleName": "Rule Name",
    "desensitizeRulePattern": "Regex Pattern",
    "desensitizeRuleReplacement": "Replacement Text",
    "desensitizeRuleAdd": "Add",
    "desensitizeRuleInvalidRegex": "Invalid regex syntax",
    "desensitizeRuleNamePlaceholder": "e.g. Employee ID",
    "desensitizeRulePatternPlaceholder": "e.g. EMP-\\d+",
    "desensitizeRuleReplacementPlaceholder": "Replacement, e.g. [EmpID]",
    "anonymizeNames": "Anonymize Nicknames",
    "anonymizeNamesDesc": "Replace real nicknames with IDs (U1, U2…) when sending to AI, reducing hallucinations and saving tokens",
    "blacklist": "Blacklist Keywords",
    "blacklistDesc": "Messages containing any of these keywords will be filtered out entirely",
    "blacklistPlaceholder": "Type a keyword and press Enter to add",
    "blacklistAdd": "Add"
  },
  "desensitize": {
    "groups": {
      "credentials": "Passwords & Tokens",
      "credentials_desc": "Credentials such as API keys and Bearer tokens",
      "global_contact": "Global Contact Info",
      "global_contact_desc": "Cross-region contact details such as email addresses",
      "global_financial": "Global Financial Info",
      "global_financial_desc": "Financial identifiers such as credit card numbers",
      "global_network": "Global Network Info",
      "global_network_desc": "Network identifiers such as URLs and IP addresses",
      "region_cn": "Mainland China",
      "region_cn_desc": "Rules for phone numbers, IDs, and bank cards in Mainland China",
      "region_us": "United States",
      "region_us_desc": "Rules for phone numbers and IDs in the United States",
      "region_jp": "Japan",
      "region_jp_desc": "Rules for phone numbers and My Number in Japan",
      "region_kr": "Korea",
      "region_kr_desc": "Rules for phone numbers and resident registration numbers in Korea"
    },
    "rules": {
      "cn_phone": "China Mobile Number",
      "cn_phone_desc": "11-digit starting with 1xx",
      "cn_id_card": "China ID Card Number",
      "cn_id_card_desc": "18-digit, may end with X",
      "cn_bank_card": "China Bank Card Number",
      "cn_bank_card_desc": "16-19 consecutive digits",
      "cn_landline": "China Landline Number",
      "cn_landline_desc": "Area code + number, e.g. 010-12345678",
      "us_ssn": "US Social Security Number (SSN)",
      "us_ssn_desc": "XXX-XX-XXXX format",
      "us_phone": "US Phone Number",
      "us_phone_desc": "+1 (XXX) XXX-XXXX format",
      "us_drivers_license": "US Driver's License",
      "us_drivers_license_desc": "Letter + 7-8 digits",
      "jp_phone": "Japan Phone Number",
      "jp_phone_desc": "0x0-XXXX-XXXX format",
      "jp_my_number": "Japan My Number",
      "jp_my_number_desc": "12-digit number (マイナンバー)",
      "kr_phone": "Korea Phone Number",
      "kr_phone_desc": "01X-XXXX-XXXX format",
      "kr_rrn": "Korea Resident Registration Number",
      "kr_rrn_desc": "XXXXXX-XXXXXXX format (주민번호)",
      "api_key_prefix": "API Key / Token (Known Prefixes)",
      "api_key_prefix_desc": "Strings starting with sk-, ghp_, AKIA, etc.",
      "bearer_token": "Bearer Token",
      "bearer_token_desc": "Authorization token after Bearer",
      "email": "Email Address",
      "email_desc": "Standard user{'@'}domain.com format",
      "credit_card": "Credit Card Number",
      "credit_card_desc": "Visa / MasterCard / AmEx card numbers",
      "ipv4": "IPv4 Address",
      "ipv4_desc": "e.g. 192.168.1.1",
      "url": "URL Link",
      "url_desc": "Links starting with http:// or https://"
    }
  },
  "api": {
    "service": {
      "title": "API Service",
      "enable": "Enable API Service",
      "enableDesc": "When enabled, external tools can query, export, and import chat data via HTTP API. Localhost only (127.0.0.1)",
      "portInUseHint": "Port is in use. Please change the port below or close the program using this port"
    },
    "status": {
      "running": "Running",
      "stopped": "Stopped",
      "starting": "Starting...",
      "portInUse": "Port in use",
      "error": "Failed to start"
    },
    "port": {
      "title": "Port Configuration",
      "label": "Listen Port",
      "desc": "Local port for the API service (1024-65535)",
      "edit": "Edit",
      "save": "Save",
      "cancel": "Cancel"
    },
    "token": {
      "title": "Access Token",
      "label": "Bearer Token",
      "desc": "All API requests must include this token in the Authorization header",
      "noToken": "No token generated yet. Please enable the service first",
      "regenerate": "Regenerate"
    },
    "dataSources": {
      "title": "Data Sources",
      "desc": "Configure external data source URLs. ChatLab will automatically pull and import chat data at the specified interval.",
      "empty": "No data sources",
      "noSessions": "No import sessions. Click \"Manage Sessions\" above to add.",
      "disabled": "Paused",
      "every": "Every",
      "minutes": "min",
      "lastSync": "Last sync",
      "syncing": "Syncing",
      "messages": "messages",
      "addBtn": "Add Data Source",
      "form": {
        "modalTitle": "Add Data Source",
        "name": "Name",
        "namePlaceholder": "e.g., My Chat Server",
        "token": "Access Token",
        "tokenPlaceholder": "Bearer Token for the remote API",
        "interval": "Pull Interval (minutes)",
        "pullLimit": "Messages per Pull",
        "pullLimitPlaceholder": "Default 1000"
      },
      "discovery": {
        "baseUrl": "Server URL",
        "baseUrlPlaceholder": "e.g. http://127.0.0.1:2333/api/v1",
        "found": "Found {count} sessions",
        "search": "Search",
        "searchPlaceholder": "Search by session name",
        "selectAll": "Select All",
        "deselectAll": "Deselect All",
        "selectByType": "Session type",
        "typeAll": "All",
        "typePrivate": "Private",
        "typeGroup": "Group",
        "loadMore": "Load More",
        "subscribe": "Subscribe {count} sessions",
        "messages": "messages",
        "error": "Failed to connect to remote server",
        "connectionCheckFailed": "Cannot connect to the remote server. Please check the URL and token."
      },
      "edit": {
        "title": "Edit Data Source",
        "save": "Save",
        "cancel": "Cancel",
        "editSource": "Edit Config",
        "manageSessions": "Manage Subscriptions",
        "subscribed": "Subscribed"
      },
      "deleteConfirm": {
        "title": "Delete Data Source",
        "message": "Are you sure you want to delete \"{name}\"? All import configurations under this data source will be removed. Already imported local conversations will not be deleted."
      },
      "deleteSessionConfirm": {
        "title": "Delete Subscription",
        "message": "Are you sure you want to delete \"{name}\"?",
        "keepData": "Remove subscription only",
        "deleteData": "Also delete imported chats"
      }
    },
    "usage": {
      "title": "Usage Guide",
      "desc": "After enabling the service, external tools can query data or push chat records to ChatLab via API. All requests require Bearer Token authentication.",
      "authHint": "Header example:",
      "docLink": "View full API documentation"
    }
  },
  "mcp": {
    "overview": {
      "title": "MCP Overview",
      "description": "MCP lets AI assistants directly query your chat records. Supports session discovery, keyword search, member stats, time distribution, and more.",
      "toolCount": "{count} tools",
      "resourceCount": "{count} resources",
      "installHint": "Install chatlab-cli, then add the config below to your AI client:"
    },
    "clients": {
      "other": "Other"
    },
    "config": {
      "title": "Client Configuration",
      "clientLabel": "MCP Client",
      "copy": "Copy",
      "copied": "Copied",
      "claudeHint": "Add this config to ClaudeCode's MCP configuration.",
      "codexHint": "Add this TOML config to your ~/.codex/config.toml file.",
      "openclawHint": "Add this config to your project's openclaw.json file.",
      "otherHint": "Add this JSON config to your MCP client configuration file."
    },
    "tips": {
      "title": "Tips",
      "dataDir": "The MCP server reads chat data from ~/.chatlab/, sharing the same data as the desktop app.",
      "readOnly": "All operations are read-only and will not modify your chat records.",
      "nodeRequired": "npx and CLI modes require Node.js 20 or higher.",
      "docs": "For detailed documentation, visit docs.chatlab.fun."
    }
  }
}
