dsh-share-link:把 DSH 对话与产物发布成只读公网链接

前言

DeepSeek Harness(DSH)跑在本机,但经常需要把一段对话或一个产物发给外部看:发给同事评审、在手机上打开 HTML 页面、给客户一份报告。现在只有两条路,都不太对:要么导出成文件再发,体验差且不能随时更新;要么把整个 DSH 实例穿透出去,对方拿到的是能下指令、能看别的会话的产品实例。

dsh-share-link 补的是第三件事:单产物 → 链接。它只暴露一个静态目录,在独立端口上跑只读服务,不代理 GUI、不提供写接口,撤销或停掉服务,链接立刻 404。

是什么

vlln/dsh-share-link 是一个 DSH 插件,分类为「联网工具」。它的核心价值是:把当前会话的只读快照、或本地文件(HTML/Markdown)发布成公网链接,对方打开就能看,链接可撤销。

插件以子进程形式运行,通过 cloudflared 等工具建立隧道,将本地静态内容暴露到公网。所有分享都是只读服务,不提供登录态,不触碰 DSH 的 3080 端口。

安装与启用

还没发布到 npm,现在用命令行装 git 源:

dsh plugin --profile web add github:vlln/dsh-share-link

安装完成后,侧边栏 Plugins 里会出现 Share Link。点进去顶部显示绿色的 Ready to share,说明已就绪。

如果想自己管理 cloudflared(约 20 MB),可以跳过插件下载,直接在 PATH 上准备一个。插件加载后会在后台下载,也可以在 Plugins → Share Link 的「快速隧道依赖」里手动检查与重试。

分享会话

打开任意会话,右上角 ··· 里多一项「分享会话」。点击后选择通道,生成链接。弹窗里可以临时换通道、决定是否保留工具调用名称,生成后能复制、打开、撤销。

对方打开后看到的是一份对话快照:提问靠右成气泡,助手回复是正文流,每条回复可单独复制。会话快照只含「人类输入 + 助手可见文本」,不包含工具调用详情视图。

分享产物

