Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@
"tailwindcss-animate": "^1.0.7",
"tippy.js": "^6.3.7",
"typescript": "^5.8.3",
"vite": "npm:rolldown-vite@latest",
"vite": "npm:rolldown-vite@7.0.12",
"vite-plugin-monaco-editor-esm": "^2.0.2",
"vite-plugin-vue-devtools": "^8.0.0",
"vite-svg-loader": "^5.1.0",
Expand Down Expand Up @@ -178,7 +178,7 @@
},
"pnpm": {
"overrides": {
"vite": "npm:rolldown-vite@latest"
"vite": "npm:rolldown-vite@7.0.12"
},
"onlyBuiltDependencies": [
"@tailwindcss/oxide",
Expand Down
6 changes: 3 additions & 3 deletions src/renderer/src/i18n/en-US/chat.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
"fileArea": "File Area",
"inputArea": "Input Area",
"functionSwitch": "Function Switch",
"fileSelect": "File Select",
"pasteFiles": "Support copy and paste files",
"fileSelect": "Select File",
"pasteFiles": "Paste files from clipboard",
"dropFiles": "Drop files here",
"promptFilesAdded": "Prompt Files Added",
"promptFilesAddedDesc": "Successfully added {count} files",
"promptFilesError": "File Processing Error",
"promptFilesErrorDesc": "{count} files failed to process",
"historyPlaceholder": "(Press Tab to fill)",
"historyPlaceholder": "(Press Tab to autocomplete)",
"rateLimitQueue": "Queue {count}",
"rateLimitWait": "Wait {seconds}s",
"rateLimitQueueTooltip": "{count} requests in queue, {interval}s interval",
Expand Down
12 changes: 6 additions & 6 deletions src/renderer/src/i18n/en-US/components.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@
"granted": "Permission granted",
"denied": "Permission denied",
"type": {
"read": "Read permissions",
"write": "Write permissions",
"all": "Full permissions"
"read": "Read Access",
"write": "Write Access",
"all": "Full Access"
},
"description": {
"read": "Allow '{toolName}' of '{serverName}' to perform read operations?",
"write": "Allow '{toolName}' of '{serverName}' to perform write operations?",
"all": "Allow '{toolName}' of '{serverName}' to perform read and write operations?"
"read": "Allow '{toolName}' from '{serverName}' to perform read operations?",
"write": "Allow '{toolName}' from '{serverName}' to perform write operations?",
"all": "Allow '{toolName}' from '{serverName}' to perform read and write operations?"
}
Comment on lines +26 to 34
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Terminology shift to “Access” is consistent; placeholders intact

Labels read well and descriptions consistently use “from” with '{toolName}' and '{serverName}'.

Check that all locales keep both placeholders present in the permission descriptions:


🏁 Script executed:

#!/bin/bash
set -e
fd -a -g 'src/renderer/src/i18n/*/components.json' | while read -r f; do
  for k in read write all; do
    v=$(jq -r ".messageBlockPermissionRequest.description.$k // empty" "$f")
    if [ -z "$v" ]; then echo "Missing description.$k in $f"; continue; fi
    grep -q '{toolName}' <<<"$v" || echo "Missing {toolName} in $f description.$k"
    grep -q '{serverName}' <<<"$v" || echo "Missing {serverName} in $f description.$k"
  done
done

Length of output: 73


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate all components.json files under each locale
find src/renderer/src/i18n -type f -name 'components.json' | while IFS= read -r f; do
  echo "Checking $f"
  
  # Ensure the description block exists
  if ! jq -e '.messageBlockPermissionRequest.description' "$f" > /dev/null; then
    echo "  ❌ Missing .messageBlockPermissionRequest.description in $f"
    continue
  fi

  # Verify each permission level has both placeholders
  for key in read write all; do
    value=$(jq -r ".messageBlockPermissionRequest.description.$key" "$f")
    if [[ "$value" == "null" || -z "$value" ]]; then
      echo "  ❌ Missing description.$key in $f"
      continue
    fi

    # Check for {toolName} and {serverName}
    if ! grep -q '{toolName}' <<<"$value"; then
      echo "  ❌ Missing '{toolName}' in $f (description.$key)"
    fi
    if ! grep -q '{serverName}' <<<"$value"; then
      echo "  ❌ Missing '{serverName}' in $f (description.$key)"
    fi
  done
done

Length of output: 14158


Fix placeholder casing in ko-KR locale

We’ve verified that all other locales include both {toolName} and {serverName} correctly, but in ko-KR/components.json the placeholders are mis-cased ({toolname} / {servername}), which will break interpolation.

• File: src/renderer/src/i18n/ko-KR/components.json
– description.read
– description.write
– description.all

Suggested diff for each key:

- "read": "읽기 작업을 수행하려면 '{servername}'의 '{toolname}'을 허용합니까?"
+ "read": "읽기 작업을 수행하려면 '{serverName}'의 '{toolName}'을 허용합니까?"

- "write": "쓰기 작업을 수행하려면 '{servername}'의 '{toolname}'을 허용합니까?"
+ "write": "쓰기 작업을 수행하려면 '{serverName}'의 '{toolName}'을 허용합니까?"

- "all":   "읽기 및 쓰기 작업을 수행하려면 '{servername}'의 '{toolname}'을 허용합니까?"
+ "all":   "읽기 및 쓰기 작업을 수행하려면 '{serverName}'의 '{toolName}'을 허용합니까?"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"read": "Read Access",
"write": "Write Access",
"all": "Full Access"
},
"description": {
"read": "Allow '{toolName}' of '{serverName}' to perform read operations?",
"write": "Allow '{toolName}' of '{serverName}' to perform write operations?",
"all": "Allow '{toolName}' of '{serverName}' to perform read and write operations?"
"read": "Allow '{toolName}' from '{serverName}' to perform read operations?",
"write": "Allow '{toolName}' from '{serverName}' to perform write operations?",
"all": "Allow '{toolName}' from '{serverName}' to perform read and write operations?"
}
"description": {
"read": "읽기 작업을 수행하려면 '{serverName}'의 '{toolName}'을 허용합니까?",
"write": "쓰기 작업을 수행하려면 '{serverName}'의 '{toolName}'을 허용합니까?",
"all": "읽기 및 쓰기 작업을 수행하려면 '{serverName}'의 '{toolName}'을 허용합니까?"
}
🤖 Prompt for AI Agents
In src/renderer/src/i18n/ko-KR/components.json around lines corresponding to
description.read, description.write, and description.all, the placeholders
{toolname} and {servername} are incorrectly cased. Update these placeholders to
{toolName} and {serverName} respectively to match the casing used in other
locales and ensure proper interpolation.

}
}
2 changes: 1 addition & 1 deletion src/renderer/src/i18n/en-US/contextMenu.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"title": "Ask AI",
"question": "Question",
"answer": "Answer",
"error": "AI answer failed"
"error": "AI response failed"
},
"copy": "Copy",
"paste": "Paste",
Expand Down
4 changes: 2 additions & 2 deletions src/renderer/src/i18n/en-US/dialog.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
"confirm": "Clear"
},
"fork": {
"title": "Create Branch Conversation",
"title": "Create Branch",
"description": "This will copy all messages from the first message to the current message into a new conversation where you can continue the dialogue.",
"confirm": "Create Branch",
"tag": "Branches"
"tag": "Branch"
},
"error": {
"title": "Error"
Expand Down
56 changes: 28 additions & 28 deletions src/renderer/src/i18n/en-US/mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"noToolsAvailable": "No tools available",
"selectToolToDebug": "Select a tool to debug",
"dialogDescription": "Debug and test tools provided by MCP servers",
"toolsCount": "tools",
"toolsCount": "{count} tools",
"availableTools": "Available Tools",
"toolList": "Tool List",
"functionDescription": "Function Description",
Expand Down Expand Up @@ -41,43 +41,43 @@
"annotations": "Annotations",
"invalidJsonFormat": "JSON format is incorrect"
},
"addServer": "Add a server",
"addServer": "Add Server",
"addServerDialog": {
"description": "Configure a new MCP server",
"title": "Add a server"
"title": "Add Server"
},
"confirmDelete": {
"cancel": "Cancel",
"confirm": "delete",
"confirm": "Delete",
"description": "Are you sure you want to delete the server {name}? \nThis operation cannot be cancelled.",
"title": "Confirm deletion"
},
"confirmRemoveServer": "Are you sure you want to delete the server {name}? \nThis operation cannot be cancelled.",
"default": "default",
"deleteServer": "Delete the server",
"deleteServer": "Delete Server",
"description": "Manage and configure MCP (Model Context Protocol) servers and tools",
"editServer": "Edit the server",
"editServer": "Edit Server",
"editServerDialog": {
"description": "Edit MCP server configuration",
"title": "Edit the server"
"title": "Edit Server"
},
"enableToAccess": "Please enable MCP to access configuration options.",
"enabledDescription": "Enable or disable MCP functionality and tools.",
"enabledTitle": "Enable MCP",
"isDefault": "Default server",
"noServersFound": "Server not found",
"removeDefault": "Remove default",
"removeServer": "Delete the server",
"removeServer": "Remove Server",
"removeServerDialog": {
"title": "Delete the server"
"title": "Delete Server"
},
"resetConfirm": "recover",
"resetConfirm": "Restore",
"resetConfirmDescription": "This action restores all default servers while retaining your customized servers. \nAny modifications to the default server will be lost.",
"resetConfirmTitle": "Restore default service",
"resetToDefault": "Restore default service",
"running": "Running",
"serverForm": {
"add": "Add to",
"add": "Add",
"args": "Arguments",
"argsPlaceholder": "Enter parameters, separated by spaces",
"argsRequired": "Parameters cannot be empty",
Expand All @@ -102,8 +102,8 @@
"envPlaceholder": "Enter environment variables in JSON format",
"icon": "Icon",
"iconPlaceholder": "Enter icon",
"icons": "Icon",
"iconsPlaceholder": "Enter icon",
"icons": "Icons",
"iconsPlaceholder": "Enter icons",
"jsonConfig": "JSON configuration",
"jsonConfigExample": "JSON configuration example",
"jsonConfigIntro": "You can directly paste the JSON configuration or choose to configure the server manually.",
Expand All @@ -115,7 +115,7 @@
"parseError": "Parsing error",
"parseSuccess": "Configuration parsed successfully",
"skipToManual": "Skip to manual configuration",
"submit": "submit",
"submit": "Submit",
"folders": "Folder List",
"addFolder": "Add Folder",
"selectFolder": "Select Folder",
Expand All @@ -141,27 +141,27 @@
"title": "MCP Settings",
"inmemory": {
"Artifacts": {
"desc": "Make your DeepChat output diversified Artifacts content",
"desc": "Produce richer Artifacts in DeepChat",
"name": "Artifacts"
},
"bochaSearch": {
"desc": "Bocha Search API https://open.bochaai.com/",
"name": "Bocha Search"
},
"buildInFileSystem": {
"desc": "Allows DeepChat to interact with the local file system.",
"desc": "Allow DeepChat to interact with the local file system.",
"name": "File System"
},
"imageServer": {
"desc": "Enables any model in DeepChat to understand and generate images.",
"desc": "Enable any model in DeepChat to understand and generate images.",
"name": "Image Service"
},
"braveSearch": {
"desc": "Brave Search API https://brave.com/search/api/",
"name": "Brave Search"
},
"powerpack": {
"desc": "Provides any large model with enhanced capabilities like time queries, web scraping, and secure code execution.",
"desc": "Provide models with time queries, web browsing, and secure code execution.",
"name": "Power Pack"
},
"difyKnowledge": {
Expand All @@ -177,36 +177,36 @@
"desc": "FastGPT knowledge base search service, can search FastGPT knowledge base content"
},
"deepchat-inmemory/custom-prompts-server": {
"desc": "DeepChat built-in custom prompt word service",
"desc": "DeepChat built-in custom prompts service",
"name": "Custom Prompts"
},
"deepchat-inmemory/deep-research-server": {
"desc": "DeepChat built-in in-depth research service based on Bocha Search (note that long context models are required to be used, and models with insufficient context may fail)",
"desc": "DeepChat built-in deep research powered by Bocha Search. Long-context models are recommended.",
"name": "DeepResearch"
},
"deepchat-inmemory/auto-prompting-server": {
"name": "Auto Template Prompting",
"desc": "Automatically selects the most suitable custom prompt based on user input and intelligently fills the prompt template."
"desc": "Automatically select the best custom prompt based on input and fill the template intelligently."
},
"deepchat-inmemory/conversation-search-server": {
"name": "Conversation History Search",
"desc": "DeepChat built-in conversation history search service, can search historical conversation records and message contents"
"desc": "DeepChat built-in conversation history search for past chats and messages."
},
"builtinKnowledge": {
"desc": "DeepChat built-in knowledge base search service, which can search the content of DeepChat built-in knowledge base",
"desc": "DeepChat built-in knowledge base search for DeepChat docs and guides.",
"name": "Built-in knowledge base search"
},
"deepchat-inmemory/meeting-server": {
"name": "Multi-Agent Meetings",
"desc": "DeepChat's built-in meeting service enables hosting and facilitating multi-agent discussions."
"desc": "DeepChat built-in meetings to host multi-agent discussions."
},
"deepchat/apple-server": {
"desc": "Let the model operate macOS's system functions such as calendar, contacts, emails, maps, memos, reminders and other systems",
"name": "macOS system assistant"
"desc": "Let models operate macOS apps like Calendar, Contacts, Mail, Maps, Notes, and Reminders.",
"name": "macOS System Assistant"
}
},
"prompts": {
"noPromptsAvailable": "No Prompts available",
"noPromptsAvailable": "No Prompts Available",
"noDescription": "No description yet",
"selectPrompt": "Details for the selected prompt will be shown here.",
"parameters": "Parameters",
Expand All @@ -223,7 +223,7 @@
"noResourcesAvailable": "No Resources Available",
"selectResource": "Select a resource to view its content.",
"loading": "Loading...",
"loadContent": "View Content",
"loadContent": "Load Content",
"pleaseSelect": "Click to view resource details.",
"dialogDescription": "Browse and view resources provided by MCP servers"
},
Expand Down
2 changes: 1 addition & 1 deletion src/renderer/src/i18n/en-US/promptSetting.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"required": "Required",
"characters": "Characters",
"fileManagement": "File Management",
"uploadFromDevice": "Upload from Your Device",
"uploadFromDevice": "Upload from device",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Confirm style guide (Title Case vs Sentence case)

If the project is moving to sentence case for action labels, keep as-is and plan a bulk pass for consistency.


🏁 Script executed:

#!/bin/bash
# Quick scan of this file to see casing of top-level labels
sed -n '2,70p' src/renderer/src/i18n/en-US/promptSetting.json | rg -n '": "([A-Z][a-z]+ [A-Z][a-z]+|[A-Z][a-z]+)"' -o

Length of output: 657


Inconsistent Casing in promptSetting.json

A quick scan shows most action labels in src/renderer/src/i18n/en-US/promptSetting.json use Title Case (e.g. “Add Prompt”, “Edit Prompt”), but the entry at line 40:

"uploadFromDevice": "Upload from device"

is in sentence case. Please choose one convention and apply it consistently:

  • If you prefer Title Case for action labels, update this to:
     "uploadFromDevice": "Upload From Device",
  • If you’re standardizing on sentence case, plan a bulk pass to convert all current Title-Case labels (e.g., “Add Prompt” → “Add prompt”).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"uploadFromDevice": "Upload from device",
"uploadFromDevice": "Upload From Device",
🤖 Prompt for AI Agents
In src/renderer/src/i18n/en-US/promptSetting.json at line 40, the label "Upload
from device" uses sentence case while most other action labels use Title Case.
To fix this inconsistency, update the value to "Upload From Device" to match the
Title Case convention used elsewhere in the file.

"uploadFromDeviceDesc": "Supports text, documents, CSV, and more.",
"uploadedFiles": "Uploaded Files",
"noFiles": "No files",
Expand Down
50 changes: 25 additions & 25 deletions src/renderer/src/i18n/en-US/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,12 @@
"theme": "Theme",
"themeSelect": "Select theme",
"closeToQuit": "Exit app when closing window",
"contentProtection": "Screen Protection",
"contentProtectionDialogTitle": "Confirm Screen Protection Change",
"contentProtectionEnableDesc": "Enabling screen protection prevents screen sharing software from capturing the DeepChat window, protecting your content privacy. Note that this feature will not completely hide all interfaces. Please use this feature responsibly and in compliance with regulations. Additionally, not all screen sharing software supports this feature. Additionally, some environments may leave a black window.",
"contentProtectionDisableDesc": "Disabling screen protection will allow screen sharing software to capture the DeepChat window.",
"contentProtectionEnableDesc": "Prevent screen sharing apps from capturing the DeepChat window to help protect your privacy. Not all apps honor this setting; in some environments a black window may remain.",
"contentProtectionDisableDesc": "Allow screen sharing apps to capture the DeepChat window.",
"contentProtectionRestartNotice": "Changing this setting will restart the application. Do you want to continue?",
"soundEnabled": "Enable Sound effects",
"copyWithCotEnabled": "Copy including COT details",
"soundEnabled": "Enable Sound Effects",
"copyWithCotEnabled": "Copy COT Details",
"loggingEnabled": "Enable Logging",
"loggingDialogTitle": "Confirm Logging Setting Change",
"loggingEnableDesc": "Enabling logging will help us diagnose issues and improve the application. Log files may contain sensitive information.",
Expand All @@ -50,8 +49,9 @@
"newChat": "Create a new chat",
"title": "Shortcut key settings"
},
"notifications": "System Notification",
"notificationsDesc": "When DeepChat is not in the foreground, if a session is generated, a system notification will be sent"
"notifications": "System Notifications",
"notificationsDesc": "When DeepChat is not in the foreground, if a session is generated, a system notification will be sent",
"contentProtection": "Screen capture protection"
},
"data": {
"title": "Data Settings",
Expand Down Expand Up @@ -108,10 +108,10 @@
},
"artifacts": {
"description": "Enabling the Artifacts feature allows the AI to generate richer content",
"title": "Artifacts effects"
"title": "Artifacts"
},
"addModel": "Add a model",
"configureModel": "Configuration model",
"addModel": "Add Model",
"configureModel": "Configure Model",
"modelList": "Model List",
"provider": "Service provider",
"providerSetting": "Service provider settings",
Expand All @@ -120,7 +120,7 @@
"cancel": "Cancel",
"contextLength": {
"description": "Set the context length that the model can handle",
"label": "Context length"
"label": "Context Length"
},
"description": "Please note that this configuration is only valid for the current model and will not affect other models. Please modify it with caution. Incorrect parameters may cause the model to not work properly.",
"functionCall": {
Expand Down Expand Up @@ -172,18 +172,18 @@
"useModelDefault": "Use model default configuration",
"currentUsingModelDefault": "Currently using model default configuration",
"temperature": {
"description": "Control the randomness of the output. Most models are 0-1, and some support between 0-2. The higher the higher the randomness.",
"label": "temperature"
"description": "Control the randomness of the output. Most models are 0-1, and some support between 0-2. Higher values increase randomness.",
"label": "Temperature"
},
"title": "Custom model parameters",
"type": {
"description": "Select the type of model",
"label": "Model Type",
"options": {
"chat": "Language Model",
"embedding": "Embed Model",
"imageGeneration": "Image generation model",
"rerank": "Reorder the model"
"embedding": "Embedding Model",
"imageGeneration": "Image Generation Model",
"rerank": "Rerank Model"
}
},
"validation": {
Expand Down Expand Up @@ -303,7 +303,7 @@
"serverList": "Server List",
"totalServers": "Total Servers",
"addServer": "Add Server",
"autoStart": "Self-start",
"autoStart": "Auto Start",
"githubCopilotAuth": "GitHub Copilot Auth",
"githubCopilotConnected": "GitHub Copilot Connected",
"githubCopilotNotConnected": "GitHub Copilot Not Connected",
Expand All @@ -318,7 +318,7 @@
"disconnected": "Disconnected successfully",
"disconnectFailed": "Disconnect failed",
"keyStatus": {
"remaining": "Remaining amount",
"remaining": "Remaining Quota",
"usage": "Used"
},
"refreshingModels": "Refreshing...",
Expand All @@ -328,10 +328,10 @@
},
"anthropicApiKeyTip": "Please go to Anthropic Console to get your API Key",
"anthropicConnected": "Anthropic connected",
"anthropicNotConnected": "Anthropic Not connected",
"anthropicOAuthTip": "Click Authorize DeepChat to access your Anthropic account",
"anthropicNotConnected": "Anthropic not connected",
"anthropicOAuthTip": "Click to authorize DeepChat to access your Anthropic account",
"oauthLogin": "OAuth Login",
"authMethod": "Certification method",
"authMethod": "Authentication Method",
"authMethodPlaceholder": "Select authentication method",
"apiKeyLabel": "API Key",
"apiUrlLabel": "API URL",
Expand Down Expand Up @@ -493,7 +493,7 @@
"type": "Server Type",
"typePlaceholder": "Select server type",
"typeStdio": "Standard input and output (Stdio)",
"typeSse": "Server Send Events (SSE)",
"typeSse": "Server-Sent Events (SSE)",
"typeInMemory": "In-Memory",
"typeHttp": "Streaming HTTP Requests (HTTP)",
"baseUrl": "Base URL",
Expand Down Expand Up @@ -537,14 +537,14 @@
"browseMarketplace": "Browse MCP Marketplace",
"imageModel": "Choose a vision model",
"customHeadersParseError": "Custom Header parsing failed",
"customHeaders": "Custom request header",
"customHeaders": "Custom Request Headers",
"invalidKeyValueFormat": "Incorrect request header format, please check whether the input is correct.",
"npmRegistry": "Custom NPM Registry",
"npmRegistryPlaceholder": "Set up a custom NPM Registry, leave the system to automatically select the fastest one",
"browseHigress": "View Higress MCP Marketplace",
"selectFolderError": "Folder selection error",
"folders": "Folders allowed to access",
"addFolder": "Add folder",
"folders": "Allowed Folders",
"addFolder": "Add Folder",
"noFoldersSelected": "No folders were selected",
"useE2B": "Enable E2B Sandbox",
"e2bDescription": "Execute Python code using E2B sandbox",
Expand Down
Loading