Z
dsh-assest-gallery
zyray233/dsh-assest-gallery
DSH 资产库 / 文件管理插件:按类型浏览工作区文件,聚合上传与生成产物,隐藏系统文件。Asset gallery & file manager plugin for DeepSeek Harness.
설치
dsh plugin --profile web add github:zyray233/dsh-assest-galleryREADME
dsh-asset-gallery
DeepSeek Harness(DSH)的「资产库」插件:把工作区里的文件按类型集中浏览,不再展示成一棵让人眼花的目录树。
- 按类型分页签:全部 / 文档 / 图片 / 音视频 / 压缩包
- 按工作区分组:工作区从 DSH 的
workspace.json自动发现;大工作区的子目录折叠成一行,点开再展开 - 三点操作菜单:复制路径、复制
@引用、预览文本、在浏览器打开图片/音视频 - 隐藏系统文件:
.dsh、.git、node_modules、__pycache__等默认不显示 - 两个聚合页:「上传的」聚合
qq_files、DSH attachments、incoming;「生成的」聚合各工作区的out/、outputs/、deliverables/、tmp_frames/、gen/里最近 7 天的媒体文件
只读插件:不写入、不删除、不上传任何文件。
环境要求
- DSH Web(
dsh web)>= 0.2.0 - 浏览器端使用 DSH 的 client UI slots(
@deepseek-ai/dsh-client-ui-slots)
安装
方式一:从 GitHub 安装
dsh plugin --profile web add git+https://github.com/ZyRay233/file-manager.git
方式二:克隆后 link(开发/本地使用)
git clone https://github.com/ZyRay233/file-manager.git
cd dsh-asset-gallery
npm install
npm run build
dsh plugin --profile web add link:"$PWD"
安装后重启 dsh-web:
systemctl restart dsh-web # Linux systemd
# 或者手动重启 dsh web 进程
使用
打开任意会话,在会话头部会看到一个「🗂️ 资产库」按钮;点开是右侧面板:
- 顶部选择文件类型页签;
- 顶部下拉框切换工作区;
- 子目录显示为一行,点开进入下一层,右上「← 上级」返回;
- 文件右侧「⋮」菜单:复制路径、复制
@引用、预览、浏览器打开。
工作区与聚合目录
- 工作区:启动时读取
$DSH_HOME/storages/workspace.json(DSH 的工作区注册表),按title/path展示;如果文件不存在,回退到用户主目录。 - 上传的:依次扫描
~/qq_files、$DSH_HOME/attachments/v1/files、~/incoming(存在才扫描)。 - 生成的:默认扫描每个工作区下的
out/、outputs/、deliverables/、tmp_frames/、gen/,以及~/tmp_frames,取最近 7 天的图片/音视频。 - 可用环境变量覆盖「生成的」目录(逗号分隔):
DSH_ASSET_GALLERY_GENERATED_DIRS="/data/outputs,/data/render" dsh web --no-open
HTTP API
所有路由都挂在 DSH 的 webServer 上:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /dsh-ag/api/scan?type=all&ws=<工作区名>&dir=<相对目录> | 扫描一层,返回文件与子目录摘要 |
| GET | /dsh-ag/api/collected?which=uploaded|generated | 聚合页文件列表 |
| GET | /dsh-ag/api/peek?path=<绝对路径> | 只读预览文本(≤32KB) |
路径限制:scan 的 dir 不能越出所选工作区;peek 只允许工作区根目录或主目录之内的路径。
开发
npm install
npm run typecheck
npm run build # 输出 lib/index.js(host)与 lib/client.js(client)
构建产物说明:
lib/index.js:Node ESM,Cordis 插件,inject: ['webServer'];lib/client.js:浏览器 CJS bundle,外层是window.__ModuleLoader__.load({ id, factory }),DSH client loader 直接加载。
目录结构
.
├── src/
│ ├── index.ts # host:扫描 + HTTP API
│ └── client/index.tsx # client:资产库面板
├── cordis.patch.yml # 把插件行插入 profile
├── dsh.plugin.json # 插件清单(main / client.main)
├── tsdown.config.ts # host + client 双构建
├── tsconfig.json
├── tsconfig.build.json
└── lib/ # 构建产物(已提交,装完即用)
安全边界
- 纯只读:没有写入/删除/上传接口;
- 隐藏点开头文件与常见系统目录;
peek限制 32KB,避免把大文件塞进浏览器;- 所有路径都经过
resolve+ 前缀校验,不能跳出工作区。