mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-15 20:08:18 +08:00
The pageType profile could only be edited as a raw JSON string. Add a structured form editor (default) that builds the profile without writing JSON: profile-level settings (fallbackType / allowAdditionalFields), an ordered page type list (add via a small wizard, remove, reorder), and a per-type form for label / description / layer / field schema, with stage prompts (route/create/ merge) and the markdown template folded into an "advanced" section that carries inline descriptions and examples. A form/JSON toggle keeps the JSON view as the final review surface; serialization preserves unknown keys for forward-compat, and save/validate/reset reuse the existing endpoints (no backend change). Closes matevip/mateclaw#310
4141 lines
170 KiB
TypeScript
4141 lines
170 KiB
TypeScript
export default {
|
||
app: {
|
||
title: 'MateClaw - AI 助手',
|
||
},
|
||
common: {
|
||
save: '保存',
|
||
saving: '保存中...',
|
||
saved: '已保存',
|
||
cancel: '取消',
|
||
reset: '重置',
|
||
edit: '编辑',
|
||
delete: '删除',
|
||
create: '创建',
|
||
update: '更新',
|
||
loading: '加载中...',
|
||
processing: '处理中...',
|
||
success: '操作成功',
|
||
revoked: '已撤销',
|
||
enabled: '启用',
|
||
disabled: '停用',
|
||
default: '默认',
|
||
view: '查看',
|
||
copy: '复制',
|
||
copied: '已复制',
|
||
copyFailed: '复制失败',
|
||
confirm: '确认',
|
||
close: '关闭',
|
||
add: '添加',
|
||
search: '搜索',
|
||
noResults: '没有匹配项',
|
||
noOptions: '暂无可选项',
|
||
none: '不指定',
|
||
clear: '清除',
|
||
expandSidebar: '展开侧边栏',
|
||
collapseSidebar: '折叠侧边栏',
|
||
manageWorkspaces: '管理工作区',
|
||
show: '显示',
|
||
hide: '隐藏',
|
||
on: '开启',
|
||
off: '关闭',
|
||
yes: '是',
|
||
no: '否',
|
||
configure: '配置',
|
||
enable: '启用',
|
||
disable: '停用',
|
||
refresh: '刷新',
|
||
collapse: '收起',
|
||
more: '更多',
|
||
pager: {
|
||
total: '共 {n} 条',
|
||
perPage: '{n} 条/页',
|
||
prev: '上一页',
|
||
next: '下一页',
|
||
jumpTo: '前往',
|
||
pageSuffix: '页',
|
||
},
|
||
iconPicker: {
|
||
title: '选择图标',
|
||
tabPixelart: '像素图标',
|
||
tabEmoji: '表情符号',
|
||
tabUrl: '图片链接',
|
||
search: '搜索图标名…',
|
||
empty: '没有匹配的图标',
|
||
preview: '预览',
|
||
none: '不设图标',
|
||
apply: '应用',
|
||
emojiHint: '直接输入或粘贴一个 emoji / 文字符号。',
|
||
emojiPlaceholder: '🎬 / 📊 / 任意符号',
|
||
urlHint: '使用线上图片作为图标(PNG / SVG / JPG)。',
|
||
urlPlaceholder: 'https://example.com/icon.svg',
|
||
pixelartCount: '共 {n} 个像素图标,由 pixelarticons 提供(MIT)',
|
||
pickerOpen: '打开图标选择器',
|
||
reprojectionWarning: '提示:若 SKILL.md frontmatter 已声明 icon,下次解析会覆盖此处的修改 — 在正文里改才永久。',
|
||
},
|
||
},
|
||
auth: {
|
||
changePassword: '修改密码',
|
||
oldPassword: '当前密码',
|
||
newPassword: '新密码',
|
||
confirmPassword: '确认新密码',
|
||
fieldsRequired: '请填写当前密码和新密码',
|
||
passwordMismatch: '两次输入的新密码不一致',
|
||
passwordChanged: '密码修改成功',
|
||
passwordChangeFailed: '密码修改失败',
|
||
},
|
||
chat: {
|
||
status: {
|
||
idle: '就绪',
|
||
streaming: '生成中...',
|
||
error: '连接断开',
|
||
},
|
||
thinking: '深度思考',
|
||
thinkingInProgress: '思考中...',
|
||
stopped: '已停止生成',
|
||
interrupted: '已中断',
|
||
subagentStalled: '子 Agent 无进展',
|
||
subagentAsync: '后台运行中,结果稍后获取',
|
||
executionPlan: '执行计划',
|
||
planDone: '已完成',
|
||
detail: {
|
||
viewDetail: '查看详情',
|
||
request: '请求参数',
|
||
response: '响应输出',
|
||
copy: '复制',
|
||
copied: '已复制',
|
||
copyFailed: '复制失败',
|
||
empty: '无内容',
|
||
status: {
|
||
running: '进行中',
|
||
completed: '已完成',
|
||
error: '失败',
|
||
pending: '待处理',
|
||
},
|
||
},
|
||
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: '已复制',
|
||
downloadStarted: '开始下载:{name}',
|
||
downloadExpired: '文件已失效或过期,请重新让助手生成后再下载',
|
||
downloadFailed: '下载失败:{reason}',
|
||
regenerate: '重新生成',
|
||
replyModel: '本条回复模型: {model}',
|
||
routing: {
|
||
kind: {
|
||
image: '图片',
|
||
video: '视频',
|
||
media: '附件',
|
||
},
|
||
tooltip: '本轮对话由「{primary}」处理;图片附件先经「{sidecar}」({sidecarProvider})转成文字后再交给主模型。',
|
||
hint: {
|
||
willRoute: '检测到{kind}附件。当前 Agent 模型「{primary}」不支持{kind}输入,将自动调用「{sidecar}」识别(旁路模式,不影响主模型)。',
|
||
notConfigured: '检测到{kind}附件。当前 Agent 模型不支持{kind}输入,且尚未配置旁路模型。',
|
||
videoReserved: '检测到视频附件。当前版本暂未接入视频旁路(已预留「{sidecar}」),建议切换到具备视频能力的多模态主模型。',
|
||
action: {
|
||
gotoSettings: '前往配置',
|
||
},
|
||
},
|
||
},
|
||
ttsPlay: '朗读',
|
||
ttsStop: '停止朗读',
|
||
conversations: '会话列表',
|
||
newChat: '新对话',
|
||
loadingAgents: '加载员工中...',
|
||
selectAgent: '请选择数字员工',
|
||
noConversations: '暂无会话',
|
||
startNewChat: '开始新对话吧',
|
||
messages: '{count} 条消息',
|
||
configModel: '配置模型',
|
||
modelSaveFailed: '模型切换未保存,下条消息可能仍走原模型',
|
||
openSessions: '会话管理',
|
||
clearMessages: '清空消息',
|
||
goToModelSettings: '前往模型设置',
|
||
configModelFirst: '请先配置模型',
|
||
modelUnavailable: '当前模型不可用',
|
||
noActiveModel: '当前没有激活模型。先到模型管理中选择一个可用模型,再开始对话。',
|
||
providerNotReady: '当前激活模型属于 {name},但这个提供商还没配置完成。请到模型管理中补全 API Key 或 Base URL。',
|
||
noAvailableModel: '当前没有可用模型。',
|
||
loadAgentsFailed: '加载员工列表失败',
|
||
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: '去配置',
|
||
// Issue #81: liveness-aware popup state machine.
|
||
prompt: {
|
||
noActive: {
|
||
title: '请先选择一个模型',
|
||
desc: '当前没有激活模型,先到模型管理选一个再开始对话。',
|
||
},
|
||
unconfigured: {
|
||
title: '{name} 还没配置完',
|
||
desc: '缺少:{fields}。{hint}',
|
||
},
|
||
removed: {
|
||
title: '{name} 不可用',
|
||
descFallback: '上一次探测失败,请检查服务是否在运行。',
|
||
},
|
||
cooldown: {
|
||
title: '{name} 暂时不可用',
|
||
desc: '约 {seconds} 秒后自动重试。',
|
||
},
|
||
unprobed: {
|
||
title: '正在检查模型可用性',
|
||
desc: '稍候片刻或刷新重试。',
|
||
},
|
||
noModels: {
|
||
title: '{name} 下没有可用模型',
|
||
desc: '尝试发现模型或手动添加一个。',
|
||
},
|
||
},
|
||
promptAction: {
|
||
fillBaseUrl: '填写 Base URL',
|
||
fillApiKey: '填写 API Key',
|
||
fillRequiredFields: '完成必填项',
|
||
startOAuth: '登录授权',
|
||
testConnection: '测试连接',
|
||
pullModel: '发现模型',
|
||
waitCooldown: '立即重试',
|
||
reprobe: '重新探测',
|
||
switchToModel: '切换到 {name}',
|
||
fixThis: '修复',
|
||
},
|
||
recoverableBanner: {
|
||
message: '{name} 暂时不可用,发送时会自动用 {fallback} 兜底',
|
||
switched: '主模型不可用,已切换到 {fallback}',
|
||
},
|
||
uploadFailed: '文件上传失败',
|
||
dropToUpload: '拖放文件或文件夹到此处',
|
||
copyFailed: '复制失败',
|
||
datePinned: '置顶',
|
||
dateToday: '今天',
|
||
dateYesterday: '昨天',
|
||
dateLast7Days: '近 7 天',
|
||
dateEarlier: '更早',
|
||
hasUnread: '有新内容',
|
||
filterByAgent: '按员工筛选',
|
||
allAgents: '全部员工',
|
||
pin: '置顶',
|
||
unpin: '取消置顶',
|
||
rename: '重命名',
|
||
pinFailed: '置顶操作失败',
|
||
selectMode: '多选',
|
||
exitSelectMode: '退出多选',
|
||
selectAll: '全选',
|
||
deselectAll: '取消全选',
|
||
selectedCount: '已选 {count} 项',
|
||
batchDelete: '删除选中',
|
||
batchDeleteConfirm: '确定删除选中的 {count} 个会话?此操作不可恢复。',
|
||
batchDeleteFailed: '批量删除失败',
|
||
cronRunning: {
|
||
executing: '执行中…',
|
||
fallbackName: '定时任务',
|
||
},
|
||
suggestionIntro: '记住我每周一上午十点开周会,提前 10 分钟把议题草稿整理好发我',
|
||
suggestionPoem: '把这份需求文档录入我的知识库,下次相关问题先查它再决定要不要联网',
|
||
suggestionCode: '帮我把这次上线流程拆成可执行步骤,关键节点暂停等我审批',
|
||
suggestionWeather: '你现在挂载了哪些技能、工具和 MCP 服务?怎么给你新增一个?',
|
||
suggestionPlan1: '把一个完整发布计划拆成步骤,并在关键节点设置审批门禁',
|
||
suggestionPlan2: '把这个复杂任务拆成可追踪的子任务,逐步推进并随时汇报进度',
|
||
approvalRequired: '需要审批',
|
||
approve: '批准',
|
||
deny: '拒绝',
|
||
approveAlways: '始终批准',
|
||
approveAlwaysConversation: '此次会话',
|
||
approveAlwaysAgent: '此 agent',
|
||
approveAlwaysUser: '我所有 agent',
|
||
approveAlwaysCreated: '已添加自动批准规则:{tool}',
|
||
approvalHint: '或输入 <code>/approve</code> / <code>/deny</code>',
|
||
approved: '✅ 已允许',
|
||
denied: '⛔ 已拒绝',
|
||
approvalWaiting: '等待输入框确认...',
|
||
pendingApprovalPlaceholder: '输入 /approve 或 /deny 来回复...',
|
||
messagePlaceholder: '输入消息... (Enter 发送, Shift+Enter 换行)',
|
||
thinkingOn: '深度思考已开启',
|
||
thinkingOff: '点击开启深度思考',
|
||
thinkingUnsupported: '当前模型不支持深度思考',
|
||
slashMenuTitle: '技能',
|
||
slashMenuHint: '↑↓ 选择 · Enter 确认 · Esc 关闭',
|
||
slashMenuLoading: '加载技能中…',
|
||
slashMenuEmpty: '没有匹配的技能',
|
||
slashMenuSearchPlaceholder: '搜索技能…',
|
||
useSkillDirective: '使用「{name}」技能:',
|
||
subtitle: '记忆 · 知识库 · 技能 · 自动化 —— 你的个人 AI 工作面',
|
||
// 排队相关
|
||
queuedSending: '正在发送排队消息...',
|
||
queuedWillSend: '已排队,当前步骤结束后发送',
|
||
queuedCancel: '取消',
|
||
queuedReplace: '消息已排队,按回车替换...',
|
||
queuedBadge: '{count} 条排队',
|
||
// 流状态
|
||
streamPreparingContext: '准备上下文...',
|
||
streamReadingMemory: '读取记忆...',
|
||
streamReasoning: '分析问题...',
|
||
streamDraftingAnswer: '生成回答...',
|
||
streamSummarizingObservations: '整理信息...',
|
||
streamThinking: '思考中...',
|
||
streamGenerating: '生成中...',
|
||
streamExecutingTool: '执行工具...',
|
||
streamAwaitingApproval: '等待审批',
|
||
streamFinalizing: '正在收尾...',
|
||
streamFailed: '本轮中断',
|
||
streamInterrupting: '中断中...',
|
||
streamQueued: '排队中...',
|
||
streamReconnecting: '重新连接...',
|
||
streamStopped: '已停止',
|
||
streamCompleted: '已完成',
|
||
// Context compaction (compact_status SSE)
|
||
compactStart: '正在压缩上下文…',
|
||
compactPairSafe: '调整边界以保留 tool_call 配对…',
|
||
compactSummarize: '正在生成压缩摘要…',
|
||
compactStartWithTokens: '正在压缩上下文… ({tokens})',
|
||
compactSummarizeWithCount: '正在生成压缩摘要… ({count} 条)',
|
||
streamPreparingContextDetail: '正在收集当前问题、历史对话和必要配置。',
|
||
streamReadingMemoryDetail: '正在查找与你当前问题最相关的长期记忆和今日记录。',
|
||
streamReasoningDetail: '正在基于现有信息进行判断、比较方案并组织回答结构。',
|
||
streamDraftingAnswerDetail: '已经完成主要分析,正在把结论写成可直接阅读的答案。',
|
||
streamSummarizingObservationsDetail: '刚刚拿到了较多工具结果,正在提炼重点,避免回答冗长或遗漏关键信息。',
|
||
streamThinkingDetail: '正在做内部推理,这一步未必会立即产生正文。',
|
||
streamGeneratingDetail: '已经进入可见输出阶段,会陆续显示结果。',
|
||
streamExecutingToolDetail: '正在读取文件、查询数据或执行必要操作,以便给出更准确的答案。',
|
||
streamAwaitingApprovalDetail: '接下来需要你的确认,确认后我会继续执行。',
|
||
streamFinalizingDetail: '正在保存结果并结束当前响应。',
|
||
streamFailedDetail: '这次处理没有完整完成,但你可以继续追问或重试。',
|
||
streamSlowShort: '这一步比平时慢一些,但系统仍在处理中。',
|
||
streamSlowSummarizing: '正在整理较长的工具结果。因为信息较多,这一步可能需要更久。',
|
||
streamSlowReasoning: '正在做较复杂的分析和取舍,不是卡住。',
|
||
streamSlowGeneral: '处理还在继续,当前主要耗时在内部分析,不代表连接中断。',
|
||
// 首 token 前的生命周期阶段
|
||
streamConnecting: '正在连接服务器...',
|
||
streamStarted: '连接已建立,正在准备上下文...',
|
||
streamContextPrepared: '上下文已就绪,正在调用 LLM...',
|
||
streamLlmRequestSent: '等待模型首个响应...',
|
||
streamElapsedSuffix: '(已等 {sec} 秒)',
|
||
// 按轮次分组渲染
|
||
iterationEmpty: '第 {index} 轮被中断(无输出)',
|
||
contentRepetitionWarning: '检测到内容尾部重复(疑似模型输出 artifact)',
|
||
supersededPreviewCollapsed: '过程预演已被实际工具结果替换',
|
||
expand: '展开',
|
||
// INCOMPLETE 截断卡片(finishReason=incomplete)
|
||
incompleteTitle: '回答因检测到重复输出已被自动截断',
|
||
incompleteDescription: '系统在你看到的部分之后检测到模型开始重复同一段内容(或在思考阶段无产出),已自动截断以避免无效输出。点下方按钮重新生成完整回答,或在输入框补充提示让模型聚焦剩余内容。',
|
||
incompleteRetry: '重新生成',
|
||
// EVIDENCE_INSUFFICIENT 提示卡(finishReason=evidence_insufficient)
|
||
evidenceTitle: '任务已完成,但部分源码引用未被验证',
|
||
evidenceDescription: '回答全文已保留并展示。底部「[证据不足] …」列出的类/文件并未在本次工具结果里被实际读取,模型可能基于命名推断。如需确认这些引用,请追问让模型逐一读取后再下结论。',
|
||
// feedback_event card — emitted when a turn ends in a non-transient error.
|
||
// Buttons are data-driven from the event's `actions` array; labels live
|
||
// under chat.feedback.{action} so a future backend can ship a new action
|
||
// (e.g. "switch_model") with a single new translation key.
|
||
feedback: {
|
||
title: '本次回答失败',
|
||
description: '模型调用未能正常完成,已显示错误原因。可点击「重试」让模型用同一条提问再试一次,或「上报问题」复制错误详情用于反馈。',
|
||
retry: '重试',
|
||
regenerate: '重新生成',
|
||
report: '上报问题',
|
||
reportCopied: '错误详情已复制到剪贴板',
|
||
reportFailed: '复制失败,请检查浏览器权限',
|
||
},
|
||
// 审批栏
|
||
approvalAllow: '允许',
|
||
approvalExecute: '执行?',
|
||
// 时间格式
|
||
timeJustNow: '刚刚',
|
||
timeMinutesAgo: '{n} 分钟前',
|
||
timeHoursAgo: '{n} 小时前',
|
||
},
|
||
nav: {
|
||
dashboard: '仪表盘',
|
||
chat: '对话',
|
||
control: '控制台',
|
||
channels: '渠道',
|
||
sessions: '会话',
|
||
core: '核心',
|
||
connect: '连接',
|
||
system: '系统',
|
||
agent: '智能体',
|
||
workspace: '工作区',
|
||
agentContext: '智能体上下文',
|
||
skills: '技能',
|
||
wiki: '知识库',
|
||
enterprise: '企业场景',
|
||
tools: '工具',
|
||
plugins: '插件',
|
||
datasources: '数据源',
|
||
mcpServers: 'MCP 连接',
|
||
mcpConnections: 'MCP 连接',
|
||
toolsCatalog: '工具目录',
|
||
activity: '活动记录',
|
||
acpEndpoints: 'ACP 端点',
|
||
settingsGroup: '设置',
|
||
agents: '员工',
|
||
security: '安全',
|
||
tokenUsage: 'Token 统计',
|
||
cronJobs: '定时任务',
|
||
scheduler: '调度中心',
|
||
workflows: '工作流',
|
||
triggers: '触发器',
|
||
settings: '设置',
|
||
logout: '退出登录',
|
||
themeLight: '浅色',
|
||
themeDark: '深色',
|
||
memory: '记忆',
|
||
themeSystem: '跟随系统',
|
||
themeLabel: '外观',
|
||
languageLabel: '语言',
|
||
appearance: '外观与语言',
|
||
roleUser: '用户',
|
||
roleAdmin: '管理员',
|
||
shortcutAgents: '员工',
|
||
shortcutNew: '新建',
|
||
shortcutsHint: 'Ctrl+K {agents} | Ctrl+N {newAction}',
|
||
},
|
||
// Issue #81: provider-level hint / status text shared across chat popup and ModelSelector.
|
||
provider: {
|
||
hint: {
|
||
ollamaBaseUrlExample: '示例:{example}',
|
||
lmstudioBaseUrlExample: '示例:{example}(LM Studio 默认端口)',
|
||
llamacppBaseUrlExample: '示例:{example}(llama-server 默认端口)',
|
||
vllmBaseUrlExample: '示例:{example}',
|
||
openaiCompatBaseUrlExample: '示例:OpenAI 兼容端点,例如 {example}',
|
||
},
|
||
status: {
|
||
unconfigured: '未配置',
|
||
removed: '不可用',
|
||
cooldown: '{s}s 后重试',
|
||
unprobed: '检测中',
|
||
},
|
||
},
|
||
settings: {
|
||
title: '设置',
|
||
kicker: '配置中心',
|
||
layoutDesc: '调整模型、系统行为与媒体能力,让整个产品在扩张时仍然保持一致。',
|
||
sections: {
|
||
model: '模型管理',
|
||
system: '系统设置',
|
||
image: '图片生成',
|
||
tts: '语音合成',
|
||
stt: '语音识别',
|
||
music: '音乐生成',
|
||
video: '视频生成',
|
||
model3d: '3D 生成',
|
||
workspace: '工作空间',
|
||
featureFlags: '功能开关',
|
||
about: '关于',
|
||
advanced: '高级',
|
||
skillCurator: '技能管家',
|
||
proxy: '网络代理',
|
||
},
|
||
models: {
|
||
sidecar: {
|
||
title: '多模态旁路',
|
||
hint: '当主模型不支持图片/视频时,自动用下面配置的模型先把附件转成文字,再交给主模型回答。',
|
||
notConfigured: '未配置(不路由附件)',
|
||
idle: '未启用',
|
||
reserved: '预留',
|
||
capable: '视觉',
|
||
vision: {
|
||
label: '视觉旁路模型',
|
||
desc: '用户上传图片时调用一次,把图片转成结构化描述。主对话模型不变。可选择任意已启用模型;带"视觉"标记的为已识别支持图片输入的模型。',
|
||
empty: '尚未发现可用的对话模型。请到上方"云端模型"中先添加并启用一个模型。',
|
||
},
|
||
video: {
|
||
label: '视频旁路模型(预留)',
|
||
desc: '用于未来版本:当用户上传视频时,由该模型负责拆帧和描述。当前版本暂不接入路由。',
|
||
empty: '尚未发现可用的对话模型。',
|
||
},
|
||
},
|
||
},
|
||
featureFlags: {
|
||
title: '功能开关',
|
||
description: '运行时可切换的功能开关。修改后立即在所有节点生效(每实例 30 秒内同步缓存);不需要重启服务。',
|
||
empty: '当前没有已注册的功能开关。',
|
||
enabled: '已开启 {key}',
|
||
disabled: '已关闭 {key}',
|
||
toggleFailed: '切换失败,请稍后重试',
|
||
footer: '默认情况下新功能以关闭状态发布。开启后请关注对应模块的指标与日志,确认无回归再扩大灰度。',
|
||
notWired: '未实装',
|
||
notWiredTooltip: '该开关已预留但功能尚未实装,开启暂不会生效',
|
||
scope: {
|
||
kb: '知识库白名单',
|
||
user: '用户白名单',
|
||
rollout: '灰度比例 {pct}%',
|
||
},
|
||
descriptions: {
|
||
'wiki.ocr.enabled': '维基上传的图片 OCR / 视觉理解流水线(开启后图片会调用 vision 模型生成事实性描述)',
|
||
'wiki.compile.4stage.enabled': '四阶段知识库编译流水线(摘要 / 规划 / 生成 / 索引)',
|
||
'wiki.compile.cache.enabled': '维基编译流水线的提示词缓存层(命中后能省 30%+ token)',
|
||
'wiki.confidence.enabled': '维基关系与页面的置信度分类(EXTRACTED / INFERRED / AMBIGUOUS / UNVERIFIED)',
|
||
'wiki.hot_cache.enabled': '知识库级"最近活动"快照,注入到 Agent 的系统提示',
|
||
'wiki.graph.insights.enabled': '维基图谱洞察面板(意外连接 / 知识缺口 / 桥接节点)',
|
||
'wiki.graph.adamic_adar.enabled': 'Adamic-Adar 拓扑相似度信号(叠加在现有四个信号之上)',
|
||
'wiki.graph.boundary.enabled': '边界分数:让"悬空"页面(出度大入度小)冒头',
|
||
'wiki.relation.cache.enabled': '维基页面间关系计算的持久化缓存(默认开启,性能基线)',
|
||
},
|
||
},
|
||
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: '新增模型',
|
||
embedding: {
|
||
title: 'Embedding 模型',
|
||
hint: '知识库语义检索使用,与 Chat 模型共享 Provider 的 API Key',
|
||
loading: '加载中...',
|
||
empty: '暂无 Embedding 模型,使用下方表单添加。',
|
||
defaultBadge: '默认',
|
||
builtinBadge: '内置',
|
||
test: '测试连通性',
|
||
testing: '测试中...',
|
||
testPassed: '测试通过 · 维度 {dim}',
|
||
setDefault: '设为系统默认',
|
||
delete: '删除',
|
||
deleteConfirm: '确认删除 Embedding 模型“{name}”?',
|
||
deleteFailed: '删除失败',
|
||
deleted: 'Embedding 模型已删除',
|
||
addTitle: '新增 Embedding 模型',
|
||
addHint: '选择一个已配置的提供商,填入它支持的 Embedding 模型名称(如 text-embedding-3-small、bge-m3)。',
|
||
provider: '提供商',
|
||
selectProvider: '请选择提供商',
|
||
modelName: '模型名称',
|
||
modelNamePlaceholder: '例如 text-embedding-3-small',
|
||
displayName: '显示名称',
|
||
displayNamePlaceholder: '留空则使用模型名称',
|
||
add: '添加',
|
||
adding: '添加中...',
|
||
added: 'Embedding 模型已添加',
|
||
addFailed: '添加失败',
|
||
nameRequired: '请选择提供商并填写模型名称',
|
||
noProviders: '请先在上方启用并配置至少一个提供商。',
|
||
},
|
||
// 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 等生成参数。',
|
||
requireApiKeyHint: '公司内部或本地 OpenAI 兼容服务如果不需要鉴权,可以关闭此项;测试连接时将不会发送 Authorization 头。',
|
||
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 连接',
|
||
// Device Authorization Grant (used for remote deployments where the browser
|
||
// cannot reach localhost:1455 for the PKCE callback).
|
||
oauthDeviceTitle: '使用设备授权登录 ChatGPT',
|
||
oauthDeviceStep1: '1. 在任意浏览器或手机打开下面的链接:',
|
||
oauthDeviceStep2: '2. 输入下方验证码完成授权:',
|
||
oauthDeviceStep3: '完成后此页面将自动连接({seconds} 秒内有效)',
|
||
oauthDeviceExpired: '设备授权码已过期,请重试',
|
||
copy: '复制',
|
||
copied: '已复制',
|
||
copyFailed: '浏览器拒绝复制,请手动选取',
|
||
// 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 的本地凭据。',
|
||
providerIdPlaceholder: '例如:my-local-gemma',
|
||
providerIdHint: 'ID 仅作内部 key 使用,建议小写英文/数字,可含 . _ -,不要含斜杠或空格(创建后不可修改)。',
|
||
providerIdInvalid: 'Provider ID 只能包含字母、数字、点、下划线、连字符(不允许斜杠或空格),首字符必须是字母或数字,长度 1-64。',
|
||
fields: {
|
||
providerId: '提供商 ID',
|
||
providerName: '提供商名称',
|
||
defaultBaseUrl: '默认 Base URL',
|
||
apiKeyPrefix: 'API Key 前缀',
|
||
requireApiKey: '需要 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://<resource>.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,需要在火山方舟平台创建接入点',
|
||
xiaomiMimo: '小米 MiMo 默认使用 https://api.xiaomimimo.com/v1,OpenAI 兼容协议,API Key 在 platform.xiaomimimo.com 申请',
|
||
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: '提供商回退',
|
||
// Issue #76: OpenAI-compat STT 端点路由
|
||
sttOpenAiCompatProviderId: 'OpenAI 兼容凭证',
|
||
sttOpenAiCompatModel: 'OpenAI 兼容模型名',
|
||
// 音乐生成
|
||
musicEnabled: '启用音乐生成',
|
||
musicProvider: '首选音乐提供商',
|
||
musicFallbackEnabled: '提供商回退',
|
||
// 3D 模型生成
|
||
model3dEnabled: '启用 3D 模型生成',
|
||
model3dProvider: '首选 3D 提供商',
|
||
model3dFallbackEnabled: '提供商回退',
|
||
// 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 流式),中文识别效果优秀,亚秒级延迟。',
|
||
// Issue #76
|
||
sttOpenAiCompatProviderId: '从模型管理选一个 OpenAI 兼容 provider 行作为凭证(baseUrl + API Key)来源。除官方 OpenAI 外,FunASR 私有部署 / 硅基流动 / Groq / Together / 火山 / 七牛等都可以用——在模型管理新增自定义 provider 后即可在此选用。',
|
||
sttOpenAiCompatModel: '发送给端点的模型名(multipart "model" 字段)。OpenAI 默认 whisper-1;FunASR 通常是 paraformer-large;其他厂商按其文档填写。',
|
||
sttOpenAiCompatNote: '提示:要接私有 ASR 服务,先去模型管理 → 新增自定义 provider → 协议选 "OpenAI 兼容" → 填 Base URL + 可选 API Key,然后回到这里选它。',
|
||
// 音乐生成
|
||
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+ 模型,支持歌词和纯音乐。',
|
||
// 3D 模型生成
|
||
model3dEnabled: '开启后 Agent 可通过 model3d_generate 工具生成 3D 模型 (.glb)。需先在「模型与凭据」配置 hunyuan-3d 的 SecretId:SecretKey。',
|
||
model3dProvider: '选择首选 3D 提供商,auto 模式按优先级自动选用。',
|
||
model3dFallbackEnabled: '首选提供商失败时自动尝试其他已配置的提供商。',
|
||
hunyuan3dInfo: '腾讯混元 3D(ai3d.tencentcloudapi.com)。HY-3D-3.1 / HY-3D-3.0 走 Pro 接口,HY-3D-Express 走 Rapid 极速接口。在「模型与凭据」中以 SecretId:SecretKey 格式保存。',
|
||
// 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: '复用模型管理中的 Gemini API Key。Nano Banana Pro(Gemini 3 Pro Image)原生图片生成,支持文生图与图片编辑。',
|
||
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 凭证',
|
||
proxyTitle: '网络代理',
|
||
proxyDesc: '为所有出站请求(LLM API、网页搜索、频道桥接等)配置全局 HTTP / SOCKS 代理。适用于无法直连海外 API、或要求统一出口的网络环境。',
|
||
proxy: {
|
||
enableLabel: '启用代理',
|
||
enableHint: '全局开关。开启后,下方各类出站连接统一走代理。',
|
||
urlLabel: '代理地址',
|
||
urlHint: '支持 HTTP、HTTPS 和 SOCKS5 协议(如 <code>http://127.0.0.1:7890</code>、<code>socks5://127.0.0.1:1080</code>)。可选用户名 / 密码:<code>http://user:pass@host:port</code>。',
|
||
bypassLabel: '绕过列表',
|
||
bypassHint: '这些主机不走代理,用 | 分隔,支持 * 通配(如 localhost|127.*|*.local)。留空使用默认值,自动放行本机与内网地址。',
|
||
socksWarn: '注意:SOCKS 代理仅对搜索 / 媒体等基于 HttpURLConnection 的出站生效;LLM 与流式聊天走 java.net.http,不支持 SOCKS,会直连。请为 LLM 使用代理工具的 HTTP / 混合端口。',
|
||
coverageTitle: '启用后将统一纳入代理的出站:',
|
||
coverage: {
|
||
llm: 'LLM API',
|
||
search: '网页搜索',
|
||
media: '图片 / 视频 / 音乐',
|
||
channels: 'IM 频道桥接',
|
||
mcp: 'MCP 远程连接',
|
||
browser: '浏览器工具',
|
||
},
|
||
test: '测试连接',
|
||
testing: '测试中…',
|
||
testOk: '代理端口可达 · {ms} ms',
|
||
testFail: '连接失败',
|
||
saveFail: '保存失败',
|
||
},
|
||
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: '与视频共用' },
|
||
model3dTitle: '3D 模型生成',
|
||
model3dDesc: '配置 AI 3D 模型生成,支持腾讯混元 3D(HY-3D-3.1 / HY-3D-3.0 / HY-3D-Express)',
|
||
model3dProviderOptions: { auto: '自动选择', hunyuan: '腾讯混元 3D' },
|
||
model3dProviderTags: { requiresKey: '需配置 SecretId:SecretKey' },
|
||
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: '加载文件内容失败',
|
||
exportSnapshot: '导出快照',
|
||
exportSnapshotTitle: '导出记忆快照',
|
||
exportSnapshotDesc: '把当前智能体的 AGENTS / MEMORY / PROFILE / SOUL / KNOWLEDGE.md 以及 memory/ 下的每日日记打包成 ZIP,按当前时间命名下载。enabled / sortOrder 不会导出。',
|
||
exportSuccess: '快照已导出',
|
||
exportFailed: '导出失败',
|
||
importSnapshot: '导入快照',
|
||
importSnapshotTitle: '导入记忆快照',
|
||
importSelectPrompt: '请选择 ZIP 格式的记忆快照',
|
||
importPreviewing: '正在解析快照...',
|
||
importPreviewFailed: '解析快照失败',
|
||
importApplying: '正在应用...',
|
||
importApplied: '已应用 {applied} 个,跳过 {skipped} 个',
|
||
importFailed: '导入失败',
|
||
importPreviewWillCreate: '将创建',
|
||
importPreviewWillUpdate: '将覆盖',
|
||
importPreviewWillSkip: '跳过',
|
||
importPreviewEmpty: '没有可导入的文件',
|
||
importPreviewCreateNone: '无',
|
||
importPreviewUpdateMeta: '{old} 字节 → {new} 字节',
|
||
importPreviewSkipReason: '原因:{reason}',
|
||
importConfirmHint: '确认导入会覆盖现有同名文件。',
|
||
importApply: '确认导入',
|
||
},
|
||
agents: {
|
||
kicker: '员工工作室',
|
||
title: '员工',
|
||
desc: '招募、培训和管理你的员工',
|
||
newAgent: '新员工',
|
||
views: {
|
||
roster: '花名册',
|
||
live: '现场',
|
||
},
|
||
templates: {
|
||
title: '选择岗位',
|
||
desc: '从一份岗位说明书快速招聘,或从空白开始。',
|
||
skip: '从空白开始',
|
||
applied: '员工已上岗',
|
||
},
|
||
search: '搜索员工...',
|
||
tabs: {
|
||
all: '全部',
|
||
react: 'ReAct',
|
||
planExecute: 'Plan-Execute',
|
||
enabled: '已启用',
|
||
disabled: '已停用',
|
||
basic: '基本信息',
|
||
skills: '技能',
|
||
tools: '工具',
|
||
providers: '偏好提供商',
|
||
wiki: '知识库',
|
||
context: '上下文',
|
||
},
|
||
columns: {
|
||
name: '名称',
|
||
description: '描述',
|
||
agentType: '类型',
|
||
modelName: '模型',
|
||
tags: '标签',
|
||
enabled: '状态',
|
||
updateTime: '更新时间',
|
||
actions: '操作',
|
||
},
|
||
status: {
|
||
enabled: '已启用',
|
||
disabled: '已停用',
|
||
},
|
||
emptyTitle: '还没有员工',
|
||
emptyDesc: '招聘第一位员工开始',
|
||
modal: {
|
||
newTitle: '新员工',
|
||
editTitle: '编辑员工',
|
||
},
|
||
fields: {
|
||
name: '名称',
|
||
icon: '图标',
|
||
type: '类型',
|
||
description: '描述',
|
||
systemPrompt: '系统提示词',
|
||
role: '岗位(Role)',
|
||
roleHint: '一句话的职业身份。例:数据分析师、客服助理。',
|
||
goal: '目标(Goal)',
|
||
goalHint: '这个员工存在的理由——他帮你达成什么。',
|
||
taglinePreview: '卡片预览:',
|
||
backstory: '背景(Backstory)',
|
||
backstoryHint: '用户看不见,但每一次对话都能感觉到。写他的经验、信念、做事原则。',
|
||
advanced: '高级',
|
||
extraInstructions: '补充指令',
|
||
extraInstructionsHint: '可选。用于细化输出格式、流程清单或边界规则。',
|
||
maxIterations: '最大迭代次数',
|
||
defaultThinkingLevel: '默认思考深度',
|
||
workspaceBasePath: '工作目录',
|
||
workspaceBasePathHint: '可选。为该员工指定独立的工作目录:相对路径会基于工作区根目录解析,也可填写绝对路径。留空则继承工作区默认目录。',
|
||
modelName: '模型',
|
||
modelGlobalDefault: '使用全局默认模型',
|
||
modelHint: '为该员工单独指定模型,留空则跟随「设置 → 模型」中的全局默认。',
|
||
tags: '标签',
|
||
tagsHint: '输入后按回车、空格或逗号添加;点芯片上的 × 删除。',
|
||
tagUndo: '撤销',
|
||
enabled: '启用',
|
||
},
|
||
guide: {
|
||
summary: '行为指南(AGENTS.md)',
|
||
open: '管理行为指南',
|
||
desc: '这里是该员工的行为手册(AGENTS.md):规定何时写记忆、各文件放什么、可用的记忆工具。上方的岗位/目标/背景是员工的出厂身份;PROFILE/MEMORY 等可演化的记忆在「记忆」菜单管理。',
|
||
empty: '该员工还没有行为指南(AGENTS.md)。',
|
||
create: '创建行为指南',
|
||
saved: '已保存',
|
||
addSection: '新增小节',
|
||
addSectionPlaceholder: '小节标题',
|
||
scaffold: '## 何时写记忆\n\n(说明这个员工在什么情况下应当记录到 MEMORY.md / PROFILE.md。)\n\n## 文件职责\n\n(说明 SOUL.md / PROFILE.md / MEMORY.md 各自该放什么内容。)\n',
|
||
},
|
||
thinkingLevels: {
|
||
auto: '跟随模型',
|
||
off: '关闭',
|
||
low: '低',
|
||
medium: '标准',
|
||
high: '深度',
|
||
max: '极限',
|
||
},
|
||
types: {
|
||
react: 'ReAct(工具调用)',
|
||
planExecute: 'Plan-and-Execute',
|
||
},
|
||
actions: {
|
||
chat: '对话',
|
||
edit: '编辑',
|
||
delete: '删除',
|
||
create: '创建',
|
||
update: '保存',
|
||
},
|
||
placeholders: {
|
||
name: '员工名字',
|
||
icon: 'Emoji 或 URL',
|
||
description: '简短描述',
|
||
systemPrompt: '你是一个有帮助的 AI 助手...',
|
||
role: '例:数据分析师',
|
||
goal: '例:把数据变成可执行洞察',
|
||
backstory: '例:在数据里待了十年,相信先问对问题再写 SQL...',
|
||
extraInstructions: '可选:补充输出格式、流程清单或边界规则...',
|
||
tags: '回车、空格或逗号添加',
|
||
workspaceBasePath: '例如:projects/code-review',
|
||
},
|
||
messages: {
|
||
noDescription: '暂无描述',
|
||
noTagline: '还没填岗位与目标',
|
||
deleteConfirm: '确认让该员工离职吗?删除后不可恢复。',
|
||
loadFailed: '加载员工列表失败',
|
||
saveFailed: '保存员工失败',
|
||
saveSuccess: '员工已保存',
|
||
deleteFailed: '删除员工失败',
|
||
tagRemoved: '已移除标签「{tag}」',
|
||
deleteSuccess: '员工已离职',
|
||
toggleFailed: '切换状态失败',
|
||
toggleSuccess: '状态已更新',
|
||
},
|
||
tagFilter: {
|
||
label: '标签',
|
||
clear: '清除',
|
||
search: '搜索标签',
|
||
noMatch: '无匹配标签',
|
||
},
|
||
binding: {
|
||
skillsKicker: '受过培训的工作流程',
|
||
skillsTagline: '技能 = 一段流程,一份工作手册。LLM 按手册执行一系列连贯动作。',
|
||
skillsHint: '选择此智能体可使用的技能。留空则使用所有已启用的技能。',
|
||
disableAllSkills: '此智能体不使用任何技能',
|
||
disableAllSkillsHint: '开启后保存会清空该智能体的技能绑定,并标记为「显式无技能」:LLM 不再加载任何 SKILL.md 目录,技能扩展的工具也不会进入上下文。系统级内核工具(记忆、委派等)不受影响。关闭后,未勾选任何技能仍按「继承全局默认」处理。',
|
||
disableAllSkillsBadge: '已禁用',
|
||
toolsKicker: '会用的原子工具',
|
||
toolsTagline: '工具 = 一次调用,做一件事。由 LLM 自主决定何时调用。',
|
||
toolsHint: '选择此智能体可使用的工具。留空则使用所有已启用的工具。',
|
||
disableAllTools: '此智能体不使用任何用户可选工具',
|
||
disableAllToolsHint: '开启后保存会清空该智能体的工具绑定,并标记为「显式无工具」:用户可选工具与已启用的 MCP 工具都不会进入 allowlist。系统级内核工具(结构化记忆、工作区记忆文件、委派等)仍保留以保证基本运行。关闭后,未勾选任何工具仍按「继承全局默认」处理。',
|
||
disableAllToolsBadge: '已禁用',
|
||
searchSkills: '搜索技能名称、描述或版本',
|
||
searchTools: '搜索工具名称、描述、来源或分组',
|
||
advancedToolsTitle: '高级:手选原子工具',
|
||
advancedToolsHint: 'Skill 绑定已自动展开 allowed-tools。此处用于直选未打包成 Skill 的内置微工具(如 datetime、delegate_agent),也可勾选具体 MCP 工具来限定该 Agent 的 MCP 使用范围。',
|
||
toolUnionHint: '直选工具会与已绑定技能提供的工具合并生效。若在此勾选了具体的 MCP 工具,则该 Agent 仅能调用所勾选的 MCP 工具;若一个 MCP 工具都未勾选,则系统层已启用的 MCP 工具默认全部可用。需要在未勾选场景下禁用某个 MCP 工具,请到「安全 → 工具防护」配置黑名单。',
|
||
mcpAutoIncludedBadge: '默认可用',
|
||
mcpAutoIncludedTooltip: '当前未勾选任何 MCP 工具,系统层已启用的 MCP 工具默认全部对该 Agent 可用。勾选具体 MCP 工具后将切换为「仅勾选项可用」。如需在此状态下禁用某个 MCP 工具,请在「安全 → 工具防护」配置。',
|
||
mcpScopedBadge: '已限定范围',
|
||
mcpScopedTooltip: '已勾选具体 MCP 工具,该 Agent 仅能调用所勾选的 MCP 工具,未勾选的 MCP 工具不可用。',
|
||
toolStaleBadge: '离线缓存',
|
||
toolStaleTooltip: '该 MCP 服务当前未连接,工具列表来自上次连接时的快照;连接恢复前 LLM 不会调用这个工具。',
|
||
toolUnavailableBadge: '不可用',
|
||
toolUnavailableTooltip: '此工具的命名与同服务下的另一个工具冲突,无法绑定({reason})。请在上游 MCP 服务中重命名后重试。',
|
||
toolOrphanGroup: '已绑定但当前不可用',
|
||
toolOrphanDescription: '此工具在以前绑定过,但已不在当前可用工具列表中(如所属 MCP 服务被删除或工具被上游下线)。取消勾选并保存可清理掉这条遗留绑定。',
|
||
providersHint: '此智能体优先使用的提供商顺序(数字越小越先尝试)。留空则按全局可用池顺序回退。提供商进入冷却或被移出池时仍会被自动跳过。',
|
||
providersAddHint: '点击下方提供商加入偏好列表:',
|
||
noSkills: '暂无可用技能',
|
||
noTools: '暂无可用工具',
|
||
noMatchingSkills: '没有匹配的技能',
|
||
noMatchingTools: '没有匹配的工具',
|
||
noProviderPreferences: '尚未配置偏好顺序,将按全局回退链顺序使用。',
|
||
wikiKicker: '知识库访问范围',
|
||
wikiTagline: '限定此智能体可访问的知识库,防止它读取与业务无关的内容。',
|
||
wikiHint: '勾选此智能体允许访问的知识库;可将其中一个设为默认(未指定 kbId/kbName 时优先使用)。',
|
||
wikiScopeAll: '未勾选任何知识库:此智能体可访问当前工作区内的全部知识库。',
|
||
wikiScopeLimited: '此智能体仅能访问已勾选的 {count} 个知识库。',
|
||
wikiSetPrimary: '设为默认',
|
||
wikiPrimary: '默认',
|
||
noKBs: '暂无可用知识库',
|
||
noKB: '未指定主库',
|
||
wikiPages: '{count} 页',
|
||
wikiLoadFailed: '加载知识库列表失败',
|
||
contextHint: '管理此智能体的上下文文件(如 AGENT.md),定义智能体的行为、知识和指令。',
|
||
goToContext: '前往编辑上下文',
|
||
},
|
||
},
|
||
security: {
|
||
title: '安全管理',
|
||
kicker: '治理中心',
|
||
layoutDesc: '边界、审批、审计和工作区治理必须在这里说同一种语言,否则系统不值得被信任。',
|
||
sections: {
|
||
toolGuard: '工具防护',
|
||
fileGuard: '文件防护',
|
||
auditLogs: '审计日志',
|
||
members: '成员管理',
|
||
workspaces: '工作区',
|
||
activity: '操作日志',
|
||
},
|
||
activity: {
|
||
title: '活动',
|
||
desc: '谁做了什么,一句话讲清楚。点开任意一行看完整故事。',
|
||
allActions: '全部操作',
|
||
allResources: '全部资源',
|
||
allSources: '全部',
|
||
sourceAudit: '审计',
|
||
sourceApproval: '审批',
|
||
detailTitle: '事件详情',
|
||
detailDetails: '详情',
|
||
loading: '加载中…',
|
||
noEvents: '暂无操作记录',
|
||
emptyHint: '创建智能体、绑定技能、审批工具调用都会出现在这里。',
|
||
moreFilters: '更多筛选',
|
||
changes: '改动',
|
||
environment: '环境',
|
||
absoluteTime: '绝对时间',
|
||
noValue: '(空)',
|
||
rawPayload: '原始数据',
|
||
today: '今天',
|
||
yesterday: '昨天',
|
||
justNow: '刚刚',
|
||
minutesAgo: '{n} 分钟前',
|
||
hoursAgo: '{n} 小时前',
|
||
daysAgo: '{n} 天前',
|
||
verbs: {
|
||
create: '创建了',
|
||
update: '更新了',
|
||
delete: '删除了',
|
||
enable: '启用了',
|
||
disable: '停用了',
|
||
login: '登录了',
|
||
logout: '退出了',
|
||
approvalGranted: '批准了',
|
||
approvalDenied: '拒绝了',
|
||
approvalPending: '请求了',
|
||
},
|
||
resources: {
|
||
agent: '智能体',
|
||
channel: '频道',
|
||
skill: '技能',
|
||
wiki: 'Wiki 页',
|
||
member: '成员',
|
||
workspace: '工作区',
|
||
toolApproval: '工具调用',
|
||
},
|
||
columns: {
|
||
time: '时间',
|
||
source: '来源',
|
||
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: '优先级',
|
||
},
|
||
messages: {
|
||
ruleIdRequired: '规则 ID 不能为空',
|
||
nameRequired: '名称不能为空',
|
||
patternRequired: '正则模式不能为空',
|
||
ruleIdDuplicate: '规则 ID 已存在',
|
||
saveFailed: '保存规则失败',
|
||
},
|
||
exportBtn: '导出 JSON',
|
||
importBtn: '导入 JSON',
|
||
exportFileName: 'mateclaw-guard-rules-{date}.json',
|
||
importPromptHint: '上传通过"导出"产生的 JSON 文件;内置规则只会同步策略字段。',
|
||
importSummary: '导入完成:新增 {inserted},更新内置 {updatedBuiltin},更新自定义 {updatedCustom},跳过 {skipped}',
|
||
importFailed: '导入失败:{msg}',
|
||
builtinLockedHint: '内置规则的名称、模式与分类由系统管理,此处仅可调整严重度、决策、优先级、白名单与启用状态。',
|
||
},
|
||
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 使用数据',
|
||
},
|
||
acp: {
|
||
kicker: '外部 Agent',
|
||
title: 'ACP 端点',
|
||
desc: '通过 stdio 委派给外部编码 Agent(codex / claude-code / opencode / qwen-code)。安装对应 CLI 后开启该入口。',
|
||
addEndpoint: '新增端点',
|
||
builtin: '内置',
|
||
test: '测试',
|
||
testing: '测试中…',
|
||
statusUnknown: '未测试',
|
||
empty: '暂无 ACP 端点。',
|
||
loadFailed: '加载 ACP 端点列表失败',
|
||
saveFailed: '保存端点失败',
|
||
deleteTitle: '确认删除',
|
||
deleteConfirm: '确认删除 ACP 端点 "{name}"?内置端点不可删除。',
|
||
deleteFailed: '删除端点失败',
|
||
toggleFailed: '切换端点状态失败',
|
||
invalidJson: 'JSON 格式错误',
|
||
columns: {
|
||
name: '端点',
|
||
command: '命令',
|
||
status: '最近一次测试',
|
||
enabled: '启用',
|
||
actions: '操作',
|
||
},
|
||
fields: {
|
||
name: '标识 (slug)',
|
||
displayName: '显示名',
|
||
description: '描述',
|
||
command: '命令',
|
||
args: '参数 (JSON 数组)',
|
||
env: '环境变量',
|
||
toolParseMode: 'Tool 解析模式',
|
||
enabled: '启用',
|
||
},
|
||
env: {
|
||
formMode: '编辑 JSON',
|
||
jsonMode: '回到表单',
|
||
suggested: '推荐',
|
||
addRow: '添加变量',
|
||
keyPlaceholder: 'KEY_NAME',
|
||
valuePlaceholder: '值(如 sk-…)',
|
||
show: '显示',
|
||
hide: '隐藏',
|
||
remove: '移除',
|
||
hints: {
|
||
anthropic: 'Anthropic API key(sk-ant-…)。申请: https://console.anthropic.com/settings/keys',
|
||
openai: 'OpenAI API key(sk-…)。申请: https://platform.openai.com/api-keys',
|
||
dashscope: '阿里云 DashScope key — 跟 MateClaw .env 里的 DASHSCOPE_API_KEY 同一个值',
|
||
google: 'Google AI Studio API key。申请: https://aistudio.google.com/apikey',
|
||
claudeOauth: '注意: claude-code 的 OAuth 登录(~/.claude/ 里那个)在这里不能用——更糟的是 Claude Agent SDK 会"优先读 OAuth、再读 API key",导致你下面填的 key 被静默忽略。如果你这台机器上跑过 `claude login`,先清钥匙串: (macOS) `claude logout` 或 `security delete-generic-password -s "Claude Code-credentials"`;(Linux/Windows) 删 ~/.claude/credentials.json。然后再回来填真正的 API key(sk-ant-…)。或者改用 qwen-code / opencode 复用各自 CLI 的本地登录态。',
|
||
},
|
||
},
|
||
modal: {
|
||
newTitle: '新增 ACP 端点',
|
||
editTitle: '编辑 ACP 端点',
|
||
},
|
||
},
|
||
mcp: {
|
||
kicker: '能力桥接',
|
||
title: 'MCP 连接',
|
||
subtitle: '把 Agent 连到外部数据源和工具',
|
||
desc: '管理 MCP (Model Context Protocol) 服务器连接',
|
||
addServer: '添加连接',
|
||
addCustom: '自定义 MCP',
|
||
refreshAll: '全量刷新',
|
||
searchPlaceholder: '搜索 MCP 服务…',
|
||
emptyMatch: '没有匹配的 MCP 服务',
|
||
catalogBadge: '来自 Catalog · {name}',
|
||
credentialHint: '请替换占位符 {keys} 再保存',
|
||
credentialHintRequired: '必填凭据:{keys}(请替换占位符再保存)',
|
||
credentialHintOptional: '可选凭据:{keys}(如需调用相关 API 请填写)',
|
||
credentialHintBoth: '必填:{required} · 可选:{optional}',
|
||
sections: {
|
||
added: '已添加',
|
||
recommended: '推荐',
|
||
countItems: '{n} 个',
|
||
},
|
||
card: {
|
||
docs: '查看文档',
|
||
add: '安装',
|
||
toolCount: '{n} 个工具',
|
||
},
|
||
toggle: {
|
||
enable: '启用',
|
||
disable: '停用',
|
||
},
|
||
tier: {
|
||
core: '核心',
|
||
extension: '扩展',
|
||
coreHint: '当前为核心:该 server 的工具直接进入模型可调用列表。点击改为扩展。',
|
||
extensionHint: '当前为扩展:该 server 的工具进入工具盒,模型调用 enable_tool 后激活。点击改为核心。',
|
||
},
|
||
kv: {
|
||
envKey: 'KEY',
|
||
envValue: '值',
|
||
headerKey: 'Header',
|
||
headerValue: '值',
|
||
addEnv: '添加环境变量',
|
||
addHeader: '添加 Header',
|
||
required: '必填',
|
||
optional: '可选',
|
||
},
|
||
time: {
|
||
justNow: '刚刚',
|
||
minutesAgo: '{n} 分钟前',
|
||
hoursAgo: '{n} 小时前',
|
||
},
|
||
columns: {
|
||
name: '名称',
|
||
transport: '协议',
|
||
enabled: '状态',
|
||
lastStatus: '连接状态',
|
||
lastConnectedTime: '最后连接',
|
||
toolCount: '工具数',
|
||
description: '描述',
|
||
actions: '操作',
|
||
},
|
||
status: {
|
||
connected: '已连接',
|
||
disconnected: '未连接',
|
||
error: '连接失败',
|
||
connecting: '连接中…',
|
||
},
|
||
transport: {
|
||
stdio: 'Stdio',
|
||
sse: 'SSE',
|
||
streamable_http: 'HTTP',
|
||
},
|
||
modal: {
|
||
newTitle: '添加 MCP 连接',
|
||
editTitle: '编辑 MCP 连接',
|
||
},
|
||
fields: {
|
||
name: '名称',
|
||
description: '描述',
|
||
transport: '传输协议',
|
||
url: 'URL',
|
||
headers: 'HTTP Headers',
|
||
command: '命令',
|
||
args: '参数 (JSON 数组)',
|
||
env: '环境变量',
|
||
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: '全量刷新完成',
|
||
connecting: '正在后台连接,状态会自动更新',
|
||
saveFailed: '保存失败',
|
||
tierFailed: '调整披露分级失败',
|
||
empty: '暂无 MCP 连接',
|
||
emptyDesc: '添加一个 MCP 连接来扩展 Agent 的能力',
|
||
},
|
||
},
|
||
sessions: {
|
||
title: '会话管理',
|
||
desc: '查看和管理所有会话',
|
||
back: '返回',
|
||
search: '搜索会话...',
|
||
columns: {
|
||
session: '会话',
|
||
source: '来源',
|
||
agent: 'Agent',
|
||
model: '模型',
|
||
messages: '消息',
|
||
status: '状态',
|
||
lastActive: '最后活跃',
|
||
actions: '操作',
|
||
},
|
||
status: {
|
||
active: '活跃',
|
||
closed: '已关闭',
|
||
},
|
||
empty: '暂无会话',
|
||
emptyHeading: '还没有任何会话',
|
||
emptyDesc: '去对话页开始一次交流,所有的会话都会在这里汇总',
|
||
emptyCta: '开始对话',
|
||
loadFailed: '加载会话列表失败',
|
||
deleteConfirm: '确定要删除这个会话吗?',
|
||
deleteTitle: '确认删除',
|
||
deleteFailed: '删除会话失败',
|
||
switchModel: '切换该会话使用的模型',
|
||
modelSwitched: '已切换会话模型',
|
||
modelSwitchFailed: '切换模型失败',
|
||
model: {
|
||
default: '默认',
|
||
},
|
||
time: {
|
||
justNow: '刚刚',
|
||
minutesAgo: '{n} 分钟前',
|
||
hoursAgo: '{n} 小时前',
|
||
},
|
||
},
|
||
tools: {
|
||
kicker: '开发者目录',
|
||
title: '工具目录',
|
||
desc: '已安装 Skill 暴露的原子动作。终端绑定请使用 Skills 页。',
|
||
registerButton: '注册工具',
|
||
columns: {
|
||
tool: '工具',
|
||
beanName: 'Bean 名称',
|
||
type: '类型',
|
||
status: '状态',
|
||
actions: '操作',
|
||
},
|
||
empty: '暂无已注册工具',
|
||
sections: {
|
||
core: '核心工具',
|
||
extension: '扩展工具',
|
||
countItems: '{n} 项',
|
||
},
|
||
tier: {
|
||
toCore: '→ 核心',
|
||
toExtension: '→ 扩展',
|
||
toCoreHint: '改为核心:直接进入模型可调用列表',
|
||
toExtensionHint: '改为扩展:进入工具盒目录,调用 enable_tool 后激活',
|
||
locked: '由来源决定',
|
||
lockedHint: 'MCP / ACP / Skill 工具的分级由所属 server / endpoint / skill 决定,请到对应页面修改',
|
||
core: { desc: '直接进入模型可调用列表' },
|
||
extension: { desc: '进入工具盒目录,模型调用 enable_tool 后激活' },
|
||
},
|
||
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: '切换工具状态失败',
|
||
tierFailed: '调整工具分级失败',
|
||
},
|
||
},
|
||
skillTemplates: {
|
||
kicker: '创作向导',
|
||
title: 'Skill 模板库',
|
||
desc: '选一个起步模板,填几个字段,模板向导会在你的工作区里生成一个标准 manifest skill。',
|
||
backToSkills: '← 返回 Skills',
|
||
backToGallery: '返回模板列表',
|
||
fields: '个字段',
|
||
useTemplate: '使用模板',
|
||
empty: '暂无可用模板。',
|
||
step1: '填写参数',
|
||
step2: '预览',
|
||
step3: '完成',
|
||
next: '下一步',
|
||
back: '上一步',
|
||
selectKb: '— 选择知识库 —',
|
||
previewHint: '即将生成的 SKILL.md 预览。确认无误后点 Install Skill 创建。',
|
||
installSkill: '安装 Skill',
|
||
installing: '安装中...',
|
||
installFailed: '安装失败',
|
||
installed: 'Skill 已安装',
|
||
installedDesc: '{name} 已添加到你的工作区。',
|
||
installAnother: '再装一个',
|
||
viewInSkills: '到 Skills 查看',
|
||
},
|
||
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: '连接失败,请检查配置',
|
||
},
|
||
},
|
||
notifications: {
|
||
pendingApprovals: '{n} 个工具调用等待审批',
|
||
},
|
||
live: {
|
||
kicker: '现场',
|
||
title: '看看你的数字员工在做什么',
|
||
attention: '有几个需要你看看',
|
||
unknownAgent: '员工',
|
||
aTool: '某个工具',
|
||
orphan: '没人在听',
|
||
orphanHint: '聊天窗口已关闭,但这个员工仍在工作。',
|
||
subagentsBadge: '{n} 个帮手',
|
||
headline: {
|
||
loading: '正在看看...',
|
||
allQuiet: '一片安静。当前没有员工在工作。',
|
||
working: '你的 {n} 个员工正在干活。',
|
||
someoneNeedsAttention: '有 {n} 个需要你看看。',
|
||
workingAlone: '{running} 个在干活 — 其中 {orphan} 个没人在听。',
|
||
},
|
||
status: {
|
||
running: '{n} 个在跑',
|
||
stuck: '{n} 个卡住',
|
||
orphan: '{n} 个无人看',
|
||
helpers: '{n} 个帮手',
|
||
},
|
||
filters: {
|
||
all: '全部',
|
||
working: '工作中',
|
||
attention: '需关注',
|
||
quiet: '无人看',
|
||
},
|
||
saying: {
|
||
thinking: '正在思考...',
|
||
replying: '正在写回复...',
|
||
planning: '正在规划下一步...',
|
||
summarizing: '正在收尾...',
|
||
usingToolBare: '正在使用',
|
||
usingSomething: '正在使用某个工具...',
|
||
awaitingApproval: '在等你审批。',
|
||
toolSilentBare: '卡在工具上,没有进展。',
|
||
idleSilent: '安静太久了。',
|
||
hardCap: '已经跑了太久。',
|
||
},
|
||
callout: {
|
||
toolSilent: '{tool} 已经 {time} 没有动静了,看起来是卡住了。',
|
||
idleSilent: '{time} 没有任何活动迹象。',
|
||
hardCap: '已经跑了 {time},明显超出正常范围。',
|
||
},
|
||
dotTitle: {
|
||
healthy: '工作正常',
|
||
stuck: '看起来卡住了',
|
||
orphan: '在没人看的情况下运行',
|
||
},
|
||
detail: {
|
||
who: '谁',
|
||
doing: '在做什么',
|
||
runningFor: '已运行',
|
||
lastHeard: '最后一次有动静',
|
||
ago: '前',
|
||
audience: '观众',
|
||
noOneListening: '当前没有人在看这个对话。',
|
||
peopleListening: '{n} 人在看',
|
||
helpers: '帮手',
|
||
session: '会话',
|
||
},
|
||
actions: {
|
||
live: '实时',
|
||
paused: '已暂停',
|
||
pauseRefresh: '暂停自动刷新',
|
||
resumeRefresh: '恢复自动刷新',
|
||
tidyUp: '清理一下',
|
||
stop: '停下',
|
||
stopHint: '让它在下个检查点停下来。',
|
||
endIt: '强制结束',
|
||
endHint: '立即强制停止。',
|
||
close: '关闭',
|
||
},
|
||
confirm: {
|
||
stopTitle: '让这位员工停下吗?',
|
||
stopBody: '让 {name} 收尾。它会先把当前的步骤做完。',
|
||
endTitle: '强制 {name} 立即停止?',
|
||
endBody: '这会立即终止该员工,正在进行的工作会丢失。用户会看到「已被管理员停止」。',
|
||
subTitle: '停下这个帮手?',
|
||
subBody: '停止 {name}。负责的员工会继续运行。',
|
||
sweepTitle: '清理卡住的员工?',
|
||
sweepBody: '有 {n} 个员工看起来卡住了,全部停掉吗?',
|
||
},
|
||
toast: {
|
||
stopped: '已要求停止。',
|
||
ended: '已停止。',
|
||
subStopped: '帮手已停止。',
|
||
swept: '已清理 {n} 个员工。',
|
||
},
|
||
empty: {
|
||
allQuiet: '一片安静。',
|
||
hint: '当前没有员工在工作。一旦有,这里就会亮起来。',
|
||
},
|
||
time: {
|
||
justNow: '刚刚',
|
||
seconds: '{n} 秒',
|
||
minutes: '{n} 分 {s} 秒',
|
||
hours: '{n} 时 {m} 分',
|
||
},
|
||
errors: {
|
||
loadFailed: '无法加载运行时状态。',
|
||
},
|
||
},
|
||
doctor: {
|
||
title: '系统诊断',
|
||
subtitle: '本地实例健康概览',
|
||
checking: '检查中...',
|
||
allGood: '所有系统正常',
|
||
hasWarnings: '{count} 个警告',
|
||
hasErrors: '{count} 个问题',
|
||
refresh: '重新检查',
|
||
lastChecked: '{time} 前检查',
|
||
diagnose: '诊断问题',
|
||
checksPassed: '{healthy}/{total} 项检查通过',
|
||
checksLoading: '正在采样系统指标',
|
||
},
|
||
wiki: {
|
||
kicker: '知识引擎',
|
||
desc: 'AI 驱动的结构化知识库,自动消化原始材料为 Wiki 页面',
|
||
createKB: '新建知识库',
|
||
knowledgeBases: '知识库',
|
||
noKB: '暂无知识库',
|
||
selectKB: '请选择一个知识库',
|
||
library: {
|
||
countLabel: '{count} 个知识库',
|
||
searchPlaceholder: '搜索知识库...',
|
||
empty: '还没有知识库',
|
||
emptyHint: '点击右上角"新建知识库"开始组织你的知识',
|
||
noMatch: '没有匹配的知识库',
|
||
open: '进入',
|
||
pages: '{count} 页',
|
||
raws: '{count} 材料',
|
||
noDescription: '暂无描述',
|
||
updatedAt: '更新于 {time}',
|
||
sortRecent: '最近更新',
|
||
sortName: '名称',
|
||
sortPages: '页面数',
|
||
backToLibrary: '返回库',
|
||
deleteKB: '删除知识库',
|
||
deleteKBConfirm: '确认删除知识库「{name}」?将一并清除 {raws} 个原始材料和 {pages} 个 Wiki 页面,此操作不可撤销。',
|
||
deleteKBSuccess: '已删除知识库「{name}」',
|
||
deleteKBFailed: '删除知识库失败',
|
||
manageKB: '管理知识库',
|
||
toManage: '管理',
|
||
toReading: '查看 Wiki',
|
||
},
|
||
manageBadge: '管理',
|
||
selectPage: '从左侧选择一个页面查看',
|
||
pageKicker: '知识页面',
|
||
confirmDelete: '确认删除页面「{title}」?此操作不可撤销。',
|
||
confirmDeleteRefs: '该页面被 {count} 个页面引用,删除后这些引用将被自动改写为纯文本。',
|
||
confirmBatchDelete: '确认删除 {count} 个页面?此操作不可撤销。',
|
||
batchSelect: '批量选择',
|
||
selectAll: '全选',
|
||
kbName: '名称',
|
||
kbNamePlaceholder: '输入知识库名称',
|
||
kbDescription: '描述',
|
||
kbDescPlaceholder: '简要描述知识库用途',
|
||
rawMaterials: '原始材料',
|
||
pages: 'Wiki 页面',
|
||
config: '处理配置',
|
||
transformations: {
|
||
tab: '加工器',
|
||
title: '加工器(Transformations)',
|
||
desc: '可复用的 prompt 模板。每个模板针对单个原始材料运行,生成的内容会落到此处可查。开启「默认运行」后,材料处理完成会自动触发。',
|
||
empty: '尚无加工器模板,新建一个开始。',
|
||
createBtn: '新建加工器',
|
||
editBtn: '编辑',
|
||
deleteBtn: '删除',
|
||
deleteConfirm: '确认删除该加工器?历史运行记录会保留。',
|
||
enabled: '启用',
|
||
disabled: '已停用',
|
||
applyDefault: '默认运行',
|
||
applyDefaultOn: '每次新材料完成后自动跑',
|
||
applyDefaultOff: '仅在手动 / Agent 调用时运行',
|
||
modelLabel: '模型',
|
||
modelDefault: '默认(KB / 系统默认)',
|
||
modelHelp: '默认走 KB 绑定模型或系统默认 chat 模型;选定后该模板始终使用指定模型',
|
||
outputTargetLabel: '输出去向',
|
||
outputTargetNone: '不保存(仅留在运行历史)',
|
||
outputTargetPage: '保存为 Wiki 页面(可被搜索 / Agent / 关系图引用)',
|
||
outputTargetPageBadge: '自动落页',
|
||
outputFormatLabel: '输出格式',
|
||
outputFormatMarkdown: 'Markdown(默认,适合人读)',
|
||
outputFormatJson: 'JSON(结构化,便于下游程序消费;失败会自动重试 1 次)',
|
||
outputFormatJsonBadge: 'JSON',
|
||
outputSchemaLabel: 'JSON Schema(可选)',
|
||
outputSchemaHelp: '写在这里的 JSON Schema 会注入到 prompt,并在解析后做必填字段校验。留空表示不校验。',
|
||
outputSchemaPlaceholder: '{\n "type": "object",\n "required": ["title", "items"],\n "properties": {\n "title": { "type": "string" },\n "items": { "type": "array" }\n }\n}',
|
||
outputSchemaBadge: 'Schema',
|
||
targetPageType: '目标分类',
|
||
targetPageTypeAuto: '(默认 / 自动)',
|
||
targetPageTypeHelp: '落页时使用的页面分类,来自当前知识库的分类配置;留空则使用配置中的兜底分类。',
|
||
saveAsPageBtn: '保存为页面',
|
||
saving: '保存中…',
|
||
savedAsPage: '已保存:',
|
||
saveAsPageDone: '已保存为 Wiki 页面',
|
||
saveAsPageFailed: '保存为页面失败',
|
||
openPage: '查看页面',
|
||
scope: '范围',
|
||
scopeKb: '仅限此知识库',
|
||
scopeWorkspace: '工作区全局',
|
||
name: '标识名',
|
||
namePlaceholder: '例如:risk-extract',
|
||
nameHelp: '只用于 Agent 调用,小写字母 / 数字 / 连字符',
|
||
title2: '显示名',
|
||
titlePlaceholder: '例如:合同风险点提取',
|
||
description: '描述',
|
||
descriptionPlaceholder: '一句话说明这个加工器是做什么的',
|
||
prompt: '提示词模板',
|
||
promptHelp: '可使用 {input_text} 和 {title} 占位符',
|
||
saveBtn: '保存',
|
||
cancelBtn: '取消',
|
||
compareBtn: '对比所选',
|
||
compareHint: '再选 1 条即可对比',
|
||
compareCheckTip: '勾选 2 条已完成运行可并排对比',
|
||
compareTitle: '运行结果对比',
|
||
aggregateBtn: '聚合所有运行',
|
||
aggregating: '聚合中…',
|
||
aggregateDone: '聚合页已生成',
|
||
aggregateFailed: '聚合失败',
|
||
aggregateNoRuns: '当前模板还没有任何完成的运行可供聚合',
|
||
runs: '运行历史',
|
||
rerunBtn: '重新运行',
|
||
rerunning: '重新运行中…',
|
||
cancelRunBtn: '取消',
|
||
cancelling: '取消中…',
|
||
cancelDone: '已取消',
|
||
cancelFailed: '取消失败',
|
||
runOn: '运行于',
|
||
runStatus: '状态',
|
||
runDuration: '耗时',
|
||
runOutput: '输出',
|
||
runError: '错误',
|
||
runApply: '运行',
|
||
running: '运行中…',
|
||
runFailed: '运行失败',
|
||
pickRaw: '选择材料',
|
||
pickRawHint: '从知识库的原始材料中选择一个作为输入',
|
||
noRuns: '尚无运行记录。',
|
||
},
|
||
hotCache: {
|
||
tab: '近况快照',
|
||
title: '近况快照(Hot Cache)',
|
||
desc: '该知识库最近发生了什么的滚动 markdown 摘要,会被自动注入到 Agent 的系统提示,让对话不必每次都重新检索。事件触发后台异步重建,5 分钟去抖。',
|
||
empty: '尚未生成快照——绑定的 Agent 完成一次对话后会自动构建。',
|
||
contentEmpty: '(快照内容为空)',
|
||
regenerate: '立即重建',
|
||
regenerating: '重建中…',
|
||
regenerateQueued: '已加入重建队列,几秒后刷新',
|
||
regenerateFailed: '重建调度失败',
|
||
reset: '清除快照',
|
||
resetConfirm: '确认清除当前快照?下次 Agent 对话会重新生成。',
|
||
resetDone: '已清除',
|
||
resetFailed: '清除失败',
|
||
lastUpdated: '上次更新',
|
||
updateReason: '触发原因',
|
||
rebuildCount: '累计重建次数',
|
||
lastDuration: '上次耗时',
|
||
lastError: '最近一次错误',
|
||
footer: '关闭 wiki.hot_cache.enabled 后注入路径短路;该面板的"立即重建"会绕过去抖,方便调试。',
|
||
},
|
||
adv: {
|
||
tab: '高级管理',
|
||
validate: '校验',
|
||
validOk: '校验通过',
|
||
profile: {
|
||
tab: '页面类型',
|
||
title: '页面类型 Profile',
|
||
desc: '定义本知识库的页面类型(pageType)、所属知识分层、路由/创建/合并阶段指令与内容模板。会注入到摄取流水线的各阶段提示词。',
|
||
builtin: '内置默认',
|
||
placeholder: '在此粘贴 pageType profile 的 JSON…',
|
||
reset: '重置为默认',
|
||
resetConfirm: '确认重置为内置默认 profile?当前自定义配置会被清除。',
|
||
formMode: '表单',
|
||
jsonMode: 'JSON',
|
||
fallbackType: '兜底类型',
|
||
allowAdditionalFields: '保留未声明字段',
|
||
versionLabel: '版本',
|
||
addType: '添加类型',
|
||
removeType: '删除类型',
|
||
removeTypeConfirm: '确认删除页面类型「{type}」?',
|
||
noTypes: '暂无页面类型',
|
||
selectType: '从左侧选择或新建一个页面类型',
|
||
typeKey: '类型 Key',
|
||
typeKeyHint: '小写、唯一,仅含字母数字 _ -',
|
||
copyFrom: '从已有类型复制',
|
||
copyFromNone: '不复制(空白)',
|
||
moveUp: '上移',
|
||
moveDown: '下移',
|
||
label: '显示名',
|
||
description: '描述',
|
||
layer: '知识分层',
|
||
layerFact: '事实(fact)',
|
||
layerExperience: '经验(experience)',
|
||
layerUnset: '未指定',
|
||
fields: '字段',
|
||
fieldName: '字段名',
|
||
fieldType: '类型',
|
||
fieldRequired: '必填',
|
||
enumValues: '可选值',
|
||
enumHint: '逗号分隔',
|
||
addField: '添加字段',
|
||
noFields: '暂无字段',
|
||
advanced: '高级(阶段提示词 / 模板)',
|
||
advancedIntro: '以下提示词会注入到摄取流水线对应阶段,追加在系统默认提示词之后;留空即用默认。三个阶段:route=判断内容是否归入该类型,create=首次新建该类型页面,merge=把新内容并入已有页面。',
|
||
stageRoute: 'Route 阶段指令',
|
||
routeHint: '路由判定:模型在决定一段原始内容是否属于、以及如何归入该类型页面时的额外指引。',
|
||
routeExample: '例:仅当内容描述某个具体人物的生平或职责时,才归入本类型;泛泛提及不算。',
|
||
stageCreate: 'Create 阶段指令',
|
||
createHint: '创建写作:首次为该类型生成页面时的结构与风格要求(要素、语气、章节)。',
|
||
createExample: '例:用第三人称客观陈述;开头给一句话定义;随后分「背景 / 关键属性 / 关联」三节。',
|
||
stageCreateTemplate: 'Create 模板 Key',
|
||
createTemplateHint: '创建时引用的模板标识,对应下方「模板 Key」;留空则不套用模板。',
|
||
createTemplateExample: '例:concept-tpl',
|
||
stageMerge: 'Merge 阶段指令',
|
||
mergeHint: '合并取舍:把新增内容并入已有页面时的规则(如何去重、冲突时保留哪个)。',
|
||
mergeExample: '例:保留信息更新的版本;冲突处标注来源与时间,不直接覆盖原文。',
|
||
templateKey: '模板 Key',
|
||
templateKeyHint: '模板标识,供 create 阶段通过上面的「Create 模板 Key」引用。',
|
||
templateMarkdown: '模板 Markdown',
|
||
templateMarkdownHint: '交给模型的正文骨架:写你想要的标题/章节结构,create 阶段会原样拼进提示词,由模型据此填写正文。它是结构示例,不做变量替换——括号里的中文是给模型的提示,不会被自动套用字段值。',
|
||
templateMarkdownExample: '## 概要\n(用一句话定义本条目)\n\n## 关键属性\n- \n\n## 关联\n- 相关条目用 [[wiki 链接]] 指向',
|
||
errKeyFormat: '类型 Key「{key}」非法:需为小写、非空,仅含字母数字 _ -',
|
||
errKeyDup: '类型 Key「{key}」重复',
|
||
errFieldDup: '类型「{type}」中字段名「{field}」重复',
|
||
warnFallbackMissing: '兜底类型「{type}」未在已定义类型中',
|
||
errJsonParse: 'JSON 解析失败,请修正后再切换到表单',
|
||
},
|
||
reclassify: {
|
||
desc: '按当前 profile 重新分类已有页面:仅更新页面分类(pageType),不改动正文。改了 profile(新增/删除类型)后用它把旧页面迁移到新分类。',
|
||
button: '重新分类已有页面',
|
||
confirmTitle: '重新分类已有页面',
|
||
confirmMsg: '将对本知识库每个非系统页面逐一调用大模型重新判定分类,可能耗时并产生费用。系统页面不受影响。确认继续?',
|
||
started: '已开始重新分类,完成后页面分类会更新。',
|
||
},
|
||
layers: {
|
||
tab: '分层 & 失效',
|
||
title: '知识分层与失效状态',
|
||
desc: 'fact(事实)层更新后会把依赖它的 experience(经验)页面标记为 stale,提示需要复核。',
|
||
fact: '事实层',
|
||
experience: '经验层',
|
||
other: '其它',
|
||
stale: '已失效',
|
||
empty: '该知识库暂无页面。',
|
||
page: '页面',
|
||
layer: '分层',
|
||
status: '状态',
|
||
staleTag: '待复核',
|
||
fresh: '正常',
|
||
},
|
||
perm: {
|
||
tab: '权限 & 审批',
|
||
title: '员工页面类型权限',
|
||
desc: '为指定员工配置在本知识库下按 pageType 的读/创建/更新/删除权限;写操作可设为需审批。无规则时默认放行,一旦存在规则则未覆盖的类型按失败安全(拒绝)处理。',
|
||
agent: '员工',
|
||
selectAgent: '选择一位员工…',
|
||
pageType: '页面类型',
|
||
policy: '写策略',
|
||
noRows: '该员工暂无权限规则(默认放行)。',
|
||
pageTypeHint: '页面类型,* 表示默认',
|
||
addRule: '新增规则',
|
||
deleteConfirm: '删除 "{type}" 的权限规则?',
|
||
},
|
||
watcher: {
|
||
tab: '变更监测',
|
||
title: '源目录变更监测',
|
||
desc: '配置本地扫描路径(支持多路径、Glob 通配符),监测器会按间隔扫描新增/变更文件并自动摄取。也可手动触发一次扫描。',
|
||
enabled: '监测开关',
|
||
active: '已激活',
|
||
interval: '扫描间隔',
|
||
sourceType: '源类型',
|
||
directory: '扫描路径',
|
||
dirHint: '每行一条路径或 Glob 模式,# 开头为注释。示例:\n/data/docs\n/data/ocr/**/*.txt\n/data/reports/*.{xlsx,csv}',
|
||
availableTypes: '可用源类型',
|
||
scanNow: '立即扫描',
|
||
scanDone: '扫描完成',
|
||
scanResult: '扫描 {scanned} 个,新增 {added},跳过 {skipped},错误 {errors}',
|
||
},
|
||
pipeline: {
|
||
tab: '流水线',
|
||
title: '自定义流水线',
|
||
desc: '用 YAML 定义触发器(如某类型页面累计到阈值、页面创建)与多步处理(llm / skill)。保存后由后台按触发条件自动执行。',
|
||
name: '名称',
|
||
trigger: '触发器',
|
||
enabled: '启用',
|
||
runs: '运行记录',
|
||
empty: '暂无流水线定义。',
|
||
editor: 'YAML 定义',
|
||
editorHint: 'name: my-pipeline\ntrigger:\n type: page_type_count\n page_type: episode\n threshold: 10\nsteps:\n - executor: llm\n prompt: …',
|
||
saveDef: '保存定义',
|
||
deleteConfirm: '删除流水线 "{name}"?',
|
||
runsFor: '"{name}" 的运行记录',
|
||
status: '状态',
|
||
startedAt: '开始时间',
|
||
noRuns: '暂无运行记录。',
|
||
},
|
||
},
|
||
searchPages: '搜索页面...',
|
||
dropFiles: '拖拽文件到此处或点击上传',
|
||
dropToUpload: '松开即开始上传',
|
||
uploading: '上传中…',
|
||
uploadFailed: '上传失败:{name}',
|
||
addText: '添加文本',
|
||
noRawMaterials: '暂无原始材料',
|
||
reprocess: '重新处理',
|
||
resume: '继续生成',
|
||
cancel: '取消处理',
|
||
cancelling: '正在取消…',
|
||
cancelledHint: '用户已取消处理',
|
||
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} 个',
|
||
scanFailed: '扫描失败',
|
||
saving: '保存中...',
|
||
status: {
|
||
active: '启用',
|
||
uploading: '上传中',
|
||
processing: '处理中',
|
||
error: '错误',
|
||
pending: '待处理',
|
||
completed: '已完成',
|
||
partial: '部分完成',
|
||
failed: '失败',
|
||
cancelled: '已取消',
|
||
cancelling: '正在取消…',
|
||
},
|
||
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: '恢复',
|
||
lint: {
|
||
neverScanned: '尚未扫描死链,点击右侧按钮检查 [[...]] 引用是否仍然有效',
|
||
running: '正在扫描死链…',
|
||
scanning: '扫描中…',
|
||
scan: '扫描死链',
|
||
rescan: '重新扫描',
|
||
cleanResult: '已扫描 {pages} 个页面,无死链',
|
||
brokenSummary: '发现 {refs} 个死链,分布在 {pages} 个页面',
|
||
view: '查看',
|
||
dismissTitle: '隐藏本次提示',
|
||
panelTitle: 'Wiki 死链报告',
|
||
noReport: '尚未扫描,请先点击「扫描死链」',
|
||
},
|
||
pageTypes: {
|
||
concept: '概念',
|
||
person: '人物',
|
||
place: '地点',
|
||
event: '事件',
|
||
technology: '技术',
|
||
organization: '组织',
|
||
product: '产品',
|
||
term: '术语',
|
||
process: '流程',
|
||
system: '系统',
|
||
synthesis: '综合',
|
||
other: '其他',
|
||
},
|
||
graph: {
|
||
tab: '知识图谱',
|
||
nodes: '节点',
|
||
edges: '连接',
|
||
orphans: '孤立节点',
|
||
showOrphans: '显示孤立节点',
|
||
allTypes: '全部类型',
|
||
resetView: '重置视图',
|
||
fullscreen: '全屏',
|
||
exitFullscreen: '退出全屏',
|
||
linksTo: '链接到',
|
||
openPage: '打开页面',
|
||
empty: '暂无图谱数据,请先处理原始材料',
|
||
},
|
||
},
|
||
cronField: {
|
||
edit: '可视化编辑',
|
||
placeholder: '分 时 日 月 周',
|
||
placeholderSeconds: '秒 分 时 日 月 周',
|
||
dialogTitle: 'Cron 表达式生成器',
|
||
presets: '常用预设',
|
||
confirm: '确定',
|
||
cancel: '取消',
|
||
rangeSep: '至',
|
||
intervalStart: '从',
|
||
intervalEvery: '开始,每',
|
||
intervalExec: '执行一次',
|
||
specificEmpty: '点击下方数字进行选择',
|
||
everyDesc: '每{unit}都执行',
|
||
tabs: { second: '秒', minute: '分钟', hour: '小时', day: '日', month: '月', week: '周' },
|
||
type: { every: '任意值', range: '范围', interval: '间隔', specific: '指定' },
|
||
unit: { second: '秒', minute: '分', hour: '时', day: '日', month: '月', week: '周' },
|
||
weekShort: { 0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六' },
|
||
presetItems: {
|
||
everyMinute: '每分钟',
|
||
every5Min: '每 5 分钟',
|
||
every30Min: '每 30 分钟',
|
||
hourly: '每小时',
|
||
daily0: '每天 0 点',
|
||
daily9: '每天 9 点',
|
||
weekday9: '工作日 9 点',
|
||
weekly1: '每周一 9 点',
|
||
monthly1: '每月 1 号',
|
||
},
|
||
desc: {
|
||
everyMinute: '每分钟执行一次',
|
||
everyNMin: '每 {n} 分钟执行一次',
|
||
everyNHour: '每 {n} 小时执行一次',
|
||
hourlyAt: '每小时第 {m} 分钟执行',
|
||
dailyAt: '每天 {time} 执行',
|
||
weeklyAt: '每周 {days} {time} 执行',
|
||
monthlyAt: '每月 {day} 号 {time} 执行',
|
||
},
|
||
},
|
||
scheduler: {
|
||
kicker: '自动化',
|
||
title: '调度中心',
|
||
desc: '定时任务、事件触发器与运行历史,集中在一个地方管理。',
|
||
tabs: {
|
||
jobs: '定时任务',
|
||
triggers: '事件触发器',
|
||
history: '运行历史',
|
||
},
|
||
actions: {
|
||
newJob: '新建任务',
|
||
newTrigger: '新建触发器',
|
||
refresh: '刷新',
|
||
},
|
||
history: {
|
||
empty: '暂无运行记录',
|
||
emptyDesc: '定时任务执行后,运行记录会显示在这里。',
|
||
unknownJob: '任务 #{id}',
|
||
columns: {
|
||
job: '任务',
|
||
trigger: '触发方式',
|
||
status: '状态',
|
||
startedAt: '开始时间',
|
||
duration: '耗时',
|
||
tokens: 'Token',
|
||
},
|
||
status: {
|
||
running: '执行中',
|
||
completed: '已完成',
|
||
succeeded: '成功',
|
||
failed: '失败',
|
||
},
|
||
triggerType: {
|
||
scheduled: '定时',
|
||
manual: '手动',
|
||
},
|
||
},
|
||
},
|
||
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: '文字消息', reminder: '提醒', agent: 'Agent 目标', wiki_process: '知识库处理' },
|
||
cronTypes: { hourly: '每小时', daily: '每天', weekly: '每周', custom: '自定义' },
|
||
days: { mon: '周一', tue: '周二', wed: '周三', thu: '周四', fri: '周五', sat: '周六', sun: '周日' },
|
||
fields: {
|
||
name: '任务名称',
|
||
namePlaceholder: '输入任务名称',
|
||
agent: '关联 Agent',
|
||
agentPlaceholder: '选择执行的 Agent',
|
||
taskType: '任务类型',
|
||
triggerMessage: '触发消息',
|
||
triggerMessagePlaceholder: '输入发送给 Agent 的消息',
|
||
reminderText: '提醒内容',
|
||
reminderTextPlaceholder: '输入到点要原样推送的提醒内容(不会经过 LLM 改写)',
|
||
requestBody: '执行目标',
|
||
requestBodyPlaceholder: '直接描述 Agent 要完成的目标',
|
||
wikiKb: '知识库',
|
||
wikiKbPlaceholder: '选择要处理的知识库',
|
||
wikiKbEmpty: '当前工作区还没有知识库,请先在 Wiki 页面创建',
|
||
wikiForce: '强制重处理',
|
||
wikiForceHint: '开启后清空所有 last_processed_hash,重新入队全部材料;关闭时只处理 pending 状态的材料',
|
||
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: '执行目标不能为空',
|
||
},
|
||
},
|
||
workflows: {
|
||
kicker: '工作流',
|
||
title: '工作流编辑器',
|
||
desc: '编排多步骤工作流:边写边存草稿,编译查看诊断,准备好后发布版本。',
|
||
newWorkflow: '+ 新建工作流',
|
||
defined: '已定义 ({count})',
|
||
refresh: '刷新',
|
||
unnamed: '(未命名)',
|
||
draftBadge: '草稿',
|
||
publishedBadge: 'v{rev}',
|
||
listEmpty: '还没有任何工作流,新建一个开始吧。',
|
||
namePlaceholder: '工作流名称',
|
||
descPlaceholder: '可选描述',
|
||
actions: {
|
||
saveMeta: '保存元数据',
|
||
saveDraft: '保存草稿',
|
||
compile: '编译',
|
||
publish: '发布',
|
||
delete: '删除',
|
||
},
|
||
bodyPlaceholder: '{\'{"steps":[{"name":"step-a","agentId":1,"mode":{"type":"sequential"},"promptTemplate":"..."}]}\'}',
|
||
compileErrorsTitle: '{count} 条编译错误',
|
||
templates: {
|
||
label: '插入模板',
|
||
placeholder: '选择步骤模板',
|
||
sequential: '顺序步骤',
|
||
fan_out: '并行扇出',
|
||
collect: '汇聚结果',
|
||
conditional: '条件分支',
|
||
await_approval: '等待审批',
|
||
dispatch_channel: '消息分发',
|
||
write_memory: '写入记忆',
|
||
},
|
||
jsonInvalid: 'JSON 解析失败:{msg}',
|
||
jsonOk: 'JSON 语法 OK。',
|
||
tabs: {
|
||
canvas: '画布视图',
|
||
json: 'JSON 编辑',
|
||
runs: '运行 ({count})',
|
||
},
|
||
canvas: {
|
||
empty: '当前草稿没有任何步骤,先在 JSON 编辑器中添加步骤或选择一个模板。',
|
||
layoutLR: '横向布局',
|
||
layoutTB: '纵向布局',
|
||
stats: '{nodes} 节点 · {edges} 连线',
|
||
parseError: 'JSON 解析失败:{msg}',
|
||
fullscreenEnter: '全屏',
|
||
fullscreenExit: '退出全屏',
|
||
addNode: '+ 添加节点',
|
||
modeLabel: '模式',
|
||
nodeAgent: '数字员工',
|
||
nodeExpression: '条件',
|
||
nodeApprovalKind: '审批类型',
|
||
nodeChannels: '渠道',
|
||
nodeMergeStrategy: '合并策略',
|
||
approvalDefault: '人工审批',
|
||
channelsEmpty: '未指定',
|
||
modeLabels: {
|
||
sequential: '顺序',
|
||
fan_out: '扇出',
|
||
collect: '汇聚',
|
||
conditional: '条件',
|
||
await_approval: '等待审批',
|
||
dispatch_channel: '分发渠道',
|
||
write_memory: '写入记忆',
|
||
},
|
||
inspector: {
|
||
title: '步骤属性',
|
||
empty: '点击画布上的节点查看详情。',
|
||
rawHeader: '原始 JSON',
|
||
shared: '通用字段',
|
||
modeFields: '{mode} 字段',
|
||
modeNoFields: '此模式没有额外字段。',
|
||
duplicate: '复制此步骤',
|
||
delete: '删除此步骤',
|
||
},
|
||
fields: {
|
||
name: '名称',
|
||
namePlaceholder: 'step-name',
|
||
agentPlaceholder: '选择数字员工',
|
||
agentMissing: '当前数字员工不在列表中:{name}',
|
||
promptTemplate: 'Prompt 模板',
|
||
// promptPlaceholder is intentionally not localized — hardcoded in
|
||
// StepPropertyPanel so vue-i18n's parser never sees the Pebble braces.
|
||
outputVar: '输出变量名',
|
||
outputVarPlaceholder: 'data',
|
||
outputContentType: '输出类型',
|
||
approvalKind: '审批种类',
|
||
approverChannels: '通知渠道(逗号分隔)',
|
||
approvalMessage: '审批消息',
|
||
timeoutSecs: '超时(秒)',
|
||
channels: '分发渠道',
|
||
channelsEmptyHint: '当前工作区没有可用渠道,请先在渠道管理中启用渠道。',
|
||
channelsUnknown: '草稿里有不可用渠道:{channels}',
|
||
dispatchTarget: '{channel} 目标',
|
||
dispatchTargetPlaceholder: '群 ID / 用户 ID / 会话 ID',
|
||
dispatchContent: '消息内容',
|
||
employeeId: '员工 ID',
|
||
memoryFile: '记忆文件',
|
||
memoryContent: '内容模板',
|
||
},
|
||
},
|
||
dialogs: {
|
||
createTitle: '新建工作流',
|
||
fieldName: '名称',
|
||
namePlaceholder: '例如:employee-onboarding',
|
||
fieldDescription: '描述',
|
||
descriptionPlaceholder: '可选,用一两句话说明这条工作流要解决什么问题',
|
||
createSubmit: '创建',
|
||
publishTitle: '发布工作流',
|
||
publishHint: '发布会编译当前草稿,固化为新的 revision;正在运行的实例不会回退。',
|
||
publishNote: '发布备注',
|
||
publishNotePlaceholder: '可选,简述这次变更的内容',
|
||
deleteTitle: '删除工作流',
|
||
deleteContent: '将删除工作流「{name}」?此操作可通过审计日志撤销。',
|
||
},
|
||
selectHint: '在左侧选择一个工作流,或点击「新建工作流」开始。',
|
||
generate: {
|
||
entryButton: '从描述生成',
|
||
title: '从自然语言生成工作流草稿',
|
||
hint: '用一句话描述你的业务流程,AI 会生成 workflow JSON 草稿。生成后会保留为草稿,需要你确认后再发布;不会自动启用任何触发器。',
|
||
placeholder: '例如:每周一早上 9 点让销售员工汇总上周数据,老板确认后发到飞书运营群',
|
||
submit: '生成草稿',
|
||
running: '生成中...',
|
||
retry: '重试',
|
||
accept: '采用并打开编辑器',
|
||
compileOk: '编译预校验通过',
|
||
compileFail: '编译预校验未通过 ({count})',
|
||
compileChecking: '正在校验…',
|
||
compileError: '编译错误',
|
||
missing: '缺失',
|
||
warning: '警告',
|
||
previewDraft: '预览生成的 JSON',
|
||
failed: '生成失败:{msg}',
|
||
acceptedWithTriggers: '已生成草稿并创建 {count} 个触发器(默认未启用)',
|
||
acceptedSomeTriggersFailed: '已生成草稿,{ok} 个触发器创建成功,{fail} 个失败',
|
||
triggersTitle: '建议的触发器',
|
||
triggersHint: '默认 enabled=false;可在 Triggers 页面随时启用或调整。',
|
||
applyTemplate: '套用模板(直接生成,跳过 AI)',
|
||
applyTemplatePlaceholder: '— 选择一个常用模板 —',
|
||
},
|
||
paused: {
|
||
header: '待恢复运行 ({count})',
|
||
empty: '当前没有暂停中的运行。',
|
||
pauseTokenLabel: 'pause token',
|
||
deadlineLabel: '超时时间',
|
||
pausedAtLabel: '暂停于',
|
||
runHash: 'Run #{id}',
|
||
resumeApproved: '通过',
|
||
resumeRejected: '拒绝',
|
||
resumeTimeout: '标记超时',
|
||
resumeCancelled: '取消',
|
||
resumeOk: '运行已恢复 ({outcome})。',
|
||
resumeFailed: '恢复失败:{msg}',
|
||
},
|
||
runs: {
|
||
header: '近期运行 ({count})',
|
||
empty: '暂无运行记录。',
|
||
detailTitle: 'Run #{id} — {state}',
|
||
runHash: 'run #{id}',
|
||
},
|
||
prompts: {
|
||
newName: '新工作流名称:',
|
||
defaultName: 'untitled-workflow',
|
||
publishNote: '可选发布备注:',
|
||
deleteConfirm: '删除工作流「{name}」?此操作可通过审计日志撤销。',
|
||
},
|
||
status: {
|
||
metaSaved: '元数据已保存。',
|
||
draftSaved: '草稿已保存。',
|
||
compileOk: '编译通过。',
|
||
published: '已发布。',
|
||
deleted: '已删除。',
|
||
createFailed: '创建失败:{msg}',
|
||
saveFailed: '保存失败:{msg}',
|
||
saveDraftFailed: '草稿保存失败:{msg}',
|
||
deleteFailed: '删除失败:{msg}',
|
||
compileFailed: '{count} 条编译错误,详见下方面板。',
|
||
compileFallback: '编译/发布失败。',
|
||
},
|
||
},
|
||
triggers: {
|
||
kicker: '触发器',
|
||
title: '工作流触发器',
|
||
desc: '把定时调度、渠道事件和 Webhook 接到已发布的工作流上——条件满足时,工作流自动运行。',
|
||
newTrigger: '+ 新建触发器',
|
||
emptyDesc: '触发器让工作流在特定事件发生时自动运行,无需手动启动。',
|
||
neverFired: '尚未触发',
|
||
firedSummary: '已触发 {count} 次 · 最近 {time}',
|
||
targetWorkflowSelect: '选择已发布的工作流',
|
||
targetWorkflowEmpty: '尚无已发布的工作流。',
|
||
patternTypeLabels: {
|
||
cron: '定时任务',
|
||
channel_message: '渠道消息',
|
||
content_match: '内容匹配',
|
||
agent_lifecycle: '智能体生命周期',
|
||
workflow_completion: '工作流完成',
|
||
webhook: 'Webhook',
|
||
},
|
||
patternHints: {
|
||
cron: '示例:{"cron":"0 0 * * * *","timezone":"Asia/Shanghai"} —— 每次修改 cron 都会让 pattern_version 自增。',
|
||
channel_message: '可填 channelType(如 feishu)、senderEquals 与 contentContains 进一步过滤。',
|
||
webhook: '透传匹配,请确保 HTTP 入口已校验 webhook 密钥。',
|
||
content_match: '需要 substring(不区分大小写)。空字符串将拒绝触发。',
|
||
agent_lifecycle: '可选 agentId 和 phase(spawned / terminated / crashed)。',
|
||
workflow_completion: '可选 sourceWorkflowId 和 stateFilter(completed / failed / any)。',
|
||
},
|
||
pattern: {
|
||
cronExpression: 'Cron 表达式',
|
||
cronExpressionPlaceholder: '0 0 * * * *',
|
||
cronExpressionHint: '5 字段(分 时 日 月 周)或 6 字段(含秒)。修改后 pattern_version 自增。',
|
||
cronTimezone: '时区',
|
||
cronTimezonePlaceholder: 'Asia/Shanghai',
|
||
channelType: '渠道类型',
|
||
channelTypeAny: '任意渠道',
|
||
senderEquals: '发送者匹配',
|
||
senderEqualsPlaceholder: '可选,发送者 ID',
|
||
senderEqualsHint: '留空表示任意发送者;填写后只匹配该发送者的消息。',
|
||
contentContains: '消息包含关键字',
|
||
contentContainsPlaceholder: '可选关键字',
|
||
contentContainsHint: '对消息正文做不区分大小写的子串匹配;留空表示不限。',
|
||
substring: '子串匹配',
|
||
substringPlaceholder: '订单 / order',
|
||
substringHint: '不区分大小写。空字符串将拒绝触发(避免无意义广播)。',
|
||
agentId: '智能体 ID',
|
||
agentIdPlaceholder: '0 表示任意',
|
||
agentIdHint: '留空或填 0 表示任意智能体。',
|
||
phase: '生命周期阶段',
|
||
phaseAny: '任意阶段',
|
||
sourceWorkflowId: '上游工作流',
|
||
sourceWorkflowAny: '任意上游',
|
||
stateFilter: '完成状态',
|
||
stateFilterAny: '任意状态',
|
||
stateFilterHint: 'completed 等价于 succeeded;failed 仅匹配失败结束。',
|
||
webhookHeader: 'Webhook 透传匹配',
|
||
webhookBody: '此模式不在前端做过滤——请确保 HTTP 入口校验 webhook 密钥;通过校验的请求会全部进入触发器。',
|
||
rawHeader: '原始 pattern_json(高级)',
|
||
errCronRequired: 'Cron 表达式不能为空',
|
||
errCronShape: 'Cron 表达式格式不正确(5 ~ 7 字段)',
|
||
errSubstringRequired: '子串不能为空,否则触发器不会激活',
|
||
},
|
||
unnamed: '(未命名)',
|
||
enabled: '已启用',
|
||
disabled: '已停用',
|
||
empty: '还没有触发器',
|
||
actions: {
|
||
edit: '编辑',
|
||
delete: '删除',
|
||
cancel: '取消',
|
||
save: '保存',
|
||
close: '关闭',
|
||
},
|
||
formTitleNew: '新建触发器',
|
||
formTitleEdit: '编辑触发器',
|
||
fields: {
|
||
name: '名称',
|
||
namePlaceholder: 'hourly-cleanup',
|
||
patternType: '模式类型',
|
||
patternJson: '模式 JSON',
|
||
patternJsonPlaceholder: '{\'{"cron":"0 0 * * * *","timezone":"UTC"}\'}',
|
||
targetType: '目标类型',
|
||
targetId: '目标 ID',
|
||
ratePerMin: '每分钟速率',
|
||
dedupWindowSecs: '去重窗口(秒)',
|
||
maxFires: '最大触发数(0 = 不限)',
|
||
botSelfFilter: 'Bot 自循环过滤(推荐)',
|
||
payloadTemplate: '载荷模板(Pebble)',
|
||
payloadTemplatePlaceholder: '{\'{"who":"{{ event.who }}"}\'}',
|
||
enabled: '启用',
|
||
},
|
||
deleteConfirm: '删除触发器「{name}」?',
|
||
saveFailed: '保存失败:{msg}',
|
||
toggleFailed: '切换失败:{msg}',
|
||
deleteFailed: '删除失败:{msg}',
|
||
},
|
||
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: '默认账号: <code>admin</code> / <code>admin123</code>',
|
||
failed: '登录失败,请检查账号密码',
|
||
},
|
||
enterprise: {
|
||
eyebrow: '企业场景',
|
||
title: '企业 AI 工作台',
|
||
subtitle: '把 AI 判断、证据引用、审批责任一体化 —— 让 AI 进入企业流程,而不是又一个聊天框。',
|
||
tabs: {
|
||
overview: '总览',
|
||
contract: '合同审查',
|
||
account: '客户情报',
|
||
approvals: '审批',
|
||
audit: '审计',
|
||
},
|
||
risk: { high: '高风险', medium: '中等', low: '低' },
|
||
status: {
|
||
aiReviewed: 'AI 已审',
|
||
pendingLegal: '法务待审',
|
||
approved: '已批准',
|
||
signal: '情报信号',
|
||
},
|
||
overview: {
|
||
metricPending: '待处理',
|
||
metricHighRisk: '高风险',
|
||
metricAccounts: '关注客户',
|
||
metricCited: '引用覆盖',
|
||
queueTitle: '工作队列',
|
||
queueDesc: '今天需要法务、销售、合规处理的事项;每条都附带 AI 判断和证据出处',
|
||
evidenceTitle: '近期证据',
|
||
evidenceDesc: 'AI 判断引用的原文、Playbook 条款、历史先例',
|
||
coverageNote: '本周 AI 判断的引用覆盖率',
|
||
tagSource: '原文',
|
||
tagPlaybook: 'Playbook',
|
||
tagPrecedent: '先例',
|
||
filterAll: '全部',
|
||
filterHighRisk: '高风险',
|
||
filterPending: '待法务',
|
||
filterToday: '今天',
|
||
pipelineTitle: '合同审查流水',
|
||
pipelineDesc: '从上传到归档的标准流程,每一步都留痕',
|
||
step1: '上传',
|
||
step1Desc: '法务或销售拖拽合同 PDF',
|
||
step2: '提取',
|
||
step2Desc: 'OCR / 文本提取',
|
||
step3: 'AI 审查',
|
||
step3Desc: '条款级风险与 Playbook 偏离',
|
||
step4: '法务复核',
|
||
step4Desc: '人工最终把关',
|
||
step5: '审批 / 归档',
|
||
step5Desc: '审批链 + 审计留痕',
|
||
},
|
||
contract: {
|
||
listTitle: '合同列表',
|
||
filterAll: '全部',
|
||
filterHigh: '高风险',
|
||
filterPending: '待审',
|
||
clausesFound: '条款偏离',
|
||
deviation: '偏离',
|
||
suggestion: 'AI 建议改写',
|
||
approvalChain: '审批链',
|
||
btnApprove: '批准',
|
||
btnReject: '驳回',
|
||
btnRequestRevision: '要求修订',
|
||
evidenceTitle: '证据',
|
||
sourceContract: '原合同',
|
||
playbookRule: 'Playbook 条款',
|
||
precedents: '历史先例',
|
||
confidence: '置信度',
|
||
model: '模型',
|
||
},
|
||
account: {
|
||
listTitle: '客户列表',
|
||
filterAll: '全部',
|
||
filterHot: '高分',
|
||
filterCooling: '降温',
|
||
opportunityScore: '机会分',
|
||
aum: '体量',
|
||
keyPeople: '关键人',
|
||
timelineTitle: '账户时间线',
|
||
tlAll: '全部',
|
||
tlPublic: '公开信号',
|
||
tlMeeting: '会议',
|
||
tlDoc: '内部资料',
|
||
evidence: '证据',
|
||
actionsTitle: '推荐动作',
|
||
actionsSub: 'AI 根据时间线信号生成的下一步建议;按优先级排序',
|
||
btnDoIt: '去执行',
|
||
btnSnooze: '稍后',
|
||
stage: {
|
||
prospect: '潜在',
|
||
qualified: '确认意向',
|
||
proposal: '方案中',
|
||
negotiation: '谈判中',
|
||
won: '已成交',
|
||
},
|
||
role: {
|
||
decider: '决策者',
|
||
influencer: '影响者',
|
||
user: '使用者',
|
||
procurement: '采购',
|
||
},
|
||
eventKind: {
|
||
news: '新闻',
|
||
hiring: '招聘',
|
||
funding: '融资',
|
||
product: '产品',
|
||
meeting: '会议',
|
||
doc: '资料',
|
||
competitor: '竞品',
|
||
},
|
||
priority: { high: '高优', medium: '中优', low: '低优' },
|
||
},
|
||
approvals: {
|
||
queueTitle: '我的审批队列',
|
||
queueDesc: '需要你点头才能继续的事项 —— AI 判断已就绪,等你把关',
|
||
filterMine: '我的',
|
||
filterAll: '全部',
|
||
filterHigh: '高风险',
|
||
requester: '发起人',
|
||
target: '对象',
|
||
reason: '原因',
|
||
evidence: '证据',
|
||
btnApprove: '批准',
|
||
btnReject: '驳回',
|
||
btnDelegate: '转交',
|
||
kind: {
|
||
contract: '合同',
|
||
tool: '工具',
|
||
transformation: '加工器',
|
||
access: '权限',
|
||
},
|
||
slaTitle: 'SLA 监控',
|
||
slaDesc: '审批响应时间与自动批准比例 —— 数据越细,越容易发现"卡审批"的瓶颈',
|
||
slaAvg: '平均响应',
|
||
slaWithin: '按时完成',
|
||
slaOverdue: '逾期',
|
||
slaAutoApproved: '已自动批准',
|
||
slaAutoNote: '满足白名单规则',
|
||
},
|
||
audit: {
|
||
title: '审计追溯',
|
||
desc: '每一次 AI 判断、人工操作、工具调用都有时间戳和证据。这是企业部署 AI 的最低门槛。',
|
||
scopeAll: '全部事件',
|
||
scopeContract: '合同相关',
|
||
scopeAccount: '客户相关',
|
||
scopeTool: 'AI / 工具',
|
||
evidence: '关联证据',
|
||
kind: {
|
||
review: 'AI 审查',
|
||
approve: '批准',
|
||
reject: '驳回',
|
||
tool: '工具调用',
|
||
access: '权限',
|
||
modify: '修改',
|
||
agent: 'Agent 行为',
|
||
},
|
||
},
|
||
},
|
||
channels: {
|
||
title: '渠道管理',
|
||
desc: '将数字员工连接到各消息平台和 API',
|
||
newChannel: '新建渠道',
|
||
addChannel: '添加渠道',
|
||
status: {
|
||
active: '已启用',
|
||
inactive: '未启用',
|
||
},
|
||
configure: '配置',
|
||
enable: '启用',
|
||
disable: '停用',
|
||
empty: {
|
||
title: '连接第一个渠道',
|
||
desc: '把你的数字员工接入团队已经在用的 IM 工具——Slack、企业微信、Telegram 等。',
|
||
cta: '连接一个渠道',
|
||
},
|
||
stats: {
|
||
active: '{n} 个运行中',
|
||
reconnecting: '{n} 个重连中',
|
||
errors: '{n} 个出错',
|
||
disabled: '{n} 个已停用',
|
||
},
|
||
cardDesc: {
|
||
connectedAs: '已连接:{account}',
|
||
connectedAsIn: '已连接:{account}({team})',
|
||
// Per-type fallback used when the row has no user-provided description
|
||
// and the adapter hasn't written identity_json yet. Keeps every card
|
||
// visually populated instead of leaving a blank middle area.
|
||
typeFallback: {
|
||
web: '默认 Web 控制台渠道,通过浏览器 SSE 流式交互',
|
||
dingtalk: '钉钉机器人渠道,通过 Outgoing Webhook / Stream 接收消息',
|
||
wecom: '企业微信应用渠道,接收并回复成员消息',
|
||
weixin: '微信公众号渠道,处理用户消息与事件回调',
|
||
feishu: '飞书 / Lark 渠道,通过事件订阅接收消息',
|
||
telegram: 'Telegram 机器人渠道,通过 long polling 接收',
|
||
slack: 'Slack Bot 渠道,通过 Events API 接收',
|
||
discord: 'Discord 机器人渠道,通过 Gateway 长连接',
|
||
qq: 'QQ / QQ 频道机器人渠道',
|
||
matrix: 'Matrix 房间渠道,通过 client-server API',
|
||
qqbot: 'QQ 频道机器人渠道(官方 API)',
|
||
yuanbao: '腾讯元宝渠道',
|
||
},
|
||
empty: '点「配置」可补充该渠道的描述',
|
||
},
|
||
catalog: {
|
||
subtitle: '选一个服务接入,配置项稍后还能改。',
|
||
groups: {
|
||
im: 'IM 平台',
|
||
enterprise: '企业平台',
|
||
web: '网页与 API',
|
||
},
|
||
descriptions: {
|
||
telegram: '长轮询接入,无需公网 IP',
|
||
discord: 'Gateway WebSocket,无需公网 IP',
|
||
slack: 'Socket Mode 接入',
|
||
qq: 'WebSocket 长连接,无需公网 IP',
|
||
wecom: '企业微信智能机器人,扫码即用',
|
||
weixin: '微信个人号(iLink Bot)',
|
||
feishu: '飞书 / Lark 应用,扫码一键创建',
|
||
dingtalk: '钉钉机器人,扫码一键创建',
|
||
web: '默认浏览器渠道,始终可用',
|
||
webchat: '可嵌网页挂件,也可作为带 Key 的后端 SSE API 直接调用',
|
||
webhook: '通用 HTTP 接入端点',
|
||
},
|
||
},
|
||
modal: {
|
||
editTitle: '编辑渠道',
|
||
newTitle: '新建渠道',
|
||
},
|
||
fields: {
|
||
name: '名称',
|
||
type: '类型',
|
||
description: '描述',
|
||
bindAgent: '绑定员工',
|
||
},
|
||
placeholders: {
|
||
name: '渠道名称',
|
||
description: '渠道用途说明',
|
||
selectAgent: '选择员工...',
|
||
},
|
||
types: {
|
||
web: 'Web API',
|
||
dingtalk: '钉钉',
|
||
feishu: '飞书',
|
||
telegram: 'Telegram',
|
||
discord: 'Discord',
|
||
wecom: '企业微信',
|
||
weixin: '微信',
|
||
qq: 'QQ',
|
||
slack: 'Slack',
|
||
webchat: 'Web / API 接入',
|
||
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: 'Web / API 接入既可把 MateClaw 聊天挂件嵌入外部网站,也可作为纯后端 SSE 接口直接调用。配置 API Key 后,前端可引入 WebChat SDK;后端可直接 POST /api/v1/channels/webchat/stream,头带 X-MC-Key、体传 {message, visitorId, 可选 sessionId/agentId}。',
|
||
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: '发送给用户前过滤 <think> 标签内容',
|
||
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: '在 <a href="https://open-dev.dingtalk.com/" target="_blank" rel="noopener">钉钉开放平台</a> 创建机器人,填入 <b>AppKey</b> 和 <b>AppSecret</b>',
|
||
step2: 'Stream 模式(推荐):消息接收模式选「Stream 模式」,无需公网 IP 即可使用',
|
||
step3: 'Webhook 模式:消息接收模式选「HTTP 模式」,将 Webhook URL 填入回调地址',
|
||
},
|
||
feishu: {
|
||
step1: '前往 <a href="https://open.feishu.cn/" target="_blank" rel="noopener">飞书开放平台</a> 创建企业自建应用',
|
||
step2: '将应用的 <b>App ID</b> 和 <b>App Secret</b> 填入下方配置',
|
||
webhookStep: '在飞书后台「事件订阅」中将请求地址设置为上方 Webhook URL,订阅 <code>im.message.receive_v1</code> 事件',
|
||
websocketStep: '在飞书后台「事件订阅」中选择「长连接」订阅方式,订阅 <code>im.message.receive_v1</code> 事件(无需公网 IP)',
|
||
permissionStep: '如需昵称显示,请在「权限管理」中申请 <code>contact:user.base:readonly</code> 权限',
|
||
},
|
||
telegram: {
|
||
step1: '在 Telegram 中搜索 <a href="https://t.me/BotFather" target="_blank" rel="noopener">{at}BotFather</a>,发送 <code>/newbot</code> 创建 Bot',
|
||
step2: '将 BotFather 返回的 <b>Bot Token</b> 填入下方配置',
|
||
step3: '<b>Long-Polling 模式</b>(推荐):启动后自动通过 <code>getUpdates</code> 轮询接收消息,<b>无需公网 IP</b>',
|
||
step4: '<b>Webhook 模式</b>:需要公网可访问的回调地址,切换接入模式后填入 Webhook URL',
|
||
},
|
||
discord: {
|
||
step1: '前往 <a href="https://discord.com/developers/applications" target="_blank" rel="noopener">Discord Developer Portal</a> 创建 Application',
|
||
step2: '在 Bot 页面创建 Bot 并复制 <b>Bot Token</b> 填入下方配置',
|
||
step3: '在 Bot 页面开启 <b>MESSAGE CONTENT Intent</b>(Privileged Gateway Intents 区域)',
|
||
step4: '在 OAuth2 → URL Generator 中勾选 <b>bot</b> scope 和 <b>Send Messages / Read Message History</b> 权限,生成邀请链接将 Bot 添加到目标服务器',
|
||
step5: '启动后通过 <b>Gateway WebSocket</b> 自动接收消息,<b>无需公网 IP 和回调 URL</b>',
|
||
},
|
||
wecom: {
|
||
step1: '前往 <a href="https://work.weixin.qq.com/wework_admin/frame" target="_blank" rel="noopener">企业微信管理后台</a>,进入「应用管理 → 智能机器人」创建一个新的智能机器人',
|
||
step2: '在机器人配置中选择「<b>API 模式 → 配置长连接</b>」',
|
||
step3: '记录机器人的 <b>Bot ID</b> 和 <b>Secret</b>,填入下方配置',
|
||
step4: '启动渠道后即可在企业微信中扫码添加机器人对话,<b>无需公网 IP 和回调 URL</b>',
|
||
},
|
||
weixin: {
|
||
step1: '确保已获得微信 <b>iLink Bot</b> 内测资格(目前为受邀内测阶段)',
|
||
step2: '点击下方「获取登录二维码」按钮,用微信扫码登录',
|
||
step3: '扫码成功后系统自动获取 <b>bot_token</b> 并填入配置',
|
||
step4: '启动渠道后通过 <b>HTTP 长轮询</b>自动接收消息,<b>无需公网 IP 和回调 URL</b>',
|
||
},
|
||
qq: {
|
||
step1: '前往 <a href="https://q.qq.com/" target="_blank" rel="noopener">QQ 开放平台</a> 创建机器人应用',
|
||
step2: '在应用管理页面获取 <b>AppID</b> 和 <b>AppSecret</b>,填入下方配置',
|
||
step3: "在「功能配置 → 消息订阅」中开启需要的消息类型(C2C 消息、群聊 {'@'}消息、频道消息等)",
|
||
step4: '启动渠道后通过 <b>WebSocket 长连接</b>自动接收消息,<b>无需公网 IP 和回调 URL</b>',
|
||
},
|
||
},
|
||
dingtalkRegister: {
|
||
title: '一键创建钉钉机器人',
|
||
hint: '点击按钮获取二维码,使用钉钉扫一扫并授权后,会自动在你的企业里创建机器人应用,Client ID / Client Secret 自动填入下方。',
|
||
button: '扫码自动创建机器人',
|
||
buttonLoading: '正在准备二维码…',
|
||
qrcodeLoading: '正在生成二维码',
|
||
scanHint: '请使用钉钉 App 扫描上方二维码并确认授权',
|
||
confirmed: '机器人创建成功,Client ID 和 Secret 已自动填入',
|
||
expired: '二维码已过期,请重新生成',
|
||
denied: '授权被拒绝',
|
||
startFailed: '获取二维码失败,请检查网络',
|
||
},
|
||
qqRegister: {
|
||
title: '扫码绑定 QQ 机器人',
|
||
hint: '需要先在 QQ 开放平台 (q.qq.com) 创建好机器人。点击按钮后用手机 QQ 扫码,在弹出页面选择要绑定的机器人,AppID / AppSecret 会自动填入下方,无需手动复制。',
|
||
button: '扫码绑定已有机器人',
|
||
buttonLoading: '正在准备二维码…',
|
||
qrcodeLoading: '正在生成二维码',
|
||
scanHint: '请使用手机 QQ 扫描上方二维码并在页面中选择机器人',
|
||
confirmed: '绑定成功,AppID 和 AppSecret 已自动填入',
|
||
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: '媒体下载:下载图片和文件',
|
||
},
|
||
},
|
||
wizard: {
|
||
step1: '配置',
|
||
step2: '验证',
|
||
step3: '就绪',
|
||
configureSubtitle: '填入凭证以连接 {service}',
|
||
howToGet: '如何获取凭证',
|
||
saveAndTest: '保存并测试',
|
||
back: '返回',
|
||
continue: '继续',
|
||
done: '完成',
|
||
verifying: '正在与 {service} 通信…',
|
||
verifySuccess: '连接成功',
|
||
verifySuccessHeadline: '已连接 — {service} 接受了凭证',
|
||
verifyFailed: '验证失败',
|
||
verifySkipped: '无需在线验证',
|
||
verifySkippedDetail: '该渠道类型没有需要验证的凭证,可以直接保存并启用。',
|
||
durationMs: '({n} ms)',
|
||
fixIt: '修复',
|
||
retry: '重试',
|
||
readyHeadline: '一切就绪',
|
||
readySubtitle: '绑定一个员工,发条测试消息确认。',
|
||
bindAgentLabel: '绑定员工',
|
||
sendTest: '发送测试消息',
|
||
sendTestHint: '打开 {service} 给机器人发条消息——回复应该几秒内到达。',
|
||
saveFailed: '渠道保存失败',
|
||
noVerifierHint: '{type} 暂未支持在线验证。保存会直接启动渠道,请关注卡片上的连接状态指示。',
|
||
oauthScanHint: '扫码完成后会自动填充并验证凭证——你不需要手动复制任何东西。',
|
||
identity: {
|
||
accountId: '账号 ID',
|
||
accountName: '账号',
|
||
firstName: '名字',
|
||
team: '团队',
|
||
teamId: '团队 ID',
|
||
botId: '机器人 ID',
|
||
transport: '接入方式',
|
||
region: '地区',
|
||
tokenTtl: 'Token 有效期',
|
||
baseUrl: '接口地址',
|
||
isBot: '机器人账号',
|
||
verified: '已认证',
|
||
canJoinGroups: '可加入群聊',
|
||
canReadAllGroupMessages: '可读全部群消息',
|
||
},
|
||
},
|
||
},
|
||
skills: {
|
||
title: '技能管理',
|
||
desc: '管理 Agent 可用的工具和技能',
|
||
newSkill: '新建技能',
|
||
importSkill: '导入技能',
|
||
browseTemplates: '浏览模板',
|
||
refreshRuntime: '刷新运行时',
|
||
refreshing: '刷新中...',
|
||
refreshSuccess: '运行时技能已刷新',
|
||
refreshFailed: '刷新运行时失败',
|
||
tabs: {
|
||
all: '全部',
|
||
builtin: '内置',
|
||
mcp: 'MCP',
|
||
acp: 'ACP',
|
||
dynamic: '动态',
|
||
stale: '待归档',
|
||
archived: '已归档',
|
||
},
|
||
lifecycle: {
|
||
section: '生命周期',
|
||
state: '状态',
|
||
lastUsed: '上次使用',
|
||
neverUsed: '从未使用',
|
||
today: '今天',
|
||
daysAgo: '{n} 天前',
|
||
states: {
|
||
active: '活跃',
|
||
stale: '待归档',
|
||
archived: '已归档',
|
||
},
|
||
pin: '钉住此技能',
|
||
pinHint: '钉住后永不会被自动归档',
|
||
archive: '归档',
|
||
restore: '恢复',
|
||
pinFailed: '钉住操作失败',
|
||
archiveTitle: '归档技能',
|
||
archiveConfirm: '确定归档「{name}」吗?归档后该技能将停用,可随时恢复。',
|
||
archiveSuccess: '技能已归档',
|
||
archiveFailed: '归档失败',
|
||
restoreSuccess: '技能已恢复',
|
||
restoreFailed: '恢复失败',
|
||
boundConfirmTitle: '该技能已被 Agent 绑定',
|
||
boundConfirmBody: '「{name}」被 {count} 个启用中的 Agent 显式绑定({agents})。归档后这些 Agent 将失去该能力,确定继续?',
|
||
},
|
||
search: {
|
||
placeholder: '搜索技能名称、描述或标签...',
|
||
},
|
||
filter: {
|
||
all: '全部状态',
|
||
enabled: '已启用',
|
||
disabled: '已禁用',
|
||
scanFailed: '扫描失败',
|
||
},
|
||
sections: {
|
||
enabled: '已启用',
|
||
available: '未启用',
|
||
countItems: '{n} 项',
|
||
emptyEnabled: '暂无已启用的技能',
|
||
emptyEnabledDesc: '从下方"未启用"区启用一个,或从模板/导入新建。',
|
||
emptyAvailable: '暂无未启用的技能',
|
||
},
|
||
sort: {
|
||
recommended: '推荐排序',
|
||
name: '按名称',
|
||
status: '按状态',
|
||
source: '按来源',
|
||
updated: '最近更新',
|
||
},
|
||
security: {
|
||
scanned: '已扫描',
|
||
scanFailed: '扫描失败',
|
||
notScanned: '未扫描',
|
||
findingsTitle: '安全扫描失败',
|
||
rescan: '重新扫描',
|
||
rescanning: '扫描中...',
|
||
rescanPassed: '重新扫描通过',
|
||
rescanStillFailed: '重新扫描仍未通过,请查看详情',
|
||
rescanFailed: '重新扫描失败',
|
||
noPersistedFindings: '本次尚无持久化的扫描详情,点击"重新扫描"以重新生成。',
|
||
fix: '修复建议',
|
||
},
|
||
status: {
|
||
ready: '就绪',
|
||
setupNeeded: '需配置',
|
||
blocked: '已拦截',
|
||
unresolved: '未解析',
|
||
disabled: '已禁用',
|
||
checking: '检查中…',
|
||
},
|
||
empty: '暂无技能',
|
||
emptyDesc: '添加技能以增强 Agent 的能力',
|
||
noDescription: '暂无描述',
|
||
// Issue #83: shown on the padlock that replaces the toggle for MCP/ACP virtual skills.
|
||
virtualReadonlyHint: 'MCP / ACP 衍生技能不能在此切换,请到 Settings ▸ 连接页面操作对应的服务',
|
||
modal: {
|
||
configureTitle: '配置技能',
|
||
newTitle: '新建技能',
|
||
newSimpleHint: '先建好骨架,下一步在详情面板里继续配置图标、正文和工具。',
|
||
},
|
||
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',
|
||
acp: 'ACP',
|
||
dynamic: '动态',
|
||
},
|
||
source: {
|
||
builtin: '内置',
|
||
synthesized: 'AI 合成',
|
||
local: '本地',
|
||
},
|
||
usedByTitle: '已绑定此技能的 Agent 数量',
|
||
lessonsCountTitle: '已记录的经验数 — 点击查看',
|
||
actions: {
|
||
configure: '配置',
|
||
view: '查看',
|
||
setUp: '配置就绪',
|
||
delete: '删除',
|
||
saveChanges: '保存更改',
|
||
createSkill: '创建技能',
|
||
edit: '编辑',
|
||
save: '保存',
|
||
cancel: '取消',
|
||
},
|
||
preflight: {
|
||
title: '装前检查',
|
||
allMet: '所有依赖已满足',
|
||
allMetDesc: '该 skill 已就绪,绑定到 agent 即可使用。',
|
||
setupNeeded: '{count} 项依赖待处理',
|
||
setupNeededDesc: '按下方提示安装所需依赖,安装完成后点重新检查。',
|
||
requirements: '依赖项',
|
||
features: '特性',
|
||
installCommands: '安装命令',
|
||
optional: '可选',
|
||
noManifest: '该 skill 未提供 v3 manifest,状态回退到旧依赖检查模式。',
|
||
recheck: '重新检查',
|
||
loadFailed: '加载预检数据失败',
|
||
},
|
||
detail: {
|
||
title: '技能详情',
|
||
overview: '概览',
|
||
body: '正文',
|
||
manifest: 'Manifest',
|
||
tools: '工具',
|
||
features: '特性',
|
||
security: '安全',
|
||
lessons: '经验',
|
||
secrets: '密钥',
|
||
memory: '记忆',
|
||
scanStatus: '扫描状态',
|
||
missingDeps: '缺失依赖',
|
||
runtimeError: '运行时错误',
|
||
path: '解析路径',
|
||
synthesized: '来源',
|
||
identitySection: '身份',
|
||
manifestProjectedSection: '来自 SKILL.md',
|
||
manifestProjectedHint: '这些字段是 SKILL.md frontmatter 的镜像 — 直接改 row 不持久(下次解析时被覆盖)。要改请编辑下方 SKILL.md 正文。',
|
||
displayOverridesSection: '显示与标签',
|
||
displayOverridesHint: '仅存于数据库,不会被解析器覆盖。',
|
||
bodyHint: 'SKILL.md 正文 — 部署后注入到 LLM 的系统提示。',
|
||
sourceCodeHint: '执行体(仅 dynamic 类型)。修改后下次调用立即生效。',
|
||
viewRawManifest: '查看解析后的运行时 manifest',
|
||
noBody: '尚未提供 SKILL.md 正文。',
|
||
builtinReadonly: '内置技能:仅 nameZh / nameEn / 标签 / description / 正文可改。',
|
||
virtualReadonly: 'MCP 派生的虚拟技能不可在此编辑,请去 MCP 连接页修改。',
|
||
editSource: '编辑 SKILL.md',
|
||
editingSource: '编辑 SKILL.md',
|
||
sourceSavedReprojection: '已保存。下次解析将根据新 frontmatter 同步 icon/version/author 等字段。',
|
||
noManifest: '该技能未声明 v3 manifest,使用旧字段。',
|
||
noTools: '该 skill 未声明 allowed-tools。绑定到 agent 时 LLM 将回退到全局工具集。',
|
||
noFeatures: '未声明 features[] 矩阵,技能被视为单一默认特性。',
|
||
noLessons: '尚未记录任何经验。经验由 LLM 通过 record_lesson 工具写入 — 在对话中告诉 agent「请把这条经验记录到「{skill 名}」技能下」即可触发。',
|
||
noEmployees: '该 skill 当前没有任何 Agent 可以使用。要么在 Agent 的 Skills tab 中显式绑定,要么把 skill 设为全局启用让无显式绑定的 Agent 自动可见。',
|
||
toolsHint: 'Skill 绑定到 agent 时,这些工具名将合并进 LLM 的 allowed-tools。SETUP_NEEDED 特性下的工具保持隐藏。',
|
||
lessonsHint: '该 skill 累积的经验(LESSONS.md)。下次加载时自动注入到 SKILL.md 正文之后,让 agent 越用越熟。',
|
||
memoryHint: '可使用此 skill 的 Agents。显式绑定 = 在 Agent Skills tab 中明确选中;隐式可见 = 该 Agent 未做任何 Skill 显式绑定,自动可见所有全局启用的 skill。',
|
||
openMemory: '查看 Agent 记忆',
|
||
bindingExplicit: '显式绑定',
|
||
bindingImplicit: '隐式可见',
|
||
clearLessons: '全部清空',
|
||
clearLessonsConfirm: '删除该 skill 的全部经验?操作不可撤销。',
|
||
secretsHint: '这些键值会作为环境变量注入 skill 脚本子进程。明文加密落盘,从不通过接口回传。例如腾讯会议技能需要 TENCENT_MEETING_TOKEN。',
|
||
secretsEmpty: '该 skill 还没有配置任何密钥。',
|
||
secretKey: '键名',
|
||
secretValue: '值',
|
||
secretUpdatedAt: '最近更新',
|
||
secretAdd: '+ 新增密钥',
|
||
secretAddTitle: '新增密钥',
|
||
secretEditTitle: '修改密钥',
|
||
secretEdit: '修改',
|
||
secretDelete: '删除',
|
||
secretDialogHint: '保存后立即生效,下次执行 skill 脚本时注入到子进程环境。',
|
||
secretKeyPlaceholder: '例如 TENCENT_MEETING_TOKEN',
|
||
secretKeyRule: '允许字母、数字与下划线;首字符不能是数字;长度 ≤ 128。',
|
||
secretValuePlaceholder: '粘贴值(提交后服务端 AES 加密保存)',
|
||
secretSaveSuccess: '密钥已保存',
|
||
secretSaveFailed: '保存失败',
|
||
secretDeleteConfirm: '删除密钥 "{key}"?此 skill 后续脚本将不再收到此环境变量。',
|
||
secretDeleteSuccess: '密钥已删除',
|
||
secretDeleteFailed: '删除失败',
|
||
secretLoadFailed: '加载密钥列表失败',
|
||
},
|
||
runtime: {
|
||
disabled: '已停用',
|
||
unknown: '未知',
|
||
securityBlocked: '安全阻止',
|
||
depsMissing: '缺少依赖',
|
||
directoryActive: '目录激活',
|
||
databaseFallback: '数据库回退',
|
||
databaseActive: '数据库激活',
|
||
unresolved: '未解析',
|
||
},
|
||
messages: {
|
||
saveFailed: '保存技能失败',
|
||
saveSuccess: '已保存',
|
||
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)',
|
||
},
|
||
},
|
||
skillCurator: {
|
||
title: '技能管家',
|
||
desc: '按时间窗口自动归档长期闲置的技能,保持技能目录整洁。',
|
||
stateEnabled: '已部署',
|
||
stateActivated: '已激活',
|
||
statePreview: '仅预览',
|
||
statePaused: '已暂停',
|
||
config: '配置',
|
||
scope: '清理范围',
|
||
staleAfter: 'stale 阈值(天)',
|
||
archiveAfter: '归档阈值(天)',
|
||
cron: '调度表达式',
|
||
counts: '当前统计',
|
||
active: '活跃',
|
||
stale: '待归档',
|
||
archived: '已归档',
|
||
pinned: '已钉住',
|
||
blockedByBindings: '被绑定保护',
|
||
control: '运行控制',
|
||
lastObservedAt: '首次观测',
|
||
lastDryRunAt: '上次预览',
|
||
lastRunAt: '上次运行',
|
||
nextScheduledRun: '下次调度',
|
||
activate: '激活管家',
|
||
deactivate: '退回仅预览',
|
||
pause: '暂停',
|
||
resume: '恢复',
|
||
runDryRun: '立即预览',
|
||
activatedHint: '管家已激活,每日按调度真正归档闲置技能。',
|
||
previewHint: '管家处于仅预览模式,不会真正归档。查看预览报告满意后再激活。',
|
||
pausedHint: '管家已暂停,定时扫描不会运行。',
|
||
reports: '运行报告',
|
||
noReports: '暂无运行报告',
|
||
reportPlanned: '计划',
|
||
reportApplied: '执行',
|
||
reportScanned: '扫描',
|
||
reportDryRun: '预览',
|
||
reportTransitions: '状态变更',
|
||
activateSuccess: '技能管家已激活',
|
||
deactivateSuccess: '已退回仅预览模式',
|
||
pauseSuccess: '技能管家已暂停',
|
||
resumeSuccess: '技能管家已恢复',
|
||
dryRunSuccess: '预览报告已生成',
|
||
actionFailed: '操作失败',
|
||
loadFailed: '加载技能管家状态失败',
|
||
},
|
||
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: '保存并启用',
|
||
testBeforeSave: '请先测试连接,通过后即可启用',
|
||
saveFailed: '保存失败,请重试',
|
||
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: '本月',
|
||
},
|
||
models: {
|
||
title: '模型配置',
|
||
subtitle: '已启用的 LLM Provider 与当前生效模型。',
|
||
activeModel: '当前模型',
|
||
notSet: '未设置',
|
||
configured: '已就绪',
|
||
manage: '管理',
|
||
empty: '尚未启用任何模型 Provider。',
|
||
emptyCta: '去配置',
|
||
},
|
||
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: '已保存',
|
||
moveUp: '上移',
|
||
moveDown: '下移',
|
||
},
|
||
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_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: '读取技能文件',
|
||
},
|
||
forbidden: {
|
||
title: '无权访问',
|
||
message: '当前工作区中你的角色无法访问该页面。',
|
||
currentRole: '当前角色:{role}',
|
||
goChat: '返回对话',
|
||
goBack: '返回上一页',
|
||
},
|
||
goal: {
|
||
inlinePrompt: '这件事要不要设成目标,我帮你跟着?',
|
||
inlinePromptAccept: '好',
|
||
inlinePromptDecline: '不用',
|
||
autoFollowup: '自动延续',
|
||
sidebarActive: '此对话有正在进行的目标',
|
||
completedTitle: '目标达成',
|
||
completedDetail: '已存入长期记忆,下次问起能找回来',
|
||
exhaustedTitle: '这次的预算用完了',
|
||
exhaustedDetailTurns: '预算轮数({used}/{budget})用完。',
|
||
exhaustedDetailLlm: 'LLM 调用预算用完。',
|
||
},
|
||
approval: {
|
||
grant: {
|
||
pill: {
|
||
inactive: '未启用',
|
||
manage: '管理自动批准策略...',
|
||
},
|
||
chipLabel: '自动批准已启用 ({count})',
|
||
chipShort: '自动批准 {count}',
|
||
menu: '自动批准',
|
||
title: '自动批准策略',
|
||
desc: '策略让特定工具调用跳过人审。地板规则(如 rm -rf /、pipe-to-shell)始终生效,CRITICAL 严重度永远人审。',
|
||
scope: {
|
||
conversation: '会话',
|
||
agent: '智能体',
|
||
user: '用户',
|
||
workspace: '工作区',
|
||
},
|
||
kind: {
|
||
always: '永久',
|
||
until: '到期失效',
|
||
conversationEnd: '会话结束失效',
|
||
},
|
||
severityCeiling: '严重度上限',
|
||
createBtn: '新增策略',
|
||
createWorkspaceBtn: '创建全工具白名单 (危险)',
|
||
createWorkspaceWarning: '该策略将允许此工作区内所有用户的所有工具调用自动通过审批。地板规则仍会阻断灾难性命令,但其他风险都将被绕过。请输入登录密码确认。',
|
||
revokeBtn: '撤销',
|
||
revokeConfirm: '撤销后此策略将不再生效。继续?',
|
||
revokeConfirmDetailed: '撤销后 {tool} 的自动批准将不再生效,下次调用会重新走人工审批。继续?',
|
||
anyTool: '所有工具',
|
||
viewResolutions: '查看本规则触发的 {count} 次自动通过 →',
|
||
empty: '尚未配置自动批准策略',
|
||
columns: {
|
||
scope: '范围',
|
||
tool: '工具',
|
||
rule: '规则',
|
||
severity: '严重度上限',
|
||
kind: '类型',
|
||
expire: '过期时间',
|
||
grantedBy: '创建者',
|
||
grantedAt: '创建时间',
|
||
note: '备注',
|
||
actions: '操作',
|
||
},
|
||
form: {
|
||
scopeType: '范围类型',
|
||
scopeId: '范围 ID',
|
||
toolName: '工具名(空 = 任意工具)',
|
||
ruleId: '规则 ID(空 = 任意规则)',
|
||
maxSeverity: '严重度上限',
|
||
grantKind: '生效类型',
|
||
expireAt: '过期时间',
|
||
note: '备注',
|
||
password: '登录密码(敏感策略需要)',
|
||
},
|
||
},
|
||
resolution: {
|
||
source: {
|
||
userManual: '人工审批',
|
||
autoGrant: '自动批准',
|
||
hardBlock: '安全地板阻断',
|
||
timeout: '审批超时',
|
||
},
|
||
},
|
||
hardBlock: {
|
||
banner: '此命令命中安全地板,任何模式下都不可执行。',
|
||
},
|
||
forceHuman: {
|
||
banner: '此命令需要人工审批,自动批准策略对其不生效。',
|
||
},
|
||
},
|
||
} as const
|