From 24a3813c630ee99a29637f138c69f71e509805a7 Mon Sep 17 00:00:00 2001 From: Menghuan1918 Date: Mon, 31 Aug 2026 01:31:22 +0800 Subject: [PATCH] =?UTF-8?q?feat!:=20=E5=90=88=E5=B9=B6=20Git=20=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E4=B8=8E=E6=96=87=E4=BB=B6=E8=BF=BD=E8=B8=AA=E4=B8=BA?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E3=80=8C=E6=96=87=E4=BB=B6=E5=8F=98=E5=8A=A8?= =?UTF-8?q?=E3=80=8Dtab=EF=BC=88=E5=8F=8C=E8=A7=86=E8=A7=92=20+=20?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=20diff=20=E6=A0=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 PR #471(file-trace)基础上的演进: - 合并 tab:git tab(id 保留,兼容持久化布局)升级为「文件变动」双视角 tab——Git 视角(原 GitView 全部能力:staged/unstaged/提交/历史/worktree· 子仓库选择/右键菜单/确认弹窗)+ 本轮文件视角(原 file-trace:会话事件 日志实时折叠的模型读写编辑记录,按文件分组、新增类型筛选 chips、相对 时间);file-trace tab 移除(未随任何版本发布)。 - 统一 diff 组件:新 src/client/diff/ 模块(rows.ts 引擎 + DiffRows/ DiffFiles 渲染器 + highlight.ts 语法着色)——git diff 与会话操作 diff 共用一套渲染:mod 改写配对(del-run/add-run 对半标蓝)、行内字符级 高亮(修复了旧实现旧侧失配不高亮的问题,改为行对象身份键)、上下文 hunk 折叠、git hunk 间未输出区间按行号范围生成不可展开折叠、语法着色 色相落位 diff 三色空档、+n −m 统计 chips、行底色 tint;DiffTab 改用 该栈(git diff tab 从此也有高亮)。 - 交互:两视角共用底部可拖拽预览面板(点击文件/提交/操作即预览,不再 直接开 diff tab;面板可刷新、可键盘/拖拽调高、git 目标可一键展开为 独立 diff tab);视角选择与面板高度持久化在 tab.meta;git 行 XY 徽章 按状态字母着色;选中行高亮。 - i18n:fileTrace* 十键重命名为 changes* 前缀,git 键值更新为「文件 变动」,新增 7 键(视角/筛选/面板操作),全部 21 个词典同步。 - 结构:src/client/changes/(ChangesTab/GitLens/SessionLens/DiffPane/ ops)+ src/client/diff/;GitView/DiffView/filetrace/ 删除;git 样式 从 sidebar.module.css 迁至 changes.module.css。 - 测试:builtins 8→7(git tab 承接 badge pin)、diff-rows(unified 转换/mod 配对/间隙折叠/统计)、changes-tab(壳交互 jsdom)、 diff-files-collapse(原 DiffView 折叠行为钉住)、changes-ops(原 filetrace 数据层)、git-view-worktree 迁移至 GitLens;全量 1122 通过。 - 文档:README ×2 功能矩阵合并、external-plugin-guide §4.4 与内置清单 7 tab、mount e2e 菜单标题同步。 --- README.md | 7 +- README_EN.md | 7 +- docs/external-plugin-guide.md | 8 +- src/client/DiffTab.tsx | 13 +- src/client/DiffView.tsx | 305 ----------- src/client/FenceErrorNotice.tsx | 2 +- src/client/TabBar.tsx | 2 +- src/client/builtins/tabs.tsx | 53 +- src/client/changes/ChangesTab.tsx | 127 +++++ src/client/changes/DiffPane.tsx | 313 ++++++++++++ .../{GitView.tsx => changes/GitLens.tsx} | 140 +++--- src/client/changes/SessionLens.tsx | 127 +++++ src/client/changes/changes.module.css | 386 ++++++++++++++ src/client/{filetrace => changes}/ops.ts | 12 +- src/client/diff/DiffFiles.tsx | 122 +++++ src/client/diff/DiffRows.tsx | 270 ++++++++++ src/client/diff/diff.module.css | 81 +++ src/client/{filetrace => diff}/highlight.ts | 15 +- src/client/diff/rows.ts | 473 ++++++++++++++++++ src/client/filetrace/FileTraceTab.tsx | 336 ------------- src/client/filetrace/diff.ts | 257 ---------- src/client/filetrace/filetrace.module.css | 76 --- src/client/locales-ar.ts | 29 +- src/client/locales-de.ts | 29 +- src/client/locales-fr.ts | 27 +- src/client/locales-hi.ts | 29 +- src/client/locales-id.ts | 29 +- src/client/locales-it.ts | 27 +- src/client/locales-ja.ts | 29 +- src/client/locales-ko.ts | 29 +- src/client/locales-nl.ts | 29 +- src/client/locales-pl.ts | 29 +- src/client/locales-pt.ts | 27 +- src/client/locales-ru.ts | 29 +- src/client/locales-sv.ts | 29 +- src/client/locales-th.ts | 29 +- src/client/locales-tr.ts | 29 +- src/client/locales-vi.ts | 29 +- src/client/locales-zh-HK.ts | 29 +- src/client/locales-zh-MO.ts | 29 +- src/client/locales-zh-TW.ts | 29 +- src/client/locales.ts | 56 ++- src/client/paths.ts | 9 + src/client/sidebar.module.css | 420 +--------------- tests/builtins.spec.ts | 21 +- ...{filetrace.spec.ts => changes-ops.spec.ts} | 12 +- tests/changes-tab.spec.tsx | 133 +++++ ....spec.tsx => diff-files-collapse.spec.tsx} | 6 +- tests/diff-rows.spec.ts | 123 +++++ tests/e2e/mount.e2e.ts | 4 +- tests/git-view-worktree.spec.tsx | 14 +- tests/git.spec.ts | 2 +- tests/locales.spec.ts | 8 +- 53 files changed, 2693 insertions(+), 1792 deletions(-) delete mode 100644 src/client/DiffView.tsx create mode 100644 src/client/changes/ChangesTab.tsx create mode 100644 src/client/changes/DiffPane.tsx rename src/client/{GitView.tsx => changes/GitLens.tsx} (88%) create mode 100644 src/client/changes/SessionLens.tsx create mode 100644 src/client/changes/changes.module.css rename src/client/{filetrace => changes}/ops.ts (95%) create mode 100644 src/client/diff/DiffFiles.tsx create mode 100644 src/client/diff/DiffRows.tsx create mode 100644 src/client/diff/diff.module.css rename src/client/{filetrace => diff}/highlight.ts (96%) create mode 100644 src/client/diff/rows.ts delete mode 100644 src/client/filetrace/FileTraceTab.tsx delete mode 100644 src/client/filetrace/diff.ts delete mode 100644 src/client/filetrace/filetrace.module.css rename tests/{filetrace.spec.ts => changes-ops.spec.ts} (93%) create mode 100644 tests/changes-tab.spec.tsx rename tests/{diff-view-collapse.spec.tsx => diff-files-collapse.spec.tsx} (91%) create mode 100644 tests/diff-rows.spec.ts diff --git a/README.md b/README.md index 42b76c8..085367b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ dshfind

