export default { aiChat: { // ── 对话侧栏 ── sidebarTitle: '对话', newConversation: '新对话', doubleClickToRename: '双击重命名', generating: '生成中…', archive: '归档', unarchive: '取消归档', pinConversation: '置顶', unpinConversation: '取消置顶', moreActions: '更多操作', archived: '已归档', archivedCount: '已归档 ({n})', emptyConversation: '暂无对话', // UX-06 §3.1:对话搜索(实时过滤标题,Ctrl+K 聚焦) searchPlaceholder: '搜索对话…', searchEmpty: '无匹配对话', searchShortcutHint: 'Ctrl+K', // ── 时间分组(侧栏) ── today: '今天', yesterday: '昨天', earlier: '更早', groupEmpty: '暂无', // ── Header 按钮 ── conversationList: '对话列表', maximize: '最大化', pendingApprovalCount: '{n} 项待审批', pendingApprovalHint: '点击跳转到第一个待审批项', restoreSidebar: '还原侧栏', sidebarResizeHint: '拖拽调整侧栏宽度', detachWindow: '分离窗口', closePanel: '关闭面板', dockRight: '吸附到主窗口右侧', undock: '取消吸附', pinOnTop: '置顶', unpin: '取消置顶', closeWindow: '关闭窗口', // ── Provider 状态 ── clickToSwitchProvider: '点击切换 Provider', providerNotConfigured: '未配置 AI 提供商,请在设置中添加', notConfigured: '未配置', // ── F-01 阶段6: 模型选择器(自动/指定 toggle + 下拉) ── autoMode: '自动', specifyMode: '指定', autoModeHint: '自动模式:路由器按场景自动选最优模型', specifyModeHint: '指定模式:使用下拉所选模型覆盖路由(仅主对话)', selectModel: '选择模型', noModels: '无可用模型,请在设置中拉取', // ── 空状态(UX-2025-20:示例问题卡片 + 无 provider 引导) ── emptyNoProvider: '未配置 AI 提供商', emptyNoProviderHint: '请在设置中添加 Provider 后开始对话', emptyTitle: '与 AI 助手对话', emptyHint: '可以说"帮我创建一个项目"或"列出所有任务"', // 示例问题卡片:点击自动填入并发送(4 条,DevFlow 场景相关) examplePrompt1: '分析这个项目的依赖关系', examplePrompt2: '帮我写一个工作流节点', examplePrompt3: '列出当前所有任务', examplePrompt4: '生成一个项目灵感', goToSettings: '去设置', goToSettingsHint: '分离窗口无法直接打开设置,请在主窗口的设置页配置 AI 提供商', // ── Provider 切换反馈(UX-2025-14) ── providerSwitched: '已切换到 {model}', providerSwitchHint: '当前模型:{model}', // ── 回到底部 ── backToBottom: '回到底部', // ── 待发送队列 ── queueTitle: '待发送 {n}/10', clearQueue: '清空', // UX-260616-06/07:队列项编辑 + 立即发送 queueEdit: '编辑', queueSave: '保存', queueCancel: '取消', queueSendNow: '立即发送', // ── 技能 ── clearSkill: '取消技能', placeholderWithSkill: '已选技能,输入参数后回车', placeholderDefault: "输入消息...(/ 触发技能,{'@'} 引用实体)", skillNoMatch: '无匹配技能', skillNotLoaded: '未读取到本机技能', // ── UX-10: @ 实体引用(@ 触发 popover,选中插入 [类型:名] 标记) ── mentionHint: "{'@'} 引用项目/任务", mentionGroupProject: '项目', mentionGroupTask: '任务', mentionGroupIdea: '灵感', mentionNoMatch: '无匹配实体', mentionEmpty: '暂无可引用的项目/任务', // ── 发送 ── stopGenerating: '停止生成', // L2 状态机停止按钮三态(ConvState 派生) stopping: '停止中', stopFailedRetry: '停止失败,点击重试', // ── 输入提示 ── inputHint: 'Enter 发送 · Shift+Enter 换行', // ── F-260614-05 Phase 2b: 图片输入(粘贴/拖拽) ── // 粘贴/拖拽图片到输入框,发送时构造多模态 ContentPart[] 渲染到用户气泡 removeImage: '移除图片', imagePreviewAlt: '待发送图片', imageTooLarge: '图片过大(上限 10MB),已跳过', imageLimit: '最多 {n} 张图片,已忽略多余的', imageReadFailed: '图片读取失败', // ── 确认弹层 ── confirmDeleteConversation: '确定删除对话「{title}」?该操作不可恢复。', // UX-260617-24:删除当前活跃对话的醒目提示(活跃对话误删会清空当前视图,影响更大) confirmDeleteActiveConversation: '「{title}」是当前正在查看的对话,删除后将清空当前视图且不可恢复,确定继续?', clearChat: '清空', confirmClearChat: '确定清空当前对话的所有消息?此操作不可恢复。', toastSendFail: '发送失败:{msg}', // ── 消息拷贝(F-260615-13) ── copyMsg: '复制消息', copied: '已复制', copyFailed: '复制失败', // ── 消息操作栏(UX-02) ── regenerate: '重新生成', regenerateFailed: '重新生成失败:{msg}', regenerateUnavailable: '没有可重新生成的回复', // ── UX-09: 编辑末条 user 消息并重新生成 ── editMessage: '编辑', editMessageFailed: '编辑失败:{msg}', editNotLastUser: '只能编辑最后一条用户消息', placeholderEditing: '编辑消息后回车重新生成(Esc 取消)', // ── 错误气泡操作入口(UX-03 / UX-260616-01) ── retry: '重试', goToSettingsAction: '去设置', // ── F-260616-03: 达 max_iterations 暂停态操作卡 ── maxRoundsReached: '已达最大轮次,是否继续?', maxRoundsHint: '继续将再跑一轮上限;停止则按当前结果收尾', continueLoop: '继续', stopLoop: '停止', continueLoopFailed: '继续失败:{msg}', stopLoopFailed: '停止失败:{msg}', // ── L1 求助协议(aichat 体验与 agent 能力系统化重构 §2.3,2026-06-21):断路器熔断求助卡 ── helpRequiredAck: '已记录选择,请重新描述需求以换思路/继续', // ── F-260619-03 Phase B: 路径授权弹窗(LLM 访问白名单外目录挂起) ── dirAuthRequired: '需要路径授权', dirAuthHint: '{tool} 想访问:{path}', dirAuthOnce: '本次', dirAuthSession: '当前会话', dirAuthAlways: '始终放行', dirAuthDeny: '拒绝', dirAuthFailed: '授权失败:{msg}', // ── Input Augmentation 层: mention/skill 注入反馈 ── // search_files 盲搜被白名单兜底拒绝(不应弹授权窗,直接友好提示用户改用 @引用或绝对路径) searchFilesBlocked: 'search_files 仅在已授权目录可用,请用 @[项目] 引用或提供绝对路径', // /技能 热重载(ai_reload_skills IPC)成功后提示 skillReloaded: '技能已重新加载', // @引用 实体 resolve 失败(id 指向的项目/任务/灵感/技能已被删除或不可用) mentionUnresolved: '引用的 {kind} 已删除或不可用', // 同名技能冲突(scan_skills 返回 conflicts,前端提示,注入按 skills>commands>plugins 优先级取首份) skillConflict: '技能 {name} 存在多份定义,已采用 skills 优先级', // ── F-15 阶段2: 手动上下文管理(清空 / 压缩) ── // 按钮(Header 操作区:垃圾桶 + 压缩图标) clearContext: '清空上下文', compressContext: '压缩上下文', // 二次确认(清空不可逆语义,防误触;历史归档保留不删) // 标题「清空上下文」融入正文首句;强调不可逆 + 归档分段 + AI 不再看到历史 clearContextConfirm: '清空上下文?此操作不可逆,当前对话上下文将被归档为分段(AI 将不再看到这些历史消息)。新对话不受影响。', // 二次确认弹窗的危险按钮文案(ConfirmDialog dangerLabel);不传则回退 common.confirm clearContextDangerLabel: '清空', // 折叠分隔条(连续同 status 合并一条;{n}=合并的消息条数) contextArchived: '已归档 {n} 条消息', compressed: '已压缩上下文', compressing: '压缩中…', clearSuccess: '上下文已清空', compressSuccess: '上下文已压缩', compressError: '压缩失败:{msg}', clearError: '清空失败:{msg}', // 折叠条展开 / 收起 expand: '展开', collapse: '收起', // 压缩摘要块标题(展开后 system 摘要消息前的标签) compressedSummaryLabel: '上下文摘要', // ── AE-2025-04 会话级信任(Session Trust) ── // 自动放行 toast(同会话已批准过同类操作:同工具+同目录,轻量 info 非审批气泡) autoApprovedToast: '已自动放行: {tool}({dir})', }, }