@caozeal/dsh-next-git 0.1.4 → 0.1.6
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/README.md +43 -12
- package/assets/screenshots/01-changes.png +0 -0
- package/assets/screenshots/02-commit-graph.png +0 -0
- package/assets/screenshots/03-word-level-diff.png +0 -0
- package/assets/screenshots/04-branches.png +0 -0
- package/assets/screenshots/05-graph-multibranch.png +0 -0
- package/assets/screenshots/06-fullscreen.png +0 -0
- package/assets/screenshots/README.md +24 -0
- package/lib/client.js +359 -31
- package/package.json +3 -1
- package/screenshots.json +8 -0
- package/src/ai-commit.js +65 -22
- package/src/git.js +320 -2
- package/src/operations.js +122 -3
package/README.md
CHANGED
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
>
|
|
5
5
|
> 原名 `dsh-plugin-git-manager`,2026-10 起包名改为 `@caozeal/dsh-next-git`(目录仍为 `dsh-next-git/`,功能不变)。
|
|
6
6
|
|
|
7
|
+
## 38 秒介绍片
|
|
8
|
+
|
|
9
|
+
https://github.com/user-attachments/assets/c57169b4-df00-450d-b4f0-7a2c64db03b6
|
|
10
|
+
|
|
11
|
+
*全片界面为渲染示意,不含真实会话;[完整播放页](https://dsh-next-git.1017835747.workers.dev/) 另有下载版。*
|
|
12
|
+
|
|
13
|
+
**不想先装再看?** [在线 Demo](https://dsh.caozeal.cn/next-git/demo/) 可以直接点——
|
|
14
|
+
它加载的是发布包里同一份 `lib/client.js`,只补了一个最小假宿主和一份真实仓库的录制快照
|
|
15
|
+
(详见 [`demo/README.md`](https://github.com/caozeal/dsh-plugins/blob/main/dsh-next-git/demo/README.md))。写操作在 Demo 里是禁用的,会明确提示。
|
|
16
|
+
|
|
7
17
|
在 DSH Web GUI **会话的右侧边栏**加一个 Git tab(2026-10-22 从左侧全局面板迁移而来):
|
|
8
18
|
会话头部点 **Git 图标**直接打开(会自动展开右栏),或在右栏的「+ → 开始」指南页里
|
|
9
19
|
选「Git 管理」。面板内容:
|
|
@@ -11,15 +21,28 @@
|
|
|
11
21
|
- **便捷分支切换**:顶栏下拉出全部本地/远程分支(含 ahead/behind 与最近提交),
|
|
12
22
|
一键切换;点远程分支自动建同名跟踪分支;支持新建、删除分支。
|
|
13
23
|
- **变更管理**:staged / unstaged / untracked / conflicted 四组文件列表,
|
|
14
|
-
单文件或全部暂存/取消暂存,点击文件看 diff
|
|
24
|
+
单文件或全部暂存/取消暂存,点击文件看 diff。每行还带**丢弃**按钮:
|
|
25
|
+
未暂存回到 HEAD、未跟踪直接删除、已暂存连暂存区一起回退(都会二次确认)。
|
|
26
|
+
冲突文件不给丢弃——那等于放弃冲突解决状态,容易误伤。
|
|
27
|
+
- **Stash**:分支页底部可直接 stash 当前改动(有未跟踪文件时自动带 `-u`),
|
|
28
|
+
列出全部 stash,一键恢复(pop)或删除(drop)。
|
|
15
29
|
- **提交 / 推送 / 拉取**:Fetch、Pull、Push 按钮,提交信息输入框,
|
|
16
30
|
支持「提交」「提交并推送」;无 upstream 时自动 `push -u origin <branch>`。
|
|
17
|
-
- **AI 提交信息**:读取已暂存 diff +
|
|
18
|
-
Conventional Commits
|
|
19
|
-
`chore: 更新 N 个文件`。
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
31
|
+
- **AI 提交信息**:读取已暂存 diff + 最近提交风格,调用当前默认模型生成
|
|
32
|
+
Conventional Commits 提交信息(标题 + 可选正文,正文用来说清动机与影响面),
|
|
33
|
+
填入输入框供编辑;模型不可用时降级为 `chore: 更新 N 个文件`。
|
|
34
|
+
- **可自定义的提交提示词**:提交区齿轮按钮可改写系统提示词,存在
|
|
35
|
+
`git config dsh.commitPrompt`(本地优先、可全局兜底,不产生工作区文件)。
|
|
36
|
+
自定义只改「怎么写」,diff 与变更文件列表始终由 Host 装配后传给模型——
|
|
37
|
+
提示词写坏也不会让模型凭空编造。
|
|
38
|
+
- **彩色提交图(graph)**:`git log --graph --all` 的图形化渲染。每条分支线一种颜色,
|
|
39
|
+
跨行保持同色;分支名徽章与它自己的线条严格同色,滚到哪都认得出。同一屏出现过的
|
|
40
|
+
分支保证互不撞色(按首次出现顺序分配,不是对名字取哈希——8 色槽下取模约 1/8 会撞)。
|
|
41
|
+
可点击任意提交查看该 commit 的 diff。
|
|
42
|
+
- **词级高亮 Diff**:hunk 逐行渲染,带旧/新行号、文件头与统计。真正变化的**词**
|
|
43
|
+
才有深色底,其余行内文字只是浅底——「改了什么」不用再靠眼力逐字比对。
|
|
44
|
+
增删配色直接复用平台自己的 `--dsw-alias-file-diff-*` token,深浅主题自动跟随,
|
|
45
|
+
和 GUI 里的代码块看起来是同一套东西。
|
|
23
46
|
|
|
24
47
|
面板跟随当前会话的工作目录:切换会话即切换仓库;非 Git 仓库 / 无会话 / 目录被删
|
|
25
48
|
时显示对应空态。右侧栏可以全屏(自带的「全屏」控件),窄列下是单列 tab 布局:
|
|
@@ -85,10 +108,12 @@ npm test # = node --test test/*.test.mjs
|
|
|
85
108
|
```
|
|
86
109
|
|
|
87
110
|
- `test/parsers.test.mjs`:porcelain / 分支头 / for-each-ref / graph / unified diff 解析,
|
|
88
|
-
|
|
111
|
+
`cleanGitEnv` 的 undefined 墓碑(删除继承自父进程的坏 `GIT_CONFIG_*`),以及
|
|
112
|
+
`diffInline`(词级切分 + CJK 逐字 + 超长退化)与 `assignGraphColors`
|
|
113
|
+
(跨行同色、同屏分支不撞色的回归用例)。
|
|
89
114
|
- `test/operations.test.mjs`:12 个 op 的假 exec 单测(含超时、非法参数、非仓库、降级)。
|
|
90
115
|
- `test/ai-commit.test.mjs`:AI 提交信息清理、截断/半句话回退、模型流错误转 `ai-unavailable`、
|
|
91
|
-
中文仓库的降级文案(单测合计
|
|
116
|
+
中文仓库的降级文案(单测合计 39 条,全绿)。
|
|
92
117
|
- `test/integration.test.mjs`:临时真实仓库跑 snapshot → diff → stage → commit →
|
|
93
118
|
graph → 建/切/删分支 → AI 降级;不依赖 dsh 运行时。
|
|
94
119
|
- `test/live/`:真实 Web GUI 的验证清单、smoke 脚本、截图证据与验证报告
|
|
@@ -137,6 +162,12 @@ op 一览:`snapshot` `graph` `diff` `stage` `unstage` `switchBranch` `deleteBr
|
|
|
137
162
|
SVG lane 渲染(20px 行高、最多 10 lane),长历史/多分支下不会挤掉文字。
|
|
138
163
|
- **失败可见**:git 非 0 退出把 stderr 摘要带回 UI,在底部状态条展示;
|
|
139
164
|
只读操作(snapshot/graph/diff)不会阻断面板。
|
|
165
|
+
- **配色跟随宿主**:diff 增删底色与 gutter 用 `--dsw-alias-file-diff-*`,词级高亮
|
|
166
|
+
用它算出的 34% 透明叠加;两张主题各自的值由平台提供,插件不写死颜色。
|
|
167
|
+
提交图的 8 色 lane 调色板是本插件自己的 `--gm-lane-*`(平台没有这个 token)。
|
|
168
|
+
- **词级算法在 Host 算、Client 只渲染**:`diffInline` 是纯函数(token LCS),
|
|
169
|
+
跟解析器一起单测;Client 拿到的 `inline` 片段拼接后必须精确等于原行文本,
|
|
170
|
+
所以渲染层不需要任何对齐逻辑。
|
|
140
171
|
- **AI 是可选能力**:缺少 `llm` / `agentDefaultModel` 时 `aiCommit` 自动降级,
|
|
141
172
|
不影响提交本身。
|
|
142
173
|
|
|
@@ -156,7 +187,7 @@ op 一览:`snapshot` `graph` `diff` `stage` `unstage` `switchBranch` `deleteBr
|
|
|
156
187
|
`fallback: true`(UI 显示「模型输出不可用,已生成降级文案」)。
|
|
157
188
|
- **错误码分层**:`invalid-params`(含未知 op)HTTP 400;git 业务失败 HTTP 200 +
|
|
158
189
|
`ok:false`,UI 统一按 body 判定。
|
|
159
|
-
- **文案全部走 Client locale**(zh/en 共
|
|
190
|
+
- **文案全部走 Client locale**(zh/en 共 134 个 key),tab 标题与头部按钮都是
|
|
160
191
|
「Git 管理 / 打开 Git 管理」;面板只用 `--dsw-alias-*` 主题 token。
|
|
161
192
|
|
|
162
193
|
## 已知限制
|
|
@@ -166,5 +197,5 @@ op 一览:`snapshot` `graph` `diff` `stage` `unstage` `switchBranch` `deleteBr
|
|
|
166
197
|
- 大仓库的 graph 默认取 80 条(上限 300);diff 超过 400k 字符会截断。
|
|
167
198
|
- 会话的工作目录被删除/不可访问时,面板显示「工作目录不存在或无法访问」空态
|
|
168
199
|
(Host 返回 `cwd-unavailable`),不会展示原始 spawn 错误。
|
|
169
|
-
-
|
|
170
|
-
- 网络操作超时 180s;无凭据的私有仓库会失败并把 git stderr 显示出来。
|
|
200
|
+
- 冲突只做展示(conflicted 分组 + 横幅提示),不提供 accept ours/theirs 之类的解决 UI。
|
|
201
|
+
- 网络操作超时 180s;无凭据的私有仓库会失败并把 git stderr 显示出来。
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 插件市场截图素材
|
|
2
|
+
|
|
3
|
+
`screenshots.json`(本目录上一级)里声明的 6 张图,供 dsh-market 等插件市场详情页展示。
|
|
4
|
+
它们由 `test/live/artifacts/` 里的真机验证截图加工而来,**都做过打码**。
|
|
5
|
+
|
|
6
|
+
| 文件 | 来源 | 处理 |
|
|
7
|
+
| --- | --- | --- |
|
|
8
|
+
| `01-changes.png` | `V19-style-changes.png` | 左栏 + 对话区(x < 708)高斯模糊 σ=28 |
|
|
9
|
+
| `02-commit-graph.png` | `V25-colored-graph-refs.png` | 同上 |
|
|
10
|
+
| `03-word-level-diff.png` | `V24-word-level-diff.png` | 同上 |
|
|
11
|
+
| `04-branches.png` | `V20-whale-branches.png` | 同上 |
|
|
12
|
+
| `05-graph-multibranch.png` | `V26-colored-graph-multibranch.png` | 纯提交图渲染,裁掉下方空白(1280×320) |
|
|
13
|
+
| `06-fullscreen.png` | `V18-right-tab-fullscreen.png` | 面板全屏,不含界面外内容,无需处理 |
|
|
14
|
+
|
|
15
|
+
重新生成(`ffmpeg`,需 `gblur` 滤镜):
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
IN=test/live/artifacts
|
|
19
|
+
ffmpeg -i "$IN/V24-word-level-diff.png" -filter_complex \
|
|
20
|
+
"[0:v]split[a][b];[b]crop=708:577:0:0,gblur=sigma=28[c];[a][c]overlay=0:0" \
|
|
21
|
+
assets/screenshots/03-word-level-diff.png
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
换图时保持文件名不变,市场下次构建自动生效;增删条目改 `screenshots.json`,1–8 张。
|