支持的 DSH 版本(v0.18.0-alpha.0 alpha 通道):0.1.2-alpha.2 插件生态:GitHub topic dsh-better-sidebar

- 文件管理 编辑预览 内嵌浏览器 真实终端 Git 面板 后台任务 侧边对话 插件接入

+ 文件管理 编辑预览 内嵌浏览器 真实终端 文件变动 后台任务 侧边对话 插件接入

右侧栏 + 底部面板双工作台,并把 ctx.betterSidebar 服务开放给所有插件——
通过 registerTab / registerFileViewer 注册新的侧边栏页面与文件预览器。 @@ -44,7 +44,7 @@ - **🌐 内嵌浏览器**:多开网页 tab,后退 / 前进 / 刷新;内容运行在沙箱 iframe;外链默认按协议分流——HTTP 在侧边栏打开、HTTPS 走系统浏览器(设置页可分别调整) - **💻 真实终端**:xterm.js + node-pty 真实 shell,断线重连回放;可选为模型注入 `terminal_*` 工具 - **📂 模型侧边栏打开(可选)**:全局设置开启后注入 `sidebar_open` 工具——模型可主动在侧边栏打开文件 / 文件夹(树以该目录为根)/ HTTP(S) 网页 -- **🌿 Git 面板**:真 diff + VSCode 式 diff tab、历史、右键暂存 / 提交 / 还原;工作区容器下自动发现子仓库并显示**仓库选择器**,支持 linked worktree 变更发现 +- **🌿 文件变动**:Git 视角(真 diff / 历史 / 暂存·提交·还原 / worktree·子仓库选择)与本轮文件视角(模型读 / 写 / 编辑实时追踪,按文件分组、按类型筛选)**双视角合一**;统一 diff 渲染(改蓝配对 + 行内字符级高亮 + 语法着色 + 上下文折叠),底部可拖拽预览面板,可一键展开为独立 diff tab - **🧩 后台任务页**:subagent 拓扑 + 后台任务(退出码 / 实时输出 / 强制终止) - **💬 侧边对话(beta)**:Codex 风格的侧边线程——继承主会话完整上下文(含进行中的回合与工具调用)独立运行,不进入主会话;线程内可持续追问,一键「保存为新会话」提升为顶层会话 - **🪟 双工作台**:右侧栏 + 底部面板;拖 Tab 拆分 / 合并分栏(可跨面板),移动端自动合并全宽抽屉 @@ -162,10 +162,9 @@ dsh registry enable dsh-external/dsh-better-sidebar |---|---| | **🗂️ 文件工作台:资源管理器**
支持两种格式的资源管理器:内嵌在文件预览中 / 独立显示文件树。懒加载目录树、软链接按目标类型展示(目录软链接可展开、失效链接标红)、全局文件名搜索、上传文件/文件夹与拖放上传、右键菜单(在新 Tab 打开 / 在侧边打开 / 复制路径)、悬浮 `@文件` 一键引用进输入框。
文件资源管理器
| **📝 Markdown · 图片 · PDF 内联预览**
Markdown 预览支持 **Mermaid 图表**(`securityLevel: 'strict'` 安全渲染 + 二次清洗;点击图表弹窗放大、滚轮缩放、拖拽平移)、**README 级内嵌 HTML**(徽章墙 `
`、`
` 折叠块内嵌 markdown、表格单元格内联标签——DOMPurify 白名单消毒真实渲染,`