2025-12-20 20:18:54 +05:30
{
"common" : {
"save" : "Save" ,
"cancel" : "Cancel" ,
"close" : "Close" ,
"confirm" : "Confirm" ,
"clear" : "Clear" ,
"edit" : "Edit" ,
"delete" : "Delete" ,
"loading" : "Loading.." ,
"new" : "NEW"
} ,
"nav" : {
"about" : "About" ,
"editor" : "Editor" ,
"newChat" : "Start fresh chat" ,
2025-12-22 21:54:25 +08:00
"github" : "GitHub" ,
2025-12-20 20:18:54 +05:30
"settings" : "Settings" ,
"hidePanel" : "Hide chat panel (Ctrl+B)" ,
"showPanel" : "Show chat panel (Ctrl+B)" ,
2025-12-30 23:45:31 +09:00
"aiChat" : "AI Chat"
2025-12-20 20:18:54 +05:30
} ,
"providers" : {
"useServerDefault" : "Use Server Default" ,
"openai" : "OpenAI" ,
"anthropic" : "Anthropic" ,
"google" : "Google" ,
"azure" : "Azure OpenAI" ,
"openrouter" : "OpenRouter" ,
"deepseek" : "DeepSeek" ,
2026-01-06 18:41:25 +08:00
"siliconflow" : "SiliconFlow" ,
feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
* feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
- Add minimax, glm, qwen, qiniu, kimi to ProviderName type
- Add provider configurations to PROVIDER_INFO with default base URLs
- Add suggested models for MiniMax in SUGGESTED_MODELS
- Add minimax/glm/qwen/qiniu/kimi cases to getAIModel using OpenAI-compatible SDK
- Update ALLOWED_CLIENT_PROVIDERS and error messages
- Add environment variable examples to env.example
Fixes: MiniMax API compatibility issue (invalid chat setting 2013)
* fix: Add missing providers to PROVIDER_ENV_VARS type
* fix: Handle null case in PROVIDER_ENV_VARS for new providers
* fix: Add minimax/glm/qwen/kimi/qiniu support to validate-model API
- Add getDefaultBaseUrl helper function
- Add validation cases for new providers in validate-model route
* fix: Add new providers to buildProviderOptions switch case
* fix: Merge multiple system messages into one for minimax/glm/qwen/kimi/qiniu
MiniMax API doesn't support multiple system messages.
This fix combines them into a single message for Chinese providers.
* fix: Handle null provider in system message check
* debug: Add logging for allMessages count
* fix: Use effective provider (including env var fallback) for isSingleSystemProvider check
* fix: apply biome formatting (line-wrapping)
* docs: add Chinese AI providers documentation (MiniMax, GLM, Qwen, Kimi, Qiniu)
- Add i18n translations for new providers in all language dictionaries
- Add provider configuration documentation in en/cn/ja docs
* fix: 改进 PR #722 的代码审查反馈
1. 删除重复的 getDefaultBaseUrl 函数,改用 model-config.ts 的 PROVIDER_INFO
2. validate-model 路由改用 AI SDK 的 createOpenAI + generateText
3. 修复 resolveBaseURL 回退逻辑,传入 PROVIDER_INFO 的 defaultBaseUrl
4. 删除无用的 .bak 备份文件
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 修正中国 AI provider 端点配置
- qiniu: api.qiniucdn.com → api.qnaigc.com
- qwen: dashscope.aliyun.com → dashscope.aliyuncs.com
- 更新 env.example 文档链接
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* feat: MiniMax 使用 Anthropic 兼容 API
- MiniMax 改用 createAnthropic (而非 createOpenAI)
- 支持 api.minimax.io/anthropic 和 api.minimaxi.com/anthropic
- 合并多个 system 消息为单个 (MiniMax/GLM/Qwen/Kimi/Qiniu)
- 更新默认模型为 MiniMax-M2.5 系列
- 支持 MINIMAX_BASE_URL 环境变量配置
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* docs: 更新 MiniMax 文档
- 添加 Anthropic 兼容 API 说明
- 更新默认模型为 MiniMax-M2.5
- 添加国际版/中国大陆版配置示例
- 更新 env.example 注释
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 完善 MiniMax 双端点支持及问题修复
- 支持 MiniMax Anthropic 兼容端点和 OpenAI 兼容端点自动切换
- 修正默认端点为 api.minimaxi.com (中国大陆可用)
- 修复端点路径缺少 /v1 的问题
- 添加前端 MiniMax logo 映射
- 移除调试日志
- 修正 env.example 默认配置
* chore: clean backup artifacts and align biome formatting
* fix: resolve effectiveProvider bug, deduplicate MiniMax URL logic, fix docs
- Fix critical bug: effectiveProvider was empty during auto-detection,
causing multi-system-message to be sent to MiniMax (which rejects it).
Now uses resolved provider from getAIModel instead of re-deriving it.
- Extract normalizeMiniMaxBaseURL() shared helper to eliminate duplication
between ai-providers.ts and validate-model/route.ts
- Add guard for undefined MiniMax baseURL to prevent hitting api.anthropic.com
- Fix docs: mark China mainland URL as default (matches code behavior)
- Restructure minimax/glm/qwen/kimi/qiniu validation to use shared pattern
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: document MiniMax dual API formats in docs and UI
- Add hint below Base URL input when MiniMax is selected, explaining
Anthropic-compatible (/anthropic) vs OpenAI-compatible (/v1) endpoints
- Update all 3 ai-providers docs (en/cn/ja) to list all 4 endpoint options
(China/International × Anthropic/OpenAI)
- Add i18n translations for the hint in all 4 locales
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: deduplicate PROVIDER_LOGO_MAP, remove unnecessary optional chaining
- Extract PROVIDER_LOGO_MAP to lib/types/model-config.ts (was duplicated
in model-config-dialog.tsx and model-selector.tsx)
- Remove unnecessary ?. on PROVIDER_INFO.minimax (it's a full Record)
---------
Co-authored-by: msga-oc <msga-oc@gitea.misakiga.top>
Co-authored-by: Shinyi <shinyi@openclaw.ai>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:53:47 +08:00
"modelscope" : "ModelScope" ,
"minimax" : "MiniMax" ,
"glm" : "GLM" ,
"qwen" : "Qwen" ,
"kimi" : "Kimi" ,
"qiniu" : "Qiniu"
2025-12-20 20:18:54 +05:30
} ,
"chat" : {
"placeholder" : "Describe your diagram or upload a file..." ,
"send" : "Send" ,
2026-01-29 19:10:25 +05:30
"stopGeneration" : "Stop generation" ,
2025-12-20 20:18:54 +05:30
"sendMessage" : "Send message" ,
"clearConversation" : "Clear conversation" ,
"diagramHistory" : "Diagram history" ,
"saveDiagram" : "Save diagram" ,
"uploadFile" : "Upload file (image, PDF, text)" ,
"minimalStyle" : "Minimal" ,
"styledMode" : "Styled" ,
"minimalTooltip" : "Use minimal for faster generation (no colors)" ,
"regenerate" : "Regenerate response" ,
"copyResponse" : "Copy response" ,
"copied" : "Copied!" ,
"failedToCopy" : "Failed to copy" ,
2025-12-30 19:52:57 +08:00
"failedToCopyDetail" : "Failed to copy message. Please copy manually or check clipboard permissions." ,
2025-12-20 20:18:54 +05:30
"goodResponse" : "Good response" ,
"badResponse" : "Bad response" ,
"clickToEdit" : "Click to edit" ,
"editMessage" : "Edit message" ,
2026-01-05 20:53:50 +05:30
"saveAndSubmit" : "Save & Submit" ,
"ExtractURL" : "Extract from URL"
2025-12-20 20:18:54 +05:30
} ,
"examples" : {
"title" : "Create diagrams with AI" ,
"subtitle" : "Describe what you want to create or upload an image to replicate" ,
"quickExamples" : "Quick Examples" ,
"paperToDiagram" : "Paper to Diagram" ,
"paperDescription" : "Upload .pdf, .txt, .md, .json, .csv, .py, .js, .ts and more" ,
"animatedDiagram" : "Animated Diagram" ,
"animatedDescription" : "Draw a transformer architecture with animated connectors" ,
"awsArchitecture" : "AWS Architecture" ,
"awsDescription" : "Create a cloud architecture diagram with AWS icons" ,
"replicateFlowchart" : "Replicate Flowchart" ,
"replicateDescription" : "Upload and replicate an existing flowchart" ,
"creativeDrawing" : "Creative Drawing" ,
"creativeDescription" : "Draw something fun and creative" ,
"cachedNote" : "Examples are cached for instant response" ,
"mcpServer" : "MCP Server" ,
2026-04-06 10:17:38 +09:00
"mcpDescription" : "Use in Claude Desktop, VS Code & Cursor"
2025-12-20 20:18:54 +05:30
} ,
"settings" : {
"title" : "Settings" ,
"description" : "Configure your application settings." ,
2026-01-28 14:36:54 +01:00
"apiKeysModels" : "API Keys & Models" ,
"apiKeysModelsDescription" : "Configure AI providers and API keys." ,
2025-12-20 20:18:54 +05:30
"accessCode" : "Access Code" ,
"accessCodePlaceholder" : "Enter access code" ,
"accessCodeDescription" : "Required to use this application." ,
"aiProvider" : "AI Provider Settings" ,
"aiProviderDescription" : "Use your own API key to bypass usage limits. Your key is stored locally in your browser and is never stored on the server." ,
"provider" : "Provider" ,
"modelId" : "Model ID" ,
"apiKey" : "API Key" ,
"apiKeyPlaceholder" : "Your API key" ,
"baseUrl" : "Base URL (optional)" ,
"customEndpoint" : "Custom endpoint URL" ,
"overrides" : "Overrides" ,
"clearSettings" : "Clear Settings" ,
"useServerDefault" : "Use Server Default" ,
2025-12-22 21:54:25 +08:00
"language" : "Language" ,
"languageDescription" : "Choose your interface language." ,
2025-12-20 20:18:54 +05:30
"theme" : "Theme" ,
"themeDescription" : "Dark/Light mode for interface and DrawIO canvas." ,
"drawioStyle" : "DrawIO Style" ,
"drawioStyleDescription" : "Canvas style:" ,
"switchTo" : "Switch to" ,
"minimal" : "Minimal" ,
"sketch" : "Sketch" ,
2025-12-28 18:46:10 +05:30
"diagramStyle" : "Diagram Style" ,
"diagramStyleDescription" : "Toggle between minimal and styled diagram output." ,
2026-01-11 07:54:32 +06:00
"sendShortcut" : "Send Shortcut" ,
"sendShortcutDescription" : "Choose how to send messages." ,
"enterToSend" : "Enter to send" ,
"ctrlEnterToSend" : "Cmd/Ctrl+Enter to send" ,
2025-12-28 18:46:10 +05:30
"diagramActions" : "Diagram Actions" ,
"diagramActionsDescription" : "Manage diagram history and exports" ,
"history" : "History" ,
2026-01-09 09:26:19 +09:00
"download" : "Download" ,
"proxy" : "Proxy Settings" ,
"proxyDescription" : "Configure HTTP/HTTPS proxy for API requests (Desktop only)" ,
"httpProxy" : "HTTP Proxy" ,
"httpsProxy" : "HTTPS Proxy" ,
"applyProxy" : "Apply" ,
2026-01-20 20:52:04 +09:00
"proxyApplied" : "Proxy settings applied" ,
"diagramValidation" : "Diagram Validation (Experimental)" ,
"diagramValidationDescription" : "Use a vision language model to validate generated diagrams. Requires a VLM like GPT-5.2 or Sonnet-4.5." ,
"enabled" : "Enabled" ,
2026-03-07 19:07:54 +09:00
"disabled" : "Disabled" ,
"customSystemMessage" : "Custom System Message" ,
"customSystemMessageDescription" : "Add custom instructions appended to the AI's system prompt." ,
feat: add personal My Templates library alongside Quick Examples (#773)
* 增加了ralph自动化编程梳理
* feat: US-001 - 为模板库建立独立的 IndexedDB 存储层
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-002 - 在空聊天状态用我的模板库替换官方示例
- 将 ChatLobby 中的 Quick Examples 替换为 TemplatePanel
- 当没有历史会话时,展示完整的模板库面板
- 当有历史会话时,展示可折叠的 "My Templates" 区域
- 使用 TemplatePanel 组件展示用户的个人模板库
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-004 - Provide template creation flow
- Create TemplateCreateDialog component with form fields for prompt, title, description, tags, and pinned
- Add i18n translations for template creation UI in en, zh, zh-Hant, ja
- Update TemplatePanel to integrate the create dialog
- Support initialPrompt prop for pre-filling from current input
- Validate required prompt field (empty prompt not allowed)
- Auto-generate default title from first 20 chars of Pin templates appear at top of list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-005 - 为模板卡片提供编辑、删除和复制操作
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-006 - Send template directly on click and record usage statistics
- Implement click-to-send template functionality with confirmation dialog
- Add clickCount and runCount increment logic
- Display runCount and lastUsedAt on template card
- Add i18n translations for confirmation dialog (en, zh, zh-Hant, ja)
- Pass onSendTemplate and currentInput props through component hierarchy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-007 - Support template search, pin and default sorting
- Add search bar to TemplatePanel with real-time filtering by title, description, and tags
- Add pin/unpin toggle button on template cards (uses Bookmark icon with fill indicator)
- Search uses existing searchTemplates function from template-storage
- Sort uses existing sortTemplates function (pinned desc, runCount desc, lastUsedAt desc, updatedAt desc)
- Show empty state with Search icon when search returns no results
- List re-sorts immediately after pin/unpin toggle
- Add i18n keys: searchPlaceholder, searchNoResults, pin, unpin for all 4 languages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-008 - Support saving current input as template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-009 - Support saving historical user message as template
- Add "Save as Template" button to user messages
- Pre-fill prompt with original user message text
- Only show on user messages,- Dialog opens TemplateCreateDialog on click
- Template appears in list immediately after saving
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-010 - Support template import and export
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove local-only dirs from git tracking (.agents, .cursor, scripts, screenshots)
These directories contain local IDE configs, agent scripts, and
dev tooling that should not be part of the upstream repository.
Added them to .gitignore to prevent future accidental commits.
* chore: remove AGENTS.md from git tracking
* fix: add missing i18n keys for template export/import (en/zh/zh-Hant/ja)
* fix: review fixes for my-templates PR
- Fix fragile querySelector("form") with id-based lookup
- Add objectStoreNames.contains guards for IndexedDB upgrades
- Remove duplicate TemplateSchema, import from template-storage
- Revert contributor-specific .gitignore additions
- Fix broken i18n placeholders and missing translations (zh/ja/zh-Hant)
- Remove unused setFiles prop from ChatLobby
- Remove tags feature (unnecessary complexity)
- Improve template card layout: overlay icons on hover, align stats
- Add break-all and overflow-hidden for long prompt text in dialogs
- Move incrementClickCount into sendTemplate for accurate tracking
- Use Intl.RelativeTimeFormat for locale-aware relative time
* feat: restore Quick Examples panel and add lobby panel visibility settings
Bring back the ExamplePanel as a third collapsible section in ChatLobby
alongside Recent Chats and My Templates. Add toggle switches in Settings
to show/hide each lobby panel, persisted via localStorage.
* fix: template send race condition, import defaults, and empty title bug
- Use flushSync instead of setTimeout(0) in handleSendTemplate to
ensure React state is flushed before form submission
- Explicitly validate and default all fields in importTemplates to
prevent undefined counters from malformed import JSON
- Fall back to existing title in edit dialog instead of writing undefined
* fix: address Copilot review comments and remove PRD file
- Fix fallback formatLastUsed returning "Not used yet" for recent usage
- Remove dead mounted flag in TemplatePanel useEffect
- Respect panel visibility settings in no-history lobby state
- Reject empty/whitespace titles in import validation
- Trim title/prompt in importTemplates with default title fallback
- Remove tasks/prd-template-library-replaces-examples.md from repo
* fix: remove double sort, dead code, redundant stats, and break-all CSS
- Remove redundant sortTemplates call in loadTemplates (already sorted by getAllTemplates)
- Remove unused createEmptyTemplateInput and sortTemplates import
- Show "Not used yet" only once for unused templates instead of twice
- Use break-words instead of break-all on prompt textareas
---------
Co-authored-by: 杜雷 <dreamfly@126.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
2026-04-03 11:16:01 +08:00
"customSystemMessagePlaceholder" : "e.g., Always use blue color scheme for diagrams..." ,
"panelVisibility" : "Lobby Panels" ,
"panelVisibilityDescription" : "Choose which panels to show on the chat lobby." ,
"showRecentChats" : "Recent Chats" ,
"showMyTemplates" : "My Templates" ,
"showQuickExamples" : "Quick Examples"
2025-12-20 20:18:54 +05:30
} ,
"save" : {
"title" : "Save Diagram" ,
"description" : "Choose a format and filename to save your diagram." ,
"format" : "Format" ,
"filename" : "Filename" ,
"filenamePlaceholder" : "Enter filename" ,
"formats" : {
"drawio" : "Draw.io XML" ,
"png" : "PNG Image" ,
2026-04-03 07:50:57 +08:00
"svg" : "SVG Image" ,
"xmlsvg" : "Editable SVG"
2026-01-04 09:41:32 +05:30
} ,
"savedSuccessfully" : "Saved successfully!"
2025-12-20 20:18:54 +05:30
} ,
"history" : {
"title" : "Diagram History" ,
"description" : "Here saved each diagram before AI modification.\nClick on a diagram to restore it" ,
"noHistory" : "No history available yet. Send messages to create diagram history." ,
"version" : "Version" ,
"restoreTo" : "Restore to Version {version}?"
} ,
"dialogs" : {
"clearTitle" : "Clear Everything?" ,
"clearDescription" : "This will clear the current conversation and reset the diagram. This action cannot be undone." ,
"clearEverything" : "Clear Everything" ,
"clearSuccess" : "Started a fresh chat"
} ,
"errors" : {
"maxFiles" : "Too many files. Maximum {max} allowed." ,
"onlyMoreAllowed" : "Only {slots} more file(s) allowed" ,
"fileExceeds" : "\"{name}\" is {size} (exceeds {max}MB)" ,
"unsupportedType" : "\"{name}\" is not a supported file type" ,
"filesRejected" : "{count} files rejected:" ,
"andMore" : "...and {count} more" ,
"invalidAccessCode" : "Invalid or missing access code. Please configure it in Settings." ,
"networkError" : "Network error. Please check your connection." ,
"retryLimit" : "Auto-retry limit reached ({max}). Please try again manually." ,
2025-12-30 19:52:57 +08:00
"continuationRetryLimit" : "Continuation retry limit reached ({max}). The diagram may be too complex." ,
2025-12-20 20:18:54 +05:30
"validationFailed" : "Diagram validation failed. Please try regenerating." ,
"malformedXml" : "AI generated invalid diagram XML. Please try regenerating." ,
"failedToProcess" : "Failed to process diagram. Please try regenerating." ,
"sessionCorrupted" : "Session data was corrupted. Starting fresh." ,
"failedToSave" : "Failed to save messages to localStorage" ,
"failedToRestore" : "Failed to restore from localStorage" ,
"failedToPersist" : "Failed to persist state before unload" ,
"failedToExport" : "Error fetching chart data" ,
2025-12-30 19:52:57 +08:00
"failedToLoadExample" : "Error loading example image" ,
"failedToRecordFeedback" : "Failed to record your feedback. Please try again." ,
"storageUpdateFailed" : "Chat cleared but browser storage could not be updated"
2025-12-20 20:18:54 +05:30
} ,
"quota" : {
"dailyLimit" : "Daily Quota Reached" ,
"tokenLimit" : "Daily Token Limit Reached" ,
"tpmLimit" : "Rate Limit" ,
"tpmMessage" : "Too many requests. Please wait a moment." ,
2025-12-22 19:30:20 +05:30
"tpmMessageDetailed" : "Rate limit reached ({limit} tokens/min). Please wait {seconds} seconds before sending another request." ,
2025-12-29 12:12:22 +09:00
"messageApi" : "Looks like you've reached today's demo limit. We're thrilled you're enjoying it, and while ByteDance Doubao generously sponsors this demo, we've had to set a few boundaries to keep things fair for everyone." ,
2026-02-27 07:34:05 -08:00
"messageApiSelfHosted" : null ,
2025-12-29 12:12:22 +09:00
"messageToken" : "Looks like you've reached today's token limit. We're thrilled you're enjoying it, and while ByteDance Doubao generously sponsors this demo, we've had to set a few boundaries to keep things fair for everyone." ,
2026-02-27 07:34:05 -08:00
"messageTokenSelfHosted" : null ,
2025-12-20 20:18:54 +05:30
"tip" : "<strong>Tip:</strong> You can use your own API key (click the Settings icon) or self-host the project to bypass these limits." ,
2026-02-27 07:34:05 -08:00
"tipSelfHosted" : "<strong>Tip:</strong> You can configure your own API key in the settings to continue using the service." ,
2025-12-29 12:12:22 +09:00
"reset" : "Your limit resets tomorrow. Thanks for understanding." ,
"doubaoSponsorship" : "<a href=\"{link}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"underline hover:text-foreground\">Register here</a> to get 500K free tokens per model (including Doubao, DeepSeek and Kimi), then configure your API key in model settings." ,
"configModel" : "Use Your API Key" ,
2025-12-20 20:18:54 +05:30
"selfHost" : "Self-host" ,
"sponsor" : "Sponsor" ,
"learnMore" : "Learn more →" ,
"usedOf" : "{used}/{limit}"
} ,
"tools" : {
"generateDiagram" : "Generate Diagram" ,
"editDiagram" : "Edit Diagram" ,
"appendDiagram" : "Continue Diagram" ,
"complete" : "Complete" ,
"error" : "Error" ,
"truncated" : "Truncated"
} ,
"file" : {
"reading" : "Reading..." ,
"chars" : "chars" ,
"removeFile" : "Remove file"
} ,
2026-01-05 20:53:50 +05:30
"url" : {
"title" : "Extract Content from URL" ,
"description" : "Paste a URL to extract and analyze its content" ,
"Extracting" : "Extracting..." ,
"extract" : "Extract" ,
"Cancel" : "Cancel" ,
"enterUrl" : "Please enter a URL" ,
"invalidFormat" : "Invalid URL format"
} ,
2025-12-20 20:18:54 +05:30
"reasoning" : {
"thinking" : "Thinking..." ,
"thoughtFor" : "Thought for {duration} seconds" ,
"thoughtBrief" : "Thought for a few seconds"
} ,
2025-12-30 19:52:57 +08:00
"dev" : {
"title" : "Dev: XML Streaming Simulator" ,
"preset" : "Preset:" ,
"selectPreset" : "Select a preset..." ,
"clear" : "Clear" ,
"placeholder" : "Paste mxCell XML here or select a preset..." ,
"interval" : "Interval:" ,
"chars" : "Chars:" ,
"streaming" : "Streaming..." ,
"simulate" : "Simulate" ,
"stop" : "Stop" ,
"testQuotaToast" : "Test Quota Toast" ,
"simulatingMessage" : "[Dev] Simulating XML streaming" ,
"successMessage" : "Successfully displayed the diagram."
} ,
2025-12-20 20:18:54 +05:30
"about" : {
"modelChange" : "Model Change & Usage Limits" ,
"walletCrying" : "(Or: Why My Wallet is Crying)" ,
"seekingSponsorship" : "Call for Sponsorship" ,
"contactMe" : "Contact Me" ,
"usageNotice" : "Due to high usage, I have changed the model from Claude to minimax-m2 and added some usage limits. See About page for details."
feat: multi-provider model configuration with UI/UX improvements (#355)
* feat: add multi-provider model configuration
- Add model config dialog for managing multiple AI providers
- Support for OpenAI, Anthropic, Google, Azure, Bedrock, OpenRouter, DeepSeek, SiliconFlow, Ollama, and AI Gateway
- Add model selector dropdown in chat panel header
- Add API key validation endpoint
- Add custom model ID input with keyboard navigation
- Fix hover highlight in Command component
- Add suggested models for each provider including latest Claude 4.5 series
- Store configuration locally in browser
* feat: improve model config UI and move selector to chat input
- Move model selector from header to chat input (left of send button)
- Add per-model validation status (queued, running, valid, invalid)
- Filter model selector to only show verified models
- Add editable model IDs in config dialog
- Add custom model input field alongside suggested models dropdown
- Fix hover states on provider buttons and select triggers
- Update OpenAI suggested models with GPT-5 series
- Add alert-dialog component for delete confirmation
* refactor: revert shadcn component changes, apply hover fix at usage site
* feat: add AWS credentials support for Bedrock provider
- Add AWS Access Key ID, Secret Access Key, Region fields for Bedrock
- Show different credential fields based on provider type
- Update validation API to handle Bedrock with AWS credentials
- Add region selector with common AWS regions
* fix: reset Test button after validation completes
* fix: reset validation button to Test after success
* fix: complete bedrock support and UI/UX improvements
- Add bedrock to ALLOWED_CLIENT_PROVIDERS for client credentials
- Pass AWS credentials through full chain (headers → API → provider)
- Replace non-existent GPT-5 models with real ones (o1, o3-mini)
- Add accessibility: aria-labels, focus-visible rings, inline errors
- Add more AWS regions (Ohio, London, Paris, Mumbai, Seoul, São Paulo)
- Fix setTimeout cleanup with useRef on component unmount
- Fix TypeScript type consistency in getSelectedAIConfig fallback
* chore: remove unused code
- Remove unused setAccessCodeRequired state in chat-panel.tsx
- Remove unused getSelectedModel export in model-config.ts
* fix: UI/UX improvements for model configuration dialog
- Add gradient header styling with icon badge
- Change Configuration section icon from Key to Settings2
- Add duplicate model detection with warning banner and inline removal
- Filter out already-added models from suggestions dropdown
- Add type-to-confirm for deleting providers with 3+ models
- Enhance delete confirmation dialog with warning icon
- Improve model selector discoverability (show model name + chevron)
- Add truncation for long model names with title tooltip
- Remove AI provider settings from Settings dialog (now in Model Config)
- Extract ValidationButton into reusable component
* fix: prevent duplicate model IDs within same provider
- Block adding model if ID already exists in provider
- Block editing model ID to match existing model in provider
* fix: improve duplicate model ID notifications
- Add toast notification when trying to add duplicate model
- Allow free typing when editing model ID, validate on blur
- Show warning toast instead of blocking input
* fix: improve duplicate model validation UX in config dialog
- Add inline error display for duplicate model IDs
- Show red border on input when error exists
- Validate on blur with shake animation for edit errors
- Prevent saving empty model names
- Clear errors when user starts typing
- Simplify error styling (small red text, no heavy chips)
2025-12-22 22:36:36 +09:00
} ,
feat: add chat session history with IndexedDB persistence (#500)
* feat(session): add chat session history with IndexedDB storage
- Add session-storage.ts with IndexedDB wrapper using idb library
- Add use-session-manager.ts hook for session state management
- Add session-history-dropdown.tsx for session selection UI
- Integrate session system into chat-panel.tsx
- Auto-generate session titles from first user message
- Auto-save sessions on message completion
- Support session switching, deletion, and creation
- Migrate existing localStorage data to IndexedDB
- Add i18n translations for session history UI
* feat(session): improve history dropdown and persist diagram history
- Add time-based grouping (Today, Yesterday, This Week, Earlier)
- Add thumbnail previews using Next.js Image component
- Add staggered entrance animations with fade-in effects
- Improve active session indicator with left border accent
- Fix scrolling by using native overflow instead of ScrollArea
- Persist diagram version history to IndexedDB sessions
- Remove redundant diagram XML from localStorage
- Add i18n strings for time group labels (en, ja, zh)
* fix(session): prevent data loss on theme change and tab close
- Add isDrawioReady effect to restore diagram after DrawIO remount
- Add visibilitychange handler to save session when page becomes hidden
- Fix missing currentSessionId in saveCurrentSession dependency array
- Remove unused sanitizeMessages import from use-session-manager
* fix(session): fix diagram save and migration data loss bugs
- Add diagramHistory to save effect dependency array so diagram-only
edits trigger saves (previously only message changes did)
- Destructure stable sessionManager values to prevent unnecessary
effect re-runs on every render
- Add try-catch wrapper around debounced async save operation
- Make saveSession() return boolean to indicate success/failure
- Verify IndexedDB write succeeded before deleting localStorage data
during migration (prevents data loss if write silently fails)
- Keep localStorage data for retry if migration fails instead of
marking as complete anyway
* refactor(session): extract helpers to reduce code duplication
- Add syncUIWithSession helper to consolidate 4 duplicate UI sync blocks
- Add buildSessionData helper to consolidate 4 duplicate save logic blocks
- Remove unused saveTimeoutRef and its cleanup effect
- Net reduction of ~80 lines of duplicate code
* style(ui): improve history dropdown and delete dialog styling
- Change destructive color from coral to muted rose for refined look
- Make session history panel taller (400px fixed height)
- Fix popover alignment to prevent truncation
- Style delete button with soft red outline instead of solid fill
- Make delete dialog more compact (max-w-sm)
* fix(session): reset refs on new chat and show recent sessions
- Fix cached example diagrams not displaying after creating new session
- Reset previousXML, lastProcessedXmlRef and processedToolCalls when
messages become empty (new chat or session switch)
- Add recent chats section in empty chat state with collapsible examples
- Pass sessions and onSelectSession to ChatMessageDisplay
- Add loadedMessageIdsRef to skip animations on session restore
- Add debug console.log for diagram processing flow
* feat(session): add search bar and improve history UI
- Remove session history dropdown, use main panel instead
- Add search bar to filter history chats by title
- Show minutes (Xm ago) instead of "Just now" for recent sessions
- Scroll to top when switching to new/empty chat
- Remove title truncation limit for better searchability
- Remove debug console.log statements
* refactor: remove redundant code and fix nested button hydration error
- Remove unused 'sessions' from deleteSession dependency array
- Remove unused 'switchedTo' variable and simplify return type
- Remove unused 'restoredMessageIdsRef' (always empty)
- Fix nested button hydration error by using div with role=button
- Simplify handleDeleteSession callback
* fix(session): fix migration bug, improve metadata perf, truncate titles
- Fix migration retry loop when localStorage has empty array
- Use cursor-based iteration for getAllSessionMetadata
- Truncate session titles to 100 chars with ellipsis
* refactor: remove dead code and extract diagram length constant
- Remove unused exports: getAllSessions, createNewSession, updateSessionTitle
- Remove write-only CURRENT_SESSION_KEY and all localStorage calls
- Remove dead messagesEndRef and unused scroll effect
- Extract magic number 300 to MIN_REAL_DIAGRAM_LENGTH constant
- Add isRealDiagram() helper function for semantic clarity
2026-01-04 10:25:19 +09:00
"sessionHistory" : {
"tooltip" : "Chat History" ,
"newChat" : "New Chat" ,
"empty" : "No chat history yet" ,
"emptyHint" : "Start a conversation to begin" ,
"today" : "Today" ,
"yesterday" : "Yesterday" ,
"thisWeek" : "This Week" ,
"earlier" : "Earlier" ,
"deleteTitle" : "Delete this chat?" ,
"deleteDescription" : "This will permanently delete this chat session and its diagram. This action cannot be undone." ,
"recentChats" : "Recent Chats" ,
"justNow" : "Just now" ,
"searchPlaceholder" : "Search chats..." ,
"noResults" : "No chats found"
} ,
feat: add personal My Templates library alongside Quick Examples (#773)
* 增加了ralph自动化编程梳理
* feat: US-001 - 为模板库建立独立的 IndexedDB 存储层
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-002 - 在空聊天状态用我的模板库替换官方示例
- 将 ChatLobby 中的 Quick Examples 替换为 TemplatePanel
- 当没有历史会话时,展示完整的模板库面板
- 当有历史会话时,展示可折叠的 "My Templates" 区域
- 使用 TemplatePanel 组件展示用户的个人模板库
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-004 - Provide template creation flow
- Create TemplateCreateDialog component with form fields for prompt, title, description, tags, and pinned
- Add i18n translations for template creation UI in en, zh, zh-Hant, ja
- Update TemplatePanel to integrate the create dialog
- Support initialPrompt prop for pre-filling from current input
- Validate required prompt field (empty prompt not allowed)
- Auto-generate default title from first 20 chars of Pin templates appear at top of list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-005 - 为模板卡片提供编辑、删除和复制操作
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-006 - Send template directly on click and record usage statistics
- Implement click-to-send template functionality with confirmation dialog
- Add clickCount and runCount increment logic
- Display runCount and lastUsedAt on template card
- Add i18n translations for confirmation dialog (en, zh, zh-Hant, ja)
- Pass onSendTemplate and currentInput props through component hierarchy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-007 - Support template search, pin and default sorting
- Add search bar to TemplatePanel with real-time filtering by title, description, and tags
- Add pin/unpin toggle button on template cards (uses Bookmark icon with fill indicator)
- Search uses existing searchTemplates function from template-storage
- Sort uses existing sortTemplates function (pinned desc, runCount desc, lastUsedAt desc, updatedAt desc)
- Show empty state with Search icon when search returns no results
- List re-sorts immediately after pin/unpin toggle
- Add i18n keys: searchPlaceholder, searchNoResults, pin, unpin for all 4 languages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-008 - Support saving current input as template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-009 - Support saving historical user message as template
- Add "Save as Template" button to user messages
- Pre-fill prompt with original user message text
- Only show on user messages,- Dialog opens TemplateCreateDialog on click
- Template appears in list immediately after saving
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-010 - Support template import and export
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove local-only dirs from git tracking (.agents, .cursor, scripts, screenshots)
These directories contain local IDE configs, agent scripts, and
dev tooling that should not be part of the upstream repository.
Added them to .gitignore to prevent future accidental commits.
* chore: remove AGENTS.md from git tracking
* fix: add missing i18n keys for template export/import (en/zh/zh-Hant/ja)
* fix: review fixes for my-templates PR
- Fix fragile querySelector("form") with id-based lookup
- Add objectStoreNames.contains guards for IndexedDB upgrades
- Remove duplicate TemplateSchema, import from template-storage
- Revert contributor-specific .gitignore additions
- Fix broken i18n placeholders and missing translations (zh/ja/zh-Hant)
- Remove unused setFiles prop from ChatLobby
- Remove tags feature (unnecessary complexity)
- Improve template card layout: overlay icons on hover, align stats
- Add break-all and overflow-hidden for long prompt text in dialogs
- Move incrementClickCount into sendTemplate for accurate tracking
- Use Intl.RelativeTimeFormat for locale-aware relative time
* feat: restore Quick Examples panel and add lobby panel visibility settings
Bring back the ExamplePanel as a third collapsible section in ChatLobby
alongside Recent Chats and My Templates. Add toggle switches in Settings
to show/hide each lobby panel, persisted via localStorage.
* fix: template send race condition, import defaults, and empty title bug
- Use flushSync instead of setTimeout(0) in handleSendTemplate to
ensure React state is flushed before form submission
- Explicitly validate and default all fields in importTemplates to
prevent undefined counters from malformed import JSON
- Fall back to existing title in edit dialog instead of writing undefined
* fix: address Copilot review comments and remove PRD file
- Fix fallback formatLastUsed returning "Not used yet" for recent usage
- Remove dead mounted flag in TemplatePanel useEffect
- Respect panel visibility settings in no-history lobby state
- Reject empty/whitespace titles in import validation
- Trim title/prompt in importTemplates with default title fallback
- Remove tasks/prd-template-library-replaces-examples.md from repo
* fix: remove double sort, dead code, redundant stats, and break-all CSS
- Remove redundant sortTemplates call in loadTemplates (already sorted by getAllTemplates)
- Remove unused createEmptyTemplateInput and sortTemplates import
- Show "Not used yet" only once for unused templates instead of twice
- Use break-words instead of break-all on prompt textareas
---------
Co-authored-by: 杜雷 <dreamfly@126.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
2026-04-03 11:16:01 +08:00
"templates" : {
"title" : "My Templates" ,
"subtitle" : "Your personal prompt library for quick diagram creation" ,
"emptyTitle" : "No templates yet" ,
"emptyDescription" : "Create your first template to start building your personal prompt library" ,
"createFirst" : "Create First Template" ,
"neverUsed" : "Not used yet" ,
"usedCount" : "{count} uses" ,
"myTemplates" : "My Templates" ,
"createTitle" : "Create Template" ,
"createDescription" : "Save a prompt for repeated use. Templates help you quickly start common workflows." ,
"promptLabel" : "Prompt" ,
"promptPlaceholder" : "Describe the diagram you want to create..." ,
"promptRequired" : "Prompt is required" ,
"titleLabel" : "Title" ,
"titlePlaceholder" : "Enter a title" ,
"titleHint" : "Leave empty to use the first 20 characters of prompt" ,
"descriptionLabel" : "Description" ,
"descriptionPlaceholder" : "Add a description for this template" ,
"pinnedLabel" : "Pin Template" ,
"pinnedHint" : "Pinned templates appear at the top of the list" ,
"createButton" : "Create Template" ,
"createFailed" : "Failed to create template. Please try again." ,
"editTitle" : "Edit Template" ,
"editDescription" : "Update your template content and settings." ,
"updateFailed" : "Failed to update template. Please try again." ,
"duplicate" : "Duplicate" ,
"copySuffix" : "(copy)" ,
"deleteTitle" : "Delete this template?" ,
"deleteDescription" : "This will permanently delete this template. This action cannot be undone." ,
"confirmSendTitle" : "Replace current input?" ,
"confirmSendDescription" : "You have unsent content in the input. Sending this template will replace it." ,
"confirmSendButton" : "Send Template" ,
"searchPlaceholder" : "Search templates..." ,
"searchNoResults" : "No templates match your search" ,
"pin" : "Pin to top" ,
"unpin" : "Unpin from top" ,
"saveAsTemplate" : "Save as Template" ,
"exportTemplates" : "Export Templates" ,
"importTemplates" : "Import Templates" ,
"exportEmpty" : "No templates to export" ,
"exportSuccess" : "Exported {count} template(s) successfully" ,
"importNoFile" : "Please select a JSON file" ,
"importFailed" : "Import failed: {error}" ,
"importSuccess" : "Imported {imported} template(s), skipped {skipped} duplicate(s)"
} ,
2026-01-20 20:52:04 +09:00
"validation" : {
"title" : "Validate Diagram" ,
"capturing" : "Capturing" ,
"validating" : "Validating" ,
"validatingWithAttempt" : "Validating ({attempt}/{max})" ,
"valid" : "Valid" ,
"validWithWarnings" : "Valid with Warnings" ,
"issuesFound" : "Issues Found" ,
"error" : "Error" ,
"skipped" : "Skipped" ,
"capturedScreenshot" : "Captured Screenshot:" ,
"issuesFoundLabel" : "Issues Found:" ,
"suggestions" : "Suggestions:" ,
"passedValidation" : "Diagram passed visual validation - no issues detected." ,
"improvementRequested" : "Improvement requested - check the new diagram below" ,
"improveWithSuggestions" : "Improve with Suggestions" ,
"regenerateWithFeedback" : "Regenerate the diagram using the validation feedback"
} ,
feat: multi-provider model configuration with UI/UX improvements (#355)
* feat: add multi-provider model configuration
- Add model config dialog for managing multiple AI providers
- Support for OpenAI, Anthropic, Google, Azure, Bedrock, OpenRouter, DeepSeek, SiliconFlow, Ollama, and AI Gateway
- Add model selector dropdown in chat panel header
- Add API key validation endpoint
- Add custom model ID input with keyboard navigation
- Fix hover highlight in Command component
- Add suggested models for each provider including latest Claude 4.5 series
- Store configuration locally in browser
* feat: improve model config UI and move selector to chat input
- Move model selector from header to chat input (left of send button)
- Add per-model validation status (queued, running, valid, invalid)
- Filter model selector to only show verified models
- Add editable model IDs in config dialog
- Add custom model input field alongside suggested models dropdown
- Fix hover states on provider buttons and select triggers
- Update OpenAI suggested models with GPT-5 series
- Add alert-dialog component for delete confirmation
* refactor: revert shadcn component changes, apply hover fix at usage site
* feat: add AWS credentials support for Bedrock provider
- Add AWS Access Key ID, Secret Access Key, Region fields for Bedrock
- Show different credential fields based on provider type
- Update validation API to handle Bedrock with AWS credentials
- Add region selector with common AWS regions
* fix: reset Test button after validation completes
* fix: reset validation button to Test after success
* fix: complete bedrock support and UI/UX improvements
- Add bedrock to ALLOWED_CLIENT_PROVIDERS for client credentials
- Pass AWS credentials through full chain (headers → API → provider)
- Replace non-existent GPT-5 models with real ones (o1, o3-mini)
- Add accessibility: aria-labels, focus-visible rings, inline errors
- Add more AWS regions (Ohio, London, Paris, Mumbai, Seoul, São Paulo)
- Fix setTimeout cleanup with useRef on component unmount
- Fix TypeScript type consistency in getSelectedAIConfig fallback
* chore: remove unused code
- Remove unused setAccessCodeRequired state in chat-panel.tsx
- Remove unused getSelectedModel export in model-config.ts
* fix: UI/UX improvements for model configuration dialog
- Add gradient header styling with icon badge
- Change Configuration section icon from Key to Settings2
- Add duplicate model detection with warning banner and inline removal
- Filter out already-added models from suggestions dropdown
- Add type-to-confirm for deleting providers with 3+ models
- Enhance delete confirmation dialog with warning icon
- Improve model selector discoverability (show model name + chevron)
- Add truncation for long model names with title tooltip
- Remove AI provider settings from Settings dialog (now in Model Config)
- Extract ValidationButton into reusable component
* fix: prevent duplicate model IDs within same provider
- Block adding model if ID already exists in provider
- Block editing model ID to match existing model in provider
* fix: improve duplicate model ID notifications
- Add toast notification when trying to add duplicate model
- Allow free typing when editing model ID, validate on blur
- Show warning toast instead of blocking input
* fix: improve duplicate model validation UX in config dialog
- Add inline error display for duplicate model IDs
- Show red border on input when error exists
- Validate on blur with shake animation for edit errors
- Prevent saving empty model names
- Clear errors when user starts typing
- Simplify error styling (small red text, no heavy chips)
2025-12-22 22:36:36 +09:00
"modelConfig" : {
"title" : "AI Model Configuration" ,
"description" : "Configure multiple AI providers and models" ,
"configure" : "Configure" ,
"addProvider" : "Add Provider" ,
"addModel" : "Add Model" ,
"modelId" : "Model ID" ,
"modelLabel" : "Display Label" ,
"streaming" : "Enable Streaming" ,
"deleteProvider" : "Delete Provider" ,
"deleteModel" : "Delete Model" ,
"noModels" : "No models configured. Add a model to get started." ,
"selectProvider" : "Select a provider or add a new one" ,
"configureMultiple" : "Configure multiple AI providers and switch between them easily" ,
"apiKeyStored" : "API keys are stored locally in your browser" ,
"test" : "Test" ,
"validationError" : "Validation failed" ,
2025-12-23 11:42:27 +09:00
"addModelFirst" : "Add at least one model to validate" ,
"providers" : "Providers" ,
"addProviderHint" : "Add a provider to get started" ,
"verified" : "Verified" ,
"configuration" : "Configuration" ,
"displayName" : "Display Name" ,
"awsAccessKeyId" : "AWS Access Key ID" ,
"awsSecretAccessKey" : "AWS Secret Access Key" ,
"awsRegion" : "AWS Region" ,
"selectRegion" : "Select region" ,
"apiKey" : "API Key" ,
"enterApiKey" : "Enter your API key" ,
"enterSecretKey" : "Enter your secret access key" ,
"baseUrl" : "Base URL" ,
"optional" : "(optional)" ,
2026-01-20 13:39:33 +00:00
"baseUrlWithExample" : "Base URL (optional, e.g. {example})" ,
2025-12-23 11:42:27 +09:00
"customEndpoint" : "Custom endpoint URL" ,
feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
* feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
- Add minimax, glm, qwen, qiniu, kimi to ProviderName type
- Add provider configurations to PROVIDER_INFO with default base URLs
- Add suggested models for MiniMax in SUGGESTED_MODELS
- Add minimax/glm/qwen/qiniu/kimi cases to getAIModel using OpenAI-compatible SDK
- Update ALLOWED_CLIENT_PROVIDERS and error messages
- Add environment variable examples to env.example
Fixes: MiniMax API compatibility issue (invalid chat setting 2013)
* fix: Add missing providers to PROVIDER_ENV_VARS type
* fix: Handle null case in PROVIDER_ENV_VARS for new providers
* fix: Add minimax/glm/qwen/kimi/qiniu support to validate-model API
- Add getDefaultBaseUrl helper function
- Add validation cases for new providers in validate-model route
* fix: Add new providers to buildProviderOptions switch case
* fix: Merge multiple system messages into one for minimax/glm/qwen/kimi/qiniu
MiniMax API doesn't support multiple system messages.
This fix combines them into a single message for Chinese providers.
* fix: Handle null provider in system message check
* debug: Add logging for allMessages count
* fix: Use effective provider (including env var fallback) for isSingleSystemProvider check
* fix: apply biome formatting (line-wrapping)
* docs: add Chinese AI providers documentation (MiniMax, GLM, Qwen, Kimi, Qiniu)
- Add i18n translations for new providers in all language dictionaries
- Add provider configuration documentation in en/cn/ja docs
* fix: 改进 PR #722 的代码审查反馈
1. 删除重复的 getDefaultBaseUrl 函数,改用 model-config.ts 的 PROVIDER_INFO
2. validate-model 路由改用 AI SDK 的 createOpenAI + generateText
3. 修复 resolveBaseURL 回退逻辑,传入 PROVIDER_INFO 的 defaultBaseUrl
4. 删除无用的 .bak 备份文件
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 修正中国 AI provider 端点配置
- qiniu: api.qiniucdn.com → api.qnaigc.com
- qwen: dashscope.aliyun.com → dashscope.aliyuncs.com
- 更新 env.example 文档链接
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* feat: MiniMax 使用 Anthropic 兼容 API
- MiniMax 改用 createAnthropic (而非 createOpenAI)
- 支持 api.minimax.io/anthropic 和 api.minimaxi.com/anthropic
- 合并多个 system 消息为单个 (MiniMax/GLM/Qwen/Kimi/Qiniu)
- 更新默认模型为 MiniMax-M2.5 系列
- 支持 MINIMAX_BASE_URL 环境变量配置
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* docs: 更新 MiniMax 文档
- 添加 Anthropic 兼容 API 说明
- 更新默认模型为 MiniMax-M2.5
- 添加国际版/中国大陆版配置示例
- 更新 env.example 注释
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 完善 MiniMax 双端点支持及问题修复
- 支持 MiniMax Anthropic 兼容端点和 OpenAI 兼容端点自动切换
- 修正默认端点为 api.minimaxi.com (中国大陆可用)
- 修复端点路径缺少 /v1 的问题
- 添加前端 MiniMax logo 映射
- 移除调试日志
- 修正 env.example 默认配置
* chore: clean backup artifacts and align biome formatting
* fix: resolve effectiveProvider bug, deduplicate MiniMax URL logic, fix docs
- Fix critical bug: effectiveProvider was empty during auto-detection,
causing multi-system-message to be sent to MiniMax (which rejects it).
Now uses resolved provider from getAIModel instead of re-deriving it.
- Extract normalizeMiniMaxBaseURL() shared helper to eliminate duplication
between ai-providers.ts and validate-model/route.ts
- Add guard for undefined MiniMax baseURL to prevent hitting api.anthropic.com
- Fix docs: mark China mainland URL as default (matches code behavior)
- Restructure minimax/glm/qwen/kimi/qiniu validation to use shared pattern
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: document MiniMax dual API formats in docs and UI
- Add hint below Base URL input when MiniMax is selected, explaining
Anthropic-compatible (/anthropic) vs OpenAI-compatible (/v1) endpoints
- Update all 3 ai-providers docs (en/cn/ja) to list all 4 endpoint options
(China/International × Anthropic/OpenAI)
- Add i18n translations for the hint in all 4 locales
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: deduplicate PROVIDER_LOGO_MAP, remove unnecessary optional chaining
- Extract PROVIDER_LOGO_MAP to lib/types/model-config.ts (was duplicated
in model-config-dialog.tsx and model-selector.tsx)
- Remove unnecessary ?. on PROVIDER_INFO.minimax (it's a full Record)
---------
Co-authored-by: msga-oc <msga-oc@gitea.misakiga.top>
Co-authored-by: Shinyi <shinyi@openclaw.ai>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:53:47 +08:00
"minimaxBaseUrlHint" : "Use /anthropic for Anthropic-compatible API (recommended), or /v1 for OpenAI-compatible API" ,
2025-12-23 11:42:27 +09:00
"models" : "Models" ,
"customModelId" : "Custom model ID..." ,
"allAdded" : "All added" ,
"suggested" : "Suggested" ,
"noModelsConfigured" : "No models configured" ,
"modelIdEmpty" : "Model ID cannot be empty" ,
"modelIdExists" : "This model ID already exists" ,
"configureProviders" : "Configure AI Providers" ,
"selectProviderHint" : "Select a provider from the list or add a new one to configure API keys and models" ,
"deleteConfirmDesc" : "Are you sure you want to delete {name}? This will remove all configured models and cannot be undone." ,
"typeToConfirm" : "Type \"{name}\" to confirm" ,
"typeProviderName" : "Type provider name..." ,
"modelsConfiguredCount" : "{count} model(s) configured" ,
"validationFailedCount" : "{count} model(s) failed validation" ,
"cancel" : "Cancel" ,
"delete" : "Delete" ,
"clickToChange" : "(click to change)" ,
"usingServerDefault" : "Using server default model" ,
"selectModel" : "Select Model" ,
"searchModels" : "Search models..." ,
"noVerifiedModels" : "No verified models. Test your models first." ,
"noModelsFound" : "No models found." ,
"default" : "Default" ,
"serverDefault" : "Server Default" ,
2026-01-15 21:28:22 +05:30
"serverModels" : "Server Models" ,
"userModels" : "User Models" ,
2025-12-23 11:42:27 +09:00
"configureModels" : "Configure Models..." ,
2025-12-26 11:19:59 +08:00
"onlyVerifiedShown" : "Only verified models are shown" ,
"showUnvalidatedModels" : "Show unvalidated models" ,
"allModelsShown" : "All models are shown (including unvalidated)" ,
2026-01-15 21:28:22 +05:30
"unvalidatedModelWarning" : "This model has not been validated" ,
"serverDefaultModel" : "Server default model"
2025-12-20 20:18:54 +05:30
}
}