- 删除 production 中全部 env!("CARGO_MANIFEST_DIR")引用
- workspace_root() 替换为运行期 data_dir(Tauri app_data_dir)
- 相对路径锚定改为 AllowedDirs.first_persistent_dir(),无授权时引导绑定项目
- .trash 迁到 data_dir/.trash,含自动迁移
- authz_debug → temp_dir,workspace_drive → current_dir
- run_command 默认 working_dir 改为空串
- G1 目标刷新改为每次消息覆盖(含 ai_chat_edit 路径)
- #6 评分关键词拆到独立文件 scoring_keywords.rs
- #7 promote 补偿删除 purge_with_descendants → soft_delete
- #8 关联双向同步: 后端事务 sync_related_ids + IPC + 前端全链路
- 设置面板新增数据目录显示
211 lines
9.7 KiB
TypeScript
211 lines
9.7 KiB
TypeScript
export default {
|
||
settings: {
|
||
// ===== 页面标题 =====
|
||
title: '⚙️ 设置',
|
||
|
||
// ===== 左导航分类(阶段3 master-detail) =====
|
||
navAppearance: '外观',
|
||
navAiModel: 'AI 模型',
|
||
navKnowledge: '知识库',
|
||
navPerformance: '性能',
|
||
navSecurity: '安全',
|
||
navAdvanced: '高级',
|
||
|
||
// ===== 设置搜索(阶段4) =====
|
||
searchPlaceholder: '搜索设置项…',
|
||
searchNoResult: '无结果',
|
||
|
||
// ===== 即时生效反馈(阶段5 SettingRow) =====
|
||
savedHint: '✓ 已保存',
|
||
nextRoundBadge: '下次对话生效',
|
||
|
||
// ===== 连接管理(阶段7:实验功能 badge 明示暂未接入 AI) =====
|
||
experimentalBadge: '实验功能·暂未接入 AI 工具',
|
||
|
||
// ===== AI 模型配置面板 =====
|
||
panelAiProvider: '🤖 AI 模型配置',
|
||
addProvider: '+ 添加 Provider',
|
||
editProviderTitle: '编辑 Provider',
|
||
addProviderTitle: '添加 Provider',
|
||
emptyProvider: '暂无 AI 提供商,点击上方按钮添加',
|
||
badgeDefault: '默认',
|
||
actionSetDefault: '设为默认',
|
||
detailBaseUrl: 'Base URL',
|
||
detailModel: '模型',
|
||
detailApiKey: 'API Key',
|
||
detailPoolEnabled: '入负载均衡池',
|
||
detailPoolWeight: '池选择权重',
|
||
badgePoolDisabled: '已停用',
|
||
descPoolEnabled: '开启后参与主链路由/选池;关闭后仅保留配置,不被选中',
|
||
descPoolWeight: '0-100,高权重优先被选为主;同权重近似轮询(后端 clamp [0,100])',
|
||
toastPoolUpdateOk: '负载均衡池配置已更新',
|
||
toastPoolUpdateFail: '更新负载均衡池配置失败:{msg}',
|
||
|
||
// Provider 表单
|
||
labelName: '名称',
|
||
labelProviderType: '协议类型',
|
||
labelBaseUrl: 'Base URL',
|
||
labelApiKey: 'API Key',
|
||
labelDefaultModel: '默认模型',
|
||
phProviderName: '如 DeepSeek、GLM-4',
|
||
phBaseUrl: 'https://api.deepseek.com',
|
||
phApiKey: 'sk-...',
|
||
phDefaultModel: 'deepseek-chat',
|
||
providerTypeOpenaiCompat: 'OpenAI 兼容(DeepSeek / GLM v4 / OpenAI)',
|
||
providerTypeAnthropic: 'Anthropic 兼容(GLM 订阅 / Claude)',
|
||
saving: '保存中...',
|
||
|
||
// 模型拉取(F-01 阶段6)
|
||
testConnection: '测试连接并拉取模型',
|
||
fetchingModels: '拉取中...',
|
||
fetchHintSaveFirst: '请先保存 Provider 后再拉取模型',
|
||
labelWeight: '权重',
|
||
modelListTitle: '已拉取模型({count} 个)',
|
||
modelListHint: '已启用 / 权重为本次会话内调整,下次「测试连接」会以最新探测结果覆盖',
|
||
saveModels: '保存模型配置',
|
||
toastFetchOk: '已拉取 {count} 个模型',
|
||
toastFetchFail: '拉取模型失败:{msg}',
|
||
fetchFailedTimeout: '拉取超时,请检查 Base URL 是否可达:{msg}',
|
||
fetchFailedAuth: '鉴权失败,请检查 API Key:{msg}',
|
||
fetchFailedNotFound: '端点不存在,该厂商可能不支持模型列表拉取:{msg}',
|
||
toastModelEditLocalOnly: '已启用 / 权重为本地编辑,下次拉取时覆盖',
|
||
|
||
// 模型特征标签(模态 + 能力 + 探测来源;cost/intel 去除见 UX-260618-04)
|
||
tagModality: { text: '文本', vision: '视觉', audio: '音频', video: '视频' },
|
||
tagCapability: { tool_use: '工具调用', embedding: '向量', code_gen: '代码' },
|
||
tagSource: { user_set: '手动', preset_table: '预设', heuristic: '推断', default: '默认' },
|
||
|
||
// ===== 连接管理面板 =====
|
||
panelConnection: '🔗 连接管理',
|
||
addConnection: '+ 添加连接',
|
||
editConnectionTitle: '编辑连接',
|
||
addConnectionTitle: '添加连接',
|
||
emptyConnection: '暂无连接,点击上方按钮添加',
|
||
labelType: '类型',
|
||
labelHost: 'Host',
|
||
labelPort: 'Port',
|
||
labelUser: '用户名',
|
||
phConnName: 'flux_dev',
|
||
phHost: '127.0.0.1',
|
||
phPort: '3306',
|
||
phUser: 'root',
|
||
|
||
// ===== 通用设置面板 =====
|
||
panelGeneral: '🎨 通用设置',
|
||
// 阶段2 UX 重构:GeneralPanel 拆 3 Section 后各 Section 标题
|
||
sectionAppearance: '🎨 外观',
|
||
sectionPerformance: '⚡ 性能',
|
||
sectionAdvanced: '⚙️ 高级',
|
||
labelTheme: '主题',
|
||
descTheme: '深色 / 浅色模式',
|
||
themeDark: '🌙 深色模式',
|
||
themeLight: '☀️ 浅色模式',
|
||
themeSystem: '💻 跟随系统',
|
||
|
||
labelLanguage: '语言',
|
||
descLanguage: '界面显示语言',
|
||
|
||
labelAiLanguage: 'AI 对话语言',
|
||
descAiLanguage: 'AI 回复使用的默认语言',
|
||
aiLanguageAuto: '🔄 跟随界面语言',
|
||
aiLanguageZh: '🇨🇳 简体中文',
|
||
aiLanguageEn: '🇺🇸 English',
|
||
|
||
labelDataDir: '应用数据目录',
|
||
descDataDir: 'DevFlow 存储 .trash(回收站)、数据库、日志等内部数据的目录路径',
|
||
|
||
labelAutoExecute: 'AI 自动执行范围',
|
||
descAutoExecute: '控制 AI 自动执行操作的风险等级(低/中/全部接管)',
|
||
autoModeLow: '低风险(默认)',
|
||
autoModeMedium: '含中风险',
|
||
autoModeAll: '全部接管(无审批)',
|
||
autoModeAllConfirmTitle: '确认完全 AI 接管?',
|
||
autoModeAllConfirmContent: '所有操作(含高危)将自动执行,无审批。AI 可能直接执行危险操作(删文件/执行任意命令等),请确认你信任当前对话的 AI。',
|
||
|
||
labelLogLevel: '日志级别',
|
||
descLogLevel: '工作流日志详细程度',
|
||
|
||
labelShowTokenUsage: '显示 Token 用量',
|
||
descShowTokenUsage: '在对话中展示每次回复的 token 消耗',
|
||
|
||
labelStreamingMd: '流式 Markdown 渲染',
|
||
descStreamingMd: '流式生成过程中渲染代码块/列表/标题格式(未闭合代码块降级纯文本防闪烁);关闭后流式期间仅显纯文本,生成完成后才渲染完整格式',
|
||
|
||
labelGlobalConcurrency: '全局最大并发',
|
||
descGlobalConcurrency: '所有对话共享的 LLM 同时请求数上限',
|
||
|
||
labelPerConvConcurrency: '单对话并发上限',
|
||
descPerConvConcurrency: '单个对话内同时进行的 LLM 调用数(主循环 / 标题 / 提炼共享)',
|
||
|
||
labelAgentMaxIterations: 'Agent 最大轮次',
|
||
descAgentMaxIterations: 'Agentic 循环(流式→工具→回传)的最大轮次(0=不限,1-50,默认 10);热改下次发消息生效',
|
||
labelUnlimited: '不限',
|
||
|
||
labelAgentMaxRetries: '流式失败重试次数',
|
||
descAgentMaxRetries: '流式对话失败时自动重试次数(0-10,默认 3);只重试未输出任何 token 的流前失败,已输出文本的失败直接放弃',
|
||
|
||
// ===== F-260619-03 Phase A: AI 工具授权目录面板 =====
|
||
panelAllowedDirs: '📁 AI 工具授权目录',
|
||
descAllowedDirs: 'AI 文件工具(读/写/列/改/搜等)仅可访问以下授权目录。项目根目录(devflow 自身)始终隐式授权,无需在此添加。未在列表内的目录访问将被拒绝。',
|
||
allowedDirsLoading: '加载中…',
|
||
allowedDirsEmpty: '暂无额外授权目录(仅项目根目录默认授权)',
|
||
allowedDirsInputPlaceholder: '输入授权目录绝对路径,如 E:/wk-lab/u-abc',
|
||
allowedDirsSelectDir: '选择目录',
|
||
allowedDirsAdd: '添加',
|
||
allowedDirsSave: '保存',
|
||
allowedDirsReload: '重载',
|
||
allowedDirsLoadFail: '加载授权目录失败',
|
||
allowedDirsDup: '该目录已在授权列表中',
|
||
allowedDirsAddFail: '添加授权目录失败',
|
||
allowedDirsRemoveFail: '删除授权目录失败',
|
||
|
||
// ===== 知识库面板 =====
|
||
panelKnowledge: '📚 知识库',
|
||
labelAutoExtract: '自动提炼知识',
|
||
descAutoExtract: '对话完成后自动从内容中提炼可复用知识(AI 提炼产候选,需人工审核)',
|
||
labelTriggerMode: '提炼触发方式',
|
||
descTriggerMode: '自动提炼的触发时机',
|
||
triggerOnComplete: '对话完成后',
|
||
triggerManualOnly: '仅手动',
|
||
labelMinMessages: '最少消息数',
|
||
descMinMessages: '对话达到此消息数才触发提炼(防闲聊噪音)',
|
||
labelAutoInject: '自动注入相关知识',
|
||
descAutoInject: '聊天时自动检索相关知识注入对话上下文',
|
||
labelVectorEnabled: '语义检索(向量)',
|
||
descVectorEnabled: '用 Embedding 向量做语义匹配,意思相近用词不同也能搜到;关闭时纯关键词匹配,零外部调用',
|
||
labelEmbeddingProvider: 'Embedding Provider',
|
||
descEmbeddingProvider: '向量化用的 AI 提供商(仅 OpenAI 兼容类型;选定后更换需重新嵌入全部知识)',
|
||
labelEmbeddingModel: 'Embedding 模型',
|
||
descEmbeddingModel: '如 embedding-3(智谱) / text-embedding-v4(阿里) / text-embedding-3-small(OpenAI)',
|
||
embeddingProviderNone: '未选择',
|
||
phEmbeddingModel: 'embedding-3',
|
||
|
||
// ===== Toast 提示 =====
|
||
toastLoadProviderFail: '加载提供商失败',
|
||
toastSaveIncomplete: '请填写完整(名称 / Base URL / API Key / 模型)',
|
||
toastSaved: '已保存',
|
||
toastSaveFail: '保存失败:{msg}',
|
||
toastDeleted: '已删除',
|
||
toastDeleteFail: '删除失败:{msg}',
|
||
toastSetDefaultOk: '已设为默认',
|
||
toastSetDefaultFail: '设置默认失败:{msg}',
|
||
toastConnIncomplete: '请填写名称和 Host',
|
||
|
||
// ===== 导入 / 导出(阶段6) =====
|
||
export: '导出',
|
||
import: '导入',
|
||
exportHint: '导出全部偏好(appSettings + 知识库配置)为 JSON 文件',
|
||
importHint: '从 JSON 文件导入并覆盖当前偏好',
|
||
importConfirm: '导入将覆盖当前的全部偏好设置(外观 / 性能 / 知识库等),确定继续?',
|
||
importSuccess: '导入成功(部分项如并发 / 轮次需重启或下次对话生效)',
|
||
importFail: '导入失败:{msg}',
|
||
exportFail: '导出失败:{msg}',
|
||
importInvalidJson: '文件不是有效的 DevFlow 设置备份(格式不符)',
|
||
importScopeNote: '范围:appSettings + 知识库配置(不含 Provider 密钥)',
|
||
|
||
// ===== 确认弹层 =====
|
||
confirmDeleteProvider: '确定删除提供商「{name}」?该操作不可恢复。',
|
||
confirmDeleteConn: '确定删除连接「{name}」?',
|
||
},
|
||
}
|