前言¶
当助手消息或工具结果中出现本地音视频/图片路径,或在线 http(s) 媒体链接时,自动将其替换为内联的 <audio> / <video controls playsInline> / <img> 预览组件。
功能特性¶
本插件基于 unrestricted 模式运行,即 DSH 进程可读的任何文件路径均可访问。权限或 IO 错误会以明确的 HTTP 状态码返回,方便浏览器原生播放器呈现有意义的错误提示。
- Range 请求支持:支持
bytes=start-end请求,返回206 Partial Content,使得<video>标签能够正常拖拽进度条。 - 全文件读取:默认使用
GET请求,返回200 OK。 - 缓存策略:响应头包含
Cache-Control: private, max-age=60。 - 路径安全:客户端正则仅匹配特定根路径(
/Users,/tmp,/private/tmp,/var/folders,/var/tmp)加 15 种扩展名,避免误匹配外部 URL。同时支持 UTF-8 安全路径编码。 - 样式清理:插件卸载时,客户端 Fiber 会自动移除注入的
<style>。
支持格式¶
插件支持本地路径与在线链接,支持的扩展名如下:
- 音频/视频(15 种):
mp3,wav,m4a,flac,ogg,opus,aac,mp4,mov,mkv,m4v,webm,avi,3gp,ogv - 图片(12 种):
png,jpg,jpeg,gif,bmp,webp,svg,tiff,ico,avif,heic,heif
安装与配置¶
- 进入 DSH web profile 目录(默认为
~/.dsh/profiles/web)。 - 使用官方命令安装插件:
dsh plugin --profile web add media-preview
- 插件安装后会自动修改
package.json,添加dsh.bundle.patch和dsh.client.platform配置项。 - 源码修改后需重启
dsh web。
限制与依赖¶
- 缓冲限制:全文件缓冲读取,单请求上限为 500 MB。大视频首帧可能较慢;Range 请求在同一内存缓冲区上切片。
- 目录与链接:不支持目录列表,无符号链接策略(依赖
fs.stat)。 - 依赖:需要
@deepseek-ai/cordis(^4.0.1)。