@young1lin/dsh-ui-gitworkbench 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +13 -0
- package/CHANGELOG_EN.md +13 -0
- package/README.md +50 -50
- package/README_EN.md +2 -1
- package/lib/client.js +6505 -6253
- package/package.json +1 -1
- package/src/client/ChangesFileTree.tsx +550 -0
- package/src/client/ChromeGlyph.tsx +27 -0
- package/src/client/CommitHistory.tsx +1001 -0
- package/src/client/DiffViews.tsx +1070 -0
- package/src/client/GitWorkbenchPanel.module.css +15 -2513
- package/src/client/GitWorkbenchPanel.tsx +37 -3959
- package/src/client/PaneDivider.tsx +74 -0
- package/src/client/WorkbenchControls.tsx +1047 -0
- package/src/client/WorktreeGlyph.tsx +24 -0
- package/src/client/diff-nav.ts +59 -0
- package/src/client/git-workbench-types.ts +252 -0
- package/src/client/locales.ts +14 -8
- package/src/client/row-window.ts +23 -0
- package/src/client/side-rows.ts +66 -0
- package/src/client/styles/changes.css +504 -0
- package/src/client/styles/controls.css +225 -0
- package/src/client/styles/environment.css +89 -0
- package/src/client/styles/files.css +111 -0
- package/src/client/styles/history-filters.css +410 -0
- package/src/client/styles/history.css +276 -0
- package/src/client/styles/image.css +67 -0
- package/src/client/styles/operations.css +179 -0
- package/src/client/styles/shell.css +430 -0
- package/src/client/styles/themes.css +224 -0
- package/src/client/use-change-nav.ts +6 -5
- package/src/client/use-row-window.ts +55 -0
package/AGENTS.md
CHANGED
|
@@ -74,7 +74,7 @@ are what those freezes cost to find.
|
|
|
74
74
|
|
|
75
75
|
## Testing pattern
|
|
76
76
|
|
|
77
|
-
Pure rules live in React/CSS-free modules so vitest can load them — `src/client/stage-tree.ts`, `diff-model.ts`, `worktree-view.ts`, `commit-graph.ts`, `op-feedback.ts`, `themes.ts`, `highlight.ts` (client); `worktree.ts`, `style-store.ts`, `atomic-json.ts`, `commit-cache.ts`, `git-ops.ts`, `git-log.ts` (host). React state stays in `GitWorkbenchPanel.tsx` (~
|
|
77
|
+
Pure rules live in React/CSS-free modules so vitest can load them — `src/client/stage-tree.ts`, `diff-model.ts`, `worktree-view.ts`, `commit-graph.ts`, `op-feedback.ts`, `themes.ts`, `highlight.ts` (client); `worktree.ts`, `style-store.ts`, `atomic-json.ts`, `commit-cache.ts`, `git-ops.ts`, `git-log.ts` (host). React state orchestration stays in `GitWorkbenchPanel.tsx` (~2000 lines); rendered features live in `ChangesFileTree.tsx`, `CommitHistory.tsx`, `DiffViews.tsx`, and `WorkbenchControls.tsx`, all sharing the root panel CSS Module contract. New behavior = pure helper + unit tests first, component wiring after.
|
|
78
78
|
|
|
79
79
|
`scripts/` holds the live probes — `probe_worktree.py` (host RPCs), `verify_worktree_ui.py` (6-step Playwright UI probe), `llm_smoke.py` (real-LLM smoke). They are local-only and git-ignored: they embed machine-local paths and need a running dsh instance.
|
|
80
80
|
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
本文件记录面向使用者的变更。格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循语义化版本。
|
|
4
4
|
|
|
5
|
+
## [0.1.12] - 2026-08-23
|
|
6
|
+
|
|
7
|
+
### 修复
|
|
8
|
+
|
|
9
|
+
- **全部暂存之后,Staged 页终于有了看得见的退路**。此前取消暂存并非不能做:清掉左侧文件/目录勾选可以整项 Unstage,悬浮 Staged 里的变更块也会出现 Unstage hunk;但两条路都藏在用户必须事先知道的手势里,固定头部又只在编辑模式挂区块按钮,于是「全部 Stage」后的空白 Unstaged 页看起来像不可逆。现在 Staged 头部常驻当前块与 `change current / total`:单块文件直接显示 **Unstage file**,多块文件同时显示 **Unstage hunk / Unstage file**;点击或 F7 / Shift+F7 会切换并完整描边当前块。整文件操作仍走同一条带 `diffSha` 过期保护的 patch 路径,成功后内容回到 Unstaged。
|
|
10
|
+
- **进入 Edit 后不再丢掉 Stage / Revert**。编辑模式保留固定的当前块工具栏与显式块导航;buffer 尚未保存时,Git 区块按钮留在原位但禁用,并说明先保存或放弃编辑,Save / Discard edits 仍然可用。这样按钮不会在最需要确认去向时突然消失,也不会把未保存的编辑和旧 diff 混在一次 Git 操作里。
|
|
11
|
+
- **长 diff 刷新后不再沿用上一份文档的虚拟滚动高度**。窗口状态以 diff identity 为键;切换文件、切换 Staged / Unstaged 或操作后重载时,旧行数不能再把新内容撑出一大片空白。
|
|
12
|
+
- **第一块变更的工具条不再被顶边裁掉**,Stage / Revert / Unstage 在文件第一行开始变化时也完整可点;当前选中块改画一圈连续外框,不再给每一行各画一格蓝色“梯子”。固定操作区在窄窗格里会自动换行,不会把恢复出口挤出可见范围。
|
|
13
|
+
|
|
14
|
+
### 内部
|
|
15
|
+
|
|
16
|
+
- 将约六千行的 `GitWorkbenchPanel.tsx` 按变更树、diff、历史、控制区与图标拆成职责单一的组件;样式按功能拆到 `src/client/styles/*.css`,入口仍由一个 CSS Module 在构建期内联,因此运行时仍只有一张类名表和一个 `<style>`,没有多次加载或额外请求。AST / CSS 结构守卫限制编排文件回涨,并验证固定区块操作与单一样式契约。
|
|
17
|
+
|
|
5
18
|
## [0.1.11] - 2026-08-21
|
|
6
19
|
|
|
7
20
|
### 修复
|
package/CHANGELOG_EN.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
User-facing changes, newest first. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning follows SemVer.
|
|
4
4
|
|
|
5
|
+
## [0.1.12] - 2026-08-23
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **The Staged pane now leaves an obvious way back after everything is staged.** Unstaging was technically possible before: clearing a file or directory tick unstaged that selection, and hovering a staged hunk revealed Unstage hunk. Both routes depended on a gesture the user already had to know, while the fixed header mounted hunk actions only in Edit mode, so an empty Unstaged pane looked irreversible. The Staged header now keeps the current hunk and `change current / total` visible: a one-hunk file shows **Unstage file**, while a multi-hunk file shows both **Unstage hunk / Unstage file**. Clicking a hunk or pressing F7 / Shift+F7 selects it and draws one continuous outline. Whole-file unstage uses the same stale-`diffSha`-checked patch path and returns the content to Unstaged.
|
|
10
|
+
- **Entering Edit no longer removes Stage / Revert.** Edit mode keeps a fixed current-hunk toolbar and explicit hunk navigation. An unsaved buffer leaves Git hunk actions in place but disabled with an explanation, while Save / Discard edits remain available. This prevents both a disappearing escape route and applying an old diff selection to unsaved text.
|
|
11
|
+
- **Refreshing a long diff no longer reuses the previous document's virtual scroll height.** Window state is keyed by diff identity, so switching files or layers and reloading after an operation cannot leave the new content padded to stale row counts.
|
|
12
|
+
- **The first change block's action bar is no longer clipped by the top edge**, including files that change from line one. The selected hunk now draws one continuous perimeter instead of a blue box around every row, and fixed actions wrap in narrow panes rather than pushing recovery controls out of view.
|
|
13
|
+
|
|
14
|
+
### Internal
|
|
15
|
+
|
|
16
|
+
- Split the roughly 6,000-line `GitWorkbenchPanel.tsx` into focused change-tree, diff, history, controls, and glyph modules. Styles now live by feature under `src/client/styles/*.css`, still inlined through one CSS Module at build time, so runtime keeps one class map and one `<style>` element with no extra requests. AST and CSS structure guards cap orchestrator regrowth and protect the fixed-hunk-action and single-style contracts.
|
|
17
|
+
|
|
5
18
|
## [0.1.11] - 2026-08-21
|
|
6
19
|
|
|
7
20
|
### Fixed
|
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
每个会话的头部都有一枚状态卡,显示当前分支、领先/落后和增删计数。点开它,右侧滑出一张工作台面板,当前 worktree 的改动一览无余:
|
|
8
8
|
|
|
9
|
-
-
|
|
9
|
+
- **变更**:可折叠的文件树,配完整上下文的左右并排 diff——双列行号、词级高亮、Shiki 语法着色,右栏可直接 Edit;树顶可打关键字过滤文件列表(多词与关系、智能大小写),文件行悬浮可一键撤回到上次提交(IDEA 的 Rollback,弹窗先说清后果);diff 头部常驻当前变更块与 `current / total`,Unstaged 可 Stage / Revert(进入 Edit 也保留),Staged 可 Unstage 当前块或整个文件;
|
|
10
|
+
- **文件**:仓库目录树与可编辑文件查看器,支持搜索、图片预览、CodeMirror 编辑和 blame 行信息;
|
|
10
11
|
- **历史**:提交列表 / 文件树 / diff 三栏并排,滚动到底自动翻页;行内带作者、悬浮卡带精确时间;IDEA 式过滤(`user:` / `path:` / `after:` 输入语法,或作者 / 日期 / 路径分区漏斗弹层),条件编译进 `git log`、全历史匹配、车道图常驻,另有「全部分支」;
|
|
11
12
|
- **对比**:任选两个分支互相比较;
|
|
12
13
|
- **提交与同步**:树上勾选文件就是真实的 `git add` / `git restore --staged`,配合提交框和 fetch / pull / push 同步条,一次提交加推送全程不用离开面板;
|
|
@@ -88,6 +89,7 @@ irm https://raw.githubusercontent.com/young1lin/dsh-ui-gitworkbench/main/scripts
|
|
|
88
89
|
| 状态卡绑定标记(树形图标;徽标文字与分支重名时省略)+ 头部 worktree 选择器 | ✅ | `python scripts/verify_worktree_ui.py`:6 步 UI 探针(绑定标记、头部路径、选择器切换、折叠/选中回归) |
|
|
89
90
|
| 历史过滤(作者 / 日期 / 路径下推 `git log`、「全部分支」、日历与三态路径树) | ✅ | `python scripts/verify_history_feature.py`:11 步 UI + host 探针全过(中文作者、All-branches、日历选界、目录吸收文件勾选、诚实空态) |
|
|
90
91
|
| 单文件撤回(Rollback)与文件列表关键字过滤 | ✅ | 对 live app 实测:撤回弹窗措辞随 host 实时推导的后果变化、取消不动手、执行后 fixture 回静息态;过滤框多词 AND、忽略折叠、根勾选只动可见行 |
|
|
92
|
+
| 变更块导航与 Staged 恢复出口 | ✅ | `tests/edit-hunk-actions.test.ts` + scratch fixture live probe:Staged 常驻 Unstage file,多块另有 Unstage hunk;操作后回到 Unstaged,页面无错误 |
|
|
91
93
|
| 客户端半被类型检查 | ✅ | `tsconfig.client.json` 进了 `bundle`/`typecheck`;曾故意写坏一处,确认报 `TS2322` |
|
|
92
94
|
| 主题 7 族 × 亮暗 + 跟随系统明暗 | ✅ | `tests/theme-palettes.test.ts` 把 `themes.ts` 与 `.module.css` 互扣(两个方向都验过会红);`lib/client.js` 含全部 14 套调色板 |
|
|
93
95
|
| 背景图 / 自定义 CSS 的项目+全局存储 | ✅ | 对**构建产物** `lib/index.js` 跑 styleGet/styleSet 全流程(临时 HOME,18/18 PASS):读写、项目优先、越界钳制、恶意 image 拒绝、清空删记录、非仓库拒绝、两作用域并发写不互相覆盖 |
|
|
@@ -139,11 +141,13 @@ export function apply(ctx) {
|
|
|
139
141
|
- **拿 worktree 路径**:`useSessions(state => state.byId[sessionId]?.cwd)`——会话摘要自带 `cwd`。
|
|
140
142
|
- **数据刷新**:挂载时拉一次 + 面板打开时轮询(空闲 15s、agent 运行中加密到 3s——运行中的会话正在改文件,等满 15s 看到的就是旧闻)+ 手动刷新按钮。**面板关着时另有一条便宜的绑定探针**(见 §6.0d):只在 agent 运行中开表,走不 spawn git 的 `sessionWorktree`,发现绑定变了才补一次 `worktreeStatus`。
|
|
141
143
|
|
|
142
|
-
### 2.3 组件与样式(`
|
|
144
|
+
### 2.3 组件与样式(`GitWorkbenchPanel.tsx` + 功能组件 + `styles/*.css`)
|
|
143
145
|
|
|
144
146
|
- **外壳**:面板是一张四边留白的卡片(`--gs-inset`,14px 圆角、投影),最大化按钮切到满屏。**三条边可拖**:卡片左缘(`MIN_DRAWER_WIDTH`)、提交列表与文件树之间、文件树与 diff 之间。三处共用 `useHorizontalDrag`(pointer capture + `pointercancel`)。窗格上界由 `applyPane` 现场量出来算:`面板宽 - 邻窗格宽 - MIN_DIFF_WIDTH`,diff 是唯一不能折行的窗格,所以它的下限是硬的。宽度与主题存 localStorage。
|
|
145
147
|
- **布局**:变更页 = **文件树 + 逐文件 diff** 两栏;历史页 = **提交列表 + 文件树 + diff** 三栏并列(GitHub Desktop / JetBrains git log 的做法),各自独立滚动,因此没有可折叠的东西要解释。翻页是滚动哨兵(IntersectionObserver),不是按钮。
|
|
148
|
+
- **逐块操作**:`DiffViews.tsx` 用完整上下文 side rows 把连续增删行归成块;点击代码块或按 F7 / Shift+F7 更新显式 current block,头部固定按钮始终作用于这一个块。Unstaged 提供 Stage / Revert,Staged 提供 Unstage hunk / file;整文件 Unstage 在点击时才收集所有变化行,并沿用 `diffSha` 过期检查。Edit 模式改用 working-tree 真实行号计算 CodeMirror 的 dense 滚动位置,dirty buffer 只禁用 Git 区块操作,不隐藏按钮。
|
|
146
149
|
- diff 渲染:`renderDiff(segment)` 把统一 diff 逐行分类,渲染成 `[老行号][新行号][+/-槽][代码]` 的 flex 行;行号从 `@@ -a,b +c,d @@` 解析并随行递增。
|
|
150
|
+
- **样式装载**:`GitWorkbenchPanel.module.css` 只是一张清单,按功能 `@import` `styles/*.css`;构建在 CSS Modules 作用域化之前内联它们,运行时仍是一张类名表和一个 `<style>`,不是十次网络或十个 style 标签。
|
|
147
151
|
- **配色**:面板自带调色板,不走 dsh 主题 token——diff 需要 增/删/词级/语法 四组颜色,dsh 没有定义。**所有颜色都过 `--gs-*` token**,字面色只出现在 `.overlay[data-gs-theme='<family>-<mode>']` 的调色板块里;换主题=换一组 token,别的什么都不动。**只有状态卡(在 dsh 原生 chrome 里)保留 `--dsw-*` token**。
|
|
148
152
|
- 主题族与解析逻辑在 `src/client/themes.ts`(不 import CSS/React,因此可被测试直接加载):GitHub / IntelliJ IDEA / VS Code / One / Solarized / Nord / Cyberpunk,各带亮暗两套。
|
|
149
153
|
- 明暗默认 `system` = 跟随操作系统(`matchMedia('(prefers-color-scheme: dark)')`,挂载期间持续跟随);显式选亮/暗则完全覆盖。
|
|
@@ -191,55 +195,51 @@ export function apply(ctx) {
|
|
|
191
195
|
|
|
192
196
|
```
|
|
193
197
|
harness-worktree/
|
|
194
|
-
package.json dsh.client(web)
|
|
195
|
-
.npmrc auto-install-peers=false(关键!见 §6.5)
|
|
196
|
-
tsconfig.json tsc
|
|
197
|
-
tsconfig.client.json 仅类型检查【客户端半】(
|
|
198
|
-
tsdown.config.ts
|
|
199
|
-
vitest.config.ts 排除 .agents
|
|
198
|
+
package.json dsh.client(web) + exports + 显式兼容范围的 optional peer(运行时由 profile 提供)
|
|
199
|
+
.npmrc auto-install-peers=false(关键!见 §6.5 / §6.14)
|
|
200
|
+
tsconfig.json tsc 构建【宿主半】(stage-3 装饰器 + ambient shim)
|
|
201
|
+
tsconfig.client.json 仅类型检查【客户端半】(rolldown 本身不做类型检查)
|
|
202
|
+
tsdown.config.ts 客户端 closure-factory bundle + CSS Modules 构建
|
|
203
|
+
vitest.config.ts 排除 .agents/**,避免 worktree 副本重复收集测试
|
|
200
204
|
src/
|
|
201
|
-
index.ts
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
205
|
+
index.ts GitWorkbenchService + 27 个 @Remote + worktree 三个 agent 工具
|
|
206
|
+
stats/fileDiff/fileSides/applyBlocks/writeChecked/blame/fileImage/commitStats/
|
|
207
|
+
commits/authors/repoTree/compareRefs/sessionWorktree/worktreeEnter/worktreeExit/
|
|
208
|
+
worktreeStatus/styleGet/styleSet/syncStatus/stage/unstage/discardPlan/discardFile/
|
|
209
|
+
commit/fetch/pull/push
|
|
210
|
+
atomic-json.ts 崩溃安全 JSON 写入(tmp+rename + Windows EPERM 退避)
|
|
211
|
+
apply-blocks.ts hunk patch 选择、正反向 apply 与 stale diff 防线
|
|
212
|
+
blame.ts porcelain blame 解析与路径/提交信息
|
|
213
|
+
commit-cache.ts commit hash 内容寻址 LRU
|
|
214
|
+
discard-ops.ts IDEA Rollback 的计划推导与路径防线
|
|
215
|
+
fs-remove.ts 受工作区边界保护的文件删除
|
|
216
|
+
git-log.ts/log-filter.ts/shortlog.ts 历史解析、过滤参数与作者名单
|
|
217
|
+
git-ops.ts 写操作 argv + stderr 归类(纯函数,不 spawn)
|
|
218
|
+
image-sniff.ts 图片类型嗅探与读取上限
|
|
219
|
+
patch-model.ts Git patch 解析、行选择与重发射
|
|
220
|
+
side-guard.ts side diff / write 的路径与 stale-sha 校验
|
|
221
|
+
style-store.ts 项目/全局外观存储
|
|
222
|
+
worktree.ts worktree 绑定、名称/分支/porcelain 纯逻辑
|
|
223
|
+
write-checked.ts 编辑保存的编码、mtime/hash 与原子写校验
|
|
224
|
+
types/*.d.ts 宿主/客户端 ambient shim
|
|
213
225
|
client/
|
|
214
|
-
index.ts
|
|
215
|
-
GitWorkbenchPanel.tsx
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
locales.ts zh / en 两份词典
|
|
232
|
-
tests/ vitest:worktree-bindings(存储/原子写/重试)、worktree-derive(名称/分支/porcelain)、ref-name、git-ops(argv/归类)、git-log、commit-cache、style-store、style-resolve、theme-palettes(族×调色板互扣)、stage-tree(勾选模型)、worktree-view、commit-graph、diff-regression(diff 模型/词级区间/Shiki/CSS 不变量)、drawer-chrome(状态卡与面板的结构性扫描)、op-feedback、status-parse(porcelain/numstat 解析、二进制嗅探、截断与上限——fixture 场景目录 TESTS.md 的单测化)、log-filter(条件编译/裸日期展开)、log-filter-query(输入语法/chips)、shortlog、dir-tree、path-select(三态勾选)、calendar、commit-filter(精确时间渲染)、active-file(默认选中排序)、file-filter(关键字过滤)、discard-ops(撤回计划推导 + 危险拼法扫描)
|
|
233
|
-
scripts/
|
|
234
|
-
probe_worktree.py 宿主 RPC 探针:scratch 仓库全流程 + 真仓库冒烟 + 再进入分支复用
|
|
235
|
-
verify_worktree_ui.py UI 探针:状态卡标记/头部路径/选择器切换/折叠回归 6 步(经真实页面 RPC 回放)
|
|
236
|
-
llm_smoke.py 真实 LLM 冒烟:让模型在会话里调 worktree_enter/exit,看目录出现/消失
|
|
237
|
-
verify_turn_refresh.py UI 探针:抽屉关着时回合结束自动刷新状态卡(0.1.2 的刷新链路)
|
|
238
|
-
verify_history_feature.py UI+host 探针:历史过滤两半(条件下推 + 输入框/漏斗/诚实空态)11 步
|
|
239
|
-
(五个 .py 探针为本地集成脚本:需连真实 dsh 实例与 scratch 仓库,内嵌本机路径——已 gitignore,不入库、不随包发布)
|
|
240
|
-
cordis.patch.yml 一行 insert,把宿主 entry 挂进 web profile
|
|
241
|
-
README.md 本文件
|
|
242
|
-
README_EN.md 英文版(面向使用者与维护者;深度细节仍以本文为准)
|
|
226
|
+
index.ts 注册会话头插槽并桥接 RPC 回调
|
|
227
|
+
GitWorkbenchPanel.tsx 状态卡与抽屉的状态编排;业务视图下沉到叶组件
|
|
228
|
+
ChangesFileTree.tsx 变更树、过滤、勾选与提交区
|
|
229
|
+
CommitHistory.tsx 历史列表、车道图、筛选与分页
|
|
230
|
+
DiffViews.tsx unified/side diff、块操作、虚拟窗口与编辑态
|
|
231
|
+
WorkbenchControls.tsx 同步条、设置、来源选择器与反馈
|
|
232
|
+
FileBrowser.tsx/CodeEditor.tsx/ImageView.tsx 文件页、编辑器与图片预览
|
|
233
|
+
PaneDivider.tsx + *Glyph.tsx 拖拽分隔条与共享图标
|
|
234
|
+
git-workbench-types.ts 面板组件/RPC 共享类型
|
|
235
|
+
row-window.ts/use-row-window.ts 视口窗口纯规则与 React 桥接
|
|
236
|
+
styles/*.css 按功能分片;由 GitWorkbenchPanel.module.css 构建期汇成一个 style
|
|
237
|
+
*.ts 勾选、diff、导航、缓存、过滤、主题等 React/CSS-free 纯规则
|
|
238
|
+
tests/*.test.ts 单元、结构扫描、性能边界、泄漏与回归守卫(按领域与源模块对应)
|
|
239
|
+
scripts/*.py 本地 live/UI/性能探针与辅助器(需真实 dsh/scratch;gitignore,不随包发布)
|
|
240
|
+
cordis.patch.yml 宿主 entry 的 profile 挂载声明
|
|
241
|
+
README.md / README_EN.md 中文深度交接文档 / 英文使用与维护说明
|
|
242
|
+
CHANGELOG.md / CHANGELOG_EN.md 双语发布记录
|
|
243
243
|
```
|
|
244
244
|
|
|
245
245
|
---
|
|
@@ -274,7 +274,7 @@ dsh plugin --profile web add <仓库根目录>
|
|
|
274
274
|
# `dsh plugin add` 自动带上补丁,--patch 仅在 profile 于该声明存在之前加入时需要)
|
|
275
275
|
dsh web --patch <仓库根目录>/cordis.patch.yml
|
|
276
276
|
|
|
277
|
-
# 便携交付:tarball 自足——prepack 现场构建 lib
|
|
277
|
+
# 便携交付:tarball 自足——prepack 现场构建 lib/;白名单带 lib/src、安装脚本、双语文档、AGENTS、LICENSE 与补丁
|
|
278
278
|
npm pack
|
|
279
279
|
dsh plugin --profile web add <tgz 路径>
|
|
280
280
|
```
|
package/README_EN.md
CHANGED
|
@@ -6,7 +6,8 @@ An out-of-tree Web UI plugin for [dsh (DeepSeek Harness)](https://github.com/dee
|
|
|
6
6
|
|
|
7
7
|
Every session header gets a small status card showing the current branch, ahead/behind counts, and added/deleted lines. Click it and a workbench panel slides in from the right with everything about the session worktree's changes:
|
|
8
8
|
|
|
9
|
-
- **Changes** — a collapsible file tree beside per-file diffs
|
|
9
|
+
- **Changes** — a collapsible file tree beside full-context, side-by-side per-file diffs with dual line numbers, word-level highlights, Shiki syntax coloring, and an editable right column. A magnifier filters the tree by space-separated keywords (smart case); hovering a file reveals IDEA-style Rollback behind a consequence-specific dialog. The diff header keeps the current hunk and `current / total` visible: Unstaged offers Stage / Revert even in Edit mode, while Staged offers Unstage for the current hunk or the whole file.
|
|
10
|
+
- **Files** — a searchable repository tree with editable CodeMirror file views, image previews, and per-line blame information.
|
|
10
11
|
- **History** — commits, file tree, and diff in three panes; scrolling to the bottom loads the next page automatically. Rows carry the author, the hover card the exact time; an IDEA-style filter (a `user:` / `path:` / `after:` query grammar plus an authors / date / paths funnel) compiles into `git log` arguments and matches over all history, with an All-branches option.
|
|
11
12
|
- **Compare** — diff any two branches against each other.
|
|
12
13
|
- **Commit & sync** — ticking a file in the tree is a real `git add` / `git restore --staged`; with the commit box and the fetch / pull / push bar, a full commit-and-push never leaves the panel.
|