dsh-plugin-workbench 0.0.1 → 0.0.3
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/CHANGELOG.md +10 -0
- package/README.md +29 -176
- package/lib/client.js +540 -43
- package/lib/client.js.map +1 -1
- package/package.json +3 -2
- package/scripts/verify-alignment.mjs +180 -0
- package/src/client/FileExplorer.tsx +4 -1
- package/src/client/FilePreview.tsx +14 -4
- package/src/client/fileIcons.tsx +144 -0
- package/src/client/files.module.css +61 -3
- package/src/client/locales.ts +4 -0
- package/src/client/store.ts +32 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
|
|
5
5
|
版本号遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/)。
|
|
6
6
|
|
|
7
|
+
## [0.0.3] - 2026-08-16
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- 文件图标:常见格式按扩展名显示着色徽章(TS/JS/PY/HTML/CSS 等代码文件)、
|
|
12
|
+
emoji(图片、音视频、压缩包、Office 文档、安装包等),目录展开/收起图标区分
|
|
13
|
+
- 自动换行开关:标签栏一键在「软换行(仅显示层换行,不改动文件)」与
|
|
14
|
+
「长行横向滚动」之间切换;偏好写入 localStorage 持久化
|
|
15
|
+
- 高亮层与编辑层滚动槽对齐、tab 缩进对齐修复
|
|
16
|
+
|
|
7
17
|
## [0.0.1] - 2026-08-14
|
|
8
18
|
|
|
9
19
|
### Added
|
package/README.md
CHANGED
|
@@ -6,213 +6,66 @@
|
|
|
6
6
|

|
|
7
7
|

