export default {
app: {
title: 'MateClaw - AI 助手',
},
common: {
save: '保存',
cancel: '取消',
reset: '重置',
edit: '编辑',
delete: '删除',
create: '创建',
update: '更新',
loading: '加载中...',
enabled: '启用',
disabled: '停用',
default: '默认',
view: '查看',
copy: '复制',
copied: '已复制',
confirm: '确认',
close: '关闭',
add: '添加',
search: '搜索',
clear: '清除',
expandSidebar: '展开侧边栏',
collapseSidebar: '折叠侧边栏',
manageWorkspaces: '管理工作区',
show: '显示',
hide: '隐藏',
on: '开启',
off: '关闭',
yes: '是',
no: '否',
configure: '配置',
enable: '启用',
disable: '停用',
},
auth: {
changePassword: '修改密码',
oldPassword: '当前密码',
newPassword: '新密码',
confirmPassword: '确认新密码',
fieldsRequired: '请填写当前密码和新密码',
passwordMismatch: '两次输入的新密码不一致',
passwordChanged: '密码修改成功',
passwordChangeFailed: '密码修改失败',
},
chat: {
status: {
idle: '就绪',
streaming: '生成中...',
error: '连接断开',
},
thinking: '深度思考',
thinkingInProgress: '思考中...',
stopped: '已停止生成',
interrupted: '已中断',
expandLines: '展开(还有 {hidden} 行)',
collapse: '收起',
failed: '生成失败',
compressionSummary: '之前的对话已整理为摘要',
compressionWithCount: '之前的 {count} 条对话已整理为摘要',
loadingOlder: '加载更早的消息...',
loadOlderMessages: '点击加载更早的消息',
retry: '重试',
errorCode: '错误码',
error: {
rate_limit: {
title: '请求过于频繁',
description: '您的请求超出了频率限制,服务器暂时无法处理。',
action: '请稍等片刻后重试,或减少连续提交次数。',
},
auth_expired: {
title: '登录已过期',
description: '您的登录凭证已失效,需要重新登录。',
action: '页面将自动跳转到登录页。',
},
provider_auth_error: {
title: '模型认证失败',
description: '当前模型的 API Key 无效或已失效,与你的登录状态无关。',
action: '请到「设置 → 模型」中检查并更新该模型的 API Key。',
},
forbidden: {
title: '没有权限',
description: '您没有执行此操作的权限。',
action: '请联系管理员获取访问权限。',
},
bad_request: {
title: '请求参数有误',
description: '发送的请求格式有误,服务器无法理解。',
action: '请检查输入内容后重试。如果问题持续,请联系管理员。',
},
server_error: {
title: '服务器内部错误',
description: '服务器处理请求时遇到了问题。',
action: '请稍后重试。如果问题持续出现,请联系管理员。',
},
service_unavailable: {
title: '服务暂时不可用',
description: '服务正在维护或暂时过载,无法处理请求。',
action: '请稍后再试。',
},
timeout: {
title: '请求超时',
description: '服务器在规定时间内没有响应,可能是网络问题或服务繁忙。',
action: '请检查网络连接后重试。',
},
network: {
title: '网络连接失败',
description: '无法连接到服务器,请检查您的网络状况。',
action: '请确认网络正常后重试。',
},
unknown: {
title: '发生了未知错误',
description: '请求过程中遇到了意外问题。',
action: '请重试。如果问题持续出现,请联系管理员。',
},
},
copy: '复制',
copied: '已复制',
regenerate: '重新生成',
ttsPlay: '朗读',
ttsStop: '停止朗读',
conversations: '会话列表',
newChat: '新对话',
loadingAgents: '加载 Agent 中...',
selectAgent: '请选择 Agent',
noConversations: '暂无会话',
startNewChat: '开始新对话吧',
messages: '{count} 条消息',
configModel: '配置模型',
clearMessages: '清空消息',
goToModelSettings: '前往模型设置',
configModelFirst: '请先配置模型',
modelUnavailable: '当前模型不可用',
noActiveModel: '当前没有激活模型。先到模型管理中选择一个可用模型,再开始对话。',
providerNotReady: '当前激活模型属于 {name},但这个提供商还没配置完成。请到模型管理中补全 API Key 或 Base URL。',
noAvailableModel: '当前没有可用模型。',
loadAgentsFailed: '加载 Agent 列表失败',
loadModelFailed: '加载模型状态失败',
loadConversationsFailed: '加载会话列表失败',
loadMessagesFailed: '加载消息记录失败',
deleteConversationFailed: '删除会话失败',
deleteConfirm: '确定删除这个会话?此操作不可恢复。',
switchModelFailed: '切换模型失败',
searchModel: '搜索模型…',
noMatchModel: '没有匹配的模型',
// RFC-073: liveness hints shown in the model dropdown header
modelLivenessUnprobed: '正在检查可用性',
modelLivenessCooldown: '冷却中({seconds} 秒后自动恢复)',
// RFC-074 PR-2: empty-state inside the model dropdown
noProvidersConfigured: '还没有可用的模型',
goConfigure: '去配置',
uploadFailed: '文件上传失败',
dropToUpload: '拖放文件或文件夹到此处',
copyFailed: '复制失败',
dateToday: '今天',
dateYesterday: '昨天',
dateLast7Days: '近 7 天',
dateEarlier: '更早',
suggestionIntro: '记住我平时不吃香菜、喜欢喝冰美式,以后点餐时提醒我',
suggestionPoem: '帮我搜一下今天科技圈有什么大新闻,用一句话总结',
suggestionCode: '让写手帮我润色一段文案,我先把草稿发你',
suggestionWeather: '你现在都装了哪些技能和工具?教我怎么给你加新本事',
approvalRequired: '需要审批',
approve: '批准',
deny: '拒绝',
approvalHint: '或输入 /approve / /deny',
approved: '✅ 已允许',
denied: '⛔ 已拒绝',
approvalWaiting: '等待输入框确认...',
pendingApprovalPlaceholder: '输入 /approve 或 /deny 来回复...',
messagePlaceholder: '输入消息... (Enter 发送, Shift+Enter 换行)',
thinkingOn: '深度思考已开启',
thinkingOff: '点击开启深度思考',
thinkingUnsupported: '当前模型不支持深度思考',
subtitle: '基于 Spring AI Alibaba 的智能 AI 助手',
// 排队相关
queuedSending: '正在发送排队消息...',
queuedWillSend: '已排队,当前步骤结束后发送',
queuedCancel: '取消',
queuedReplace: '消息已排队,按回车替换...',
queuedBadge: '{count} 条排队',
// 流状态
streamPreparingContext: '准备上下文...',
streamReadingMemory: '读取记忆...',
streamReasoning: '分析问题...',
streamDraftingAnswer: '生成回答...',
streamSummarizingObservations: '整理信息...',
streamThinking: '思考中...',
streamGenerating: '生成中...',
streamExecutingTool: '执行工具...',
streamAwaitingApproval: '等待审批',
streamFinalizing: '正在收尾...',
streamFailed: '本轮中断',
streamInterrupting: '中断中...',
streamQueued: '排队中...',
streamReconnecting: '重新连接...',
streamStopped: '已停止',
streamCompleted: '已完成',
streamPreparingContextDetail: '正在收集当前问题、历史对话和必要配置。',
streamReadingMemoryDetail: '正在查找与你当前问题最相关的长期记忆和今日记录。',
streamReasoningDetail: '正在基于现有信息进行判断、比较方案并组织回答结构。',
streamDraftingAnswerDetail: '已经完成主要分析,正在把结论写成可直接阅读的答案。',
streamSummarizingObservationsDetail: '刚刚拿到了较多工具结果,正在提炼重点,避免回答冗长或遗漏关键信息。',
streamThinkingDetail: '正在做内部推理,这一步未必会立即产生正文。',
streamGeneratingDetail: '已经进入可见输出阶段,会陆续显示结果。',
streamExecutingToolDetail: '正在读取文件、查询数据或执行必要操作,以便给出更准确的答案。',
streamAwaitingApprovalDetail: '接下来需要你的确认,确认后我会继续执行。',
streamFinalizingDetail: '正在保存结果并结束当前响应。',
streamFailedDetail: '这次处理没有完整完成,但你可以继续追问或重试。',
streamSlowShort: '这一步比平时慢一些,但系统仍在处理中。',
streamSlowSummarizing: '正在整理较长的工具结果。因为信息较多,这一步可能需要更久。',
streamSlowReasoning: '正在做较复杂的分析和取舍,不是卡住。',
streamSlowGeneral: '处理还在继续,当前主要耗时在内部分析,不代表连接中断。',
// 审批栏
approvalAllow: '允许',
approvalExecute: '执行?',
// 时间格式
timeJustNow: '刚刚',
timeMinutesAgo: '{n} 分钟前',
timeHoursAgo: '{n} 小时前',
},
nav: {
dashboard: '仪表盘',
chat: '对话',
control: '控制台',
channels: '渠道',
sessions: '会话',
core: '核心',
connect: '连接',
system: '系统',
agent: '智能体',
workspace: '工作区',
agentContext: '智能体上下文',
skills: '技能',
wiki: 'Wiki 知识库',
tools: '工具',
plugins: '插件',
datasources: '数据源',
mcpServers: 'MCP 服务',
settingsGroup: '设置',
agents: '智能体',
security: '安全',
tokenUsage: 'Token 统计',
cronJobs: '定时任务',
settings: '设置',
logout: '退出登录',
themeLight: '浅色',
themeDark: '深色',
memory: '记忆',
themeSystem: '跟随系统',
themeLabel: '外观',
languageLabel: '语言',
appearance: '外观与语言',
roleUser: '用户',
roleAdmin: '管理员',
},
settings: {
title: '设置',
kicker: '配置中心',
layoutDesc: '调整模型、系统行为与媒体能力,让整个产品在扩张时仍然保持一致。',
sections: {
model: '模型管理',
system: '系统设置',
image: '图片生成',
tts: '语音合成',
stt: '语音识别',
music: '音乐生成',
video: '视频生成',
about: '关于',
advanced: '高级',
},
modelTitle: '模型管理',
modelDesc: '管理模型预设与默认模型选择',
systemTitle: '系统设置',
systemDesc: '语言与运行行为配置',
aboutTitle: '关于 MateClaw',
aboutDesc: '版本与系统信息',
about: {
heroDesc: '一套个人 AI 操作系统,让模型真正进入上下文、记忆、执行、知识和交付的连续流程。',
foundationTitle: '技术栈',
pillars: {
contextTitle: '让上下文保持连续',
contextDesc: '模型、知识、工作区和当前任务在同一个语境里运行,而不是每次重新开始。',
executionTitle: '让执行成为产品本身',
executionDesc: '工具、渠道与异步任务是系统的真实执行面,不是外挂。',
memoryTitle: '让记忆产生复利',
memoryDesc: '记忆被整理、被召回,在下一次任务里变得更有价值。',
},
},
model: {
title: '模型管理',
desc: '配置模型提供商、凭证和模型列表',
addProvider: '新增提供商',
localProviders: '本地模型',
cloudProviders: '云端模型',
active: '当前激活',
setActive: '设为激活',
configured: '已配置',
partial: '部分配置',
unavailable: '未就绪',
builtin: '内置',
custom: '自定义',
notSet: '未设置',
noModels: '暂无模型',
baseUrl: 'Base URL',
apiKey: 'API Key',
apiKeyInput: '输入 API Key',
leaveBlankKeep: '留空则保持当前值不变',
modelCount: '{count} 个模型',
createTitle: '新增提供商',
editTitle: '提供商配置',
manageTitle: '管理模型',
addModel: '新增模型',
// Inline API Key on the provider card — primary entry point for the
// 90% case (paste a key, hit save). Modal stays for advanced fields.
inlineApiKeyTitle: 'API Key',
inlineApiKeyPlaceholder: '粘贴 API Key 后回车保存',
inlineApiKeyMasked: '已设置 ••••••••',
inlineApiKeyChange: '更换',
inlineApiKeySaving: '保存中…',
inlineApiKeySaved: 'API Key 已保存',
inlineApiKeySaveFailed: 'API Key 保存失败',
inlineApiKeyEnvHint: '或在环境变量中设置 {var} 后重启',
// Headline status pill on the card — what the user reads first.
statusNotSet: '未配置',
statusReady: '已就绪',
statusError: '连接失败',
modelCountAvailable: '可用 {count} 个模型',
activeChanged: '激活模型已更新',
providerSaved: '提供商配置已保存',
providerDeleted: '提供商已删除',
modelAdded: '模型已添加',
modelRemoved: '模型已移除',
modelAddFailed: '模型添加失败',
modelRemoveFailed: '模型删除失败',
activeChangeFailed: '激活模型切换失败',
deleteConfirm: '确认删除提供商“{name}”?',
removeConfirm: '确认移除模型 “{name}”?',
generateConfigInvalidJson: 'Generate Kwargs 不是合法 JSON',
generateConfigMustBeObject: 'Generate Kwargs 必须是 JSON 对象',
advancedSettings: '高级设置',
protocolHint: '这里选择的是提供商 API 协议,不是前端或后端里的具体类名。',
protocolOpenAI: 'OpenAI 兼容(Chat Completions)',
protocolAnthropic: 'Anthropic(Messages API)',
protocolGemini: 'Gemini 原生',
protocolDashScope: 'DashScope 原生',
advancedHint: '用于补充 temperature、max_tokens、top_p 等生成参数。',
fallbackPriorityHint: '池内尝试顺序(数字越小越先):0 = 不参与;1 = 第一顺位;2 = 第二顺位,依此类推。多个提供商共用同一数字时按 ID 字典序。',
fallbackBadge: '偏好 #{priority}',
fallbackBadgeTitle: '可用池内的尝试顺序,数字越小越先尝试',
// RFC-009 Phase 4: provider pool status badges
poolBadgeInPool: '可用',
poolBadgeInPoolTitle: '已通过启动体检,参与失败切换',
poolBadgeRemoved: '已下线',
poolBadgeRemovedTitle: '已从可用池移除({source}):{message}',
poolBadgeCooldown: '冷却中',
poolBadgeCooldownTitle: '近期连续失败,{seconds} 秒后自动恢复',
poolSourceAuthError: 'API Key 失效',
poolSourceBilling: '余额/计费问题',
poolSourceModelNotFound: '模型不存在',
poolSourceInitProbe: '启动体检失败',
poolSourceManual: '手动移除',
poolReprobe: '重新检测',
poolReprobing: '检测中...',
poolReprobeOk: '检测通过,已重新加入可用池',
poolReprobeFail: '检测失败:{error}',
// RFC-073: status-pill labels driven by Liveness
livenessLive: '可用',
livenessCooldown: '冷却中',
livenessRemoved: '未连接',
livenessUnprobed: '检测中',
livenessUnprobedTooltip: '启动后正在检测可用性,稍候自动更新',
livenessUnconfigured: '需要配置',
// RFC-074 PR-2: enable / disable / drawer
enableProviderCta: '+ 启用提供商',
addCustomProvider: '+ 自定义提供商',
enable: '启用',
disable: '禁用',
alreadyEnabled: '已启用',
disableConfirm: '确定禁用提供商"{name}"?它将从下拉中消失,但配置保留,可随时再启用。',
defaultSwitchedToast: '已将默认模型切换到 {provider} / {model}',
addProviderDrawerTitle: '添加提供商',
addProviderDrawerSubtitle: '启用后会出现在模型下拉中。如果是云端提供商,启用后还需要填 API Key。',
catalogEmpty: '目录为空',
catalogSearchPlaceholder: '搜索提供商…',
catalogSearchEmpty: '没有匹配“{query}”的提供商',
enabledToast: '已启用 {name}',
emptyTitle: '还没有可用的提供商',
emptyDesc: '从内置目录中启用一个,或新建一个自定义提供商。',
searchHint: '开启后,大模型将在回答时自动调用内置搜索引擎获取实时信息(DashScope/Kimi/OpenAI 支持)。',
searchStrategyDefault: '默认',
oauthTitle: 'OpenAI OAuth 登录',
oauthLogin: 'OAuth 登录',
oauthConnected: '已连接',
oauthDisconnected: '未连接',
oauthDisconnect: '断开连接',
oauthHint: '通过 OAuth 登录 OpenAI 账号,使用 ChatGPT Plus/Pro 会员额度(非 API 额度)。',
oauthLoginSuccess: 'OpenAI OAuth 登录成功',
oauthRevokeSuccess: '已断开 OpenAI OAuth 连接',
// RFC-062:Claude Code OAuth(订阅复用)
claudeCodeOauthDetect: '检测 Claude Code 登录态',
claudeCodeOauthHint: '复用本地 Claude Code Pro/Max 订阅。请先在 Claude Code 客户端中登录,再点击"检测"读取凭据。',
claudeCodeOauthInstructions: '未检测到 Claude Code 凭据。请安装 Claude Code 客户端,使用 Pro/Max 账号登录后再点击检测。',
claudeCodeOauthRevokeHint: '请在 Claude Code 客户端中退出登录。MateClaw 不会修改 Claude Code 的本地凭据。',
fields: {
providerId: '提供商 ID',
providerName: '提供商名称',
defaultBaseUrl: '默认 Base URL',
apiKeyPrefix: 'API Key 前缀',
protocol: '协议',
generateKwargs: 'Generate Kwargs (JSON)',
fallbackPriority: '池内尝试顺序',
enableSearch: '内置搜索',
searchStrategy: '搜索策略',
modelId: '模型 ID',
modelDisplayName: '显示名称',
},
actions: {
manageModels: '管理模型',
providerSettings: '配置',
},
hints: {
openai: 'OpenAI 默认使用 https://api.openai.com/v1',
azureOpenai: 'Azure OpenAI 请填写资源级 endpoint,例如 https://.openai.azure.com/openai/v1',
anthropic: 'Anthropic 默认使用 https://api.anthropic.com',
ollama: 'Ollama 本地默认地址通常是 http://localhost:11434',
lmstudio: 'LM Studio 本地默认 OpenAI 兼容地址通常是 http://localhost:1234/v1',
gemini: 'Gemini 默认使用 https://generativelanguage.googleapis.com',
openrouter: 'OpenRouter 默认使用 https://openrouter.ai/api/v1,支持聚合多家模型',
zhipu: '智谱 AI 默认使用 https://open.bigmodel.cn/api/paas/v4',
zhipuIntl: '智谱 AI 国际版使用 https://open.z.ai/api/paas/v4',
volcengine: '火山引擎(豆包)默认使用 https://ark.cn-beijing.volces.com/api/v3,需要在火山方舟平台创建接入点',
openaiCompatible: '兼容 OpenAI 协议的服务通常使用 /v1 结尾的 Base URL',
},
discovery: {
discover: '发现模型',
discovering: '正在发现...',
testConnection: '测试连接',
testing: '测试中...',
testModel: '测试',
testingModel: '测试中...',
discoveredTitle: '发现的新模型',
discoveredCount: '发现 {total} 个模型,其中 {count} 个为新模型',
noNewModels: '未发现新模型,所有远端模型均已存在',
selectAll: '全选',
addSelected: '添加选中模型',
adding: '添加中...',
addedCount: '已添加 {count} 个模型',
connectionOk: '连接成功',
connectionFail: '连接失败',
latency: '延迟 {ms}ms',
modelOk: '模型可用',
modelFail: '模型不可用',
probeVerified: '已验证',
probeVerifiedTitle: '已验证可达',
probeFailedBanner: '⚠ {count} 个模型未通过可达性检测,未列入上方列表:',
probeUnreachable: '无法连接',
},
},
fields: {
name: '显示名称',
provider: '提供商',
modelName: '模型标识',
description: '描述',
temperature: '温度',
maxTokens: '最大 Token',
topP: 'Top P',
language: '界面语言',
streamEnabled: '流式响应',
debugMode: '调试模式',
searchEnabled: '启用搜索',
searchProvider: '搜索提供商',
searchFallbackEnabled: '失败回退',
serperApiKey: 'Serper API Key',
serperBaseUrl: 'Serper 接口地址',
tavilyApiKey: 'Tavily API Key',
tavilyBaseUrl: 'Tavily 接口地址',
duckduckgoEnabled: 'DuckDuckGo(免 Key)',
searxngBaseUrl: 'SearXNG 地址',
// STT 语音识别
sttEnabled: '启用语音识别',
sttProvider: '首选 STT 提供商',
sttFallbackEnabled: '提供商回退',
// 音乐生成
musicEnabled: '启用音乐生成',
musicProvider: '首选音乐提供商',
musicFallbackEnabled: '提供商回退',
// TTS 语音合成
ttsEnabled: '启用语音合成',
ttsProvider: '首选 TTS 提供商',
ttsFallbackEnabled: '提供商回退',
ttsAutoMode: '自动朗读模式',
ttsSpeed: '语速',
// 图片生成
imageEnabled: '启用图片生成',
imageProvider: '首选图片提供商',
imageFallbackEnabled: '提供商回退',
openaiStatus: 'OpenAI 状态',
// 视频生成
videoEnabled: '启用视频生成',
videoProvider: '首选视频提供商',
videoFallbackEnabled: '提供商回退',
dashscopeStatus: 'DashScope 状态',
zhipuApiKey: '智谱 API Key',
zhipuBaseUrl: '智谱 API 地址',
falApiKey: 'fal.ai API Key',
klingAccessKey: '可灵 Access Key',
klingSecretKey: '可灵 Secret Key',
runwayApiKey: 'Runway API Key',
minimaxApiKey: 'MiniMax API Key',
minimaxRegion: 'MiniMax API 区域',
},
hints: {
provider: '当前版本会把 DashScope 模型参数真实应用到 Agent 调用链路。',
language: '界面语言会持久化到后端设置中。',
streamEnabled: '用于控制前端默认流式响应偏好。',
debugMode: '预留给后续执行明细展示。',
searchEnabled: '关闭后搜索工具将不可用,Agent 无法联网搜索。',
searchProvider: '选择主搜索提供商,调用搜索工具时优先使用。',
searchFallbackEnabled: '主提供商调用失败时,自动回退到另一个提供商。',
serperApiKey: '用于 Google Serper 搜索服务,从 serper.dev 获取。',
serperBaseUrl: '通常无需修改,除非使用自定义代理地址。',
tavilyApiKey: '用于 Tavily 搜索服务,从 tavily.com 获取。',
tavilyBaseUrl: '通常无需修改,除非使用自定义代理地址。',
duckduckgoEnabled: '免费搜索兜底,无需 API Key。默认开启,作为零配置下的搜索降级方案。',
searxngBaseUrl: '自部署 SearXNG 实例地址。Docker 部署时自动配置。',
// STT 语音识别
sttEnabled: '开启后支持语音消息转文字。OpenAI Whisper 和 DashScope Paraformer 均复用已有 Key。',
sttProvider: '选择首选 STT 提供商,auto 模式自动选择可用的提供商。',
sttFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
openaiSttInfo: '复用模型管理中的 OpenAI API Key。使用 Whisper 模型,支持多语言自动识别。',
dashscopeSttInfo: '复用模型管理中的 DashScope API Key。使用 Paraformer Realtime(WebSocket 流式),中文识别效果优秀,亚秒级延迟。',
// 音乐生成
musicEnabled: '开启后 Agent 可通过 music_generate 工具生成音乐。Google Lyria 复用 Google Key。',
musicProvider: '选择首选音乐提供商,auto 模式优先使用 Google Lyria。',
musicFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
googleLyriaInfo: '复用模型管理中的 Google API Key。Lyria 3 模型,支持歌词谱曲和纯音乐生成。',
minimaxMusicInfo: '复用视频生成中的 MiniMax API Key。music-2.5+ 模型,支持歌词和纯音乐。',
// TTS 语音合成
ttsEnabled: '开启后可通过消息朗读按钮或自动模式使用语音合成。Edge TTS 免费无需 Key。',
ttsProvider: '选择首选 TTS 提供商,auto 模式优先使用免费的 Edge TTS。',
ttsFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
ttsAutoMode: 'off = 仅手动朗读,always = 每条 AI 回复自动播放语音。',
ttsSpeed: '语音播放速度,1.0 为正常速度。',
edgeTtsInfo: '微软 Edge 内置 TTS 服务,免费使用,支持中文、英文、日文等多语言。自动根据文本语言切换语音。',
dashscopeTtsInfo: '复用模型管理中的 DashScope API Key。使用 CosyVoice 模型,支持多种中文语音。',
openaiTtsInfo: '复用模型管理中的 OpenAI API Key。支持 alloy、echo、nova 等多种语音风格。',
// 图片生成
imageEnabled: '开启后 Agent 可使用图片生成工具。需至少配置一个图片提供商的 API Key。',
imageProvider: '选择首选图片生成提供商,auto 模式自动选择第一个可用的。',
imageFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
dashscopeImageStatus: '复用模型管理中配置的 DashScope API Key,无需额外配置。',
openaiImageStatus: '复用模型管理中配置的 OpenAI API Key,无需额外配置。',
zhipuImageApiKey: '从 bigmodel.cn 获取。CogView-3-Flash 模型免费。与视频生成共用同一 Key。',
falImageApiKey: '从 fal.ai 获取,支持 Flux 系列图片生成模型。与视频生成共用同一 Key。',
googleImagenInfo: '复用模型管理中的 Google API Key。支持 Gemini 图片生成和 Imagen 4.0 模型。',
minimaxImageInfo: '复用视频生成中的 MiniMax API Key。image-01 模型,支持多种画面比例,最多 9 张。',
// 视频生成
videoEnabled: '开启后 Agent 可使用视频生成工具。需至少配置一个视频提供商的 API Key。',
videoProvider: '选择首选视频生成提供商,auto 模式自动选择第一个可用的。',
videoFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
dashscopeVideoStatus: '复用模型管理中配置的 DashScope API Key,无需额外配置。',
zhipuApiKey: '从 bigmodel.cn 获取,CogVideoX-Flash 模型免费。',
zhipuBaseUrl: '通常无需修改,除非使用自定义代理地址。',
falApiKey: '从 fal.ai 获取,一个 Key 可访问 Kling、Runway、Luma 等多个模型。',
klingAccessKey: '从快手开放平台获取,用于调用可灵视频生成 API。',
klingSecretKey: '与 Access Key 配对使用,用于 JWT 签名鉴权。',
runwayApiKey: '从 runwayml.com 获取。支持 gen4.5、gen4_turbo 等旗舰模型。',
minimaxApiKey: '从 minimaxi.com 获取。海螺 Hailuo 视频,有免费额度,中文场景优秀。',
minimaxRegion: '选择 API 入口域名。中国账号用 CN,海外账号用 Global。',
},
searchTitle: '搜索服务',
searchDesc: '配置内置搜索工具的提供商与 API 凭证',
sttTitle: '语音识别',
sttDesc: '配置 STT 语音转文字,支持 OpenAI Whisper 和 DashScope Paraformer',
sttProviderOptions: { auto: '自动选择' },
sttProviderTags: { reuseLlmKey: '复用 LLM API Key' },
musicTitle: '音乐生成',
musicDesc: '配置 AI 音乐生成,支持 Google Lyria 和 MiniMax Music',
musicProviderOptions: { auto: '自动选择' },
musicProviderTags: { reuseLlmKey: '复用 LLM API Key', sharedWithVideo: '与视频共用' },
ttsTitle: '语音合成',
ttsDesc: '配置 TTS 语音合成,支持 Edge TTS(免费)、OpenAI TTS、DashScope CosyVoice',
ttsProviderOptions: {
auto: '自动选择',
},
ttsProviderTags: {
free: '免费',
noKeyNeeded: '无需 API Key',
reuseLlmKey: '复用 LLM API Key',
},
ttsAutoModeOptions: {
off: '关闭(仅手动朗读)',
always: '始终自动朗读',
},
imageTitle: '图片生成',
imageDesc: '配置 AI 图片生成能力,支持 DashScope、OpenAI DALL-E、fal.ai Flux、智谱 CogView',
imageProviderOptions: {
auto: '自动选择',
},
imageProviderTags: {
reuseLlmKey: '复用 LLM API Key',
freeQuota: '有免费额度',
configuredInModels: '前往模型设置查看',
sharedWithVideo: '与视频共用',
},
videoTitle: '视频生成',
videoDesc: '配置 AI 视频生成能力,支持文字生成视频和图片生成视频',
videoProviderOptions: {
auto: '自动选择',
},
videoProviderTags: {
reuseLlmKey: '复用 LLM API Key',
freeQuota: '有免费额度',
configuredInModels: '前往模型设置查看',
},
minimaxRegionGlobal: '海外(api.minimax.io)',
minimaxRegionCn: '中国大陆(api.minimaxi.com)',
actions: {
setDefault: '设为默认',
saveSystem: '保存系统设置',
},
messages: {
loadFailed: '加载设置失败',
saveSuccess: '设置已保存',
saveFailed: '保存设置失败',
deleteConfirm: '确认删除该模型预设?',
modelSaved: '模型预设已保存',
modelDeleted: '模型预设已删除',
defaultChanged: '默认模型已更新',
},
languageOptions: {
zhCN: '简体中文',
enUS: 'English',
},
},
agentContext: {
kicker: '上下文工作面',
title: '智能体上下文',
desc: '管理智能体的提示文件和记忆',
selectAgent: '选择智能体',
noAgent: '请先选择一个智能体',
files: '文件列表',
coreFiles: '核心文件',
coreFilesDesc: '启用的文件将按顺序拼接为 Agent 系统提示词',
newFile: '新建文件',
noFiles: '暂无文件',
selectFile: '选择左侧文件查看内容',
fileContent: '在此编辑 Markdown 内容...',
preview: '预览',
editOnly: '编辑',
splitView: '分栏',
modified: '已修改',
saveSuccess: '保存成功',
saveFailed: '保存失败',
deleteConfirm: '确认删除文件 "{name}" 吗?',
deleteSuccess: '文件已删除',
deleteFailed: '删除失败',
promptUpdated: '系统提示文件配置已更新',
promptUpdateFailed: '更新系统提示文件配置失败',
newFileTitle: '新建文件',
newFilePlaceholder: '输入文件名(如 AGENTS.md)',
newFileHint: '文件名必须以 .md 结尾',
fileExists: '文件名已存在',
invalidFilename: '请输入有效的 .md 文件名',
loadFailed: '加载文件列表失败',
loadFileFailed: '加载文件内容失败',
},
agents: {
title: '智能体管理',
desc: '创建、编辑和管理你的 AI 智能体',
newAgent: '新建智能体',
templates: {
title: '选择模板',
desc: '选择预配置的 Agent 模板快速开始,或从空白创建。',
skip: '从空白开始',
applied: '已从模板创建 Agent',
},
search: '搜索智能体...',
tabs: {
all: '全部',
react: 'ReAct',
planExecute: 'Plan-Execute',
enabled: '已启用',
disabled: '已停用',
basic: '基本信息',
skills: '技能',
tools: '工具',
providers: '偏好提供商',
context: '上下文',
},
columns: {
name: '名称',
description: '描述',
agentType: '类型',
modelName: '模型',
tags: '标签',
enabled: '状态',
updateTime: '更新时间',
actions: '操作',
},
status: {
enabled: '已启用',
disabled: '已停用',
},
emptyTitle: '暂无智能体',
emptyDesc: '创建你的第一个智能体开始使用',
modal: {
newTitle: '新建智能体',
editTitle: '编辑智能体',
},
fields: {
name: '名称',
icon: '图标',
type: '类型',
description: '描述',
systemPrompt: '系统提示词',
maxIterations: '最大迭代次数',
defaultThinkingLevel: '默认思考深度',
tags: '标签',
enabled: '启用',
},
thinkingLevels: {
auto: '跟随模型',
off: '关闭',
low: '低',
medium: '标准',
high: '深度',
max: '极限',
},
types: {
react: 'ReAct(工具调用)',
planExecute: 'Plan-and-Execute',
},
actions: {
edit: '编辑',
delete: '删除',
create: '创建',
update: '保存',
},
placeholders: {
name: '智能体名称',
icon: 'Emoji 或 URL',
description: '简短描述',
systemPrompt: '你是一个有帮助的 AI 助手...',
tags: 'tag1,tag2',
},
messages: {
noDescription: '暂无描述',
deleteConfirm: '确认删除该智能体吗?删除后不可恢复。',
loadFailed: '加载智能体列表失败',
saveFailed: '保存智能体失败',
saveSuccess: '智能体已保存',
deleteFailed: '删除智能体失败',
deleteSuccess: '智能体已删除',
toggleFailed: '切换状态失败',
toggleSuccess: '状态已更新',
},
binding: {
skillsHint: '选择此智能体可使用的技能。留空则使用所有已启用的技能。',
toolsHint: '选择此智能体可使用的工具。留空则使用所有已启用的工具。',
providersHint: '此智能体优先使用的提供商顺序(数字越小越先尝试)。留空则按全局可用池顺序回退。提供商进入冷却或被移出池时仍会被自动跳过。',
providersAddHint: '点击下方提供商加入偏好列表:',
noSkills: '暂无可用技能',
noTools: '暂无可用工具',
noProviderPreferences: '尚未配置偏好顺序,将按全局回退链顺序使用。',
contextHint: '管理此智能体的上下文文件(如 AGENT.md),定义智能体的行为、知识和指令。',
goToContext: '前往编辑上下文',
},
},
security: {
title: '安全管理',
kicker: '治理中心',
layoutDesc: '边界、审批、审计和工作区治理必须在这里说同一种语言,否则系统不值得被信任。',
sections: {
toolGuard: '工具防护',
fileGuard: '文件防护',
auditLogs: '审计日志',
members: '成员管理',
workspaces: '工作区',
activity: '操作日志',
},
activity: {
title: '操作日志',
desc: '查看工作区内所有资源的创建、修改、删除操作记录。',
allActions: '全部操作',
allResources: '全部资源',
loading: '加载中...',
noEvents: '暂无操作记录',
columns: {
time: '时间',
user: '用户',
action: '操作',
resource: '资源类型',
name: '名称',
ip: 'IP',
},
},
members: {
title: '工作区成员',
desc: '管理当前工作区的成员和角色。',
addMember: '添加成员',
noMembers: '暂无成员。',
loading: '加载中...',
columns: {
user: '用户',
role: '角色',
joined: '加入时间',
actions: '操作',
},
roles: {
owner: '所有者',
admin: '管理员',
member: '成员',
viewer: '查看者',
},
addDialog: {
title: '添加成员',
userId: '用户 ID',
userIdPlaceholder: '输入用户 ID',
user: '选择用户',
userPlaceholder: '搜索用户名…',
username: '用户名',
usernamePlaceholder: '输入用户名',
usernameHint: '如果用户不存在,将自动创建账号',
password: '密码',
passwordPlaceholder: '新用户需填写密码',
passwordHint: '已有用户无需填写,新用户必填',
nickname: '昵称',
nicknamePlaceholder: '可选,用户显示名称',
role: '角色',
},
actions: {
remove: '移除',
cancel: '取消',
confirm: '确认',
},
messages: {
addSuccess: '成员添加成功',
addFailed: '添加成员失败',
updateSuccess: '角色更新成功',
updateFailed: '更新角色失败',
removeConfirm: '确定要移除该成员吗?',
removeSuccess: '成员已移除',
removeFailed: '移除成员失败',
},
},
workspaces: {
title: '工作区管理',
desc: '管理组织的工作区。',
manage: '管理工作区',
newWorkspace: '新建工作区',
loading: '加载中...',
noWorkspaces: '暂无工作区。',
current: '当前',
columns: {
name: '名称',
slug: '标识',
description: '描述',
basePath: '活动目录',
created: '创建时间',
actions: '操作',
},
createDialog: {
title: '新建工作区',
name: '名称',
namePlaceholder: '例如:工程团队',
slug: '标识',
slugPlaceholder: '例如:engineering',
slugHint: '标识创建后不可修改。',
description: '描述',
descriptionPlaceholder: '可选描述',
basePath: '活动目录',
basePathPlaceholder: '例如:/home/user/project 或 D:\\codes\\MyProject',
basePathHint: '限制 Agent 文件操作的根目录,留空不限制。',
},
editDialog: {
title: '编辑工作区',
},
deleteDialog: {
title: '删除工作区',
confirm: '确定要删除 {name} 吗?这将移除该工作区下的所有资源。',
},
actions: {
edit: '编辑',
delete: '删除',
cancel: '取消',
create: '创建',
save: '保存',
},
messages: {
saveSuccess: '工作区保存成功',
saveFailed: '保存工作区失败',
deleteSuccess: '工作区已删除',
deleteFailed: '删除工作区失败',
},
},
toolGuard: {
title: '工具防护',
desc: '管理工具调用安全规则和全局防护配置',
enabled: '启用工具防护',
enabledHint: '开启后将对工具调用进行安全检查和规则匹配',
guardScope: '防护范围',
scopeAll: '所有工具',
scopeSelected: '指定工具',
guardedTools: '受保护工具',
guardedToolsPlaceholder: '输入工具名后回车',
deniedTools: '禁止调用工具',
deniedToolsPlaceholder: '输入工具名后回车',
rules: '安全规则',
rulesDesc: '管理内置和自定义安全规则',
addRule: '新增规则',
editRule: '编辑规则',
columns: {
name: '规则名称',
severity: '严重度',
category: '分类',
pattern: '匹配模式',
decision: '决策',
enabled: '状态',
builtin: '类型',
actions: '操作',
},
builtinBadge: '内置',
customBadge: '自定义',
deleteConfirm: '确认删除规则 "{name}" 吗?',
fields: {
ruleId: '规则 ID',
name: '名称',
description: '描述',
toolName: '目标工具',
pattern: '正则模式',
excludePattern: '排除模式',
category: '分类',
severity: '严重度',
decision: '决策',
remediation: '修复建议',
priority: '优先级',
},
},
fileGuard: {
title: '文件防护',
desc: '管理敏感文件路径保护',
enabled: '启用文件防护',
enabledHint: '开启后将保护敏感文件路径免受未授权访问',
sensitivePaths: '敏感路径',
sensitivePathsDesc: '配置需要保护的文件路径(支持通配符)',
addPath: '添加路径',
pathPlaceholder: '输入路径后回车 (例: ~/.ssh/)',
},
audit: {
title: '审计日志',
desc: '查看工具安全检查记录',
config: {
title: '审计配置',
enabled: '启用审计日志',
enabledHint: '关闭后将不再记录工具调用审计日志',
minSeverity: '最低记录等级',
minSeverityHint: '仅记录达到此等级及以上的审计事件',
retentionDays: '保留天数',
retentionDaysHint: '超过此天数的审计日志将被自动清理(0=永不清理)',
},
stats: {
total: '总检查',
blocked: '已阻止',
needsApproval: '需审批',
allowed: '已放行',
},
filters: {
toolName: '工具名称',
decision: '决策',
severity: '严重度',
conversationId: '会话 ID',
},
columns: {
time: '时间',
tool: '工具',
decision: '决策',
severity: '严重度',
conversationId: '会话',
},
noLogs: '暂无审计记录',
expandFindings: '展开详情',
},
severity: {
CRITICAL: '严重',
HIGH: '高',
MEDIUM: '中',
LOW: '低',
INFO: '信息',
},
decision: {
ALLOW: '放行',
NEEDS_APPROVAL: '需审批',
BLOCK: '阻止',
},
messages: {
loadFailed: '加载安全配置失败',
saveSuccess: '安全配置已保存',
saveFailed: '保存安全配置失败',
ruleCreated: '规则已创建',
ruleUpdated: '规则已更新',
ruleDeleted: '规则已删除',
ruleToggled: '规则状态已更新',
},
approval: {
title: '需要审批',
severity: '风险等级',
summary: '摘要',
findings: '发现的问题',
remediation: '修复建议',
approved: '已批准',
denied: '已拒绝',
hint: '输入 /approve 批准执行,或输入 /deny 拒绝',
},
},
tokenUsage: {
kicker: '运行成本',
title: 'Token 统计',
desc: '查看 Token 使用量和模型调用统计',
refresh: '刷新',
startDate: '开始日期',
endDate: '结束日期',
promptTokens: 'Prompt Tokens',
completionTokens: 'Completion Tokens',
assistantMessages: 'Assistant Messages',
byModel: '按模型统计',
byDate: '按日期统计',
model: '模型',
provider: '提供商',
date: '日期',
messageCount: '消息数',
loadFailed: '加载 Token 统计失败',
noData: '暂无 Token 使用数据',
},
mcp: {
kicker: '能力桥接',
title: 'MCP 服务管理',
desc: '管理 MCP (Model Context Protocol) 服务器连接',
addServer: '添加服务',
refreshAll: '全量刷新',
columns: {
name: '名称',
transport: '协议',
enabled: '状态',
lastStatus: '连接状态',
lastConnectedTime: '最后连接',
toolCount: '工具数',
description: '描述',
actions: '操作',
},
status: {
connected: '已连接',
disconnected: '未连接',
error: '连接失败',
},
transport: {
stdio: 'Stdio',
sse: 'SSE',
streamable_http: 'HTTP',
},
modal: {
newTitle: '添加 MCP 服务',
editTitle: '编辑 MCP 服务',
},
fields: {
name: '名称',
description: '描述',
transport: '传输协议',
url: 'URL',
headers: 'HTTP Headers (JSON)',
command: '命令',
args: '参数 (JSON 数组)',
env: '环境变量 (JSON)',
cwd: '工作目录',
connectTimeout: '连接超时 (秒)',
readTimeout: '读取超时 (秒)',
enabled: '启用',
},
placeholders: {
name: '服务名称',
description: '简短描述',
url: 'http://localhost:8080/sse',
headers: '',
command: 'npx',
args: '',
env: '',
cwd: '/path/to/dir',
},
actions: {
test: '测试连接',
testing: '测试中...',
},
testResult: {
success: '连接成功',
failed: '连接失败',
tools: '发现 {count} 个工具',
latency: '延迟 {ms}ms',
},
messages: {
loadFailed: '加载 MCP 服务列表失败',
createSuccess: 'MCP 服务已创建',
updateSuccess: 'MCP 服务已更新',
deleteSuccess: 'MCP 服务已删除',
deleteConfirm: '确认删除 MCP 服务 "{name}" 吗?',
toggleSuccess: '状态已更新',
refreshSuccess: '全量刷新完成',
saveFailed: '保存失败',
empty: '暂无 MCP 服务',
emptyDesc: '添加一个 MCP 服务来扩展 Agent 的能力',
},
},
sessions: {
title: '会话管理',
desc: '查看和管理所有会话',
search: '搜索会话...',
columns: {
session: '会话',
source: '来源',
agent: 'Agent',
messages: '消息',
status: '状态',
lastActive: '最后活跃',
actions: '操作',
},
status: {
active: '活跃',
closed: '已关闭',
},
empty: '暂无会话',
loadFailed: '加载会话列表失败',
deleteConfirm: '确定要删除这个会话吗?',
deleteTitle: '确认删除',
deleteFailed: '删除会话失败',
time: {
justNow: '刚刚',
minutesAgo: '{n} 分钟前',
hoursAgo: '{n} 小时前',
},
},
tools: {
title: '工具管理',
desc: '管理 Agent 可用的工具',
registerButton: '注册工具',
columns: {
tool: '工具',
beanName: 'Bean 名称',
type: '类型',
status: '状态',
actions: '操作',
},
empty: '暂无已注册工具',
modal: {
editTitle: '编辑工具',
newTitle: '注册工具',
},
fields: {
name: '名称',
beanName: 'Bean 名称',
type: '类型',
description: '描述',
},
placeholders: {
name: '工具名称',
beanName: 'Spring Bean 名称',
description: '工具描述',
},
types: {
builtin: '内置',
mcp: 'MCP',
custom: '自定义',
},
messages: {
saveFailed: '保存工具失败',
deleteConfirm: '确定要删除这个工具吗?',
deleteTitle: '确认删除',
deleteFailed: '删除工具失败',
toggleFailed: '切换工具状态失败',
},
},
plugins: {
title: '插件',
desc: '管理从 JAR 文件加载的外部插件',
refresh: '刷新',
type: '类型',
author: '作者',
status: '状态',
tools: '工具',
channels: '渠道',
provider: '提供商',
memoryProvider: '记忆',
noDescription: '暂无描述',
emptyTitle: '暂无已安装插件',
emptyHint: '将插件 JAR 文件放入 ~/.mateclaw/plugins/ 目录后重启服务',
loading: '加载插件中...',
loadFailed: '加载插件失败',
enabled: '{name} 已启用',
disabled: '{name} 已禁用',
toggleFailed: '切换插件状态失败',
},
datasources: {
kicker: '数据接入',
title: '数据源管理',
desc: '管理外部数据库连接,用于自然语言查数',
addButton: '添加数据源',
empty: '暂无数据源,点击添加开始配置',
columns: {
name: '名称',
type: '类型',
connection: '连接',
status: '状态',
actions: '操作',
},
sections: {
basic: '基本信息',
connection: '连接信息',
auth: '认证',
advanced: '高级配置',
},
modal: {
editTitle: '编辑数据源',
newTitle: '添加数据源',
},
fields: {
name: '名称',
dbType: '数据库类型',
host: '主机',
port: '端口',
databaseName: '数据库名',
schemaName: 'Schema',
username: '用户名',
password: '密码',
description: '描述',
extraParams: 'JDBC 参数',
},
placeholders: {
name: '例如:业务数据库',
host: '127.0.0.1',
port: '3306',
databaseName: '数据库名',
schemaName: 'public(默认)',
username: '数据库用户名',
password: '数据库密码',
description: '数据源用途说明(可选)',
extraParams: 'useSSL=false&serverTimezone=UTC',
},
hints: {
extraParams: 'JDBC URL 附加参数,多个参数用 & 分隔',
},
testButton: '测试连接',
messages: {
saveFailed: '保存数据源失败',
deleteConfirm: '确定要删除这个数据源吗?删除后 Agent 将无法访问此数据源。',
deleteTitle: '确认删除',
deleteFailed: '删除数据源失败',
toggleFailed: '切换数据源状态失败',
testSuccess: '连接成功',
testFailed: '连接失败,请检查配置',
},
},
doctor: {
title: '系统诊断',
checking: '检查中...',
allGood: '所有系统正常',
hasWarnings: '{count} 个警告',
hasErrors: '{count} 个问题',
refresh: '重新检查',
lastChecked: '{time} 前检查',
diagnose: '诊断问题',
},
wiki: {
kicker: '知识引擎',
desc: 'AI 驱动的结构化知识库,自动消化原始材料为 Wiki 页面',
createKB: '新建知识库',
knowledgeBases: '知识库',
noKB: '暂无知识库',
selectKB: '请选择一个知识库',
selectPage: '从左侧选择一个页面查看',
pageKicker: '知识页面',
confirmDelete: '确认删除页面「{title}」?此操作不可撤销。',
confirmBatchDelete: '确认删除 {count} 个页面?此操作不可撤销。',
batchSelect: '批量选择',
selectAll: '全选',
kbName: '名称',
kbNamePlaceholder: '输入知识库名称',
kbDescription: '描述',
kbDescPlaceholder: '简要描述知识库用途',
rawMaterials: '原始材料',
pages: 'Wiki 页面',
config: '处理配置',
searchPages: '搜索页面...',
dropFiles: '拖拽文件到此处或点击上传',
dropToUpload: '松开即开始上传',
uploading: '上传中…',
uploadFailed: '上传失败:{name}',
addText: '添加文本',
noRawMaterials: '暂无原始材料',
reprocess: '重新处理',
resume: '继续生成',
download: '下载原始文件',
downloadFailed: '下载失败',
processAll: '处理所有待处理材料',
materialTitle: '标题',
materialContent: '内容',
pasteContent: '粘贴或输入文本内容...',
backlinks: '反向链接',
generatedByAi: 'AI 生成',
editedManually: '人工编辑',
configTitle: '知识库处理规则',
configDesc: '配置 AI 消化原始材料时遵循的规则',
configPlaceholder: '在此编辑 Wiki 处理规则...',
pageCount: '{count} 页',
sourceCount: '{count} 份材料',
dirPlaceholder: '输入本地目录路径,如 /Users/me/docs',
scan: '扫描',
scanning: '扫描中...',
scanResult: '已扫描 {scanned} 个文件,新增 {added} 个,跳过 {skipped} 个',
saving: '保存中...',
status: {
active: '启用',
uploading: '上传中',
processing: '处理中',
error: '错误',
pending: '待处理',
completed: '已完成',
partial: '部分完成',
failed: '失败',
},
progress: {
preparing: '准备中…',
uploading: '上传 {pct}%',
},
jobStage: {
queued: '排队中',
routing: '选择模型',
phase_a_running: '分析中',
phase_a_done: '分析完成',
phase_b_running: '生成页面',
enriching: '补充链接',
embedding: '向量化',
completed: '已完成',
failed: '处理失败',
cancelled: '已取消',
},
jobInfo: {
currentModel: '当前模型',
fallbackActive: '已启用备用模型',
elapsedTime: '已用时',
pagesProgress: '已生成 {done}/{total} 页',
},
page: {
type: {
entity: '实体',
concept: '概念',
source: '来源',
synthesis: '综合',
},
enriched: '已链接',
notEnriched: '未链接',
enrich: '添加交叉链接',
repair: '修复页面',
citations: '来源 {count} 个 chunk',
noCitations: '未找到来源引用',
citationUnknownSource: '未知来源',
citationChunkN: '第 {n} 段',
citationChunkUnknown: '段落未知',
citationOffset: '偏移 {start}–{end}',
},
relation: {
shared_chunk: '共享片段',
shared_raw: '共享来源',
direct_link: '直接引用',
semantic_near: '语义相近',
relatedPages: '相关页面',
explainRelation: '查看关联原因',
},
configPanel: {
embeddingModel: '向量化模型',
embeddingModelHint: '语义搜索模型,留空使用系统默认',
ingestMode: '入库模式',
ingestModeEager: '立即生成页面',
ingestModeLazy: '先入索引',
ingestModeEagerHint: '上传后立即调用 LLM 生成完整 Wiki 页面。',
ingestModeLazyHint: '上传仅抽取、切片、向量化,跳过页面生成;上传即可搜索,页面按需编译。',
modelStrategy: '模型策略',
globalDefault: '跟随全局默认',
selectModel: '选择可用模型…',
otherProvider: '其他',
searchModel: '搜索模型…',
noModelMatch: '未找到匹配模型',
addFallback: '+ 添加备选',
stepModel: {
route: '分析/路由',
create_page: '页面生成',
merge_page: '页面合并',
enrich: '链接标注',
summary: '摘要更新',
},
fallbackModels: '备选模型',
searchPreview: '检索测试',
searchPreviewPlaceholder: '输入用户消息,预览 Agent 检索结果…',
searchPreviewRun: '测试',
},
stats: {
enrichedRatio: '{enriched}/{total} 已链接',
failedJobs: '{count} 个失败',
},
noPages: '暂无页面',
noResults: '未找到匹配页面',
loadMore: '加载更多 {n} 条',
filteredByRaw: '按原始材料过滤',
clearFilter: '清除过滤',
systemPageBadge: '系统页',
systemPageHint: 'overview / log 是知识库自带的系统页,无法删除',
lockedPageBadge: '已锁定',
lockedPageHint: '该页被手动锁定,AI 工具与批量操作不会修改或删除',
archivedSection: '已归档',
noArchived: '没有已归档的页面',
unarchive: '恢复',
pageTypes: {
concept: '概念',
person: '人物',
place: '地点',
event: '事件',
technology: '技术',
organization: '组织',
product: '产品',
term: '术语',
process: '流程',
other: '其他',
},
graph: {
tab: '知识图谱',
nodes: '节点',
edges: '连接',
orphans: '孤立节点',
showOrphans: '显示孤立节点',
allTypes: '全部类型',
resetView: '重置视图',
fullscreen: '全屏',
exitFullscreen: '退出全屏',
linksTo: '链接到',
openPage: '打开页面',
empty: '暂无图谱数据,请先处理原始材料',
},
},
cronJobs: {
kicker: '自动执行',
title: '定时任务',
desc: '定时触发 Agent 执行消息或目标任务',
createJob: '新建任务',
editJob: '编辑任务',
noJobs: '暂无定时任务',
createFirst: '新建第一个定时任务',
columns: {
name: '任务名称',
agent: '关联 Agent',
taskType: '类型',
cron: 'Cron 表达式',
timezone: '时区',
nextRun: '下次执行',
lastRun: '上次执行',
enabled: '启用',
actions: '操作',
// RFC-063r §2.14: 列表页"最近投递"列
lastDelivery: '最近投递',
// RFC-063r post-deploy: 关联渠道列
channel: '关联渠道',
targetId: '投递目标',
},
// RFC-063r §2.14: delivery_status 状态机展示
lastDelivery: {
none: '无投递',
pending: '投递中',
delivered: '已送达',
not_delivered: '投递失败',
},
taskTypes: { text: '文字消息', agent: 'Agent 目标' },
cronTypes: { hourly: '每小时', daily: '每天', weekly: '每周', custom: '自定义' },
days: { mon: '周一', tue: '周二', wed: '周三', thu: '周四', fri: '周五', sat: '周六', sun: '周日' },
fields: {
name: '任务名称',
namePlaceholder: '输入任务名称',
agent: '关联 Agent',
agentPlaceholder: '选择执行的 Agent',
taskType: '任务类型',
triggerMessage: '触发消息',
triggerMessagePlaceholder: '输入发送给 Agent 的消息',
requestBody: '执行目标',
requestBodyPlaceholder: '直接描述 Agent 要完成的目标',
cronFrequency: '执行频率',
cronTime: '执行时间',
cronDays: '执行星期',
cronExpression: '自定义表达式',
cronExpressionPlaceholder: '分 时 日 月 周,如: 0 9 * * 1-5',
timezone: '时区',
enabled: '立即启用',
},
actions: { runNow: '立即执行', edit: '编辑', delete: '删除' },
messages: {
createSuccess: '定时任务创建成功',
updateSuccess: '定时任务更新成功',
deleteSuccess: '定时任务删除成功',
deleteConfirm: '确定删除任务「{name}」?删除后不可恢复。',
runTriggered: '任务已触发,请到会话列表查看「cron:{id}」对应对话',
enableSuccess: '任务已启用',
disableSuccess: '任务已停用',
invalidCron: 'Cron 表达式格式不正确,请使用 5 字段格式(分 时 日 月 周)',
agentRequired: '请选择关联 Agent',
textRequired: '触发消息不能为空',
goalRequired: '执行目标不能为空',
},
},
login: {
kicker: 'AI Operating System',
subtitle: '你的智能 AI 助手',
heroTitle: '让 AI 不止会回答,而是真正进入持续工作的系统。',
heroDesc: 'MateClaw 的重点不是把更多能力堆进聊天框,而是把上下文、知识、执行和记忆收拢成一个可靠的工作面。',
pointContext: '上下文保持连续',
pointKnowledge: '知识被组织起来',
pointExecution: '能力真正能执行',
cardTitle: '登录并进入工作面',
cardDesc: '从这里进入你的 AI 工作系统。模型、知识、工作区和运行状态会在同一个界面里协同。 ',
fields: {
username: '用户名',
password: '密码',
},
placeholders: {
username: '请输入用户名',
password: '请输入密码',
},
signIn: '登录',
hint: '默认账号: admin / admin123',
failed: '登录失败,请检查账号密码',
},
channels: {
title: '渠道管理',
desc: '将 Agent 连接到各消息平台和 API',
newChannel: '新建渠道',
addChannel: '添加渠道',
status: {
active: '已启用',
inactive: '未启用',
},
configure: '配置',
enable: '启用',
disable: '停用',
modal: {
editTitle: '编辑渠道',
newTitle: '新建渠道',
},
fields: {
name: '名称',
type: '类型',
description: '描述',
bindAgent: '绑定 Agent',
},
placeholders: {
name: '渠道名称',
description: '渠道用途说明',
selectAgent: '选择 Agent...',
},
types: {
web: 'Web API',
dingtalk: '钉钉',
feishu: '飞书',
telegram: 'Telegram',
discord: 'Discord',
wecom: '企业微信',
weixin: '微信',
qq: 'QQ',
slack: 'Slack',
webchat: '网页嵌入',
webhook: 'Webhook',
},
tabs: {
form: '表单配置',
json: '原始 JSON',
},
webhook: {
url: 'Webhook URL',
copy: '复制',
copied: '已复制',
copyFailed: '复制失败,请手动复制',
localhostWarn: '当前为本地开发环境,IM 平台无法回调 localhost。请使用 ngrok、frp 等内网穿透工具将本地服务暴露到公网后,将公网地址替换上方 URL 中的 host 部分。',
},
weixin: {
authHint: '点击下方按钮获取微信登录二维码,使用微信扫一扫确认后 Bot Token 将自动填入。需要 iLink Bot 内测资格。',
qrcodeButton: '获取登录二维码',
rescanButton: '重新扫码(将替换当前账号)',
qrcodeLoading: '正在获取...',
qrcodeFailed: '获取二维码失败,请检查网络连接',
qrcodeExpired: '二维码已过期,请重新获取',
scanHint: '请使用微信扫描二维码登录',
polling: '等待扫码...',
scanned: '已扫码,请在手机上确认',
confirmed: '登录成功',
expired: '二维码已过期',
loginSuccess: '微信扫码登录成功,Token 已自动填入',
replaceWarning: '重新扫码将替换当前绑定的微信账号。如需绑定额外的微信账号,请点击下方按钮添加新渠道。',
addNewAccount: '绑定新微信账号(添加新渠道)',
newAccountName: '微信',
},
wecom: {
authHint: '点击按钮后会弹出企业微信二维码窗口,使用企业微信扫码确认后 Bot ID 与 Secret 将自动填入。',
authButton: '扫码授权企业微信机器人',
authLoading: '正在加载...',
authSuccess: '企业微信机器人授权成功',
sdkFailed: '企业微信 SDK 加载失败,请检查网络连接',
windowBlocked: '弹窗被浏览器拦截,请允许弹窗后重试',
authCancelled: '授权已取消',
authFailed: '授权失败',
},
webHint: 'Web 渠道使用内置 SSE 通信,无需额外配置。',
webchatHint: 'WebChat 用于把 MateClaw 聊天挂件嵌入外部网站。请配置 API Key、标题和主题色,然后在网站中引入 WebChat SDK。',
webchatApiKeyGenerated: '保存后平台会自动生成 API Key。创建完成后返回此页面即可复制。',
webchatApiKeyReadOnly: '该 API Key 由平台自动生成并托管,你只能复制,不能手动修改。',
webhookHint: 'Webhook 渠道配置请在下方「原始 JSON」标签页中编辑。',
jsonHint: '直接编辑渠道的完整 JSON 配置。切换到「表单配置」标签页时会自动同步。',
advanced: '高级配置',
accessControl: {
title: '访问控制',
dmPolicy: '私聊策略',
dmPolicyTooltip: '控制是否允许用户与机器人私聊',
groupPolicy: '群聊策略',
groupPolicyTooltip: '控制是否在群聊中响应消息',
policyOpen: '开放',
policyClosed: '关闭',
allowFrom: '允许的用户',
allowFromTooltip: '逗号分隔的用户 ID 白名单,留空则允许所有人',
allowFromPlaceholder: '逗号分隔用户 ID(留空 = 全部允许)',
denyMessage: '拒绝提示',
denyMessagePlaceholder: '抱歉,您没有使用权限',
requireMention: "需要 {'@'}提及",
requireMentionTooltip: "群聊中是否需要 {'@'}机器人才响应",
},
messageFilter: {
title: '消息过滤',
filterThinking: '过滤思维链',
filterThinkingTooltip: '发送给用户前过滤 标签内容',
filterToolMessages: '过滤工具消息',
filterToolMessagesTooltip: '过滤 tool_call / tool_result 和 ReAct Action/Observation 行',
messageFormat: '消息格式',
formatAuto: '自动',
formatMarkdown: 'Markdown',
formatText: '纯文本',
formatHtml: 'HTML',
},
feishuPermissions: {
title: '所需飞书权限',
goToPermissions: '前往权限管理 →',
},
connection: {
connected: '已连接',
reconnecting: '重连中',
error: '断开',
disconnected: '未连接',
outOfService: '未启动',
retryCount: '重试 #{n}',
errorLabel: '错误',
},
messages: {
loadFailed: '加载渠道列表失败',
saveFailed: '保存渠道失败',
saveSuccess: '渠道已保存',
deleteFailed: '删除渠道失败',
deleteConfirm: '确定要删除这个渠道吗?',
deleteTitle: '确认删除',
toggleFailed: '切换渠道状态失败',
invalidJson: '配置 JSON 格式不正确',
},
guide: {
dingtalk: {
step1: '在 钉钉开放平台 创建机器人,填入 AppKey 和 AppSecret',
step2: 'Stream 模式(推荐):消息接收模式选「Stream 模式」,无需公网 IP 即可使用',
step3: 'Webhook 模式:消息接收模式选「HTTP 模式」,将 Webhook URL 填入回调地址',
},
feishu: {
step1: '前往 飞书开放平台 创建企业自建应用',
step2: '将应用的 App ID 和 App Secret 填入下方配置',
webhookStep: '在飞书后台「事件订阅」中将请求地址设置为上方 Webhook URL,订阅 im.message.receive_v1 事件',
websocketStep: '在飞书后台「事件订阅」中选择「长连接」订阅方式,订阅 im.message.receive_v1 事件(无需公网 IP)',
permissionStep: '如需昵称显示,请在「权限管理」中申请 contact:user.base:readonly 权限',
},
telegram: {
step1: '在 Telegram 中搜索 {at}BotFather,发送 /newbot 创建 Bot',
step2: '将 BotFather 返回的 Bot Token 填入下方配置',
step3: 'Long-Polling 模式(推荐):启动后自动通过 getUpdates 轮询接收消息,无需公网 IP',
step4: 'Webhook 模式:需要公网可访问的回调地址,切换接入模式后填入 Webhook URL',
},
discord: {
step1: '前往 Discord Developer Portal 创建 Application',
step2: '在 Bot 页面创建 Bot 并复制 Bot Token 填入下方配置',
step3: '在 Bot 页面开启 MESSAGE CONTENT Intent(Privileged Gateway Intents 区域)',
step4: '在 OAuth2 → URL Generator 中勾选 bot scope 和 Send Messages / Read Message History 权限,生成邀请链接将 Bot 添加到目标服务器',
step5: '启动后通过 Gateway WebSocket 自动接收消息,无需公网 IP 和回调 URL',
},
wecom: {
step1: '前往 企业微信管理后台,进入「应用管理 → 智能机器人」创建一个新的智能机器人',
step2: '在机器人配置中选择「API 模式 → 配置长连接」',
step3: '记录机器人的 Bot ID 和 Secret,填入下方配置',
step4: '启动渠道后即可在企业微信中扫码添加机器人对话,无需公网 IP 和回调 URL',
},
weixin: {
step1: '确保已获得微信 iLink Bot 内测资格(目前为受邀内测阶段)',
step2: '点击下方「获取登录二维码」按钮,用微信扫码登录',
step3: '扫码成功后系统自动获取 bot_token 并填入配置',
step4: '启动渠道后通过 HTTP 长轮询自动接收消息,无需公网 IP 和回调 URL',
},
qq: {
step1: '前往 QQ 开放平台 创建机器人应用',
step2: '在应用管理页面获取 AppID 和 AppSecret,填入下方配置',
step3: "在「功能配置 → 消息订阅」中开启需要的消息类型(C2C 消息、群聊 {'@'}消息、频道消息等)",
step4: '启动渠道后通过 WebSocket 长连接自动接收消息,无需公网 IP 和回调 URL',
},
},
dingtalkRegister: {
title: '一键创建钉钉机器人',
hint: '点击按钮获取二维码,使用钉钉扫一扫并授权后,会自动在你的企业里创建机器人应用,Client ID / Client Secret 自动填入下方。',
button: '扫码自动创建机器人',
buttonLoading: '正在准备二维码…',
qrcodeLoading: '正在生成二维码',
scanHint: '请使用钉钉 App 扫描上方二维码并确认授权',
confirmed: '机器人创建成功,Client ID 和 Secret 已自动填入',
expired: '二维码已过期,请重新生成',
denied: '授权被拒绝',
startFailed: '获取二维码失败,请检查网络',
},
feishuRegister: {
title: '一键创建飞书应用',
hint: '点击按钮获取二维码,使用飞书扫一扫并确认授权后,会自动在你的企业里创建自建应用,App ID / App Secret 自动填入下方。',
button: '扫码自动创建应用',
buttonLoading: '正在准备二维码…',
qrcodeLoading: '正在生成二维码',
scanHint: '请使用飞书 App 扫描上方二维码并确认授权',
confirmed: '应用创建成功,App ID 和 Secret 已自动填入',
expired: '二维码已过期,请重新生成',
denied: '授权被拒绝',
error: '注册过程出错,请稍后重试',
startFailed: '获取二维码失败,请检查网络',
},
feishu: {
perm: {
message: '获取与发送单聊、群组消息',
messageReason: '基础:收发消息',
receive: '接收消息事件',
receiveReason: '基础:接收用户消息',
resource: '获取消息中的资源文件',
resourceReason: 'WebSocket 模式下获取消息内容',
reactions: '管理消息表情回复',
reactionsReason: '消息反应:添加 👍 表情',
contact: '获取用户基本信息',
contactReason: '昵称获取:显示用户真实姓名',
media: '获取消息中的资源文件',
mediaReason: '媒体下载:下载图片和文件',
},
},
},
skills: {
title: '技能管理',
desc: '管理 Agent 可用的工具和技能',
newSkill: '新建技能',
importSkill: '导入技能',
refreshRuntime: '刷新运行时',
refreshing: '刷新中...',
refreshSuccess: '运行时技能已刷新',
refreshFailed: '刷新运行时失败',
tabs: {
all: '全部',
builtin: '内置',
mcp: 'MCP',
dynamic: '动态',
},
search: {
placeholder: '搜索技能名称、描述或标签...',
},
filter: {
all: '全部状态',
enabled: '已启用',
disabled: '已禁用',
scanFailed: '扫描失败',
},
security: {
scanned: '已扫描',
scanFailed: '扫描失败',
findingsTitle: '安全扫描失败',
rescan: '重新扫描',
rescanning: '扫描中...',
rescanPassed: '重新扫描通过',
rescanStillFailed: '重新扫描仍未通过,请查看详情',
rescanFailed: '重新扫描失败',
noPersistedFindings: '本次尚无持久化的扫描详情,点击"重新扫描"以重新生成。',
fix: '修复建议',
},
empty: '暂无技能',
emptyDesc: '添加技能以增强 Agent 的能力',
noDescription: '暂无描述',
modal: {
configureTitle: '配置技能',
newTitle: '新建技能',
},
fields: {
name: '名称',
nameZh: '中文显示名',
nameEn: '英文显示名',
type: '类型',
icon: '图标',
version: '版本',
author: '作者',
tags: '标签',
description: '描述',
configJson: '配置 (JSON)',
skillContent: '技能内容 (SKILL.md)',
sourceCode: '源代码 / 脚本',
},
placeholders: {
name: '技能名称',
nameZh: '可选 — 留空则显示原始 name',
nameEn: 'Optional — leave blank to show the slug',
icon: '🛠️ (emoji 或 URL)',
version: '1.0.0',
author: '作者名称',
tags: 'tag1,tag2,tag3',
description: '这个技能做什么?',
configJson: '',
sourceCode: '# Python 或脚本内容...',
},
hints: {
directorySkill: '— 目录技能:当目录不可用时用作备用',
primaryContent: '— Agent 提示注入的主要内容',
},
types: {
builtin: '内置',
mcp: 'MCP',
dynamic: '动态',
},
actions: {
configure: '配置',
delete: '删除',
saveChanges: '保存更改',
createSkill: '创建技能',
},
runtime: {
disabled: '已停用',
unknown: '未知',
securityBlocked: '安全阻止',
depsMissing: '缺少依赖',
directoryActive: '目录激活',
databaseFallback: '数据库回退',
databaseActive: '数据库激活',
unresolved: '未解析',
},
messages: {
saveFailed: '保存技能失败',
deleteConfirm: '确定要删除这个技能吗?此操作不可撤销。',
deleteTitle: '确认删除',
deleteFailed: '删除技能失败',
toggleFailed: '切换技能状态失败',
},
import: {
title: '导入技能',
urlTab: '从 URL 安装',
searchTab: '搜索市场',
urlPlaceholder: '输入 GitHub 仓库 URL 或 ClawHub 技能 URL',
urlHint: '支持 GitHub 仓库和 ClawHub 市场链接',
examples: '示例',
install: '安装',
installing: '安装中...',
installed: '安装成功',
failed: '安装失败',
cancelled: '已取消',
cancel: '取消',
overwrite: '覆盖已有技能',
enableAfterInstall: '安装后启用',
searchPlaceholder: '搜索 ClawHub 市场...',
search: '搜索',
searching: '搜索中...',
searchFailed: '搜索失败',
noResults: '未找到匹配的技能',
statusPending: '等待中',
zipTab: 'ZIP 导入',
dropHint: '拖拽 .zip 文件到此处,或点击选择',
zipRequirement: 'ZIP 包需包含 SKILL.md 文件',
uploading: '正在安装...',
uploadSuccess: '技能安装成功',
uploadFailed: '安装失败',
invalidZip: '请选择 .zip 格式的文件',
tooLarge: '文件过大(最大 50MB)',
},
},
onboarding: {
title: '欢迎使用 MateClaw',
subtitle: '配置你的第一个 AI 模型',
stepPath: '选择方式',
stepConfigure: '配置模型',
stepVerify: '验证',
localTitle: '本地模型',
localDesc: '已安装 Ollama?一键启用本地模型',
localDetected: '已检测到',
cloudTitle: '云端 API',
cloudDesc: '使用 OpenAI、DashScope 等云端模型',
selectModel: '选择模型',
setDefault: '设为默认',
enterApiKey: '输入 API Key',
testConnection: '测试连接',
testSuccess: '连接成功',
testFailed: '连接失败',
saveAndContinue: '保存并继续',
verifyTitle: '验证你的模型',
verifyMessage: '你好!简单介绍一下你自己。',
send: '发送',
startUsing: '开始使用 MateClaw',
skip: '跳过',
back: '返回',
},
talk: {
title: '语音模式',
ready: '就绪',
connecting: '连接中...',
listening: '收听中...',
processing: '思考中...',
speaking: '回复中...',
holdToTalk: '按住说话',
releaseToSend: '松开发送',
retry: '点击重新连接',
you: '你',
ai: 'AI',
micError: '无法访问麦克风',
connectionError: '连接错误,点击按钮重试',
playbackError: '音频播放失败',
tooShort: '录音过短,请按住按钮多说几秒',
},
browser: {
timeline: {
title: '浏览器({count} 个操作)',
},
actions: {
start: '启动',
stop: '停止',
open: '打开',
click: '点击',
type: '输入',
screenshot: '截图',
},
},
dashboard: {
title: '仪表盘',
kicker: '运营脉搏',
desc: '系统用量概览与运行状态',
conversations: '对话数',
messages: '消息数',
tokens: 'Token 消耗',
toolCalls: '工具调用',
periodDesc: '从日、周、月三个维度观察系统运行状况。',
runsDesc: '定时任务执行记录,包含耗时、消耗和结果。',
trend: {
title: '本周活跃度',
subtitle: '你和 AI 的互动频率。',
},
periodComparison: '周期对比',
periods: {
today: '今日',
thisWeek: '本周',
thisMonth: '本月',
},
recentRuns: '最近定时任务执行',
noRuns: '暂无执行记录',
runColumns: {
time: '时间',
job: '任务',
status: '状态',
trigger: '触发方式',
duration: '耗时',
tokens: 'Token',
},
},
memory: {
kicker: '记忆',
title: '记忆',
desc: '你的智能体在想什么、记住了什么、遗忘了什么。',
selectAgent: '选择智能体',
selectAgentHint: '请先选择一个智能体查看其记忆',
tabTimeline: '整理时间线',
tabMemory: '长期记忆',
tabFacts: '事实库',
noReports: '暂无整理记录',
modeFocused: '专题',
modeNightly: '夜间',
candidates: '条候选',
loadMore: '加载更多',
retry: '重试',
memoryBrowser: {
header: '概述',
empty: '暂无记忆内容',
userEdited: '用户编辑',
files: {
memory: '记忆',
profile: '档案',
soul: '灵魂',
userFacts: '用户事实',
references: '参考资料',
},
},
time: {
justNow: '刚刚',
hoursAgo: '{n}小时前',
daysAgo: '{n}天前',
},
status: {
success: '成功',
failed: '失败',
skipped: '跳过',
running: '运行中',
pending: '等待中',
},
report: {
mode: '模式',
topic: '主题',
status: '状态',
time: '时间',
candidates: '候选数',
promoted: '已整合',
rejected: '未采纳',
trigger: '触发方式',
reason: '整理理由',
diff: '变更摘要',
},
morningCard: {
title: '昨夜 Dream 回顾',
dismiss: '我知道了',
promoted: '整合了 {count} 条记忆',
},
hil: {
confirm: '确认',
edit: '编辑',
cancel: '取消',
save: '保存',
editPlaceholder: '修改记忆内容...',
confirmed: '已确认',
saved: '已保存到 MEMORY.md',
},
facts: {
searchPlaceholder: '搜索事实…',
empty: '暂无事实数据(需启用事实投影)',
trust: '信任度',
used: '使用 {n} 次',
helpful: '有用',
unhelpful: '没用',
forget: '遗忘',
forgotten: '已遗忘',
resolved: '已解决',
contradictions: '{count} 条矛盾待处理',
resolve: {
KEEP_A: '保留 A',
KEEP_B: '保留 B',
MERGE: '合并',
IGNORE: '忽略',
},
},
focused: {
desc: '围绕一个主题让智能体重新整理记忆,优先提炼相关信息。',
placeholder: '输入主题,如"项目架构"、"用户偏好"…',
trigger: '开始整理',
success: '整理完成,时间线已更新',
skipped: '没有需要整合的内容',
},
},
// Tool display labels consumed by useToolLabel() — keys must mirror en-US.ts exactly.
// Unknown tools (MCP / custom skills) fall back to humanizeToolName() and are not listed here.
toolLabels: {
// Delegation
delegateToAgent: '委派给智能体',
delegateParallel: '并行委派',
listAvailableAgents: '列出可用智能体',
// Wiki
wiki_search_pages: '搜索知识库',
wiki_semantic_search: '语义检索知识库',
wiki_read_page: '读取知识库页面',
wiki_list_pages: '列出知识库页面',
wiki_related_pages: '查找相关页面',
wiki_trace_source: '溯源知识库',
wiki_create_page: '创建知识库页面',
wiki_delete_page: '删除知识库页面',
wiki_enrich_page: '丰富知识库页面',
wiki_explain_relation: '解释关联关系',
// Web search
search: '联网搜索',
// Memory
recall_structured: '检索记忆',
remember_structured: '保存记忆',
forget_structured: '清除记忆',
fact_probe: '探查事实',
fact_related: '查询关联事实',
fact_list_contradictions: '检查矛盾事实',
session_search: '搜索会话',
read_workspace_memory_file: '读取记忆文件',
write_workspace_memory_file: '写入记忆文件',
edit_workspace_memory_file: '编辑记忆文件',
list_workspace_memory_files: '列出记忆文件',
// Files & shell
read_file: '读取文件',
execute_shell_command: '执行命令',
extract_document_text: '提取文档内容',
extract_pdf_text: '提取 PDF 内容',
extract_docx_text: '提取文档内容',
detect_file_type: '识别文件类型',
readMateClawDoc: '查阅系统文档',
// Generative
image_generate: '生成图片',
video_generate: '生成视频',
music_generate: '生成音乐',
// Data
query_datasource: '查询数据源',
execute_sql: '执行 SQL',
// Browser
browser_use: '浏览器操作',
// Cron
create_cron_job: '创建定时任务',
list_cron_jobs: '查看定时任务',
toggle_cron_job: '启停定时任务',
delete_cron_job: '删除定时任务',
// Time
getCurrentDateTime: '获取当前时间',
getCurrentTime: '获取当前时间',
getCurrentDate: '获取当前日期',
// Skills
skill_manage: '管理技能',
runSkillScript: '运行技能',
listSkillFiles: '列出技能文件',
listAvailableSkills: '列出可用技能',
readSkillFile: '读取技能文件',
},
} as const