在 DeepSeek Harness(DSH)Web 界面中,助手返回的本地图片或视频路径通常只是纯文本。dsh-image-preview 插件通过重写这些路径,将它们渲染为可交互的媒体元素,同时保留一个可点击的原始地址链接。
核心功能¶
- 本地媒体内联:助手回复中的本地图片/视频绝对路径会自动变成内联图片或可播放的视频。
- 视频播放器:支持拖动进度条,基于 HTTP Range 206 分段响应实现。
- 持久化:跨重启媒体不消失,持久 token 存于
$DSH_HOME/plugins/dsh-image-preview.token。 - 系统打开:点击地址行(媒体下方)可用系统默认应用打开。
- 点击拦截:客户端拦截点击,不开新 tab;无客户端模块时降级处理。
- 样式与体积:媒体下方地址行小字号、紧贴媒体;零构建、纯 ESM。
安装与启用¶
该插件以普通依赖的形式安装在 DSH 的 profile 目录中。
- 进入 DSH 的 profile 目录:
cd ~/.dsh/profiles/web
- 安装插件:
pnpm add github:ywleeo/dsh-image-preview
- 在
~/.dsh/profiles/web/cordis.patch.yml中追加配置:
- insert:
- id: dsh-image-preview
name: dsh-image-preview
- 重启
dsh web后刷新页面即可。
工作原理¶
插件由 Host 侧和 Client 侧两部分组成,通过文件拆分隔离启动风险。
Host 侧(逻辑层)
- 包装 llm/stream 接口。当流式文本块结束时,扫描真实存在的本地媒体绝对路径(POSIX /…、Windows 盘符、UNC)。
- 验证文件存在后,将路径改写为同源回环 URL(127.0.0.1)。
- 注册三条路由:
- /image:读取文件字节,返回图片。
- /video:支持 HTTP Range 206 分段响应,返回视频。
- /open:调用系统命令(open/start/xdg-open)打开文件,并重定向至媒体路由。
Client 侧(渲染层)
- 注入 CSS 样式:控制播放器样式、小字号、间距。
- 将“▶ 播放视频”链接替换为 <video controls> 标签。
- 拦截对 /open 链接的点击事件,阻止默认跳转,改为触发本地打开。
文件结构
- index.js:启动壳,不依赖核心模块,确保审计通过。
- host.js:核心逻辑。
- client.js:前端渲染与交互。
注意事项与边界¶
- 作用范围:只处理助手回复的流式文本(
llm/stream),工具结果卡片里的路径文本不改写。 - 路径校验:只处理真实存在的本地绝对路径;远程 http(s)、data:/、file: 协议及相对路径会被忽略。
- 视频支持:仅支持浏览器原生可播放的容器/编码(mp4/H.264、webm、mov、ogv);mkv、avi 等不支持预览,但地址行点击仍可用系统播放器打开。
- 性能限制:视频读取为整读后按 Range 切片,单文件上限 512MB。
- 权限与安全:token 持久化在
$DSH_HOME/plugins/dsh-image-preview.token(600 权限),仅限本机使用,勿暴露到公网。 - 特殊字符:路径含
()[]等特殊字符时,markdown 链接语法可能破损。 - 平台差异:Windows/Linux 打开命令已实现但仅在 macOS 实测。
结尾¶
该插件通过 Host 与 Client 的协作,在 DSH Web 界面中实现了本地媒体的无缝预览。更多细节与更新可查阅插件目录或源码仓库。