dsh-video-preview
Verified@lifenrir/dsh-video-preview · v0.1.3 · MIT · Web UI
在 DSH 右侧预览面板直接播放工作区视频。Native video playback in DSH's right-side document preview.
Install
dsh plugin add @lifenrir/dsh-video-preview Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
DSH 视频预览
在 DeepSeek Harness 右侧的上下文 / 文档预览面板中直接播放工作区视频。面板不再显示“不支持的文件类型”,而是内嵌原生视频播放器并支持拖动进度,不受 32 MiB RPC 预览读取上限的限制。
- 包名:
@lifenrir/dsh-video-preview - DSH:
>= 0.2.1-rc.2 - Node:
^22.19 || >=24
功能
- 右侧文档面板内嵌
<video controls playsInline preload="metadata">,支持播放、暂停、拖动进度与全屏。 - Host 端通过鉴权路由
/api/dsh-video-preview/stream提供视频流,支持 HTTPRange(206/416),因此大文件也能 seek。 - 通过
ctx.fs.readByteRange按 4 MiB 分块读取;浏览器发起GET前先由HEAD探测路径、MIME 类型与工作区权限。 - 只接受已知的视频扩展名,其余扩展名返回
415。 - 播放器通过
--dsw-alias-*设计变量跟随 DSH 主题。
支持的容器与编解码
| 扩展名 | Content-Type |
|---|---|
.mp4、.m4v |
video/mp4 |
.mov |
video/quicktime |
.webm |
video/webm |
.ogv、.ogg |
video/ogg |
.mkv |
video/x-matroska |
容器能被识别不代表浏览器能解码其中的编码:
- H.264/AAC 的 MP4 与 VP8/VP9 的 WebM 兼容性最好。
.mov常见 ProRes,.mkv常见 H.265/AC-3 等编码,能否播放取决于浏览器内置解码器。解码失败时面板显示“浏览器无法播放这个视频格式”,并提供“重试”按钮。
安装
从 npm 安装
dsh plugin add @lifenrir/dsh-video-preview
从本地目录安装
git clone https://github.com/LiFenrir/dsh-video-preview.git
dsh plugin add /absolute/path/to/dsh-video-preview
无需构建:Host 半是 ESM 入口 index.js,浏览器半是 client.js,由 window.__ModuleLoader__ 直接加载。
从 git 安装
dsh plugin add git+https://github.com/LiFenrir/dsh-video-preview.git
添加并启用插件后,刷新 Web UI(或重启 profile)。
使用
- 在 Files 标签页打开工作区中的视频文件。
- 右侧预览面板显示播放器。
- 使用原生控件播放、拖动进度与全屏。
工作原理
index.js通过ctx.connection.fetch.register在鉴权连接层注册流路由。- 路由通过
workspaceFileScope查找会话工作区,再用ctx.fs解析并 stat 请求路径,沙箱规则继续生效。 client.js注册支持扩展名的文档预览定义与面板组件:解析dsh-resource://file/session/<sessionId>/<path>地址,先做HEAD探测,再把<video>指向流地址。
安全
- 流路由走 DSH 的鉴权连接层;路径相对会话工作区根目录解析,并受
ctx.fssandbox 约束。 - 响应头包含
Cache-Control: private, no-store与X-Content-Type-Options: nosniff。 - 错误响应不泄露内部错误信息。
- 含 NUL 字节的请求路径会被拒绝,且只提供上述扩展名。
验证
- 启用插件后刷新 Web UI。
- 在 Files 标签页打开一个
.mp4文件。 - 右侧预览应出现播放器,拖动进度条应能正确 seek。
- 可选:打开大于 32 MiB 的文件,确认拖动进度仍然可用。
若面板提示加载失败,请确认文件存在、位于当前会话工作区内且扩展名受支持。若提示格式不支持,可能是容器已被识别但浏览器无法解码其中的编码。
开发
本包没有构建步骤,也没有运行时依赖,源码文件就是发布文件:
index.js Host 半(流路由)
client.js 浏览器半(文档预览与播放器)
cordis.patch.yml bundle 清单
locale/{en,zh}.json 展示元数据
icon.svg 插件图标
本地验证时把 dsh plugin add 指向本目录,然后刷新 Web UI。
许可证
MIT,见 LICENSE。