dsh-media-preview:DSH 插件:在聊天记录中自动将本地音视频路径渲染为可播放的预览组件

前言

当助手消息或工具结果中出现本地音视频/图片路径,或在线 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

安装与配置

  1. 进入 DSH web profile 目录(默认为 ~/.dsh/profiles/web)。
  2. 使用官方命令安装插件:
dsh plugin --profile web add media-preview
  1. 插件安装后会自动修改 package.json,添加 dsh.bundle.patch 和 dsh.client.platform 配置项。
  2. 源码修改后需重启 dsh web。

限制与依赖

  • 缓冲限制:全文件缓冲读取,单请求上限为 500 MB。大视频首帧可能较慢;Range 请求在同一内存缓冲区上切片。
  • 目录与链接:不支持目录列表,无符号链接策略(依赖 fs.stat)。
  • 依赖:需要 @deepseek-ai/cordis (^4.0.1)。

参考资料

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