最后整理:2026-06-24。
本文件只保留当前下一步工作。历史长文已移到 docs/archive/。
目标:把当前 /lang 从“能切换少量字符串”整改为“主要 TUI 用户可见文本都能在中文/英文之间一致切换,并且切换后立即生效、持久化、可测试”。
当前已经具备基础设施:
packages/tui/src/i18n/strings.ts 定义 Locale = 'zh-CN' | 'en' 和 Strings。packages/tui/src/i18n/en.ts、packages/tui/src/i18n/zh-CN.ts 已有一批翻译。packages/tui/src/i18n/index.ts 提供 t()、setLocale()、getLocale()、toggleLocale()。packages/tui/src/i18n/persist.ts 读写 .deepreef/lang.json。packages/tui/src/App.tsx 已支持 /lang 和语言选择菜单。主要问题:
Strings 覆盖面太小,只覆盖输入框、权限、部分卡片、部分命令和状态栏。/lang 切换依赖 setLocale() 修改模块变量,缺少显式 React locale state/context;切换能触发局部重渲染,但不是可靠的全局响应式机制。CommandRegistry.ts 的 slash command 描述仍是硬编码英文,自动补全不会随语言切换。commands.ts 的 buildHelpText() 仍有大量硬编码英文,包括 /theme、/thinking、/workflow、/goal、Agents、Current、deprecated note。App.tsx 中 /thinking、/harness、/goal、workflow instruction、status error 等用户反馈仍有大量硬编码英文。WelcomeScreen.tsx 默认混用中文和英文:中文 slogan、中文标签、英文 /lang can switch to English。WorkflowStatusBar.tsx、status/format.ts、PermissionPrompt.tsx、QuestionPrompt.tsx、ContextModal.tsx、SkillModal.tsx、SearchOverlay.tsx、Agent/Worker 可视化组件仍有硬编码英文。.deepreef/lang.json 持久化/损坏恢复”的专项测试。en.ts 和 zh-CN.ts 必须同时补齐。.deepreef/lang.json 仍作为当前阶段持久化路径;未来统一配置系统再迁移。涉及文件:
packages/tui/src/i18n/index.tspackages/tui/src/i18n/persist.tspackages/tui/src/App.tsxpackages/tui/src/i18n/context.tsx任务:
locale state,初始值来自 getLocale() 或 loadLang()。/lang 选择后同时调用 setLocale(next) 和 setLocaleState(next),保证整棵 TUI 立即重渲染。t() 的模块级变量改变。setLocale(next as any),改成类型安全的 Locale。.deepreef/lang.json 保持安全 fallback,不抛出。验收:
/lang,欢迎页、状态栏、命令补全、modal 文案能立即切换。.deepreef/lang.json 写入 { "lang": "en" } 或 { "lang": "zh-CN" } 后下次启动生效。.deepreef/lang.json 损坏或 lang 非法时回退默认语言,不影响启动。涉及文件:
packages/tui/src/i18n/strings.tspackages/tui/src/i18n/en.tspackages/tui/src/i18n/zh-CN.ts建议新增 key 分组,保持当前 flat Strings 也可以,但 key 命名要按模块聚合:
helpTitlehelpAgentshelpCurrenthelpDeprecatedAgentNotecmdThemecmdThinkingcmdWorkflowcmdTalkcmdGoalcmdGoalSetcmdGoalEditcmdGoalPausecmdGoalResumecmdGoalClearcmdGoalBudgetcmdGoalNoBudgetfailedLoadStatusthinkingModeSetthinkingModeCurrentharnessStatusharnessSetSessionharnessSetProjectharnessProjectUsageworkflowInstructionQueuedinputTargetSwitchedgoalSetgoalReplacedgoalUpdatedgoalNoActivegoalNoActiveToEditgoalPausegoalResumegoalCleargoalInvalidBudgetgoalBudgetSetgoalBudgetRemovedgoalStatusLinewelcomeTaglinewelcomePanelAgentwelcomePanelComponentswelcomeThinkingwelcomeContextwelcomeSubagentwelcomeProviderwelcomeSkillswelcomeMcpwelcomeDiagnosticswelcomeHelpHintwelcomeLangHintcontextModeTrimcontextModeCompactmodalEscCloseselectHintloadingSkillsskillsAvailablenoSkillsFoundskillEnabledskillDisabledskillNoDescriptionskillFooterHintcontextLoadingcontextLoadedcontextSavedcontextReducingcontextSubtitlecontextModeDescriptioncontextTriggerDescriptioncontextTargetDescriptioncontextRunNowcontextRunDescriptioncontextFooterHint验收:
en.ts 和 zh-CN.ts 实现同一个 Strings interface,无 as any 绕过。bun run typecheck 能通过。优先级从高到低:
packages/tui/src/CommandRegistry.tspackages/tui/src/commands.tspackages/tui/__tests__/commands.test.tspackages/tui/__tests__/status-command.test.tspackages/tui/src/App.tsxpackages/tui/src/WelcomeScreen.tsxpackages/tui/src/StatusBar.tsxpackages/tui/src/BridgeConnected.tsxpackages/tui/src/components/workflow/WorkflowStatusBar.tsxpackages/tui/src/workflow-mode-router.tspackages/tui/src/ModelPicker.tsxpackages/tui/src/SkillModal.tsxpackages/tui/src/ContextModal.tsxpackages/tui/src/SessionPicker.tsxpackages/tui/src/PermissionPrompt.tsxpackages/tui/src/QuestionPrompt.tsxpackages/tui/src/SearchOverlay.tsxpackages/tui/src/CommandAutocomplete.tsxpackages/tui/src/components/agents/AgentGroupDisplay.tsxpackages/tui/src/components/agents/AgentProgressDisplay.tsxpackages/tui/src/components/workers/WorkerActivityPanel.tsxpackages/tui/src/components/shared/VirtualizedTranscript.tsx迁移要求:
t() 或 locale context 读取。worker、supervisor、loop、provider id、model id、tool name。workflowPhaseLabel(phase, t())。建议新增或更新:
packages/tui/__tests__/i18n.test.ts
en 和 zhCN key 完整性。setLocale/getLocale/toggleLocale 行为。loadLang/saveLang 正常、缺文件、损坏文件、非法 lang。packages/tui/__tests__/commands.test.ts
buildHelpText(..., zhCN) 包含中文标题和中文命令说明。buildHelpText(..., en) 包含英文标题和英文命令说明。CommandRegistry 描述来自字典,而不是静态英文常量。packages/tui/__tests__/workflow-components.test.ts
WorkflowStatusBar 在 zh/en 下渲染 phase/lifecycle label。packages/tui/__tests__/status-command.test.ts
formatStatus 支持 zh/en section title,或明确保持英文并记录原因。验收命令:
bun run typecheck
bun test packages/tui/__tests__/commands.test.ts
bun test packages/tui/__tests__/status-command.test.ts
bun test packages/tui/__tests__/workflow-components.test.ts
bun test packages/tui/__tests__/i18n.test.ts
如果新增测试文件名不同,以实际文件为准,但必须覆盖以上行为。
在 TUI 中手动验证:
/lang can switch to English。/lang 选择 English 后:
/lang 切回中文,以上区域立即切换中文。/help、/status、/thinking max、/harness status、/goal、/context、/skill、/model 文案没有明显中英混杂。.deepreef/lang.json。zh-CN / en。目标:把当前分散的 last-config、role-config、model-targets、TUI settings、env 读取整理成统一 schema/control-plane。
建议范围:
~/.deepreef/config.toml。<project>/.deepreef/config.toml。deepreef config pathdeepreef config printdeepreef config validatedeepreef config editdeepreef config doctorCLI flags
> TUI 临时设置
> 项目级 .deepreef/config.toml
> 用户级 ~/.deepreef/config.toml
> 当前 .deepreef/last-config.json / role-config.json fallback
> 内置默认值
注意:session、goal、mailbox、tokensUsed、workflow phase 属于运行状态,不应写进主配置。
目标:让 Supervisor/Worker loop 能稳定处理常规工程任务。
建议任务:
runSupervisorAnalyse() 对结构化 plan 的校验和 fallback。useMailboxWorkflow 分支有明确启用条件或移出主链路。目标:让 loop = goal 的语义更完整,同时避免不可控自动执行。
建议任务:
GoalRuntime 的 continuation gate。budget_limited 后只允许收尾汇报,不开始新实质工作。blocked 保持连续三轮同一阻塞审计。目标:长时间会话、长 workflow、长流式输出后 TUI 不明显变卡。
建议任务:
历史专项建议见 archive/TUI性能整改建议.md。
目标:降低本地/免费/便宜模型的配置和调参成本。
建议任务:
目标:让外部用户更容易安装、运行、定位问题和贡献。
建议任务:
bun run typecheck && bun test && bun run build && npm pack --dry-run。