Repository navigation
dsh-coding-sidebar 1.0.38
dsh-coding-sidebar 1.0.38
文件页签标题本地化:中文环境下新任务侧栏原本显示英文
Files,现在按当前
语言显示「文件」;同时修掉它背后那个「同一个文件窗口开出两个页签」的去重缺陷。
变更
文件窗口标题跟随语言(src/client/state.ts)
- 故障(现场 2026-10-02):中文环境下打开一条新任务,右侧栏默认的文件页签
标题是英文Files;任务跑一会儿再从「在文件夹中显示」等路径打开同一个窗口,
标题又变成「文件」——同一块 UI 出现两种文案。 - 根因:只有两条打开路径把标题写死成英文字面量,其余路径都走
locales.ts的t('files'):makeDefaultState()的新会话种子页签(title: 'Files');sanitizePersistedTab()的explorer→editor迁移(旧持久态里的
独立 explorer 页签重开为文件窗口)。
- 为什么切语言/刷新都救不回来:页签标题是存进状态里的字段而不是渲染期
算出来的字符串——TabBar只读tab.title,标题在创建时定稿,整棵面板重渲染
不会重写它;而这个字段还会落进 localStorage(dsh-sidebar:v1:<sessionId>)
永久保存。所以旧值必须在加载期自愈,否则已存在的会话永远显示Files。 - 修法:
- 种子与迁移两处改走
t('files'); sanitizePersistedTab()对无path的 editor 页签(= 文件窗口本身,
标题是派生的 UI 文案而非用户数据、且本仓库没有任何页签重命名入口)在每次
加载时按当前语言重派生标题——旧版本写进去的Files因此自愈,
中↔英(以及 better-locale 的 ja 覆盖)双向都跟随语言;- 带
path的 editor 页签标题保持原样(文件名是数据,不是文案),
FLOAT 窗口里的文件窗口同样自愈。
- 种子与迁移两处改走
文件窗口单实例(editorTabKey,src/client/state.ts + builtins/tabs.tsx)
- 故障(第二半):
revealInExplorer()(「在文件夹中显示」/ 产出文件行)走
openTab({type:'editor', title: t('files')}),与种子页签的 id(tab:N)不同,
本该靠dedupeKey收敛到同一个文件窗口;但 editor 描述符的键是
(tab) => tab.path,无path时返回undefined,而service.applyDedupe()
在键为undefined时整段跳过去重(if (key !== undefined))——于是同一个
文件窗口被开出两个页签(一个Files、一个「文件」),与该描述符自己的注释
「the single files window」相矛盾。 - 修法:新增导出
editorTabKey(tab): string(tab.path ?? ''),editor
描述符改用它。语义:按路径去重,但所有无path的 editor 页签是同一个
文件窗口。带路径的 per-path 窗口行为不变。 - 用户可见的行为变化:
+菜单里的「文件」在文件窗口已打开时聚焦它
(而不是再开一个),与「单一文件窗口」的既有设计意图一致。
测试(tests/tab-i18n.mjs,新增 17 条断言,已挂进 pnpm test)
- 直接 import 真源码
state.ts+locales.ts(unrun 加载 TS,不是孪生副本)。 - 覆盖:中/英种子标题、
seed='none'回归、无 path 文件窗口的持久态自愈(含
explorer迁移、FLOAT)、带 path 页签标题不被改写、无 path 非 editor 页签
不被改写、结构损坏仍整体拒绝、editorTabKey的碰撞/区分语义,外加两条
源码守卫(state.ts不得再出现title: 'Files';editor 描述符必须用
editorTabKey)——防止这两处硬编码回流。
兼容性说明
- 无 peer/契约变化;
dsh声明、cordis.patch.yml、服务面与 agent 工具均未动。 - 持久态格式不变(只重写无 path 文件窗口的标题字段),旧状态、旧 FLOAT、
旧explorer页签都按既有迁移路径继续可读。
验证
node tests/tab-i18n.mjs:17/17 PASS(TDD:先落测试观察到 5 条干净 RED,
再实现至全绿)。pnpm test全量 ALL PASS;pnpm typecheck0;pnpm smoke通过;
pnpm check:artifacts字节可复现(192 文件)。- 产物级核验:
lib/client.js中title:"Files"硬编码命中数 2 → 0,
editorTabKey在内 2 处。 - 待实机验证:重启后中文环境下新任务的默认页签显示「文件」,且反复
「在文件夹中显示」不再新增第二个文件页签。