|
|
8
8
|
|
|
9
|
-
DSH Web GUI 的 VS Code
|
|
10
|
-
|
|
11
|
-
文件树自动刷新,每个工作区各自保存自己的标签与展开状态。
|
|
12
|
-
|
|
13
|
-
> 需要两条改动线同时存在:本插件仓库 + 对 `dsh-client-ui-layout` 编译产物的布局补丁。
|
|
14
|
-
|
|
15
|
-
## 功能特性
|
|
16
|
-
|
|
17
|
-
- **文件树**:跟随当前会话工作区(`SessionSummary.cwd`),目录在前、按名称排序、
|
|
18
|
-
懒加载展开;每 2 秒自动刷新可见目录,磁盘变化无需手动刷新。
|
|
19
|
-
- **分栏预览**:点文件在中间区左侧打开(默认 55% 宽),聊天区压缩到右侧;
|
|
20
|
-
分隔条可拖拽调宽;打开/关闭带淡入淡出动画。
|
|
21
|
-
- **直接编辑**:预览即编辑器(透明 textarea 叠加语法高亮层),打开即可打字;
|
|
22
|
-
`Ctrl+S` / `Cmd+S` 保存写回磁盘,未保存的标签显示脏标记圆点。
|
|
23
|
-
- **标签页**:可同时打开多个文件,标签可点选、可拖拽排序、可逐个关闭。
|
|
24
|
-
- **收起/弹出**:标签栏最右侧 `<` 收起(暂存,标签与内容保留);文件列头部 `>`
|
|
25
|
-
原样弹出。
|
|
26
|
-
- **明暗主题**:文件列头部 ☀/🌙 一键切换 VS Code 亮色/暗色配色(独立于 app 皮肤)。
|
|
27
|
-
- **按工作区隔离**:每个工作区(cwd)各存一份标签、激活文件、收起状态、展开目录;
|
|
28
|
-
切换工作区互不干扰,切回后原样恢复。
|
|
29
|
-
- **语法高亮**:内置 highlight.js,覆盖 JS/TS、Python、JSON、HTML/XML、CSS、Markdown、
|
|
30
|
-
Shell、Java、C/C++、C#、Go、Rust、SQL、YAML、INI(按扩展名自动识别)。
|
|
31
|
-
|
|
32
|
-
## 架构
|
|
33
|
-
|
|
34
|
-
一个包同时承载 host 半部(cordis 插件)与 client 半部(浏览器 bundle),外加一处
|
|
35
|
-
对 DSH 核心布局编译产物的补丁。
|
|
9
|
+
DSH Web GUI 的 VS Code 风格文件浏览器插件:文件树 + 可编辑代码预览
|
|
10
|
+
(语法高亮、标签页),每个工作区独立保存状态。**需要布局补丁**(见下)。
|
|
36
11
|
|
|
37
|
-
|
|
38
|
-
浏览器 host (Node)
|
|
39
|
-
┌────────────────────────────────────────────┐ ┌──────────────────────┐
|
|
40
|
-
│ AppFrame (4 列: sidebar|explorer|center|details) │ │ ctx.fs (沙箱文件系统) │
|
|
41
|
-
│ ├ explorer 槽位 → FileExplorer(文件树) │ RPC │ /dsh-plugin-files │
|
|
42
|
-
│ ├ explorer.preview 槽位 → FilePreview(编辑)│◄─────►│ ├ list 目录列举 │
|
|
43
|
-
│ └ 会话区 = conversation 槽位(聊天) │ │ ├ read 文件读取 │
|
|
44
|
-
└────────────────────────────────────────────┘ │ └ write 文件写回 │
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
- **host 半部**(`src/index.ts`):`apply(ctx)` 注册 loopback 专属 RPC 通道
|
|
48
|
-
`/dsh-plugin-files`,端点 `list`/`read`/`write` 全部基于 `ctx.fs`
|
|
49
|
-
(`resolve/stat/listDir/readText/writeText/processPath`)。读操作任何沙箱模式均放行;
|
|
50
|
-
`write` 显式以 `danger-full-access` 策略写回(等价 `/api` 写工具的权限模型)。
|
|
51
|
-
- **client 半部**(`src/client/*`):`apply(ctx)` 注册 `files` locale 命名空间,
|
|
52
|
-
并把 `FileExplorer` / `FilePreview` 分别注入 `explorer` / `explorer.preview` 槽位;
|
|
53
|
-
数据读写经 `ctx.connection.rpc.call` 走 host 端点,`ctx.workspaces.openPath` 打开系统。
|
|
54
|
-
`store.ts` 是共享状态:标签、激活文件、收起状态按 cwd 分桶(`workspaces[cwd]`)。
|
|
55
|
-
- **布局补丁**(`scripts/patch-layout.mjs`):DSH 自带的 `dsh-client-ui-layout` 只有
|
|
56
|
-
`sidebar | center | details` 三列。脚本对已安装包编译产物 `lib/client.js` 做精确
|
|
57
|
-
字符串替换,新增:`explorer` 列 + 拖拽手柄 + layout store 的 `explorer` 面板,
|
|
58
|
-
以及中心列分栏(`conversation` + `explorer.preview` 并排)。
|
|
59
|
-
|
|
60
|
-
## 文件结构
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
dsh-plugin-workbench/
|
|
64
|
-
├─ package.json # 包定义(main→host / exports["./client"]→client / dsh.bundle)
|
|
65
|
-
├─ cordis.patch.yml # bundle 补丁层:loader 条目(boot 自动应用)
|
|
66
|
-
├─ tsdown.config.ts # clientBundle 双面打包配置
|
|
67
|
-
├─ tsconfig.json # typecheck 配置(strict)
|
|
68
|
-
├─ README.md # 本文档
|
|
69
|
-
├─ CONTRIBUTING.md # 贡献指南
|
|
70
|
-
├─ CODE_OF_CONDUCT.md # 行为准则
|
|
71
|
-
├─ SECURITY.md # 安全政策
|
|
72
|
-
├─ CHANGELOG.md # 变更日志
|
|
73
|
-
├─ .github/
|
|
74
|
-
│ ├─ workflows/ci.yml # CI:pnpm install + typecheck + build(Node 20/22)
|
|
75
|
-
│ └─ ISSUE_TEMPLATE/ # Bug 报告 / 功能建议模板
|
|
76
|
-
├─ build/
|
|
77
|
-
│ ├─ tsdown.client.ts # 复用的 tsdown 预设(CSS Modules 内联 / banner / 纯净门)
|
|
78
|
-
│ └─ web-platform.ts # 平台模块表(外置 externals 清单)
|
|
79
|
-
├─ scripts/
|
|
80
|
-
│ └─ patch-layout.mjs # 布局补丁:4 列 + explorer 槽位 + 中心分栏(幂等、可回滚)
|
|
81
|
-
├─ patches/
|
|
82
|
-
│ └─ layout.backup/ # 布局 bundle 原版备份(脚本自动生成,不入库)
|
|
83
|
-
├─ src/
|
|
84
|
-
│ ├─ index.ts # host:/dsh-plugin-files RPC(list/read/write)
|
|
85
|
-
│ ├─ dsh.d.ts # 本地最小 Context 类型声明(DX only)
|
|
86
|
-
│ └─ client/
|
|
87
|
-
│ ├─ index.ts # client 入口:locale + 两个槽位注册
|
|
88
|
-
│ ├─ FileExplorer.tsx # 文件树列(懒加载 / 自动刷新 / 每工作区展开状态)
|
|
89
|
-
│ ├─ FilePreview.tsx # 分栏预览(标签 / 可编辑 / 语法高亮 / 收起弹出)
|
|
90
|
-
│ ├─ highlight.ts # highlight.js 语言集 + 扩展名识别
|
|
91
|
-
│ ├─ store.ts # 每工作区一份的标签/激活/收起状态
|
|
92
|
-
│ ├─ locales.ts # zh/en 文案
|
|
93
|
-
│ ├─ css-modules.d.ts # CSS Modules 类型声明(typecheck 用)
|
|
94
|
-
│ └─ files.module.css # VS Code 亮暗配色 + 编辑器 + 标签栏样式
|
|
95
|
-
└─ lib/ # 构建产物(不入库,`pnpm run build` 生成)
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## 前置要求
|
|
99
|
-
|
|
100
|
-
- 本地可运行的 DSH web(插件 RPC 通道仅限 loopback)
|
|
101
|
-
- Node.js ≥ 18 与 pnpm
|
|
102
|
-
- 本文档以 Windows 为例;macOS/Linux 路径同理(`~/.dsh`)
|
|
12
|
+
## 功能
|
|
103
13
|
|
|
104
|
-
|
|
14
|
+
- 文件树:懒加载、2 秒自动刷新、每工作区独立展开状态
|
|
15
|
+
- 文件图标:常见格式显示着色徽章(代码)/ emoji(图片、音视频、压缩包等),目录展开/收起区分
|
|
16
|
+
- 可编辑预览:透明 textarea 叠加语法高亮,`Ctrl+S`/`Cmd+S` 保存
|
|
17
|
+
- 自动换行:标签栏一键切换软换行(仅显示层换行,不改动文件内容)或长行横向滚动,偏好持久化
|
|
18
|
+
- 标签页:多文件、拖拽排序、收起/弹出;亮暗主题一键切换
|
|
19
|
+
- 语法高亮:highlight.js(JS/TS、Python、JSON、HTML、CSS、Markdown、Shell 等)
|
|
105
20
|
|
|
106
|
-
|
|
107
|
-
pnpm install
|
|
108
|
-
pnpm run build # 产出 lib/index.js(host)与 lib/client.js(browser)
|
|
109
|
-
pnpm run watch # 开发热更
|
|
110
|
-
pnpm run typecheck # 可选(tsdown 本身不做类型检查)
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## 安装与启用
|
|
21
|
+
## 安装
|
|
114
22
|
|
|
115
|
-
>
|
|
116
|
-
> 其他 DSH 版本需先按新产物更新 `scripts/patch-layout.mjs` 里的锚点。
|
|
117
|
-
|
|
118
|
-
本包是一个标准 DSH bundle(`package.json` 声明 `dsh.bundle`,自带
|
|
119
|
-
`cordis.patch.yml` 补丁层),推荐用 `dsh plugin` 命令安装:
|
|
120
|
-
|
|
121
|
-
**方式 A:从 npm 安装(官方推荐)**
|
|
23
|
+
> 布局补丁针对 `dsh-client-ui-layout@0.1.0-rc.6` 编写,其他版本需更新锚点。
|
|
122
24
|
|
|
123
25
|
```powershell
|
|
26
|
+
# npm(推荐)
|
|
124
27
|
dsh plugin --profile web add dsh-plugin-workbench
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
**方式 B:从 GitHub 安装**
|
|
128
|
-
|
|
129
|
-
```powershell
|
|
28
|
+
# 或 GitHub
|
|
130
29
|
dsh plugin --profile web add github:Pasumao/dsh-plugin-workbench
|
|
131
30
|
```
|
|
132
31
|
|
|
133
|
-
|
|
134
|
-
> 按提示把包名加入 profile 的 `pnpm-workspace.yaml` 的 `allowBuilds` 后重跑。
|
|
135
|
-
|
|
136
|
-
**方式 C:本地路径(开发调试)**
|
|
137
|
-
|
|
138
|
-
```powershell
|
|
139
|
-
dsh plugin --profile web add C:/path/to/dsh-plugin-workbench
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**手动安装(不用 `dsh plugin` 命令时)**
|
|
143
|
-
|
|
144
|
-
1. 在 `<DSH_HOME>/profiles/web/package.json` 的 dependencies 加入
|
|
145
|
-
`"dsh-plugin-workbench": "^0.0.1"`,然后 `cd <DSH_HOME>/profiles/web && pnpm install`
|
|
146
|
-
2. 把本包根目录 `cordis.patch.yml` 的内容追加到 profile 的 `cordis.patch.yml`
|
|
147
|
-
(loader 条目)
|
|
148
|
-
|
|
149
|
-
**以上所有方式装完后,还需要打布局补丁**(bundle 层只注入 loader 条目,
|
|
150
|
-
不会改写布局编译产物):
|
|
32
|
+
安装后打布局补丁并重启:
|
|
151
33
|
|
|
152
34
|
```powershell
|
|
153
35
|
node node_modules/dsh-plugin-workbench/scripts/patch-layout.mjs
|
|
36
|
+
# 重启 dsh web
|
|
154
37
|
```
|
|
155
38
|
|
|
156
|
-
|
|
157
|
-
> (脚本仍会继续),或改用 link 方式安装。
|
|
158
|
-
|
|
159
|
-
最后重启 dsh web。
|
|
160
|
-
|
|
161
|
-
## 验证
|
|
39
|
+
## 开发
|
|
162
40
|
|
|
163
41
|
```powershell
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
Invoke-WebRequest http://127.0.0.1:3080/plugins/@deepseek-ai/dsh-client-ui-layout/client.js
|
|
42
|
+
pnpm install
|
|
43
|
+
pnpm run build # 产出 lib/index.js(host)与 lib/client.js(browser)
|
|
44
|
+
pnpm run typecheck
|
|
168
45
|
```
|
|
169
46
|
|
|
170
|
-
|
|
47
|
+
## 卸载
|
|
171
48
|
|
|
172
49
|
```powershell
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
Invoke-WebRequest http://127.0.0.1:3080/dsh-plugin-files/list -Method POST `
|
|
176
|
-
-ContentType 'application/json' -Body $body -UseBasicParsing
|
|
50
|
+
dsh plugin --profile web remove dsh-plugin-workbench
|
|
51
|
+
# 并还原布局 bundle(patches/layout.backup/client.js.orig → dsh-client-ui-layout/lib/client.js)
|
|
177
52
|
```
|
|
178
53
|
|
|
179
|
-
## 回滚
|
|
180
|
-
|
|
181
|
-
1. `dsh plugin --profile web remove dsh-plugin-workbench`(手动安装时:从 profile
|
|
182
|
-
`package.json` 移除依赖并删除 profile `cordis.patch.yml` 中对应 insert)。
|
|
183
|
-
2. 还原布局 bundle:把 `patches/layout.backup/client.js.orig` 覆盖回
|
|
184
|
-
`@deepseek-ai\dsh-client-ui-layout\lib\client.js`(npx-cache 副本)。
|
|
185
|
-
3. 重启 dsh web。
|
|
186
|
-
|
|
187
|
-
## dsh 升级后
|
|
188
|
-
|
|
189
|
-
`npm`/`npx` 重装 `@deepseek-ai/dsh` 会覆盖布局 bundle,升级后重新执行
|
|
190
|
-
`node scripts/patch-layout.mjs`。若脚本报 "anchor not found",说明编译产物结构
|
|
191
|
-
变了,需按新 bundle 更新 `scripts/patch-layout.mjs` 里的锚点。插件本身是
|
|
192
|
-
bundle 依赖,升级用 `dsh plugin --profile web update dsh-plugin-workbench`
|
|
193
|
-
(本地 link 开发时 `pnpm run build` 重建即可)。
|
|
194
|
-
|
|
195
54
|
## 说明
|
|
196
55
|
|
|
197
|
-
- `/dsh-plugin-files` 通道仅限 loopback
|
|
198
|
-
-
|
|
199
|
-
-
|
|
200
|
-
- 明暗主题只作用于文件浏览器(`data-fe-theme`),不影响聊天区与皮肤。
|
|
201
|
-
- 本仓库不包含 DSH 的任何编译产物;`patches/layout.backup/` 由补丁脚本按需生成。
|
|
56
|
+
- `/dsh-plugin-files` RPC 通道仅限 loopback;写操作显式以 `danger-full-access` 执行
|
|
57
|
+
- DSH 升级会覆盖布局 bundle,需重新运行补丁脚本;锚点失效时更新 `scripts/patch-layout.mjs`
|
|
58
|
+
- 本仓库不包含 DSH 编译产物
|
|
202
59
|
|
|
203
60
|
## 参与贡献
|
|
204
61
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
完整变更记录见 [CHANGELOG](./CHANGELOG.md),安全相关事项见 [SECURITY](./SECURITY.md)。
|
|
62
|
+
见 [CONTRIBUTING](./CONTRIBUTING.md) 与 [CODE_OF_CONDUCT](./CODE_OF_CONDUCT.md);
|
|
63
|
+
变更记录见 [CHANGELOG](./CHANGELOG.md)。
|
|
208
64
|
|
|
209
65
|
## AI 生成声明
|
|
210
66
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
与实机测试;涉及权限与文件系统的逻辑(`src/index.ts` 的 RPC 端点、
|
|
214
|
-
`scripts/patch-layout.mjs`)已按最小权限原则人工复核。项目以 MIT 许可开源,
|
|
215
|
-
欢迎任何人审计、修改与分发。
|
|
67
|
+
部分源码与文档由 AI 辅助生成(DeepSeek Harness),均经人工审查与实机验证;
|
|
68
|
+
权限相关逻辑已按最小权限原则复核。
|
|
216
69
|
|
|
217
70
|
## License
|
|
218
71
|
|