export default { ai: { assistant: 'AI 助手', toolName: { readFile: '读取文件', listDirectory: '查看目录', writeFile: '写入文件', fileInfo: '文件信息', appendFile: '追加写入', searchFiles: '搜索文件', patchFile: '修改文件', deleteFile: '删除文件', renameFile: '重命名/移动文件', }, aiTool: { fileInfoDesc: '获取文件或目录的元信息(是否存在、大小、行数、修改时间、是否二进制、是否目录),不读取文件内容', appendFileDesc: '向文件末尾追加内容,文件不存在则自动创建。返回写入字数和新文件大小', searchFilesDesc: '在指定目录下搜索匹配模式(字符串包含匹配)的文件名,返回路径和大小列表。支持递归搜索,结果限 50 条', renameFileDesc: '重命名或移动文件(同一工具覆盖 rename 和 move)。from=源路径、to=目标路径、overwrite=默认 false 目标存在拒绝。同卷原子 rename,跨卷自动 copy+remove', }, errorNotFound: '调用失败:接口地址或模型不存在,请检查 Provider 配置', errorAuth: '调用失败:API Key 无效或无权限', errorTimeout: '响应超时,请重试', errorNetwork: '网络连接失败,请检查网络', // CR-30-2 / F-260616-07(d) / 决策 a1: 流中断自动重试的过渡细条文案(中性描述: // 重试是过渡态非终态失败,不用错误警示语气;重试耗尽的终态失败仍走 AiError 错误卡) aiStreamRetry: '与上游连接中断,自动重试中({attempt}/{max})…', // Fatal 类错误(4xx/鉴权)不可重试,提示用户去设置而非重试 notRetryable: '此错误无法通过重试解决,请检查配置', streamInterruptedAfterTool: '⚠ 工具已执行完成,后续回复中断(长时间无数据流)。可点「重试」续跑(整轮重跑,已完成工具会重新执行)。', streamInterrupted: '⚠ 响应中断(长时间无数据流)。可能是网络断连或后端异常,请重试。', // 看门狗探测到后端已正常收敛(仅收尾事件丢失)时补的轻收敛提示,非错误语气 streamFinishedConverged: '响应在收尾阶段中断,已自动完成收敛。', // 看门狗超时探测到后端 loop 活着/已自动续跑时的首次提示(仅首次补,后续静默重挂不刷屏) streamAutoResuming: '响应出现停滞,正在自动恢复(无需手动操作)…', // UX-2025-04 / CR-30-2 / 决策 a1: 流中途失败保文后的系统提示气泡(前端镜像后端 session.messages) responseIncomplete: '⚠ 响应因网络中断不完整,以上为已接收的部分内容。可重新发送以获取完整回复。', // 达最大轮次后端自动收尾(非网络中断,复用 incomplete 气泡但语义独立) responseIncompleteMaxRounds: '已达最大轮次,AI 已自动收尾本轮结果;可继续对话让 AI 补充完善', queueFull: '待发送队列已满(最多 {limit} 条)', forceSendConfirm: 'AI 生成似乎卡住了。是否强制结束当前生成并发送消息?(可能中断正在生成的回复)', forceSendBtn: '强制发送', queueTimedOut: '排队超时', approvalNotDelivered: '审批操作未送达后端:{error}', queuedSendFailed: '队列消息发送失败:{error}', // UX-P2-A2:出错/重生成/编辑清排队消息的 toast 提示(原静默丢弃无任何反馈) queueCleared: '已清 {n} 条排队消息', queueWillContinue: '已停止,{n} 条排队消息仍将自动发送', approvalTimeout: '⚰ 审批超时,已自动拒绝:{toolName}', // 对话加载/切换失败反馈(网络抖动/IPC 断开 → 列表空/切换空白,原静默无反馈) loadConvFail: '对话列表加载失败,请检查网络或后端连接', switchConvFail: '对话切换失败,请重试', // UX走查 P3-7/P1-1: 关联会话跳转命中已删会话(原静默新建空会话/分离窗死点击) convDeleted: '会话已删除', // M30:重命名/归档/置顶 IPC 失败反馈(原无 try/catch 异常进 unhandledrejection,用户无感) renameConvFail: '重命名失败,请重试', archiveConvFail: '{action}失败,请重试', pinConvFail: '{action}失败,请重试', // G3.4:新建/删除对话失败反馈(原裸 await → unhandledrejection,用户无感) newConvFail: '新建对话失败,请重试', deleteConvFail: '删除对话失败,请重试', archiveAction: '归档', unarchiveAction: '取消归档', pinAction: '置顶', unpinAction: '取消置顶', // Agentic 循环进度条文案(C 状态语义化:第 N 轮 · 累计 M 次调用 · 进行中/待审批) // total 由前端聚合当前轮次 toolCalls(useTurnTrace),非后端字段 // 注:max 总轮次后端暂不透传,模板条件渲染省略;后端补全后新增 *WithMax key agenticProgress: '第 {round} 轮 · 累计 {total} 次调用 · ⏳{pending} 项待审批', agenticProgressNoPending: '第 {round} 轮 · 累计 {total} 次调用 · 进行中', // 执行轨迹卡/实时步骤摘要(A 过程压缩)与聚合分组行(B 聚合卡统一)共用语义 trace: { title: '执行轨迹', calls: '{n} 次调用', ok: '成功 {n}', fail: '失败 {n}', rejected: '拒绝 {n}', duration: '总耗时 {time}', expand: '展开轨迹', collapse: '收起轨迹', roundN: '第 {n} 轮', processOnly: '过程记录', stepDone: '✓ {n} 次调用完成', stepRunning: '正在 {name}', stepPending: '⏳ {n} 项待审批', }, // S1 子代理完成卡(AiAgentFinished):父会话消息流末尾的子代理终态轻量卡 agentFinished: { title: '子代理', completed: '已完成', truncated: '已截断', cancelled: '已取消', failed: '失败', // stop_kind 结构化终止原因细分(根治 summary 启发式;截断三态各自透出) truncMaxRounds: '已达轮次上限', truncWallClock: '超时截断', truncTokenBudget: 'token 预算截断', noReport: '未产出报告', // 被拒工具 chip({tools} 为「工具名×次数」枚举,多枚前 2 枚 + N) rejected: '被拒 {tools}', // 启动失败型子代理未落库无轨迹,卡禁点(hover 说明替代 viewHint) noTrace: '无轨迹(启动失败)', meta: '{rounds} 轮 · {tokens} tokens', // S3:完成卡可点击查看只读轨迹(hover 提示) viewHint: '点击查看执行轨迹', }, // P3-6 后台会话子代理完成轻提醒({status} 复用上方 agentFinished 状态词,{summary} 截前 40 字) agentFinishedToast: '子代理{status}: {summary}', // S3 子代理轨迹浮层(完成卡点击展开,只读简版渲染,关即弃) agentTrace: { title: '子代理执行轨迹', empty: '暂无消息记录', loadFail: '拉取子代理轨迹失败', roleUser: '用户', roleAssistant: '助手', roleTool: '工具结果', roleSystem: '系统', deniedTool: '被拒:{tool}', riskLow: '低风险', riskMedium: '中风险', riskHigh: '高风险', }, // 无人值守安全停靠卡(AiTaskParked,挂起家族终局):继续=重新授权续跑,停止归档=不再续跑 taskParked: { title: '任务已停靠', // stop_kind 结构化停止原因(词表后端契约钉死,未知值走 unknownKind 中性兜底) stopKind: { approval_timeout: '审批超时', cancelled: '已取消', circuit_breaker: '熔断保护', stall_breaker: '停滞保护', max_rounds: '已达轮次上限', fatal: '连续失败,已自动暂停', midstream: '响应流中断', }, unknownKind: '任务停靠', stopArchive: '停止归档', stoppedToast: '任务已停止,不再续跑', archiveFailed: '停止失败:{msg}', }, // 无人值守任务进度(AiTaskProgress,设计 §4.3):TopBar 轻量进度条,静默期可见「在干活」 taskProgress: { running: '进行中 · 第 {round}/{max} 轮 · {tokens} tokens', unlimited: '进行中 · 第 {round} 轮 · {tokens} tokens', barHint: '第 {round}/{max} 轮', }, // 无人值守边界配置卡(P1 总装简化:授权面收敛单一档,可调项只剩预算两项) taskBoundary: { toggle: '无人值守', badge: '无人值守边界已授权', forbidDestructive: '破坏性命令恒禁止', budgetToggle: '预算(高级)', budgetRounds: '最大轮次', budgetWallSecs: '最长运行时长', budgetUnlimited: '不限', budgetHint: '勾选「不限」即不设该项上限', confirmSet: '一次授权,任务期内不再打扰', clearBoundary: '清除边界', setOk: '已授权无人值守边界', clearOk: '已清除边界,回到逐次审批', setFail: '边界设置失败:{msg}', lockedGenerating: '任务运行中,仅支持清除边界(收权),字段不可修改', loadFailed: '边界读取失败,当前表单不可信', retryLoad: '重试', clearConfirm: '清除边界将立即收回无人值守授权,运行中的任务后续工具调用回到逐次审批。确定清除?', echoRounds: '最多 {n} 轮', echoSecs: '最长 {n} 秒', echoBudget: '预算 {rounds} / {secs}', echoNoBudget: '预算不限', // A12: 预算校验错误定位字段;A11: 脏编辑保留提示 budgetInvalidField: '{field} 需为正整数', dirtyKept: '有未提交的编辑已保留(目标会话已切换,确认前请核对)', }, }, }