右侧栏打开文件,工具条上的 Share 按钮用于发布文件。

  • .html 挂在链接根路径
  • .md 按 GitHub Flavored Markdown 渲染成可读页面(标题、表格、列表、代码块、图片、链接,以及 <h1 align="center>、<details> 等原始 HTML,过一层标签白名单)
  • 目录会生成文件列表页

分享 .md 时会处理图片:相对路径的图从 md 所在目录树里拷贝,保持相对位置;公网图片在发布时抓下来内联成 data URI,这样页面依然是「一个文件、离线能开」。

如果装了 dsh-better-sidebar,文件由它的编辑器接管,工具条那一排会换成它自己的页头——分享按钮同样出现在那一行(最右端的链接图标)。

通道类型

插件提供四种通道:

通道 地址形态 需要什么 撤销
快速隧道 https://随机词.trycloudflare.com 无(首次要下 cloudflared) 停进程 / 撤销
Surge https://dsh-share-<id>.surge.sh 免费 Surge 账号(邮箱) surge teardown
命名隧道 https://<你的域名>/s/<短码>/ Cloudflare + 自有域名 停进程 / 撤销
局域网 http://<内网 IP>:<port>/s/<短码>/ 无 撤销

命名隧道不自带公网域名:需要在 Cloudflare 的 Routes 里加一条 Public Hostname 指向 localhost:3089。没有域名就用 Surge 或快速隧道。

链接里的 <短码> 是 8 位小写 base36(约 41 bit 熵),路径是 /s/<短码>/。嫌不够难猜可以在设置页「高级」里把长度调到 10(约 52 bit)。旧版 32 位 hex 链接仍然有效。

样式与配置

侧边栏 Plugins → Share Link,一个地方管完:

  • 顶部状态条:显示现在能不能分享、缺什么
  • 默认通道:只决定弹窗预选哪个
  • 快速隧道依赖:cloudflared 的下载进度与版本,「检查」手动复查/重试
  • 渠道配置卡:每个通道自己的参数,互不排斥;没配好的自动展开并给步骤与官方入口
  • 分享页样式:5 种预设 + 自定义 CSS,选完立刻预览
  • 已发布的链接:哪些还活着、一键撤销

预设样式包括:

  • 暖纸(默认):米白底、无衬线、蓝色强调
  • GitHub:纯白、细边框、系统字体
  • Notion:大标题、无边框、超大留白
  • 散文:衬线、米色、行高 1.95
  • 终端:等宽字体、深底、绿色强调

选「自定义」可以写 CSS 覆盖这些变量:--bg --fg --muted --line --code-bg --accent --star。

让 agent 帮你发

默认关闭。先在 Plugins → Share Link → Agent 工具里打开你想给的权限(可以只开一两个),新开始的会话才拿得到这些工具。打开后 agent 能直接调用:

工具 说明
share_session 发布当前会话的只读快照
share_artifact 发布本地文件或目录,可指定通道
share_list 列出还活着的链接与到期时间
share_revoke 按 id 撤销,链接立刻失效

安全与数据

  • 只读:分享服务只绑 127.0.0.1,只响应 GET /s/<token>/…,没有写接口,不碰 dsh 的 3080
  • 脱敏:常见凭据形态(sk-*、ghp_*、AKIA*、Bearer …、api_key: …)与绝对家目录路径会被替换,这是尽力而为,不是保证
  • 只留对话:工具结果正文、思考块、系统提示一律不投影;harness 注入的运行时上下文会被过滤
  • 地址即凭据:分享服务没有登录态,能不能看全凭地址难猜。短码是 8 位 base36(约 41 bit),发布 1000 条时两条撞码的概率约 2×10⁻⁷,撞了会自动重摇
  • 凭据:只作为子进程环境变量使用,不写日志、不入库
  • 到期即 404:有效期过了之后服务端直接拒绝,不依赖后台清理跑没跑;磁盘上的快照随后清掉
  • 快照是静态的:页面不含第三方脚本,内联脚本只服务于复制按钮;.md 里的公网图片在发布时抓取内联,抓不到的保留原地址
  • 页面带 CSP:会话页 / .md / 目录页都只放行自己那段复制脚本的 hash,注入的 <script> 与 onerror= 一律执行不了
  • 不越界:目录分享会跳过符号链接(docs/leak -> ~/.ssh 这类不会跟着出去);.md 引用的公网图片只抓公网地址,内网 / 回环(127.0.0.1、169.254.*、*.local…)直接拒绝
  • 原始 HTML 走白名单:只放行排版标签(标题/表格/图片/details…),script、style、iframe、内联事件与 javascript: 链接一律丢弃

限制与兼容性

已知限制:

  • macOS / Linux 已验证;Windows 代码路径已实现但未在真机验证
  • 快速隧道的域名每次重启都会变;要固定地址请用 Surge 或命名隧道
  • 样式在发布时固化:改风格只影响之后的新分享
  • 目录入口页只列文件,不列空目录;单次分享上限 100 MB / 2000 个文件
  • 中文 / 空格 / # 这类文件名现在能正常打开(链接会做 URL 编码);文件名里的符号链接不会进分享
  • 支持 Range 请求,PDF 与视频可以拖动进度条;文件是流式发送的,不会整份读进内存
  • .md 分享的图片有上限:只拷同目录树内的文件(../ 越界忽略)、最多 24 张公网图、单张 ≤ 2 MB、合计 ≤ 8 MB;抓取失败的内联不了,会退回外链
  • 快速隧道的主机名压不下去(Cloudflare 随机给),短码只缩短路径段;想要 s.你的域名/xxxx 这种短链必须用命名隧道
  • 下载完成后,第一次快速隧道分享还要 5–10 秒(cloudflared 要连 Cloudflare 拿主机名),之后同一进程内再分享是零点几秒
  • 快速隧道的链接只活在这次进程里:关机、重启 dsh 后主机名会变,旧地址永久失效
  • 刚生成的快速隧道链接可能几十秒内打不开(trycloudflare.com 的 DNS 记录偶尔是滞后才生效;太早解析还会被本地 DNS 缓存住 NXDOMAIN,等缓存过期就好)

兼容性:

dsh 版本 状态
0.2.1-rc.1 ✅ 已验证(2026-10-20):安装、会话/文件发布、撤销、真实公网访问
同上 · dsh-better-sidebar 0.28.0 ✅ 已验证:文件预览被接管后,分享按钮出现在编辑器页头
同上 · Surge ✅ 真实账号验证:发布 → 公网 200 → surge teardown → 404
同上 · 命名隧道 ⚠️ 隧道可连、参数正确;没有可用域名,公开访问这一段未验证
其它版本 ⚠️ 未验证——升级后若入口不出现,多半是插槽名或工具契约变了

插件管理

装/卸/启停用官方 CLI:

dsh plugin --profile web add|remove <包>

已装插件在侧边栏 Plugins 页里查看与配置。

总结

dsh-share-link 把 DSH 的对话与产物一键发布成只读公网链接,撤销后立即失效,适合需要给外部展示场景。它不暴露写接口,不代理 GUI,只暴露静态内容,安全可控。通过快速隧道、Surge、命名隧道、局域网四种方式,可以灵活选择地址形态与部署条件。

  • 插件主页:https://www.skillhub.cn/plugins/vlln/dsh-share-link
  • GitHub:https://github.com/vlln/dsh-share-link
羽毛球分组比赛记分
小程序二维码

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

小夜