source-code-mgmt 1.1.0 → 1.5.0
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 +144 -64
- package/lib/client.js +897 -122
- package/lib/index.js +643 -59
- package/package.json +38 -22
package/README.md
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
# source-code-mgmt — DSH 源代码管理插件
|
|
2
2
|
|
|
3
|
-
> 版本:**v1.
|
|
3
|
+
> 版本:**v1.5.0** | 更新日志见文末「[版本历史](#版本历史)」
|
|
4
4
|
|
|
5
|
-
> DSH Web GUI
|
|
5
|
+
> DSH Web GUI 源代码管理插件:把「环境检查 → SSH 配置 → 代码上传推送」整合进「代码管理」面板,支持 GitHub / Gitee 双平台,一键管理代码仓库。
|
|
6
|
+
|
|
7
|
+
> 入口位置自适应:**已安装 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) 时**,「代码管理」作为它侧边栏的一个新 Tab 页面出现(全新侧边栏 Tab);**未安装时**,在 DSH 页面**右上角显示一个浮动按钮**,点击展开右侧栏抽屉。两种形态都复用同一套面板 UI,且**不再占用左栏底部按钮**。
|
|
6
8
|
|
|
7
9
|
## 功能
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
集成入口(二选一,自动检测,无需手动切换):
|
|
12
|
+
|
|
13
|
+
- **已安装 dsh-better-sidebar**:「代码管理」注册为它侧边栏的一个**新 Tab 页面**,点击侧边栏 Tab 直接打开面板;
|
|
14
|
+
- **未安装 dsh-better-sidebar**:DSH 页面**右上角出现一个「代码管理」浮动按钮**,点击后展开**右侧栏抽屉**(形态类似 dsh-better-sidebar 的右栏),内容放同一面板。
|
|
15
|
+
|
|
16
|
+
> 检测只是激活时一次内存读取(`ctx.get('betterSidebar')`),零 I/O、零网络,不影响 DSH 启动速度;两种形态间自动切换,**不再占用左栏底部的按钮**。
|
|
17
|
+
|
|
18
|
+
面板分三步:
|
|
10
19
|
|
|
11
20
|
### ① 环境检查
|
|
12
21
|
- 显示**操作系统**(美化名:`Windows` / `macOS` / `Linux`,对应底层 Node 平台标识 `win32` / `darwin` / `linux`)
|
|
13
22
|
- 自动检测 **Git**、**GitHub CLI** 是否安装及版本(如 `git version 2.55.0`、`gh version 2.97.0`)
|
|
14
23
|
- 检测 **SSH** 客户端是否可用(解析到可用 `ssh` 即显示「已找到」)
|
|
15
|
-
-
|
|
24
|
+
- **缺工具时给安装指引 + 一键安装**:某工具未找到时,该行显示「❌ 未安装」+「**复制安装命令**」+「**安装**」按钮——「安装」走 host 自动选包管理器执行(Windows 用 winget / 内置功能、macOS 用 brew、Linux 用 apt/dnf/pacman,可能需管理员权限),安装后自动重新检测;也可点「复制安装命令」手动执行
|
|
16
25
|
|
|
17
26
|
### ② SSH 密钥与连接
|
|
18
27
|
- **平台选择**:下拉选择代码托管平台 **GitHub(默认)** / **Gitee**,决定下面的 SSH 配置写入与连接测试目标
|
|
19
|
-
-
|
|
20
|
-
- 一键**生成 ed25519
|
|
28
|
+
- **自动探测 ed25519 密钥**:扫描 `~/.ssh/*.pub` 中已存在的 ed25519 公钥——**优先用 `id_ed25519`**;否则用找到的第一个(支持任意命名的密钥,如 `github_ed25519`);都没有则默认名 `id_ed25519`。状态行显示**实际检测到的密钥文件名**,SSH config 的 `IdentityFile` 也用它
|
|
29
|
+
- 一键**生成 ed25519 密钥**(无密码;本地已有 ed25519 密钥时复用,不会重复生成)
|
|
21
30
|
- 一键**写入 SSH config**(GitHub:`github.com → ssh.github.com:443`;Gitee:`gitee.com` 443 端口;均为 443 端口满足国内网络绕过 22 端口封锁)
|
|
22
31
|
- **测试连接** `ssh -T git@github.com`(GitHub)或 `ssh -T git@gitee.com`(Gitee)
|
|
23
32
|
- 显示公钥内容,方便复制上传到对应平台
|
|
@@ -29,13 +38,16 @@
|
|
|
29
38
|
- **选择工作区**:下拉选择 DSH 已登记的工作区文件夹,选中即加载
|
|
30
39
|
- **选择目录 →**:下拉右侧按钮,可手动输入/粘贴目录绝对路径或点击「浏览…」弹出原生文件夹选择器;确认后**持久化加入自定义目录列表**(插件独立存储于 `~/.dsh/storages/source-code-mgmt-dirs.json`,**不写入插件目录**,开源不泄漏个人路径),下次打开无需重新选择;手动添加的目录会以**自定义目录徽标**显示,末端带 **✕** 可一键删除该下拉记录(只删记录,不删实际文件夹)
|
|
31
40
|
- 显示仓库状态:平台来源、分支、远程地址、待提交改动数、领先/落后远程、>100MB 文件
|
|
32
|
-
- **查看详情**:有改动时「改动」行旁出现「查看」按钮 →
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
|
|
41
|
+
- **查看详情**:有改动时「改动」行旁出现「查看」按钮 → 点击弹出窗口列出改动/新增/删除/重命名的**文件或文件夹名称**;对已跟踪的改动(修改/删除/新增)可**点击文件行展开查看内容 diff**——**并排视图**(左旧右新,删除行红底、新增行绿底),untracked 新文件无 diff 只列名称;本地与远程存在差异时「同步」行旁出现「查看」按钮 → 点击弹出窗口显示**本地领先/落后的具体提交列表**;无改动或已一致时不显示按钮
|
|
42
|
+
- **本地 Git 工作流**(不改动远程同步逻辑):
|
|
43
|
+
- 「改动」弹窗里每个文件行有**暂存 / 取消暂存**按钮(按 `git status` 的 XY 状态区分 staged/unstaged),并显示「已暂存 / 未暂存」标记
|
|
44
|
+
- ③ 面板仓库名上方有**提交信息输入框 + 「提交」按钮**(仅 git 仓库且有改动时显示)——可写自定义提交信息,**不再用固定 message**;留空则自动生成
|
|
45
|
+
- 「分支」行旁有**「切换」**按钮 → 弹窗列出分支,点选即 `checkout`
|
|
46
|
+
- 「分支」行旁有**「历史」**按钮 → 弹窗列出提交(hash+subject+author+date),每条可**查看**(并排 diff)、**revert**、**cherry-pick**(后两者带确认框,因为会改写历史)
|
|
47
|
+
- **远程按平台 + 当前账号匹配**:③ 的「远程 / 同步」只认「属于当前平台的远程」**且 owner 等于当前登录账号**(GitHub 平台 = `gh` 账号如 `Zhucy123` 名下,Gitee 平台 = Gitee 令牌账号如 `Zhucy2100` 名下)。这样:
|
|
48
|
+
- 切到 Gitee 时不读 GitHub 的 origin,只读 gitee.com 的远程;
|
|
49
|
+
- github.com 上**属于别人/其他组织**的仓库(如 `deepseek-ai/deepseek-harness`)不会被当作「用户自己的远程」显示,ahead/behind 也不对它计算;
|
|
50
|
+
- 本地没有属于当前账号的远程时,「远程」显示「(无)」、不计算同步,只走「同名仓库检测 + 新建仓库并推送」形态。
|
|
39
51
|
- **创建 Git**:当所选目录**不是 git 仓库**但远程已存在同名仓库时显示该按钮,仅执行 `git init`(+设默认身份),**不拉取不推送**,由用户自行决定下一步是拉取还是推送
|
|
40
52
|
- **新建仓库并推送**:默认以**文件夹名**为仓库名(只读不可改),可选**私有/公开**;同名仓库已存在时**按钮禁用**并在下方提示「同名仓库已经创建」。若目录还是**全新的(尚无任何提交)**,会先自动 `git add` + 生成一个初始提交再创建,避免推送时报 "no commits found"
|
|
41
53
|
- GitHub:`gh repo create --private|--public --source=. --push`
|
|
@@ -49,57 +61,19 @@ DSH 打开时自动预取环境/SSH/工作区/仓库状态,点开面板**直
|
|
|
49
61
|
|
|
50
62
|
### 关键前提:安装 ≠ 激活
|
|
51
63
|
|
|
52
|
-
`pnpm add`(无论是 `link:`、`git+` 还是 npm)只会把插件写进 profile 的 `package.json` 依赖和 `node_modules`,**并不会自动把插件注册进 Cordis loader
|
|
53
|
-
|
|
54
|
-
### 方式一:从本地目录安装(开发/测试)
|
|
55
|
-
|
|
56
|
-
**Windows (PowerShell):**
|
|
57
|
-
|
|
58
|
-
```powershell
|
|
59
|
-
# 1. 进入你的 DSH profile 目录
|
|
60
|
-
cd ~/.dsh/profiles/web
|
|
61
|
-
|
|
62
|
-
# 2. 用 link 协议添加插件(指向本地源码绝对路径),会建立符号链接
|
|
63
|
-
pnpm add link:C:/path/to/source-code-mgmt
|
|
64
|
-
|
|
65
|
-
# 3. 激活插件:在 ~/.dsh/profiles/web/cordis.patch.yml 追加 insert 条目(见下)
|
|
66
|
-
# 4. 完全重启 dsh web(先停旧进程再启动,刷新页面不生效)
|
|
67
|
-
dsh web
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**Linux / macOS:**
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
# 1. 进入你的 DSH profile 目录
|
|
74
|
-
cd ~/.dsh/profiles/web
|
|
75
|
-
|
|
76
|
-
# 2. 链接到插件源码目录(符号链接)
|
|
77
|
-
pnpm add link:/home/yourname/path/to/source-code-mgmt
|
|
78
|
-
|
|
79
|
-
# 3. 激活插件:在 ~/.dsh/profiles/web/cordis.patch.yml 追加 insert 条目
|
|
80
|
-
# 4. 完全重启 dsh web(先停旧进程再启动)
|
|
81
|
-
dsh web
|
|
82
|
-
```
|
|
64
|
+
`pnpm add`(无论是 `link:`、`git+` 还是 npm)只会把插件写进 profile 的 `package.json` 依赖和 `node_modules`,**并不会自动把插件注册进 Cordis loader 树**。要让「代码管理」入口出现,**还必须激活它**(见下方「激活配置(安装后必做)」)+ **完全重启 dsh web**。这也是 dsh-update 等本地插件共用的激活方式。
|
|
83
65
|
|
|
84
|
-
###
|
|
66
|
+
### 方式一:从 npm 官方包安装(推荐)
|
|
85
67
|
|
|
86
|
-
|
|
68
|
+
**最省事的方式**——只需一条命令,且不用先进 profile 目录,推荐给普通使用者。
|
|
87
69
|
|
|
70
|
+
**在任意目录执行:**
|
|
88
71
|
```bash
|
|
89
|
-
#
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
# 2. 从 GitHub 安装插件(实际下载源码到 node_modules)
|
|
93
|
-
pnpm add git+https://github.com/Zhucy123/source-code-mgmt.git
|
|
94
|
-
|
|
95
|
-
# 3. 激活插件:在 ~/.dsh/profiles/web/cordis.patch.yml 追加 insert 条目(见下)
|
|
96
|
-
# 4. 完全重启 dsh web(先停旧进程再启动)
|
|
97
|
-
dsh web
|
|
72
|
+
# 用 DSH 自带的插件命令(自动定位/初始化 web profile)
|
|
73
|
+
dsh plugin --profile web add source-code-mgmt
|
|
98
74
|
```
|
|
99
75
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
### 方式三:从 npm 安装(暂未发布)
|
|
76
|
+
或者等价地手动操作:
|
|
103
77
|
|
|
104
78
|
```bash
|
|
105
79
|
cd ~/.dsh/profiles/web
|
|
@@ -107,7 +81,7 @@ pnpm add source-code-mgmt
|
|
|
107
81
|
dsh web
|
|
108
82
|
```
|
|
109
83
|
|
|
110
|
-
>
|
|
84
|
+
> 说明:`dsh plugin --profile web add <包名>` 本质是「在 web profile 目录里执行 `pnpm add <包名>`」并顺带对账插件层,比手动 `cd` 更省心。但它**同样不会自动把插件激活**(不会替你写 `cordis.patch.yml` 的 insert 条目),所以装完后仍需下面「激活配置」里的步骤 + 完全重启。
|
|
111
85
|
|
|
112
86
|
### 激活配置(安装后必做)
|
|
113
87
|
|
|
@@ -119,7 +93,7 @@ dsh web
|
|
|
119
93
|
name: 'source-code-mgmt'
|
|
120
94
|
```
|
|
121
95
|
|
|
122
|
-
保存后**完全重启 dsh web**(不是刷新页面,而是要停掉旧进程后重新启动),然后浏览器 **F5
|
|
96
|
+
保存后**完全重启 dsh web**(不是刷新页面,而是要停掉旧进程后重新启动),然后浏览器 **F5 刷新**,「代码管理」入口即出现(已装 dsh-better-sidebar 时为侧边栏 Tab,未装时为右上角浮动按钮)。
|
|
123
97
|
|
|
124
98
|
> 用命令直接追加(幂等,已存在则跳过)——PowerShell:
|
|
125
99
|
> ```powershell
|
|
@@ -139,6 +113,51 @@ dsh web
|
|
|
139
113
|
> }
|
|
140
114
|
> ```
|
|
141
115
|
|
|
116
|
+
### 方式二:从本地目录安装(开发/测试)
|
|
117
|
+
|
|
118
|
+
**Windows (PowerShell):**
|
|
119
|
+
|
|
120
|
+
```powershell
|
|
121
|
+
# 1. 进入你的 DSH profile 目录
|
|
122
|
+
cd ~/.dsh/profiles/web
|
|
123
|
+
|
|
124
|
+
# 2. 用 link 协议添加插件(指向本地源码绝对路径),会建立符号链接
|
|
125
|
+
pnpm add link:C:/path/to/source-code-mgmt
|
|
126
|
+
|
|
127
|
+
# 3. 激活插件:同上(见上方「激活配置」;追加 insert 条目后完全重启)
|
|
128
|
+
dsh web
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Linux / macOS:**
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# 1. 进入你的 DSH profile 目录
|
|
135
|
+
cd ~/.dsh/profiles/web
|
|
136
|
+
|
|
137
|
+
# 2. 链接到插件源码目录(符号链接)
|
|
138
|
+
pnpm add link:/home/yourname/path/to/source-code-mgmt
|
|
139
|
+
|
|
140
|
+
# 3. 激活插件:同上(见上方「激活配置」;追加 insert 条目后完全重启)
|
|
141
|
+
dsh web
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 方式三:从 GitHub 安装(分发场景)
|
|
145
|
+
|
|
146
|
+
**Windows / Linux / macOS 通用:**
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# 1. 进入你的 DSH profile 目录
|
|
150
|
+
cd ~/.dsh/profiles/web
|
|
151
|
+
|
|
152
|
+
# 2. 从 GitHub 安装插件(实际下载源码到 node_modules)
|
|
153
|
+
pnpm add git+https://github.com/Zhucy123/source-code-mgmt.git
|
|
154
|
+
|
|
155
|
+
# 3. 激活插件:同上(见上方「激活配置」;追加 insert 条目后完全重启)
|
|
156
|
+
dsh web
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
> 方式三装完同样**不会自动激活**(激活方式同方式一);且它是**实际拷贝**到 node_modules,改动源码需重新 `pnpm add` 拉取(不像 `link:` 是符号链接、改源码即生效)。
|
|
160
|
+
|
|
142
161
|
### 验证安装是否成功
|
|
143
162
|
|
|
144
163
|
安装 + 激活 + 重启后,可以核对以下几点:
|
|
@@ -146,7 +165,7 @@ dsh web
|
|
|
146
165
|
1. **依赖已写入**:`~/.dsh/profiles/web/package.json` 的 `dependencies` 里应有 `source-code-mgmt`。
|
|
147
166
|
2. **符号链接已建立(`link:` 方式)**:`~/.dsh/profiles/web/node_modules/source-code-mgmt` 指向源码目录(Windows 显示为 Junction)。
|
|
148
167
|
3. **激活条目已添加**:`~/.dsh/profiles/web/cordis.patch.yml` 里有 `source-code-mgmt` 的 insert 条目。
|
|
149
|
-
4.
|
|
168
|
+
4. **重启后入口可见**:已装 dsh-better-sidebar 时侧边栏出现「代码管理」Tab;未装时右上角出现「代码管理」浮动按钮。
|
|
150
169
|
|
|
151
170
|
### 常见排障
|
|
152
171
|
|
|
@@ -159,7 +178,7 @@ dsh web
|
|
|
159
178
|
## 使用步骤
|
|
160
179
|
|
|
161
180
|
1. 重启 dsh web 并刷新浏览器
|
|
162
|
-
2.
|
|
181
|
+
2. 点击「**代码管理**」入口(已装 dsh-better-sidebar 时点侧边栏 Tab,未装时点右上角浮动按钮)
|
|
163
182
|
3. 面板打开(秒显预加载数据)
|
|
164
183
|
4. ①确认 Git / GitHub CLI 已安装 → ②生成密钥并测试连接 → ③选择工作区后推送或新建仓库
|
|
165
184
|
|
|
@@ -168,6 +187,7 @@ dsh web
|
|
|
168
187
|
| 路由 | 方法 | 说明 |
|
|
169
188
|
|------|------|------|
|
|
170
189
|
| `/api/source-code-mgmt/env` | GET | 环境检查(git/gh 版本) |
|
|
190
|
+
| `/api/source-code-mgmt/install-tool` | POST | 一键安装缺失工具(body `tool`: `git`/`gh`/`ssh`,按平台自动选包管理器) |
|
|
171
191
|
| `/api/source-code-mgmt/ssh` | GET | SSH 密钥 / config / gh 登录状态 |
|
|
172
192
|
| `/api/source-code-mgmt/gen-key` | POST | 生成 ed25519 密钥 |
|
|
173
193
|
| `/api/source-code-mgmt/write-config` | POST | 写入 SSH config(body `provider`: `github` 默认 / `gitee`) |
|
|
@@ -181,6 +201,16 @@ dsh web
|
|
|
181
201
|
| `/api/source-code-mgmt/init-git` | POST | 仅 `git init` + 设置默认身份,不拉取不推送(由用户决定下一步) |
|
|
182
202
|
| `/api/source-code-mgmt/repo-exists` | POST | 检测同名仓库是否存在(body `provider`: `github`/`gitee`) |
|
|
183
203
|
| `/api/source-code-mgmt/repo?dir=` | GET | 获取仓库状态(query `provider`: `github`/`gitee`) |
|
|
204
|
+
| `/api/source-code-mgmt/repo-diff?dir=&path=` | GET | 按需返回单个改动文件的 unified diff 文本 |
|
|
205
|
+
| `/api/source-code-mgmt/stage` | POST | 暂存改动(body `dir`、`path`;`path` 空=全部) |
|
|
206
|
+
| `/api/source-code-mgmt/unstage` | POST | 取消暂存(body `dir`、`path`;`path` 空=全部) |
|
|
207
|
+
| `/api/source-code-mgmt/commit` | POST | 用自定义信息提交(body `dir`、`message`、`paths?`;沿用 pushFlow 的无身份兜底逻辑) |
|
|
208
|
+
| `/api/source-code-mgmt/branches` | POST | 列出分支(当前分支在前) |
|
|
209
|
+
| `/api/source-code-mgmt/checkout` | POST | 切换分支(body `dir`、`branch`) |
|
|
210
|
+
| `/api/source-code-mgmt/log` | POST | 最近提交历史(body `dir`、`count?`,返回 hash/subject/author/date) |
|
|
211
|
+
| `/api/source-code-mgmt/revert` | POST | revert 某提交(body `dir`、`hash`) |
|
|
212
|
+
| `/api/source-code-mgmt/cherrypick` | POST | cherry-pick 某提交(body `dir`、`hash`) |
|
|
213
|
+
| `/api/source-code-mgmt/commit-diff` | POST | 返回某提交的完整 patch(body `dir`、`hash`) |
|
|
184
214
|
| `/api/source-code-mgmt/push` | POST | 提交并推送(git 操作,平台无关) |
|
|
185
215
|
| `/api/source-code-mgmt/pull` | POST | 从远程拉取更新(`git pull --ff-only`,已最新/成功/冲突反馈) |
|
|
186
216
|
| `/api/source-code-mgmt/merge-push` | POST | 拉取并推送(`git pull --rebase` + `git push`,本地有更改且远程有更新时合并推送) |
|
|
@@ -198,11 +228,12 @@ dsh web
|
|
|
198
228
|
|
|
199
229
|
- **Windows / Linux / macOS 通用**
|
|
200
230
|
- 用 `process.platform` 检测平台
|
|
201
|
-
- `~/.ssh` 通过 `homedir()` 定位(Windows: `C:\Users\用户名\ .ssh`,Linux: `/home/用户名/.ssh`)
|
|
231
|
+
- `~/.ssh` 通过 `homedir()` 定位(Windows: `C:\Users\用户名\ .ssh`,Linux/macOS: `/home/用户名/.ssh` 或 `/Users/用户名/.ssh`)
|
|
202
232
|
- Linux/macOS 下 SSH config 自动设 0600 权限
|
|
203
233
|
- **git / gh / ssh / ssh-keygen 二进制自动探测**:启动时依次按 ①环境变量覆盖 → ②PATH 查找(Windows 加 `.exe`)→(仅 Windows)③Git 自带目录(`usr\bin` / `bin`)回退,最后兜底用裸命令名。因此只要装了 Git,即使 `ssh` 不在 PATH 里也能正常工作,换设备无需额外配置。
|
|
204
234
|
- 如需手动指定二进制路径,可用环境变量覆盖:`DSH_SCM_GIT` / `DSH_SCM_GH` / `DSH_SCM_SSH` / `DSH_SCM_SSH_KEYGEN`
|
|
205
235
|
- **SSH 传输修复**:Git for Windows 自带的 MSYS `ssh.exe`(`usr\bin\ssh.exe`)在被 detached/agent 进程调用时可能报 `couldn't create signal pipe, Win32 error 5`,导致 `git push`/`git pull` 失败。插件执行 git 远程命令时会自动注入 `GIT_SSH` 指向解析到的可用 `ssh`(通常为系统 OpenSSH `C:\Windows\System32\OpenSSH\ssh.exe`),避免该问题。
|
|
236
|
+
- **缺工具一键安装跨平台**:Windows 用 winget / 内置功能(回退 choco/scoop),macOS 用 brew,Linux 用 apt-get / dnf / pacman(自动带 `sudo -n`;已是 root 则省略)。SSH 密钥探测、本地 Git 工作流、并排 diff 等在三个平台行为一致;「浏览目录」的原生选择器仅 Windows 可用,macOS/Linux 上请在输入框直接填路径(可手动输入粘贴)。
|
|
206
237
|
|
|
207
238
|
## 开发
|
|
208
239
|
|
|
@@ -219,7 +250,56 @@ pnpm add link:$(pwd)
|
|
|
219
250
|
|
|
220
251
|
## 版本历史
|
|
221
252
|
|
|
222
|
-
### v1.
|
|
253
|
+
### v1.5.0(当前)
|
|
254
|
+
本次更新:
|
|
255
|
+
|
|
256
|
+
- **① 环境检查缺工具一键安装**:某个工具(git / gh / ssh)未检测到时,该行显示「❌ 未安装」+「复制安装命令」+「**安装**」按钮——「安装」由 host 自动选包管理器执行(Windows winget / 内置功能、macOS brew、Linux apt/dnf/pacman),安装后自动重新检测;host 新增 `POST /install-tool` 路由(best-effort,回传执行命令与输出)
|
|
257
|
+
- **修复切换平台后 ③ 未刷新**:仓库状态缓存按目录 + 平台区分,② 切换 GitHub / Gitee 后 ③ 会重新拉取对应平台的检测内容,不再残留上一个平台的「远程/同步/同名校验」结果;拉取期间显示「⟳ 切换平台,正在重新检测…」提示,避免旧内容停留几秒让用户误以为没变化
|
|
258
|
+
- **macOS / Linux 适配修复**:Linux 缺工具一键安装自动带 `sudo -n`(已是 root 则省略,避免权限失败挂起);`decodeSessionDir` 按平台区分 Windows 盘符路径与 POSIX 绝对路径,macOS / Linux 下也能正确从 session 目录还原工作区
|
|
259
|
+
|
|
260
|
+
### v1.4.0(历史)
|
|
261
|
+
本次更新:
|
|
262
|
+
|
|
263
|
+
- **SSH 密钥自动探测**:扫描 `~/.ssh/*.pub` 中的 ed25519 公钥——优先用 `id_ed25519`,否则用找到的第一个(支持任意命名密钥);都没有才用默认名 `id_ed25519` 新建。② 状态行显示实际检测到的密钥名,SSH config 的 `IdentityFile` 也用它,有自定义命名密钥也能正确识别、配置并推送
|
|
264
|
+
|
|
265
|
+
### v1.3.0(历史)
|
|
266
|
+
本次更新(补齐本地 Git 工作流,未改动远程同步逻辑):
|
|
267
|
+
|
|
268
|
+
- **② SSH 默认折叠 + 标题行切平台**:② SSH 部分默认折叠,标题行内嵌「平台」下拉(折叠时也能切),切换后自动展开该部分以继续配置,③ 跟随平台
|
|
269
|
+
|
|
270
|
+
- **选择性暂存 + 自定义提交信息**:「改动」弹窗每个文件行新增**暂存 / 取消暂存**按钮(按 `git status --porcelain` 的 XY 状态区分 staged/unstaged),并显示「已暂存 / 未暂存」;③ 面板仓库名上方新增**提交信息输入框 + 「提交」按钮**,提交不再用固定 `chore: update workspace via DSH...`(留空则自动生成基于文件夹名的信息);沿用 `pushFlow` 的无身份兜底逻辑
|
|
271
|
+
- **分支切换 + 提交历史 + revert / cherry-pick**:「分支」行旁新增「切换」(弹窗列出分支,点选 `checkout`)与「历史」(弹窗列出提交,每条可「查看」「revert」「cherry-pick」——后两者带确认框)
|
|
272
|
+
- **真·并排 diff**:把 unified diff 解析成(旧行/新行)配对,左右两栏渲染(删除行红底、新增行绿底);改动文件展开与历史点某提交(`/commit-diff`)都用并排视图;保留纯文本 `renderDiff` 作降级(二进制/无法解析时)
|
|
273
|
+
- **「查看改动」秒出**:加载仓库状态时后台并发预取所有改动文件的 diff(并发≤3、纯本地 git 读取)并缓存,点开文件行立即显示,不再等「加载中…」
|
|
274
|
+
- **提交历史右键菜单**:「历史」弹窗每条提交可点**「⋯」或右键**打开菜单——查看提交差异、复制短哈希、复制完整哈希、复制提交信息、还原此提交(revert)、拾取此提交(cherry-pick,后两者带确认框)
|
|
275
|
+
- **本地 Git 功能按 better-sidebar 自适应隐藏**:已安装并激活 **dsh-better-sidebar** 时,③ 面板**隐藏本插件自带的本地 Git 工作流**(暂存/取消暂存、自定义提交、分支「切换」、提交「历史」+ revert/cherry-pick、并排 diff),因为这些能力 better-sidebar 的 Git 面板已覆盖,避免重复;此情况下「查看改动」弹窗**只列改动文件**,并**提示具体改动内容请到 dsh-better-sidebar 的「源代码管理 / Git 面板」查看**;**未安装**时则展示完整本地 Git 功能
|
|
276
|
+
- host 端新增 `/stage` `/unstage` `/commit` `/branches` `/checkout` `/log` `/revert` `/cherrypick` `/commit-diff` 路由(全部走 `isLoopbackRequest` 校验 + `run()`/`GIT_SSH`)
|
|
277
|
+
|
|
278
|
+
### v1.2.0(历史)
|
|
279
|
+
本次更新:
|
|
280
|
+
|
|
281
|
+
- **入口自适应(不再占用左栏底部按钮)**:「代码管理」的入口改为自动检测——**已安装 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) 时**,通过其 `ctx.betterSidebar.registerTab` 把「代码管理」注册为该侧边栏的一个**新 Tab 页面**;**未安装时**,在 DSH 页面**右上角显示一个浮动按钮**,点击展开**右侧栏抽屉**(形态类似 dsh-better-sidebar 的右栏),内容为同一面板
|
|
282
|
+
- **检测零开销**:激活时仅一次内存读取(`ctx.get('betterSidebar')`),零 I/O、零网络,毫秒级,不影响 DSH 启动;并对激活顺序做了兜底延迟重试,保证最终落在正确的形态
|
|
283
|
+
- **移除原左栏底部按钮**:不再通过 `sidebar.footer.action` 插槽注册触发按钮;`ScmPanel` 支持 `variant`(`tab` / `drawer`)以分别适配侧边栏 Tab 与右侧抽屉布局,面板 UI 与 host 端 `/api` 路由完全复用、未改动
|
|
284
|
+
- **可见性默认值更聪明**:「私有 / 公开」下拉默认选**当前仓库的实际可见性**(已存在且可读时);当所选工作区**没有远程**(即将新建的仓库)时,默认选**公开**,而不是固定「私有」
|
|
285
|
+
- **每个部分可折叠**:①环境检查 / ②SSH / ③代码管理 标题行**右上角各加一个折叠按钮**,点击收起只显示标题、再点展开;①环境检查在**所有工具都就绪**(git/gh/ssh 均已安装)时**默认折叠**并显示「✅ 均存在」提示
|
|
286
|
+
|
|
287
|
+
### v1.1.2(历史)
|
|
288
|
+
本次更新:
|
|
289
|
+
|
|
290
|
+
- **改动详情可展开查看内容 diff**:「改动」查看弹窗里,对已跟踪的改动(修改/删除/新增)点击文件行即可展开查看该文件的 diff——删除行红色带 `-`、新增行绿色带 `+`、上下文灰色;untracked 新文件无 diff 只列名称(后端对每个改动文件追加 `git diff`/`git diff --cached` 内容)
|
|
291
|
+
|
|
292
|
+
### v1.1.1(历史)
|
|
293
|
+
本次更新:
|
|
294
|
+
|
|
295
|
+
- **远程按平台切换**:切到 Gitee 时「远程 / 同步」不再读取 GitHub 的 origin,而是只匹配 gitee.com 的远程(GitHub 平台仍读 github.com 远程)——解决「切到 Gitee 却仍显示 `git@github.com:...`」的问题;本地没有对应平台远程时显示「(无)」且不计算同步
|
|
296
|
+
- **远程必须属于当前账号**:此前只按 `github.com`/`gitee.com` 域名匹配远程,导致 `deepseek-ai/deepseek-harness` 这类**别人的远程**被当成用户自己的远程显示、还能点「推送更改」。现在校验远程 owner 必须等于当前登录账号(GitHub=`gh` 账号、Gitee=令牌账号),不属于自己的远程一律不算,界面回到「同名仓库检测 + 新建仓库」形态;同时无远程时「同步」行显示「(无)」,不再误显示「与远程一致」
|
|
297
|
+
- **「拉取更新」改用强制对齐的实现并直接执行**:「本地干净 + 远程有更新」状态的「拉取更新」按钮不再走 `git pull --ff-only`,而是复用「强制对齐」的 `git fetch` + `git reset --hard origin/<branch>` 逻辑——本地干净没有可丢失的改动,reset 等同快速前进到远程最新,且**不弹确认框直接执行**,结果更可靠(可绕过 rebase/merge 常见失败场景)
|
|
298
|
+
- **操作按钮只保留当前状态对应的唯一动作**:只有本地有改动(远程一致)→ 只显示「推送更改」;只有远程有更新(本地干净)→ 只显示「拉取更新」;「强制对齐」仅在「本地和远程都有更新」状态出现(该状态的唯一操作按钮),不再在推送/拉取/已同步状态里当作兜底显示
|
|
299
|
+
- **「本地有改动 + 远程有更新」状态只保留「强制对齐」**:此前该状态显示「拉取更新并推送更改 / 强制推送 / 强制拉取」三按钮,但这些操作容易因未提交改动、分支保护等失败且行为难预测(表现为点了没反应、不显示结果),现改为只显示提示 + 「强制对齐」按钮(`git fetch` + `git reset --hard`,本地完全重置为远程),与用户实际想要的「一键对齐」一致
|
|
300
|
+
- **修复「点了按钮没有任何反馈」**:操作回调先 `setErr` 再刷新仓库状态,随后 `loadRepo` 把错误提示无条件清空,导致失败时结果被立即抹掉、界面像什么都没发生;现在错误/结果会保留显示(切换目录 / 切换平台 / 手动刷新状态仍会清空旧提示),对齐失败等也能看到真实原因
|
|
301
|
+
|
|
302
|
+
### v1.1.0(历史)
|
|
223
303
|
本次更新:
|
|
224
304
|
|
|
225
305
|
- **② SSH 新增平台选择**:在「② SSH 密钥与连接」顶部增加下拉选择代码托管平台 **GitHub(默认)** / **Gitee**
|