fix(changes): 会话事件改走宿主 changes.ops 路由 + diff 展开二级设置 + 视觉迭代

CI 修复(plugin-mount 的 ctx.sessions.get TypeError ×1003):
- 客户端 runtime 无事件日志面——badge/SessionLens 原在客户端直读
  ctx.sessions.get(id).events / ctx.on('session/event'),全部不可达。
- 新增宿主路由 changes.ops:live 会话日志优先,冷会话回放
  sessionPersistence.inspect;afterSeq 增量(缺省游标含 seq 0,
  显式游标为 seq > afterSeq,同 sidechat.events 约定),窗口上限
  4000 与客户端累加器一致。
- ChangesTab 轮询(mount 一拉 + visible 2.5s 增量)折入 ops,写
  模块级 opCounts 缓存供 badge 同步读取;SessionLens 改纯展示。

diff 展开二级设置(changesDiffFloat,默认浮窗):
- prefs 四处接线 + git tab settings select(浮窗/面板,图标选项卡)
- 预览面板「展开为 diff tab」按设置落点:浮窗居中弹出或源 pane
  下方 split;i18n 全 21 词典同步。

视觉迭代(真机挂载截图审查后调整):
- Session 视角:kind 徽章为左轨,大小+相对时间右对齐元列;失败
  操作行红色内嵌条;文件组头降为三级标签并加组间距。
- Git 视角:untracked '?' 徽章与新增同绿色;stage 按钮改 plus 图标。
- diff 折叠行:可展开折叠带 › 箭头 + 次级对比度,静态 gap 不再
  显示 pointer/hover;预览头路径改尾部截断(RTL 技巧,保文件名)。

验证:typecheck ✓ / vitest 1123 ✓ / pnpm test:mount(钉 alpha.2 CLI)
14/14 ✓;真机挂载截图(badge=5、双视角、浮窗展开)0 console error。
This commit is contained in:
Menghuan1918
2026-08-31 17:52:59 +08:00
parent 24a3813c63
commit f024fbf092
40 changed files with 456 additions and 112 deletions
+14
View File
@@ -150,6 +150,13 @@ export const zh = {
changesOpenDiffTab: '在独立页签中打开',
changesClosePreview: '关闭预览',
changesResizePreview: '调整预览高度',
changesDiffOpenTitle: '差异展开方式',
changesDiffOpenDesc: '「展开为独立页签」把 diff 放到哪里',
changesDiffOpenFloat: '浮窗',
changesDiffOpenFloatDesc: '作为自由窗口居中打开,可拖拽、缩放、置顶',
changesDiffOpenPane: '面板',
changesDiffOpenPaneDesc: '停靠在源面板下方(VSCode 式 diff 分栏)',
changesLoadError: '会话文件记录暂不可用',
staged: '已暂存',
unstaged: '未暂存',
cancel: '取消',
@@ -533,6 +540,13 @@ export const en: Record<keyof typeof zh, string> = {
changesOpenDiffTab: 'Open in a diff tab',
changesClosePreview: 'Close preview',
changesResizePreview: 'Resize preview',
changesDiffOpenTitle: 'Diff opens as',
changesDiffOpenDesc: 'Where the "expand to a diff tab" action lands the diff',
changesDiffOpenFloat: 'Free window',
changesDiffOpenFloatDesc: 'A floating window centered on the viewport — drag, resize, keep on top',
changesDiffOpenPane: 'Pane',
changesDiffOpenPaneDesc: 'Docked below the source panel (VSCode-style diff split)',
changesLoadError: 'Session file records are unavailable right now',
staged: 'Staged',
unstaged: 'Unstaged',
cancel: 'Cancel',