gydmsg/dsh-plugin--packages-dsh-plugin-workspace-files ↗★ 0
@dsh/plugin-workspace-files
DSH 树外插件:「空间」子界面 —— 当前会话工作区文件浏览器(浏览/预览/下载/删除)。host 半提供 /api/wf/* REST API 并强制工作区边界,client 半注册 conversation.view 槽位。零第三方运行时依赖。
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:gydmsg/dsh-plugin#78b3e4e750ad423c8fbcf6912c8e1c91a741b322&path:packages/dsh-plugin-workspace-files说明文档
阅读完整 README ↗@dsh/plugin-workspace-files ——「空间」工作区文件管理器
DeepSeek Harness (DSH) Web UI 树外双面插件:在主界面「轨迹」旁新增「空间」tab, 浏览与操作当前会话工作区的文件。零侵入(不修改 DSH 源码),兼容 DSH 0.1.0-rc.6。
功能(v0.1)
- 面包屑导航、目录列表(图标 / 名称 / 大小 / 修改时间)、目录进入 / 上级 / 刷新、「N 项」计数
- 文本(≤512KB)与图片在线预览;Markdown 网页排版渲染(marked + DOMPurify 防 XSS)
- 流式下载(
Content-Disposition: attachment,中文文件名安全编码) - 删除:文件 / 目录(递归),操作前确认框
- 面板占满可用高度、列表与预览独立滚动、底部渐变(与官方视图一致的视觉语言)
安全模型(本插件最重要的设计)
- 工作区根由服务端按会话解析(
ctx.sessions优先 →ctx.workspaceRegistry持久映射兜底,冷会话可用),客户端永远只能传工作区内相对路径 - 每个路径经
resolve规范化 +realpath包含校验:绝对路径、..逃逸、指向工作区外的符号链接全部拒绝;悬空符号链接仅允许在工作区内被删除 - 边界逻辑集中在
lib/index.js的inside()(已导出,配套 9 项安全测试,node --test test/*.test.mjs)
📸 截图



宿主 API(REST,经认证网关同源访问)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/wf/list?sessionId=&path= | 列目录(dirs 在前、名称排序) |
| GET | /api/wf/preview?sessionId=&path= | 文本(>512KB 拒绝并提示下载)/ 图片 / 二进制标记 |
| GET | /api/wf/download?sessionId=&path= | 流式下载 |
| POST | /api/wf/delete {sessionId, paths[]} | 删除(目录递归),逐项返回结果 |
错误均为 JSON:{ok:false, error:{code,message}};业务码含 session-not-found / / / 。