新增: Phase2 阶段收尾(Sprint 1-20)

重构:删 5 零引用 crate(df-evolve/plugin/stages/task/traceability)+ 清死模块、ai.rs 拆 11 子 module、ai.ts 拆 6 composable、i18n 拆目录
功能:知识库全栈(df-project/scan + CRUD + 时间线 + 前端)、Settings 拆分、appSettings KV 迁移、模型池、LLM 并发 Semaphore
修复:审批持久化根治、ConditionEngine 默认拒绝、NodeRegistry unimplemented 清除、promote 补偿删除、工具结果截断 50KB、路径校验防 symlink 逃逸
文档:B-03 人工审批设计、决策记录三分档、规格契约自检、经验记录、todo 看板、PROGRESS 更新

详见 PROGRESS.md。src-tauri/儿童每日打卡应用/ 与本项目无关,已排除。
This commit is contained in:
lxy
2026-06-14 14:08:20 +08:00
parent 98393b4908
commit cf017f81e2
167 changed files with 19549 additions and 6886 deletions
+118
View File
@@ -0,0 +1,118 @@
export default {
settings: {
// ===== Page title =====
title: '⚙️ Settings',
// ===== AI Provider panel =====
panelAiProvider: '🤖 AI Model Config',
addProvider: '+ Add Provider',
editProviderTitle: 'Edit Provider',
addProviderTitle: 'Add Provider',
emptyProvider: 'No AI provider. Click above to add.',
badgeDefault: 'Default',
actionSetDefault: 'Set as default',
detailBaseUrl: 'Base URL',
detailModel: 'Model',
detailApiKey: 'API Key',
// Provider form
labelName: 'Name',
labelProviderType: 'Protocol',
labelBaseUrl: 'Base URL',
labelApiKey: 'API Key',
labelDefaultModel: 'Default',
phProviderName: 'e.g. DeepSeek, GLM-4',
phBaseUrl: 'https://api.deepseek.com',
phApiKey: 'sk-...',
phDefaultModel: 'deepseek-chat',
providerTypeOpenaiCompat: 'OpenAI-compatible (DeepSeek / GLM v4 / OpenAI)',
providerTypeAnthropic: 'Anthropic-compatible (GLM subscription / Claude)',
saving: 'Saving...',
// ===== Connection panel =====
panelConnection: '🔗 Connections',
addConnection: '+ Add connection',
editConnectionTitle: 'Edit connection',
addConnectionTitle: 'Add connection',
emptyConnection: 'No connection yet. Click the button above to add one.',
labelType: 'Type',
labelHost: 'Host',
labelPort: 'Port',
labelUser: 'Username',
phConnName: 'flux_dev',
phHost: '127.0.0.1',
phPort: '3306',
phUser: 'root',
// ===== General settings panel =====
panelGeneral: '🎨 General',
labelTheme: 'Theme',
descTheme: 'Dark / light',
themeDark: '🌙 Dark',
themeLight: '☀️ Light',
themeSystem: '💻 System',
labelLanguage: 'Language',
descLanguage: 'Interface language',
labelAiLanguage: 'AI language',
descAiLanguage: 'Default AI reply language',
aiLanguageAuto: '🔄 Follow interface language',
aiLanguageZh: '🇨🇳 简体中文',
aiLanguageEn: '🇺🇸 English',
labelAutoExecute: 'Auto-execute',
descAutoExecute: 'Let AI auto-execute low-risk actions',
labelLogLevel: 'Log level',
descLogLevel: 'Verbosity of workflow logs',
labelShowTokenUsage: 'Show token usage',
descShowTokenUsage: 'Show token consumption of each reply in conversations',
labelGlobalConcurrency: 'Global max concurrency',
descGlobalConcurrency: 'Shared cap on simultaneous LLM requests across all conversations',
labelPerConvConcurrency: 'Per-conversation concurrency',
descPerConvConcurrency: 'Concurrent LLM calls within one conversation (main loop / title / distill shared)',
// ===== Knowledge base panel =====
panelKnowledge: '📚 Knowledge base',
labelAutoExtract: 'Auto-distill knowledge',
descAutoExtract: 'Automatically distill reusable knowledge from conversations after they finish (AI proposes candidates, manual review required)',
labelTriggerMode: 'Distill trigger',
descTriggerMode: 'When auto-distillation is triggered',
triggerOnComplete: 'On conversation complete',
triggerOnIdle: 'On conversation idle',
triggerManualOnly: 'Manual only',
labelMinMessages: 'Min message count',
descMinMessages: 'Distillation triggers only after this many messages (filters out small talk noise)',
labelIdleTimeout: 'Idle timeout (s)',
descIdleTimeout: 'Seconds to wait in idle-trigger mode',
labelAutoInject: 'Auto-inject related knowledge',
descAutoInject: 'Retrieve related knowledge and inject it into the conversation context during chat',
labelVectorEnabled: 'Semantic retrieval (vector)',
descVectorEnabled: 'Use Embedding vectors for semantic matching — close meanings surface even with different wording; when off, pure keyword matching with zero external calls',
labelEmbeddingProvider: 'Embedding provider',
descEmbeddingProvider: 'AI provider used for vectorization (OpenAI-compatible only; switching requires re-embedding all knowledge)',
labelEmbeddingModel: 'Embedding model',
descEmbeddingModel: 'e.g. embedding-3 (Zhipu) / text-embedding-v4 (Alibaba) / text-embedding-3-small (OpenAI)',
embeddingProviderNone: 'Not selected',
phEmbeddingModel: 'embedding-3',
// ===== Toast =====
toastLoadProviderFail: 'Failed to load providers',
toastSaveIncomplete: 'Please fill in all fields (Name / Base URL / API Key / Model)',
toastSaved: 'Saved',
toastSaveFail: 'Save failed: {msg}',
toastDeleted: 'Deleted',
toastDeleteFail: 'Delete failed: {msg}',
toastSetDefaultOk: 'Set as default',
toastSetDefaultFail: 'Failed to set default: {msg}',
toastConnIncomplete: 'Please fill in Name and Host',
// ===== Confirm dialogs =====
confirmDeleteProvider: 'Delete provider "{name}"? This cannot be undone.',
confirmDeleteConn: 'Delete connection "{name}"?',
},
}